This commit is contained in:
Bung 2022-12-23 18:32:03 +08:00 • committed by GitHub
commit ca9c74391a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 3 deletions

View file

@ -725,9 +725,12 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
if v.kind == skLet and sfImportc notin v.flags and (strictDefs notin c.features or not isLocalSym(v)): if v.kind == skLet and sfImportc notin v.flags and (strictDefs notin c.features or not isLocalSym(v)):
localError(c.config, a.info, errLetNeedsInit) localError(c.config, a.info, errLetNeedsInit)
if sfCompileTime in v.flags: if sfCompileTime in v.flags:
var x = newNodeI(result.kind, v.info) if a.kind != nkVarTuple:
x.add result[i] var x = newNodeI(result.kind, v.info)
vm.setupCompileTimeVar(c.module, c.idgen, c.graph, x) x.add result[i]
vm.setupCompileTimeVar(c.module, c.idgen, c.graph, x)
else:
localError(c.config, a.info, "cannot destructure to compile time variable")
if v.flags * {sfGlobal, sfThread} == {sfGlobal}: if v.flags * {sfGlobal, sfThread} == {sfGlobal}:
message(c.config, v.info, hintGlobalVar) message(c.config, v.info, hintGlobalVar)
if {sfGlobal, sfPure} <= v.flags: if {sfGlobal, sfPure} <= v.flags:

20
tests/misc/t11634.nim Normal file
View file

@ -0,0 +1,20 @@
discard """
action: reject
nimout: '''
t11634.nim(20, 7) Error: cannot destructure to compile time variable
'''
"""
type Foo = ref object
val: int
proc divmod(a, b: Foo): (Foo, Foo) =
(
Foo(val: a.val div b.val),
Foo(val: a.val mod b.val)
)
block:
let a {.compileTime.} = Foo(val: 2)
let b {.compileTime.} = Foo(val: 3)
let (c11634 {.compileTime.}, d11634 {.compileTime.}) = divmod(a, b)