fixes #17681; enforce codegen for exportc consts (#24546)

fixes #17681

(cherry picked from commit d5c7abe3d2)
This commit is contained in:
ringabout
2024-12-18 01:16:34 +08:00
committed by narimiran
parent b5068f427a
commit 0823b9d177
3 changed files with 56 additions and 0 deletions

View File

@@ -3111,6 +3111,12 @@ proc expr(p: BProc, n: PNode, d: var TLoc) =
of nkConstSection:
if useAliveDataFromDce in p.module.flags:
genConstStmt(p, n)
else: # enforce addressable consts for exportc
let m = p.module
for it in n:
let symNode = skipPragmaExpr(it[0])
if symNode.kind == nkSym and sfExportc in symNode.sym.flags:
requestConstImpl(p, symNode.sym)
# else: consts generated lazily on use
of nkForStmt: internalError(p.config, n.info, "for statement not eliminated")
of nkCaseStmt: genCase(p, n, d)

View File

@@ -0,0 +1,26 @@
discard """
joinable: false
"""
block:
proc magics(): array[3, int] =
result = [1, 2, 3]
const magic_arrays {.exportc.} = magics()
let sss {.importc: "magic_arrays", nodecl.} : array[3, int]
doAssert sss[2] == 3
block:
proc magics(): int =
result = 12
const magic_numbers {.exportc.} = magics()
let sss {.importc: "magic_numbers", nodecl.} : int
doAssert sss == 12

View File

@@ -0,0 +1,24 @@
discard """
joinable: false
"""
block:
const magic_numbers {.exportc.} = 12
let sss {.importc: "magic_numbers", nodecl.} : int
doAssert magic_numbers == 12
doAssert sss == 12
block:
proc magics(): array[3, int] =
result = [1, 2, 3]
const magic_arrays {.exportc.} = magics()
let sss {.importc: "magic_arrays", nodecl.} : array[3, int]
doAssert magic_arrays[1] == 2
doAssert sss[2] == 3