From 23230572e2ea4b6ed9e56ef4e68124cbaf3041c1 Mon Sep 17 00:00:00 2001 From: cooldome Date: Tue, 20 Mar 2018 10:14:47 +0000 Subject: [PATCH] Fixes #7363 (#7371) --- compiler/ccgstmts.nim | 5 +++-- tests/ccgbugs/tforward_decl_only.nim | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/compiler/ccgstmts.nim b/compiler/ccgstmts.nim index 6b8ba2b025..8a54708eee 100644 --- a/compiler/ccgstmts.nim +++ b/compiler/ccgstmts.nim @@ -965,6 +965,7 @@ proc genAsmOrEmitStmt(p: BProc, t: PNode, isAsmStmt=false): Rope = elif sym.kind == skType: res.add($getTypeDesc(p.module, sym.typ)) else: + discard getTypeDesc(p.module, skipTypes(sym.typ, abstractPtrs)) var r = sym.loc.r if r == nil: # if no name has already been given, @@ -975,10 +976,10 @@ proc genAsmOrEmitStmt(p: BProc, t: PNode, isAsmStmt=false): Rope = of nkTypeOfExpr: res.add($getTypeDesc(p.module, t.sons[i].typ)) else: + discard getTypeDesc(p.module, skipTypes(t[i].typ, abstractPtrs)) var a: TLoc - initLocExpr(p, t.sons[i], a) + initLocExpr(p, t[i], a) res.add($a.rdLoc) - #internalError(t.sons[i].info, "genAsmOrEmitStmt()") if isAsmStmt and hasGnuAsm in CC[cCompiler].props: for x in splitLines(res): diff --git a/tests/ccgbugs/tforward_decl_only.nim b/tests/ccgbugs/tforward_decl_only.nim index dcd74eaf4e..f4e9c216ef 100644 --- a/tests/ccgbugs/tforward_decl_only.nim +++ b/tests/ccgbugs/tforward_decl_only.nim @@ -13,3 +13,17 @@ type AnotherType = object let x = AnotherType(f: newMyRefObject("hello")) echo $x.f + +# bug #7363 + +type + Foo = object + a: cint + Foo2 = object + b: cint + +proc f(foo: ptr Foo, foo2: ptr Foo2): cint = + if foo != nil: {.emit: "`result` = `foo`->a;".} + if foo2 != nil: {.emit: [result, " = ", foo2[], ".b;"].} + +discard f(nil, nil)