From ae681be62918ea1e766b230e2d098177794469e9 Mon Sep 17 00:00:00 2001 From: Araq Date: Fri, 15 Aug 2014 09:57:03 +0200 Subject: fixes #1343 --- compiler/vmgen.nim | 7 +++---- tests/vm/twrongarray.nim | 17 +++++++++++++++++ tests/vm/twrongconst.nim | 2 +- 3 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 tests/vm/twrongarray.nim diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index adbca8cca..94afbf008 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -1118,10 +1118,9 @@ proc checkCanEval(c: PCtx; n: PNode) = # we need to ensure that we don't evaluate 'x' here: # proc foo() = var x ... let s = n.sym - if s.position == 0: - if s.kind in {skVar, skTemp, skLet, skParam, skResult} and - not s.isOwnedBy(c.prc.sym) and s.owner != c.module: - cannotEval(n) + if s.kind in {skVar, skTemp, skLet, skParam, skResult} and + not s.isOwnedBy(c.prc.sym) and s.owner != c.module: + cannotEval(n) proc isTemp(c: PCtx; dest: TDest): bool = result = dest >= 0 and c.prc.slots[dest].kind >= slotTempUnknown diff --git a/tests/vm/twrongarray.nim b/tests/vm/twrongarray.nim new file mode 100644 index 000000000..c1514d0e9 --- /dev/null +++ b/tests/vm/twrongarray.nim @@ -0,0 +1,17 @@ +discard """ + errormsg: "cannot evaluate at compile time: size" + line: 16 +""" + +#bug #1343 + +when false: + proc one(dummy: int, size: int) = + var x: array[size, int] # compile error: constant expression expected + + proc three(size: int) = + var x: array[size * 1, int] # compile error: cannot evaluate at compile time: size + +proc two(dummy: int, size: int) = + var x: array[size * 1, int] # compiles, but shouldn't? + #assert(x.len == size) # just for fun diff --git a/tests/vm/twrongconst.nim b/tests/vm/twrongconst.nim index 5c0c80f9f..68ab2757c 100644 --- a/tests/vm/twrongconst.nim +++ b/tests/vm/twrongconst.nim @@ -4,6 +4,6 @@ discard """ """ var x: array[100, char] -template Foo : expr = x[42] +template foo : expr = x[42] const myConst = foo -- cgit 1.4.1-2-gfad0