Co-authored-by: xflywind <43030857+xflywind@users.noreply.github.com>
This commit is contained in:
parent
fe8feb46c6
commit
e33e9e4a32
2 changed files with 32 additions and 0 deletions
|
|
@ -2189,6 +2189,11 @@ proc genSomeCast(p: BProc, e: PNode, d: var TLoc) =
|
||||||
elif etyp.kind == tyBool and srcTyp.kind in IntegralTypes:
|
elif etyp.kind == tyBool and srcTyp.kind in IntegralTypes:
|
||||||
putIntoDest(p, d, e, "(($1) != 0)" % [rdCharLoc(a)], a.storage)
|
putIntoDest(p, d, e, "(($1) != 0)" % [rdCharLoc(a)], a.storage)
|
||||||
else:
|
else:
|
||||||
|
if etyp.kind == tyPtr:
|
||||||
|
# generates the definition of structs for casts like cast[ptr object](addr x)[]
|
||||||
|
let internalType = etyp.skipTypes({tyPtr})
|
||||||
|
if internalType.kind == tyObject:
|
||||||
|
discard getTypeDesc(p.module, internalType)
|
||||||
putIntoDest(p, d, e, "(($1) ($2))" %
|
putIntoDest(p, d, e, "(($1) ($2))" %
|
||||||
[getTypeDesc(p.module, e.typ), rdCharLoc(a)], a.storage)
|
[getTypeDesc(p.module, e.typ), rdCharLoc(a)], a.storage)
|
||||||
|
|
||||||
|
|
|
||||||
27
tests/ccgbugs/t20141.nim
Normal file
27
tests/ccgbugs/t20141.nim
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
discard """
|
||||||
|
joinable: false
|
||||||
|
"""
|
||||||
|
|
||||||
|
# bug #20141
|
||||||
|
type
|
||||||
|
A = object
|
||||||
|
B = object
|
||||||
|
U = proc()
|
||||||
|
|
||||||
|
proc m(h: var B) = discard
|
||||||
|
|
||||||
|
template n[T, U](x: U): T =
|
||||||
|
static: doAssert true
|
||||||
|
cast[ptr T](addr x)[]
|
||||||
|
|
||||||
|
proc k() =
|
||||||
|
var res: A
|
||||||
|
m(n[B](res))
|
||||||
|
|
||||||
|
proc w(mounter: U) = discard
|
||||||
|
|
||||||
|
proc mount(proto: U) = discard
|
||||||
|
proc v() = mount k
|
||||||
|
|
||||||
|
# This is required for failure
|
||||||
|
w(v)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue