mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
sema: remove special case check in is_non_err
This commit is contained in:
parent
4ce7b57e86
commit
2720e8c5e9
2 changed files with 23 additions and 7 deletions
|
|
@ -31609,13 +31609,7 @@ fn analyzeIsNonErrComptimeOnly(
|
|||
return .bool_false;
|
||||
}
|
||||
|
||||
if (operand.toIndex()) |operand_inst| {
|
||||
switch (sema.air_instructions.items(.tag)[@intFromEnum(operand_inst)]) {
|
||||
.wrap_errunion_payload => return .bool_true,
|
||||
.wrap_errunion_err => return .bool_false,
|
||||
else => {},
|
||||
}
|
||||
} else if (operand == .undef) {
|
||||
if (operand == .undef) {
|
||||
return .undef_bool;
|
||||
} else if (@intFromEnum(operand) < InternPool.static_len) {
|
||||
// None of the ref tags can be errors.
|
||||
|
|
|
|||
22
test/cases/error_union_variant_is_runtime_known.zig
Normal file
22
test/cases/error_union_variant_is_runtime_known.zig
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
// This tests that the variant of an error union is runtime-known when the value is runtime-known.
|
||||
// This might seem obvious but previously the compiler special-cased the situation where a const
|
||||
// was assigned a payload or error value, i.e. instead of another error union.
|
||||
|
||||
export fn foo() void {
|
||||
var runtime_payload: u8 = 0;
|
||||
_ = &runtime_payload;
|
||||
const eu: error{a}!u8 = runtime_payload;
|
||||
if (eu) |_| {} else |_| @compileError("analyzed");
|
||||
}
|
||||
|
||||
export fn bar() void {
|
||||
var runtime_error: error{a} = error.a;
|
||||
_ = &runtime_error;
|
||||
const eu: error{a}!u8 = runtime_error;
|
||||
if (eu) |_| @compileError("analyzed") else |_| {}
|
||||
}
|
||||
|
||||
// error
|
||||
//
|
||||
// :9:29: error: analyzed
|
||||
// :16:17: error: analyzed
|
||||
Loading…
Add table
Reference in a new issue