Commit c710d5eefe
Changed files (3)
src
arch
arm
test
stage2
src/arch/arm/CodeGen.zig
@@ -1160,7 +1160,14 @@ fn airWrapErrUnionPayload(self: *Self, inst: Air.Inst.Index) !void {
/// E to E!T
fn airWrapErrUnionErr(self: *Self, inst: Air.Inst.Index) !void {
const ty_op = self.air.instructions.items(.data)[inst].ty_op;
- const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement wrap errunion error for {}", .{self.target.cpu.arch});
+ const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
+ const error_union_ty = self.air.getRefType(ty_op.ty);
+ const payload_ty = error_union_ty.errorUnionPayload();
+ const mcv = try self.resolveInst(ty_op.operand);
+ if (!payload_ty.hasCodeGenBits()) break :result mcv;
+
+ return self.fail("TODO implement wrap errunion error for non-empty payloads", .{});
+ };
return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
}
test/stage2/arm.zig
@@ -665,6 +665,20 @@ pub fn addCases(ctx: *TestContext) !void {
,
"",
);
+
+ case.addCompareOutput(
+ \\pub fn main() void {
+ \\ foo() catch unreachable;
+ \\}
+ \\
+ \\fn foo() anyerror!void {
+ \\ try bar();
+ \\}
+ \\
+ \\fn bar() anyerror!void {}
+ ,
+ "",
+ );
}
{
test/behavior.zig
@@ -2,10 +2,19 @@ const builtin = @import("builtin");
test {
// Tests that pass for stage1, llvm backend, C backend, wasm backend, and arm backend.
+ _ = @import("behavior/bugs/679.zig");
_ = @import("behavior/bugs/1111.zig");
_ = @import("behavior/bugs/2346.zig");
_ = @import("behavior/bugs/3586.zig");
+ _ = @import("behavior/bugs/4560.zig");
+ _ = @import("behavior/bugs/6850.zig");
_ = @import("behavior/slice_sentinel_comptime.zig");
+ _ = @import("behavior/fn_in_struct_in_comptime.zig");
+ _ = @import("behavior/hasfield.zig");
+ _ = @import("behavior/hasdecl.zig");
+ _ = @import("behavior/pub_enum.zig");
+ _ = @import("behavior/type_info.zig");
+ _ = @import("behavior/type.zig");
if (!builtin.zig_is_stage2 or builtin.stage2_arch != .arm) {
// Tests that pass for stage1, llvm backend, C backend, wasm backend.
@@ -14,36 +23,27 @@ test {
_ = @import("behavior/bool.zig");
_ = @import("behavior/bugs/624.zig");
_ = @import("behavior/bugs/655.zig");
- _ = @import("behavior/bugs/679.zig");
_ = @import("behavior/bugs/704.zig");
_ = @import("behavior/bugs/1486.zig");
_ = @import("behavior/bugs/2692.zig");
_ = @import("behavior/bugs/2889.zig");
_ = @import("behavior/bugs/3046.zig");
- _ = @import("behavior/bugs/4560.zig");
_ = @import("behavior/bugs/4769_a.zig");
_ = @import("behavior/bugs/4769_b.zig");
_ = @import("behavior/bugs/4954.zig");
- _ = @import("behavior/bugs/6850.zig");
_ = @import("behavior/byval_arg_var.zig");
_ = @import("behavior/call.zig");
_ = @import("behavior/defer.zig");
_ = @import("behavior/enum.zig");
_ = @import("behavior/error.zig");
- _ = @import("behavior/fn_in_struct_in_comptime.zig");
- _ = @import("behavior/hasdecl.zig");
- _ = @import("behavior/hasfield.zig");
_ = @import("behavior/if.zig");
_ = @import("behavior/import.zig");
_ = @import("behavior/incomplete_struct_param_tld.zig");
_ = @import("behavior/inttoptr.zig");
_ = @import("behavior/pointers.zig");
_ = @import("behavior/ptrcast.zig");
- _ = @import("behavior/pub_enum.zig");
_ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
_ = @import("behavior/truncate.zig");
- _ = @import("behavior/type_info.zig");
- _ = @import("behavior/type.zig");
_ = @import("behavior/usingnamespace.zig");
_ = @import("behavior/underscore.zig");