aboutsummaryrefslogtreecommitdiff
path: root/tests/errors/lend_unrestored.zc
diff options
context:
space:
mode:
authorGravatar zinc <zinc@downsta.ir> 2026-10-14 05:55:19 +0000
committerGravatar zinc <zinc@downsta.ir> 2026-10-14 05:55:19 +0000
commit05f7b7e09ad503e4eac4f757de0d7329174f6437 (patch)
tree768931192a69eff878d8f149c418fff55b0fdf8e /tests/errors/lend_unrestored.zc
parentdocs: archive the frozen stage code as one compressed tarball (diff)
analyzer: close the ownership gaps that stopped the compiler compiling itself
an owned local can now move into a released owner declared in the same or an outer block, and g = m*x lends a local owner to a global until the global is assigned again in the same block. leaving that block, giving the local away, or returning while the lend is open is an error. recasting a plain local now names it and says it has no ownership to recast. methdef and syntax_resident use the supported spellings, so make genome reaches its fixpoint from a clean checkout. runerr.sh reads the first // expect: line, since the include headers moved it off line 1.
Diffstat (limited to 'tests/errors/lend_unrestored.zc')
-rw-r--r--tests/errors/lend_unrestored.zc6
1 files changed, 6 insertions, 0 deletions
diff --git a/tests/errors/lend_unrestored.zc b/tests/errors/lend_unrestored.zc
new file mode 100644
index 0000000..1b316df
--- /dev/null
+++ b/tests/errors/lend_unrestored.zc
@@ -0,0 +1,6 @@
+namespace;
+include rt;
+
+// expect: buf: is lent to global sink; assign the global again before the block that lent it ends
+word sink;
+fn main() { word buf = rt.new(4); sink = m*buf; buf[0] = 1; return 0; }