From b8bcf236dd29ee2a6ec7587dc3f028f14023ebec Mon Sep 17 00:00:00 2001 From: flywind <43030857+xflywind@users.noreply.github.com> Date: Tue, 3 Nov 2020 18:41:41 +0800 Subject: [PATCH] fix #12640 (#15829) --- compiler/ccgstmts.nim | 8 +++++++- tests/pragmas/t12640.nim | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 tests/pragmas/t12640.nim diff --git a/compiler/ccgstmts.nim b/compiler/ccgstmts.nim index aaed37508a..367e693e92 100644 --- a/compiler/ccgstmts.nim +++ b/compiler/ccgstmts.nim @@ -382,7 +382,13 @@ proc genSingleVar(p: BProc, v: PSym; vn, value: PNode) = proc genSingleVar(p: BProc, a: PNode) = let v = a[0].sym - if sfCompileTime in v.flags: return + if sfCompileTime in v.flags: + # fix issue #12640 + # {.global, compileTime.} pragma in proc + if sfGlobal in v.flags and p.prc != nil and p.prc.kind == skProc: + discard + else: + return genSingleVar(p, v, a[0], a[2]) proc genClosureVar(p: BProc, a: PNode) = diff --git a/tests/pragmas/t12640.nim b/tests/pragmas/t12640.nim new file mode 100644 index 0000000000..60177d034d --- /dev/null +++ b/tests/pragmas/t12640.nim @@ -0,0 +1,25 @@ +discard """ + nimout: '''1 +2 +3 +[1, 2, 3]''' + + output: '''1 +2 +3 +[1, 2, 3]''' +""" + + +proc doIt(a: openArray[int]) = + echo a + +proc foo() = + var bug {.global, compiletime.}: seq[int] + bug = @[1, 2 ,3] + for i in 0 .. high(bug): echo bug[i] + doIt(bug) + +static: + foo() +foo()