1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
discard """
output: '''a
[FATAL] dangling references exist
'''
exitCode: 1
cmd: "nim c --newruntime $file"
"""
# bug #11350
type
Node = ref object
data: int
proc use(x: Node) = discard
proc main =
var x = Node(data: 3) # inferred to be an ``owned ref``
var dangling = unown x
assert dangling.data == 3
#use x
#dangling = nil
# reassignment causes the memory of what ``x`` points to to be freed:
echo "a"
x = Node(data: 4)
echo "b"
# accessing 'dangling' here is invalid as it is nil.
# at scope exit the memory of what ``x`` points to is freed
if dangling != nil:
echo dangling.data
main()
|