diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index 60a3def903..2e4f55bcf3 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -363,6 +363,7 @@ proc genDefaultCall(t: PType; c: Con; info: TLineInfo): PNode = proc destructiveMoveVar(n: PNode; c: var Con): PNode = # generate: (let tmp = v; reset(v); tmp) if not hasDestructor(n.typ): + assert n.kind != nkSym or not hasDestructor(n.sym.typ) result = copyTree(n) else: result = newNodeIT(nkStmtListExpr, n.info, n.typ) diff --git a/compiler/sempass2.nim b/compiler/sempass2.nim index 50033b962b..6d6a8b5664 100644 --- a/compiler/sempass2.nim +++ b/compiler/sempass2.nim @@ -784,6 +784,8 @@ proc track(tracked: PEffects, n: PNode) = useVar(tracked, n) if n.sym.typ != nil and tfHasAsgn in n.sym.typ.flags: tracked.owner.flags.incl sfInjectDestructors + # bug #15038: ensure consistency + if not hasDestructor(n.typ): n.typ = n.sym.typ of nkRaiseStmt: if n[0].kind != nkEmpty: n[0].info = n.info