From ecc350ca5c2eb50be8309c5f14f8bf0d87db9a02 Mon Sep 17 00:00:00 2001 From: Moon Flower Date: Mon, 12 Oct 2026 08:46:23 +0330 Subject: a --- tests/errors/alias_field.zc | 9 +++++++++ tests/errors/alias_index.zc | 9 +++++++++ tests/errors/alias_plus.zc | 2 ++ tests/errors/alias_scope.zc | 6 ++++++ tests/errors/back_to_m.zc | 2 ++ tests/errors/borrow_escape.zc | 3 +++ tests/errors/branch_mismatch.zc | 3 +++ tests/errors/child_dies.zc | 3 +++ tests/errors/child_recast.zc | 2 ++ tests/errors/copy_owned.zc | 2 ++ tests/errors/d_into_block.zc | 2 ++ tests/errors/d_kept.zc | 2 ++ tests/errors/did_you_mean.zc | 3 +++ tests/errors/discard_u.zc | 3 +++ tests/errors/found_token.zc | 2 ++ tests/errors/give_m.zc | 3 +++ tests/errors/global_store.zc | 3 +++ tests/errors/leak_overwrite.zc | 2 ++ tests/errors/lend_d.zc | 4 ++++ tests/errors/loop_move.zc | 3 +++ tests/errors/plain_return.zc | 3 +++ tests/errors/return_m.zc | 3 +++ tests/errors/tag_mismatch.zc | 2 ++ tests/errors/temporary_output.zc | 9 +++++++++ tests/errors/u_dropped.zc | 2 ++ tests/errors/u_skip_level.zc | 2 ++ tests/errors/unchecked_touch.zc | 2 ++ tests/errors/unused.zc | 2 ++ tests/errors/use_after_give.zc | 3 +++ 29 files changed, 96 insertions(+) create mode 100644 tests/errors/alias_field.zc create mode 100644 tests/errors/alias_index.zc create mode 100644 tests/errors/alias_plus.zc create mode 100644 tests/errors/alias_scope.zc create mode 100644 tests/errors/back_to_m.zc create mode 100644 tests/errors/borrow_escape.zc create mode 100644 tests/errors/branch_mismatch.zc create mode 100644 tests/errors/child_dies.zc create mode 100644 tests/errors/child_recast.zc create mode 100644 tests/errors/copy_owned.zc create mode 100644 tests/errors/d_into_block.zc create mode 100644 tests/errors/d_kept.zc create mode 100644 tests/errors/did_you_mean.zc create mode 100644 tests/errors/discard_u.zc create mode 100644 tests/errors/found_token.zc create mode 100644 tests/errors/give_m.zc create mode 100644 tests/errors/global_store.zc create mode 100644 tests/errors/leak_overwrite.zc create mode 100644 tests/errors/lend_d.zc create mode 100644 tests/errors/loop_move.zc create mode 100644 tests/errors/plain_return.zc create mode 100644 tests/errors/return_m.zc create mode 100644 tests/errors/tag_mismatch.zc create mode 100644 tests/errors/temporary_output.zc create mode 100644 tests/errors/u_dropped.zc create mode 100644 tests/errors/u_skip_level.zc create mode 100644 tests/errors/unchecked_touch.zc create mode 100644 tests/errors/unused.zc create mode 100644 tests/errors/use_after_give.zc (limited to 'tests/errors') diff --git a/tests/errors/alias_field.zc b/tests/errors/alias_field.zc new file mode 100644 index 0000000..09086ca --- /dev/null +++ b/tests/errors/alias_field.zc @@ -0,0 +1,9 @@ +// expect: c: used after it was given away +struct node { int v; node* next; }; +fn main() { + node* p = new(node), n = new(node); + p.next = n; + node* c = p.next; + free(d*p); + return c.v; +} diff --git a/tests/errors/alias_index.zc b/tests/errors/alias_index.zc new file mode 100644 index 0000000..3c036fe --- /dev/null +++ b/tests/errors/alias_index.zc @@ -0,0 +1,9 @@ +// expect: c: used after it was given away +fn main() { + int** list = new(int*, 2); + int* item = new(int); + list[1] = item; + int* c = list[1]; + free(d*list); + return c[0]; +} diff --git a/tests/errors/alias_plus.zc b/tests/errors/alias_plus.zc new file mode 100644 index 0000000..d42d196 --- /dev/null +++ b/tests/errors/alias_plus.zc @@ -0,0 +1,2 @@ +// expect: q: used after it was given away +fn main() { let p = new(2); p[0] = 1; let q = p + 0; free(d*p); return q[0]; } diff --git a/tests/errors/alias_scope.zc b/tests/errors/alias_scope.zc new file mode 100644 index 0000000..b51bec5 --- /dev/null +++ b/tests/errors/alias_scope.zc @@ -0,0 +1,6 @@ +// expect: q: used after it was given away +fn main() { + let q; + { let p = new(2); q = p + 0; } + return q[0]; +} diff --git a/tests/errors/back_to_m.zc b/tests/errors/back_to_m.zc new file mode 100644 index 0000000..b8c160f --- /dev/null +++ b/tests/errors/back_to_m.zc @@ -0,0 +1,2 @@ +// expect: x: can't be recast back to m +fn main() { let x = new(3); d*x; m*x; return 0; } diff --git a/tests/errors/borrow_escape.zc b/tests/errors/borrow_escape.zc new file mode 100644 index 0000000..ce24480 --- /dev/null +++ b/tests/errors/borrow_escape.zc @@ -0,0 +1,3 @@ +// expect: p: is owned and can't be returned +fn f(.m p) { return p; } +fn main() { let x = new(1); f(x); return 0; } diff --git a/tests/errors/branch_mismatch.zc b/tests/errors/branch_mismatch.zc new file mode 100644 index 0000000..bd19968 --- /dev/null +++ b/tests/errors/branch_mismatch.zc @@ -0,0 +1,3 @@ +// expect: x: ends the branches of an if in different states +fn take(.d p) { return p[0]; } +fn main() { let x = new(1); if (x[0]) take(d*x); else u*x; return 0; } diff --git a/tests/errors/child_dies.zc b/tests/errors/child_dies.zc new file mode 100644 index 0000000..67caca9 --- /dev/null +++ b/tests/errors/child_dies.zc @@ -0,0 +1,3 @@ +// expect: c: used after it was given away +fn take(.d p) { return p[0]; } +fn main() { let p = new(2), c = new(1); p[0] = c; take(d*p); return c[0]; } diff --git a/tests/errors/child_recast.zc b/tests/errors/child_recast.zc new file mode 100644 index 0000000..c9ccd62 --- /dev/null +++ b/tests/errors/child_recast.zc @@ -0,0 +1,2 @@ +// expect: c: belongs to a container; recast the container instead +fn main() { let p = new(2), c = new(1); p[0] = c; d*c; return 0; } diff --git a/tests/errors/copy_owned.zc b/tests/errors/copy_owned.zc new file mode 100644 index 0000000..862c7ef --- /dev/null +++ b/tests/errors/copy_owned.zc @@ -0,0 +1,2 @@ +// expect: x: is an owned object and can't be copied +fn main() { let x = new(1); let y = x; return y[0]; } diff --git a/tests/errors/d_into_block.zc b/tests/errors/d_into_block.zc new file mode 100644 index 0000000..2d7f526 --- /dev/null +++ b/tests/errors/d_into_block.zc @@ -0,0 +1,2 @@ +// expect: x: used after it was given away +fn main() { let x = new(1); d*x; { x[0] = 5; } return x[0]; } diff --git a/tests/errors/d_kept.zc b/tests/errors/d_kept.zc new file mode 100644 index 0000000..dcbfb86 --- /dev/null +++ b/tests/errors/d_kept.zc @@ -0,0 +1,2 @@ +// expect: x: d object was never given away +fn main() { let x = new(3); d*x; x[0] = 1; return 0; } diff --git a/tests/errors/did_you_mean.zc b/tests/errors/did_you_mean.zc new file mode 100644 index 0000000..734b903 --- /dev/null +++ b/tests/errors/did_you_mean.zc @@ -0,0 +1,3 @@ +// expect: did you mean 'helper'? +fn helper(x) { return x; } +fn main() { return helpr(1); } diff --git a/tests/errors/discard_u.zc b/tests/errors/discard_u.zc new file mode 100644 index 0000000..2743f9e --- /dev/null +++ b/tests/errors/discard_u.zc @@ -0,0 +1,3 @@ +// expect: a new object (or a u result) can't be thrown away +.u mk() { let p = new(1); return u*p; } +fn main() { mk(); return 0; } diff --git a/tests/errors/found_token.zc b/tests/errors/found_token.zc new file mode 100644 index 0000000..73e63dc --- /dev/null +++ b/tests/errors/found_token.zc @@ -0,0 +1,2 @@ +// expect: expected ';', found 'return' +fn main() { let a = 1 return 0; } diff --git a/tests/errors/give_m.zc b/tests/errors/give_m.zc new file mode 100644 index 0000000..cd67896 --- /dev/null +++ b/tests/errors/give_m.zc @@ -0,0 +1,3 @@ +// expect: x: is m; write d*x +fn take(.d p) { return p[0]; } +fn main() { let x = new(3); take(x); return 0; } diff --git a/tests/errors/global_store.zc b/tests/errors/global_store.zc new file mode 100644 index 0000000..dc0e546 --- /dev/null +++ b/tests/errors/global_store.zc @@ -0,0 +1,3 @@ +// expect: x: must be d to be stored in a global +let g; +fn main() { let x = new(1); g = x; return 0; } diff --git a/tests/errors/leak_overwrite.zc b/tests/errors/leak_overwrite.zc new file mode 100644 index 0000000..d19b5fd --- /dev/null +++ b/tests/errors/leak_overwrite.zc @@ -0,0 +1,2 @@ +// expect: x: still owns an object +fn main() { let x = new(1); x = new(2); return x[0]; } diff --git a/tests/errors/lend_d.zc b/tests/errors/lend_d.zc new file mode 100644 index 0000000..55ac7e0 --- /dev/null +++ b/tests/errors/lend_d.zc @@ -0,0 +1,4 @@ +// expect: x: is d; pass it to a d parameter +fn look(.m p) { return p[0]; } +fn take(.d p) { return p[0]; } +fn main() { let x = new(3); d*x; look(x); take(x); return 0; } diff --git a/tests/errors/loop_move.zc b/tests/errors/loop_move.zc new file mode 100644 index 0000000..df3c94a --- /dev/null +++ b/tests/errors/loop_move.zc @@ -0,0 +1,3 @@ +// expect: x: is given away inside a loop that comes back around to it +fn take(.d p) { return p[0]; } +fn main() { let x = new(1); let i = 0; d*x; while (i < 3) { take(x); i++; } return 0; } diff --git a/tests/errors/plain_return.zc b/tests/errors/plain_return.zc new file mode 100644 index 0000000..e23cc51 --- /dev/null +++ b/tests/errors/plain_return.zc @@ -0,0 +1,3 @@ +// expect: is called before its body, so its owned return can't be known there +fn main() { return mk(); } +fn mk() { return new(1); } diff --git a/tests/errors/return_m.zc b/tests/errors/return_m.zc new file mode 100644 index 0000000..c450711 --- /dev/null +++ b/tests/errors/return_m.zc @@ -0,0 +1,3 @@ +// expect: q: has to be u to be returned +.u mk(.m q) { return q; } +fn main() { let x = new(1); let y = mk(x); return y[0]; } diff --git a/tests/errors/tag_mismatch.zc b/tests/errors/tag_mismatch.zc new file mode 100644 index 0000000..079f249 --- /dev/null +++ b/tests/errors/tag_mismatch.zc @@ -0,0 +1,2 @@ +// expect: c: its tag doesn't match its container's +fn main() { let p = new(2), c = new(1); u*p; p[0] = c; return 0; } diff --git a/tests/errors/temporary_output.zc b/tests/errors/temporary_output.zc new file mode 100644 index 0000000..02a8a07 --- /dev/null +++ b/tests/errors/temporary_output.zc @@ -0,0 +1,9 @@ +// expect: a new object can only go straight to a d parameter; bind it to a name first +char*.u make_text(int n) { + let text = new(char, n); + return u*text; +} +fn main() { + put_s(make_text(3)); + return 0; +} diff --git a/tests/errors/u_dropped.zc b/tests/errors/u_dropped.zc new file mode 100644 index 0000000..e1ca68a --- /dev/null +++ b/tests/errors/u_dropped.zc @@ -0,0 +1,2 @@ +// expect: x: u object must leave this block +fn main() { let x = new(3); u*x; return 0; } diff --git a/tests/errors/u_skip_level.zc b/tests/errors/u_skip_level.zc new file mode 100644 index 0000000..6caeeb3 --- /dev/null +++ b/tests/errors/u_skip_level.zc @@ -0,0 +1,2 @@ +// expect: t: is u; it can only be handed to a variable of the enclosing block +fn main() { let r; { { let t = new(1); u*t; r = t; } } return r[0]; } diff --git a/tests/errors/unchecked_touch.zc b/tests/errors/unchecked_touch.zc new file mode 100644 index 0000000..141639d --- /dev/null +++ b/tests/errors/unchecked_touch.zc @@ -0,0 +1,2 @@ +// expect: x: is tracked by the analyzer and can't be used in unchecked code +fn main() { let x = new(1); unchecked { x[0] = 1; } return 0; } diff --git a/tests/errors/unused.zc b/tests/errors/unused.zc new file mode 100644 index 0000000..64aff1f --- /dev/null +++ b/tests/errors/unused.zc @@ -0,0 +1,2 @@ +// expect: x: m object is never used +fn main() { let x = new(3); return 0; } diff --git a/tests/errors/use_after_give.zc b/tests/errors/use_after_give.zc new file mode 100644 index 0000000..8a10922 --- /dev/null +++ b/tests/errors/use_after_give.zc @@ -0,0 +1,3 @@ +// expect: x: used after it was given away +fn take(.d p) { return p[0]; } +fn main() { let x = new(3); take(d*x); return x[0]; } -- cgit v1.2.3