From 3cb963f1147b79a96f98373fe4db9c7da5717919 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Sun, 12 Aug 2018 20:43:30 +0200 Subject: [PATCH] Fixes 8616 (#8617) * Don't leave dangling forward references to types Fixes #8616 * Add a test case for #8616 --- compiler/ccgstmts.nim | 2 +- tests/ccgbugs/pkg8616/rtarray.nim | 2 ++ tests/ccgbugs/pkg8616/scheduler.nim | 10 ++++++++++ tests/ccgbugs/t8616.nim | 4 ++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/ccgbugs/pkg8616/rtarray.nim create mode 100644 tests/ccgbugs/pkg8616/scheduler.nim create mode 100644 tests/ccgbugs/t8616.nim diff --git a/compiler/ccgstmts.nim b/compiler/ccgstmts.nim index 54759edb3..81e3fe4a7 100644 --- a/compiler/ccgstmts.nim +++ b/compiler/ccgstmts.nim @@ -1130,8 +1130,8 @@ proc genAsgn(p: BProc, e: PNode, fastAsgn: bool) = patchAsgnStmtListExpr(patchedTree, e, ri) genStmts(p, patchedTree) return - var a: TLoc + discard getTypeDesc(p.module, le.typ.skipTypes(skipPtrs)) if le.kind in {nkDerefExpr, nkHiddenDeref}: genDeref(p, le, a, enforceDeref=true) else: diff --git a/tests/ccgbugs/pkg8616/rtarray.nim b/tests/ccgbugs/pkg8616/rtarray.nim new file mode 100644 index 000000000..286dbb8cd --- /dev/null +++ b/tests/ccgbugs/pkg8616/rtarray.nim @@ -0,0 +1,2 @@ +proc head*[T](pp: var array[1,T]): var T = + result = pp[0] diff --git a/tests/ccgbugs/pkg8616/scheduler.nim b/tests/ccgbugs/pkg8616/scheduler.nim new file mode 100644 index 000000000..0730000c4 --- /dev/null +++ b/tests/ccgbugs/pkg8616/scheduler.nim @@ -0,0 +1,10 @@ +import rtarray + +type + T = tuple[x:int] + +var + arr: array[1,T] + +proc init*() = + discard head(arr) diff --git a/tests/ccgbugs/t8616.nim b/tests/ccgbugs/t8616.nim new file mode 100644 index 000000000..54068652a --- /dev/null +++ b/tests/ccgbugs/t8616.nim @@ -0,0 +1,4 @@ +import pkg8616 / scheduler + +when isMainModule: + init()