since the example code return value from global variable, instead of first argument, the `n.len` is 1 which causes compiler crashes.
This commit is contained in:
parent
cfdac6666f
commit
f755e452d2
2 changed files with 11 additions and 1 deletions
|
|
@ -479,7 +479,7 @@ proc destMightOwn(c: var Partitions; dest: var VarIndex; n: PNode) =
|
||||||
# calls do construct, what we construct must be destroyed,
|
# calls do construct, what we construct must be destroyed,
|
||||||
# so dest cannot be a cursor:
|
# so dest cannot be a cursor:
|
||||||
dest.flags.incl ownsData
|
dest.flags.incl ownsData
|
||||||
elif n.typ.kind in {tyLent, tyVar}:
|
elif n.typ.kind in {tyLent, tyVar} and n.len > 1:
|
||||||
# we know the result is derived from the first argument:
|
# we know the result is derived from the first argument:
|
||||||
var roots: seq[(PSym, int)]
|
var roots: seq[(PSym, int)]
|
||||||
allRoots(n[1], roots, RootEscapes)
|
allRoots(n[1], roots, RootEscapes)
|
||||||
|
|
|
||||||
10
tests/arc/t18971.nim
Normal file
10
tests/arc/t18971.nim
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
discard """
|
||||||
|
cmd: "nim c --gc:arc $file"
|
||||||
|
"""
|
||||||
|
|
||||||
|
type MyObj = ref object
|
||||||
|
|
||||||
|
var o = MyObj()
|
||||||
|
proc x: var MyObj = o
|
||||||
|
|
||||||
|
var o2 = x()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue