| author | |
| committer | |
| log | 619e54c81382d849f0bfcbe7e5c38f9b34390639 |
| tree | 23e67b8638fd0b4a3ca74c507d24498872435455 |
| parent | 8b2d0ce218db8d874cec1c11b3f186955af620c1 |
This:
```
fn foo() void {
if ({}) |*_| {} else |err| switch (err) {}
}
```
now correctly produces the same compile error in `switchExpr` as this:
```
fn foo() void {
if ({}) |*_| {} else |err| (switch (err) {})
}
```
does in `ifExpr`.2 files changed, 6 insertions(+), 0 deletions(-)
lib/std/zig/AstGen.zig+1| ... | @@ -7453,6 +7453,7 @@ fn switchExpr( | ... | @@ -7453,6 +7453,7 @@ fn switchExpr( |
| 7453 | const ident_name = try astgen.identAsString(ident_token); | 7453 | const ident_name = try astgen.identAsString(ident_token); |
| 7454 | const ident_name_str = tree.tokenSlice(ident_token); | 7454 | const ident_name_str = tree.tokenSlice(ident_token); |
| 7455 | if (mem.eql(u8, "_", ident_name_str)) { | 7455 | if (mem.eql(u8, "_", ident_name_str)) { |
| 7456 | if (non_err_is_ref != .no) return astgen.failTok(payload_token, "pointer modifier invalid on discard", .{}); | ||
| 7456 | break :scope &scratch_scope.base; | 7457 | break :scope &scratch_scope.base; |
| 7457 | } | 7458 | } |
| 7458 | non_err_capture = if (non_err_is_ref != .no) .by_ref else .by_val; | 7459 | non_err_capture = if (non_err_is_ref != .no) .by_ref else .by_val; |
test/cases/compile_errors/capture_by_ref_discard.zig+5| ... | @@ -16,9 +16,14 @@ export fn d() void { | ... | @@ -16,9 +16,14 @@ export fn d() void { |
| 16 | while (null) |*_| {} | 16 | while (null) |*_| {} |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | export fn e() void { | ||
| 20 | if (0) |*_| {} else |err| switch (err) {} | ||
| 21 | } | ||
| 22 | |||
| 19 | // error | 23 | // error |
| 20 | // | 24 | // |
| 21 | // :2:16: error: pointer modifier invalid on discard | 25 | // :2:16: error: pointer modifier invalid on discard |
| 22 | // :7:18: error: pointer modifier invalid on discard | 26 | // :7:18: error: pointer modifier invalid on discard |
| 23 | // :12:16: error: pointer modifier invalid on discard | 27 | // :12:16: error: pointer modifier invalid on discard |
| 24 | // :16:19: error: pointer modifier invalid on discard | 28 | // :16:19: error: pointer modifier invalid on discard |
| 29 | // :20:13: error: pointer modifier invalid on discard |