mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
fixes #17681
(cherry picked from commit d5c7abe3d2)
This commit is contained in:
@@ -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)
|
||||
|
||||
26
tests/consts/taddressable_consts.nim
Normal file
26
tests/consts/taddressable_consts.nim
Normal 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
|
||||
24
tests/consts/taddressable_consts2.nim
Normal file
24
tests/consts/taddressable_consts2.nim
Normal 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
|
||||
Reference in New Issue
Block a user