mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-05 04:27:44 +00:00
@@ -2450,6 +2450,8 @@ proc genStmtList(p: BProc, n: PNode) =
|
||||
genStmtListExprImpl:
|
||||
genStmts(p, n[^1])
|
||||
|
||||
from parampatterns import isLValue
|
||||
|
||||
proc upConv(p: BProc, n: PNode, d: var TLoc) =
|
||||
var a: TLoc
|
||||
initLocExpr(p, n[0], a)
|
||||
@@ -2468,7 +2470,11 @@ proc upConv(p: BProc, n: PNode, d: var TLoc) =
|
||||
linefmt(p, cpsStmts, "if (!#isObj($1, $2)){ #raiseObjectConversionError(); $3}$n",
|
||||
[r, checkFor, raiseInstr(p)])
|
||||
if n[0].typ.kind != tyObject:
|
||||
putIntoDest(p, d, n,
|
||||
if n.isLValue:
|
||||
putIntoDest(p, d, n,
|
||||
"(*(($1*) (&($2))))" % [getTypeDesc(p.module, n.typ), rdLoc(a)], a.storage)
|
||||
else:
|
||||
putIntoDest(p, d, n,
|
||||
"(($1) ($2))" % [getTypeDesc(p.module, n.typ), rdLoc(a)], a.storage)
|
||||
else:
|
||||
putIntoDest(p, d, n, "(*($1*) ($2))" %
|
||||
|
||||
15
tests/ccgbugs/t14160.nim
Normal file
15
tests/ccgbugs/t14160.nim
Normal file
@@ -0,0 +1,15 @@
|
||||
type
|
||||
TPassContext = object of RootObj
|
||||
PPassContext = ref TPassContext
|
||||
|
||||
PCtx = ref object of TPassContext
|
||||
a: int
|
||||
|
||||
ModuleGraph = object
|
||||
vm: RootRef
|
||||
|
||||
proc main() =
|
||||
var g = ModuleGraph(vm: new(Pctx))
|
||||
PCtx(g.vm) = nil #This generates invalid C code
|
||||
|
||||
main()
|
||||
Reference in New Issue
Block a user