Skip to content

Commit

Permalink
fix nim-lang#20866 [ORC] Bad codegen for global pointer to iterator (n…
Browse files Browse the repository at this point in the history
  • Loading branch information
bung87 authored and survivorm committed Feb 28, 2023
1 parent b42487c commit 54f686a
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
7 changes: 5 additions & 2 deletions compiler/semstmts.nim
Original file line number Diff line number Diff line change
Expand Up @@ -593,9 +593,12 @@ proc msgSymChoiceUseQualifier(c: PContext; n: PNode; note = errGenerated) =

template isLocalVarSym(n: PNode): bool =
n.kind == nkSym and
n.sym.kind in {skVar, skLet} and not
(n.sym.kind in {skVar, skLet} and not
({sfGlobal, sfPure} <= n.sym.flags or
sfCompileTime in n.sym.flags)
sfCompileTime in n.sym.flags) or
n.sym.kind in {skProc, skFunc, skIterator} and
sfGlobal notin n.sym.flags
)

proc usesLocalVar(n: PNode): bool =
for z in 1 ..< n.len:
Expand Down
10 changes: 9 additions & 1 deletion tests/global/t3505.nim
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ action: "reject"
nimout: '''
t3505.nim(22, 22) Error: cannot assign local to global variable
t3505.nim(31, 28) Error: cannot assign local to global variable
t3505.nim(39, 29) Error: cannot assign local to global variable
Expand All @@ -31,3 +31,11 @@ proc main() =
var x {.global.} = initX2(initX(f))

main()

# issue #20866
proc foo2() =
iterator bar() {.closure.} =
discard
var g {.global.} = rawProc(bar)

foo2()

0 comments on commit 54f686a

Please sign in to comment.