parent
93367adaa7
commit
5fb7af26ab
|
@ -15496,7 +15496,8 @@ static IrInstruction *ir_resolve_result(IrAnalyze *ira, IrInstruction *suspend_s
|
|||
IrInstruction *unwrapped_err_ptr = ir_analyze_unwrap_error_payload(ira, suspend_source_instr,
|
||||
result_loc, false, true);
|
||||
ZigType *actual_payload_type = actual_elem_type->data.error_union.payload_type;
|
||||
if (actual_payload_type->id == ZigTypeIdOptional && value_type->id != ZigTypeIdOptional) {
|
||||
if (actual_payload_type->id == ZigTypeIdOptional && value_type->id != ZigTypeIdOptional &&
|
||||
value_type->id != ZigTypeIdNull) {
|
||||
return ir_analyze_unwrap_optional_payload(ira, suspend_source_instr, unwrapped_err_ptr, false, true);
|
||||
} else {
|
||||
return unwrapped_err_ptr;
|
||||
|
|
|
@ -754,3 +754,15 @@ test "nested optional field in struct" {
|
|||
};
|
||||
expect(s.x.?.y == 127);
|
||||
}
|
||||
|
||||
fn maybe(x: bool) anyerror!?u32 {
|
||||
return switch (x) {
|
||||
true => u32(42),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
test "result location is optional inside error union" {
|
||||
const x = maybe(true) catch unreachable;
|
||||
expect(x.? == 42);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue