aboutsummaryrefslogtreecommitdiff
path: root/test/cases/compile_errors
diff options
context:
space:
mode:
authorJohn Schmidt <john.schmidt.h@gmail.com>2023-02-28 11:27:56 +0100
committerAndrew Kelley <andrew@ziglang.org>2023-03-01 02:51:59 -0500
commite41bc640c6c4277385236d3dd90b4db566550509 (patch)
treec3ae2d90492cac331e3546a9ffc5115faf078333 /test/cases/compile_errors
parent98508a12cfae15a895d3e829539f907e9d88d0b6 (diff)
downloadzig-e41bc640c6c4277385236d3dd90b4db566550509.tar.gz
zig-e41bc640c6c4277385236d3dd90b4db566550509.zip
astgen: do not discard result location in for/while loops
If we use the discard result location any break with a value will be ignored and not checked for usage. Closes https://github.com/ziglang/zig/issues/14684.
Diffstat (limited to 'test/cases/compile_errors')
-rw-r--r--test/cases/compile_errors/for_loop_break_value_ignored.zig15
-rw-r--r--test/cases/compile_errors/while_loop_break_value_ignored.zig26
2 files changed, 41 insertions, 0 deletions
diff --git a/test/cases/compile_errors/for_loop_break_value_ignored.zig b/test/cases/compile_errors/for_loop_break_value_ignored.zig
new file mode 100644
index 0000000000..a1119ec651
--- /dev/null
+++ b/test/cases/compile_errors/for_loop_break_value_ignored.zig
@@ -0,0 +1,15 @@
+fn returns() usize {
+ return 2;
+}
+
+export fn f1() void {
+ for ("hello") |_| {
+ break returns();
+ }
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :6:5: error: incompatible types: 'usize' and 'void'
diff --git a/test/cases/compile_errors/while_loop_break_value_ignored.zig b/test/cases/compile_errors/while_loop_break_value_ignored.zig
new file mode 100644
index 0000000000..2d14693fe5
--- /dev/null
+++ b/test/cases/compile_errors/while_loop_break_value_ignored.zig
@@ -0,0 +1,26 @@
+fn returns() usize {
+ return 2;
+}
+
+export fn f1() void {
+ var a: bool = true;
+ while (a) {
+ break returns();
+ }
+}
+
+export fn f2() void {
+ var x: bool = true;
+ outer: while (x) {
+ while (x) {
+ break :outer returns();
+ }
+ }
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :7:5: error: incompatible types: 'usize' and 'void'
+// :14:12: error: incompatible types: 'usize' and 'void'