diff options
| author | 2026-10-15 14:59:31 +0330 | |
|---|---|---|
| committer | 2026-10-15 14:59:31 +0330 | |
| commit | 8703e2c85a8ecdea9e869e876e347ebd4cb6ef88 (patch) | |
| tree | 0ca06ae1f09abf9245b1eabf5d74099f829ad6e6 /tests/conformance/6-ownership/back_link_free.zc | |
| parent | analyzer: infer .u from returns of fresh objects in the body (prescan guess, ... (diff) | |
analyzer: a back link (container's owner stored into it) stays a plain reference, fixing a compile hang on a<->b and a leak; ending an owner kills its owned children too (fixes use after reassigning a container); escape fixtures
Diffstat (limited to 'tests/conformance/6-ownership/back_link_free.zc')
| -rw-r--r-- | tests/conformance/6-ownership/back_link_free.zc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/tests/conformance/6-ownership/back_link_free.zc b/tests/conformance/6-ownership/back_link_free.zc new file mode 100644 index 0000000..a8fb5e8 --- /dev/null +++ b/tests/conformance/6-ownership/back_link_free.zc @@ -0,0 +1,6 @@ +// expect error: b: used after it was given away; b borrows a, and a was freed +// spec 6.6 +include rt; +struct node { int value; node* prev; node* next; }; +fn main() { node* a = rt.new(node); node* b = rt.new(node); a.next = b; b.prev = a; rt.free(a); rt.put_n(b.prev.value); } +// zc0: skip |
