diff options
| author | 2026-10-14 10:47:30 +0000 | |
|---|---|---|
| committer | 2026-10-14 10:47:30 +0000 | |
| commit | 4a22cf28742bf33577678de494aa09ab60a3c820 (patch) | |
| tree | d9133c7ab431fd3f41ef7713a869d23be4539244 /tests/errors | |
| parent | Merge four small fixes: std hovers, capture terminator, bare static calls, vo... (diff) | |
| parent | zc: add the defer statement (diff) | |
Merge the defer statement; todo: tick it, add its follow-ups
Diffstat (limited to 'tests/errors')
| -rw-r--r-- | tests/errors/defer_freed_twice.zc | 10 | ||||
| -rw-r--r-- | tests/errors/defer_moved.zc | 11 | ||||
| -rw-r--r-- | tests/errors/defer_moved_early.zc | 14 |
3 files changed, 35 insertions, 0 deletions
diff --git a/tests/errors/defer_freed_twice.zc b/tests/errors/defer_freed_twice.zc new file mode 100644 index 0000000..d4fe08d --- /dev/null +++ b/tests/errors/defer_freed_twice.zc @@ -0,0 +1,10 @@ +namespace; +include rt; + +// expect: p: used after it was given away +fn main() { + int* p = rt.new(int); + defer rt.free(p); + rt.free(p); + return 0; +} diff --git a/tests/errors/defer_moved.zc b/tests/errors/defer_moved.zc new file mode 100644 index 0000000..d6086cd --- /dev/null +++ b/tests/errors/defer_moved.zc @@ -0,0 +1,11 @@ +namespace; +include rt; + +// expect: p: used after it was given away +fn take(int* .d p) { rt.free(p); return 0; } +fn main() { + int* p = rt.new(int); + defer rt.free(p); + take(p); + return 0; +} diff --git a/tests/errors/defer_moved_early.zc b/tests/errors/defer_moved_early.zc new file mode 100644 index 0000000..2c6feb9 --- /dev/null +++ b/tests/errors/defer_moved_early.zc @@ -0,0 +1,14 @@ +namespace; +include rt; + +// expect: p: used after it was given away +fn take(int* .d p) { rt.free(p); return 0; } +fn main(a) { + int* p = rt.new(int); + defer rt.free(p); + if (a) { + take(p); + return 1; + } + return 0; +} |
