From e41bc640c6c4277385236d3dd90b4db566550509 Mon Sep 17 00:00:00 2001 From: John Schmidt Date: Tue, 28 Feb 2023 11:27:56 +0100 Subject: 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. --- .../for_loop_break_value_ignored.zig | 15 +++++++++++++ .../while_loop_break_value_ignored.zig | 26 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 test/cases/compile_errors/for_loop_break_value_ignored.zig create mode 100644 test/cases/compile_errors/while_loop_break_value_ignored.zig (limited to 'test/cases/compile_errors') 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' -- cgit v1.2.3