diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig index 6b386de4e2..9ff9987014 100644 --- a/src/arch/riscv64/CodeGen.zig +++ b/src/arch/riscv64/CodeGen.zig @@ -897,7 +897,7 @@ fn formatWipMir( .pic = comp.root_mod.pic, }; var first = true; - for ((lower.lowerMir(data.inst) catch |err| switch (err) { + for ((lower.lowerMir(data.inst, .{ .allow_frame_locs = false }) catch |err| switch (err) { error.LowerFail => { defer { lower.err_msg.?.deinit(data.func.gpa); @@ -990,13 +990,10 @@ fn addInst(func: *Func, inst: Mir.Inst) error{OutOfMemory}!Mir.Inst.Index { .pseudo_dbg_prologue_end, .pseudo_dbg_line_column, .pseudo_dbg_epilogue_begin, - .pseudo_store_rm, - .pseudo_load_rm, - .pseudo_lea_rm, .pseudo_mv, .pseudo_dead, => false, - }) wip_mir_log.debug("{}", .{func.fmtWipMir(result_index)}) else wip_mir_log.debug(" | uses-mem", .{}); + }) wip_mir_log.debug("{}", .{func.fmtWipMir(result_index)}); return result_index; } @@ -3563,9 +3560,51 @@ fn airSetUnionTag(func: *Func, inst: Air.Inst.Index) !void { } fn airGetUnionTag(func: *Func, inst: Air.Inst.Index) !void { + const zcu = func.bin_file.comp.module.?; + const mod = func.bin_file.comp.module.?; const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; - const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airGetUnionTag for {}", .{func.target.cpu.arch}); - return func.finishAir(inst, result, .{ ty_op.operand, .none, .none }); + + const tag_ty = func.typeOfIndex(inst); + const union_ty = func.typeOf(ty_op.operand); + const layout = union_ty.unionGetLayout(mod); + + if (layout.tag_size == 0) { + return func.finishAir(inst, .none, .{ ty_op.operand, .none, .none }); + } + + const operand = try func.resolveInst(ty_op.operand); + + const frame_mcv = try func.allocRegOrMem(union_ty, null, false); + try func.genCopy(union_ty, frame_mcv, operand); + + const tag_abi_size = tag_ty.abiSize(mod); + const result_reg, const result_lock = try func.allocReg(.int); + defer func.register_manager.unlockReg(result_lock); + + switch (frame_mcv) { + .load_frame => |frame_addr| { + if (tag_abi_size <= 8) { + const off: i32 = if (layout.tag_align.compare(.lt, layout.payload_align)) + @intCast(layout.payload_size) + else + 0; + + try func.genCopy( + tag_ty, + .{ .register = result_reg }, + .{ .load_frame = .{ .index = frame_addr.index, .off = frame_addr.off + off } }, + ); + } else { + return func.fail( + "TODO implement get_union_tag for ABI larger than 8 bytes and operand {}, tag {}", + .{ frame_mcv, tag_ty.fmt(zcu) }, + ); + } + }, + else => return func.fail("TODO: airGetUnionTag {s}", .{@tagName(operand)}), + } + + return func.finishAir(inst, .{ .register = result_reg }, .{ ty_op.operand, .none, .none }); } fn airClz(func: *Func, inst: Air.Inst.Index) !void { @@ -4061,6 +4100,10 @@ fn airStructFieldVal(func: *Func, inst: Air.Inst.Index) !void { }); } + if (field_off == 0) { + try func.truncateRegister(field_ty, dst_reg); + } + break :result if (field_off == 0) dst_mcv else try func.copyToNewRegister(inst, dst_mcv); }, .load_frame => { @@ -5945,7 +5988,7 @@ fn genSetMem( 0 => {}, 1, 2, 4, 8 => { // no matter what type, it should use an integer register - const src_reg = try func.copyToTmpRegister(Type.usize, src_mcv); + const src_reg = try func.copyToTmpRegister(ty, src_mcv); const src_lock = func.register_manager.lockRegAssumeUnused(src_reg); defer func.register_manager.unlockReg(src_lock); diff --git a/src/arch/riscv64/Emit.zig b/src/arch/riscv64/Emit.zig index 64798fd255..0c11a66a8d 100644 --- a/src/arch/riscv64/Emit.zig +++ b/src/arch/riscv64/Emit.zig @@ -26,7 +26,7 @@ pub fn emitMir(emit: *Emit) Error!void { mir_index, @intCast(emit.code.items.len), ); - const lowered = try emit.lower.lowerMir(mir_index); + const lowered = try emit.lower.lowerMir(mir_index, .{ .allow_frame_locs = true }); var lowered_relocs = lowered.relocs; for (lowered.insts, 0..) |lowered_inst, lowered_index| { const start_offset: u32 = @intCast(emit.code.items.len); diff --git a/src/arch/riscv64/Lower.zig b/src/arch/riscv64/Lower.zig index b748cba8cf..bbad404e60 100644 --- a/src/arch/riscv64/Lower.zig +++ b/src/arch/riscv64/Lower.zig @@ -40,7 +40,9 @@ pub const Reloc = struct { }; /// The returned slice is overwritten by the next call to lowerMir. -pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct { +pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index, options: struct { + allow_frame_locs: bool, +}) Error!struct { insts: []const Instruction, relocs: []const Reloc, } { @@ -69,7 +71,10 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct { .pseudo_load_rm, .pseudo_store_rm => { const rm = inst.data.rm; - const frame_loc = rm.m.toFrameLoc(lower.mir); + const frame_loc: Mir.FrameLoc = if (options.allow_frame_locs) + rm.m.toFrameLoc(lower.mir) + else + .{ .base = .s0, .disp = 0 }; switch (inst.ops) { .pseudo_load_rm => { diff --git a/src/arch/riscv64/encoder.zig b/src/arch/riscv64/encoder.zig index 34d43ba782..5962121438 100644 --- a/src/arch/riscv64/encoder.zig +++ b/src/arch/riscv64/encoder.zig @@ -56,7 +56,7 @@ pub const Instruction = struct { .none => unreachable, // it's sliced out above .reg => |reg| try writer.writeAll(@tagName(reg)), .imm => |imm| try writer.print("{d}", .{imm.asSigned(64)}), - .mem => unreachable, // there is no "mem" operand in the actual instructions + .mem => try writer.writeAll("mem"), .barrier => |barrier| try writer.writeAll(@tagName(barrier)), } } diff --git a/src/arch/x86_64/Lower.zig b/src/arch/x86_64/Lower.zig index 73f4f1d617..bf074ff98f 100644 --- a/src/arch/x86_64/Lower.zig +++ b/src/arch/x86_64/Lower.zig @@ -65,6 +65,8 @@ pub const Reloc = struct { }; }; +const Options = struct { allow_frame_locs: bool }; + /// The returned slice is overwritten by the next call to lowerMir. pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct { insts: []const Instruction, diff --git a/test/behavior/array.zig b/test/behavior/array.zig index f5fa95c770..f6d59ae0fa 100644 --- a/test/behavior/array.zig +++ b/test/behavior/array.zig @@ -580,7 +580,6 @@ test "type coercion of anon struct literal to array" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const S = struct { const U = union { @@ -1011,7 +1010,6 @@ test "union that needs padding bytes inside an array" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const B = union(enum) { D: u8, diff --git a/test/behavior/bitcast.zig b/test/behavior/bitcast.zig index 6d513a4ac7..cc84a948d1 100644 --- a/test/behavior/bitcast.zig +++ b/test/behavior/bitcast.zig @@ -192,7 +192,6 @@ test "@bitCast packed structs at runtime and comptime" { test "@bitCast extern structs at runtime and comptime" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const Full = extern struct { number: u16, @@ -227,7 +226,6 @@ test "bitcast packed struct to integer and back" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const LevelUpMove = packed struct { move_id: u9, diff --git a/test/behavior/enum.zig b/test/behavior/enum.zig index 8b55ff26bc..7972135bfa 100644 --- a/test/behavior/enum.zig +++ b/test/behavior/enum.zig @@ -908,7 +908,6 @@ test "enum literal casting to tagged union" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const Arch = union(enum) { x86_64, diff --git a/test/behavior/error.zig b/test/behavior/error.zig index e0f0b224c1..9b6300e743 100644 --- a/test/behavior/error.zig +++ b/test/behavior/error.zig @@ -535,7 +535,6 @@ test "return result loc as peer result loc in inferred error set function" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const S = struct { fn doTheTest() !void { diff --git a/test/behavior/eval.zig b/test/behavior/eval.zig index 3b77dbf966..fb916df3cf 100644 --- a/test/behavior/eval.zig +++ b/test/behavior/eval.zig @@ -395,7 +395,6 @@ test "return 0 from function that has u0 return type" { test "statically initialized struct" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; st_init_str_foo.x += 1; try expect(st_init_str_foo.x == 14); diff --git a/test/behavior/inline_switch.zig b/test/behavior/inline_switch.zig index d0621ad198..59dc7096b9 100644 --- a/test/behavior/inline_switch.zig +++ b/test/behavior/inline_switch.zig @@ -49,7 +49,6 @@ test "inline switch unions" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; var x: U = .a; _ = &x; diff --git a/test/behavior/math.zig b/test/behavior/math.zig index 44daec9ed5..73b9b2f62e 100644 --- a/test/behavior/math.zig +++ b/test/behavior/math.zig @@ -1269,7 +1269,6 @@ test "@subWithOverflow" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; { var a: u8 = 1; diff --git a/test/behavior/optional.zig b/test/behavior/optional.zig index f9c71d3bea..bb1d9b7027 100644 --- a/test/behavior/optional.zig +++ b/test/behavior/optional.zig @@ -397,7 +397,6 @@ test "array of optional unaligned types" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const Enum = enum { one, two, three }; diff --git a/test/behavior/packed-struct.zig b/test/behavior/packed-struct.zig index 88e5457627..60fcd5e9f6 100644 --- a/test/behavior/packed-struct.zig +++ b/test/behavior/packed-struct.zig @@ -785,7 +785,6 @@ test "nested packed struct field access test" { test "nested packed struct at non-zero offset" { if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const Pair = packed struct(u24) { a: u16 = 0, diff --git a/test/behavior/reflection.zig b/test/behavior/reflection.zig index f07b5a512e..aea84bc45a 100644 --- a/test/behavior/reflection.zig +++ b/test/behavior/reflection.zig @@ -28,7 +28,6 @@ fn dummy(a: bool, b: i32, c: f32) i32 { test "reflection: @field" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; var f = Foo{ .one = 42, diff --git a/test/behavior/sizeof_and_typeof.zig b/test/behavior/sizeof_and_typeof.zig index b6206df491..5d29e709b6 100644 --- a/test/behavior/sizeof_and_typeof.zig +++ b/test/behavior/sizeof_and_typeof.zig @@ -19,6 +19,8 @@ test "@sizeOf on compile-time types" { } test "@TypeOf() with multiple arguments" { + if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; + { var var_1: u32 = undefined; var var_2: u8 = undefined; diff --git a/test/behavior/struct.zig b/test/behavior/struct.zig index 520c3ff409..97617a1fd1 100644 --- a/test/behavior/struct.zig +++ b/test/behavior/struct.zig @@ -875,7 +875,6 @@ test "packed struct field passed to generic function" { test "anonymous struct literal syntax" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const S = struct { const Point = struct { @@ -985,7 +984,6 @@ test "struct with union field" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const Value = struct { ref: u32 = 2, @@ -1368,7 +1366,6 @@ test "store to comptime field" { test "struct field init value is size of the struct" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const namespace = struct { const S = extern struct { diff --git a/test/behavior/switch.zig b/test/behavior/switch.zig index 8c5fcda8c2..1275d0f433 100644 --- a/test/behavior/switch.zig +++ b/test/behavior/switch.zig @@ -256,7 +256,6 @@ test "switch on enum using pointer capture" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; try testSwitchEnumPtrCapture(); try comptime testSwitchEnumPtrCapture(); @@ -693,7 +692,6 @@ test "switch capture copies its payload" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const S = struct { fn doTheTest() !void { diff --git a/test/behavior/this.zig b/test/behavior/this.zig index 3638168a4f..3f8fe13316 100644 --- a/test/behavior/this.zig +++ b/test/behavior/this.zig @@ -27,7 +27,6 @@ test "this refer to module call private fn" { test "this refer to container" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; var pt: Point(i32) = undefined; pt.x = 12; diff --git a/test/behavior/tuple.zig b/test/behavior/tuple.zig index 142768454d..5cab5e9375 100644 --- a/test/behavior/tuple.zig +++ b/test/behavior/tuple.zig @@ -131,7 +131,6 @@ test "tuple initializer for var" { test "array-like initializer for tuple types" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const T = @Type(.{ .Struct = .{ diff --git a/test/behavior/type.zig b/test/behavior/type.zig index 1a36f576f1..ba29640774 100644 --- a/test/behavior/type.zig +++ b/test/behavior/type.zig @@ -383,7 +383,6 @@ test "Type.Union" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const Untagged = @Type(.{ .Union = .{ diff --git a/test/behavior/union.zig b/test/behavior/union.zig index d2009f57df..413362caba 100644 --- a/test/behavior/union.zig +++ b/test/behavior/union.zig @@ -43,7 +43,6 @@ test "basic unions" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; var foo = Foo{ .int = 1 }; try expect(foo.int == 1); @@ -276,7 +275,6 @@ test "comparison between union and enum literal" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; try testComparison(); try comptime testComparison(); @@ -292,7 +290,6 @@ test "cast union to tag type of union" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; try testCastUnionToTag(); try comptime testCastUnionToTag(); @@ -314,7 +311,6 @@ test "cast tag type of union to union" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; var x: Value2 = Letter2.B; _ = &x; @@ -331,7 +327,6 @@ test "implicit cast union to its tag type" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; var x: Value2 = Letter2.B; _ = &x; @@ -353,7 +348,6 @@ test "constant packed union" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; try testConstPackedUnion(&[_]PackThis{PackThis{ .StringLiteral = 1 }}); } @@ -503,7 +497,6 @@ test "initialize global array of union" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; glbl_array[1] = FooUnion{ .U1 = 2 }; glbl_array[0] = FooUnion{ .U0 = 1 }; @@ -515,7 +508,6 @@ test "update the tag value for zero-sized unions" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const S = union(enum) { U0: void, @@ -636,7 +628,6 @@ test "tagged union with all void fields but a meaningful tag" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const S = struct { const B = union(enum) { @@ -758,7 +749,6 @@ test "@intFromEnum works on unions" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const Bar = union(enum) { A: bool, @@ -874,7 +864,6 @@ test "@unionInit can modify a union type" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const UnionInitEnum = union(enum) { Boolean: bool, @@ -898,7 +887,6 @@ test "@unionInit can modify a pointer value" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const UnionInitEnum = union(enum) { Boolean: bool, @@ -1089,7 +1077,6 @@ test "switching on non exhaustive union" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const S = struct { const E = enum(u8) { @@ -1199,7 +1186,6 @@ test "global variable struct contains union initialized to non-most-aligned fiel if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const T = struct { const U = union(enum) { @@ -1352,7 +1338,6 @@ test "noreturn field in union" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const U = union(enum) { a: u32, @@ -1434,7 +1419,6 @@ test "union field ptr - zero sized payload" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const U = union { foo: void, @@ -1449,7 +1433,6 @@ test "union field ptr - zero sized field" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const U = union { foo: void, @@ -1589,7 +1572,6 @@ test "reinterpreting enum value inside packed union" { test "access the tag of a global tagged union" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const U = union(enum) { a, @@ -1601,7 +1583,6 @@ test "access the tag of a global tagged union" { test "coerce enum literal to union in result loc" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const U = union(enum) { a, @@ -1864,7 +1845,6 @@ test "reinterpret extern union" { test "reinterpret packed union" { if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const U = packed union { foo: u8, @@ -2044,7 +2024,6 @@ test "extern union initialized via reintepreted struct field initializer" { test "packed union initialized via reintepreted struct field initializer" { if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const bytes = [_]u8{ 0xaa, 0xbb, 0xcc, 0xdd }; @@ -2065,7 +2044,6 @@ test "packed union initialized via reintepreted struct field initializer" { test "store of comptime reinterpreted memory to extern union" { if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const bytes = [_]u8{ 0xaa, 0xbb, 0xcc, 0xdd }; @@ -2088,7 +2066,6 @@ test "store of comptime reinterpreted memory to extern union" { test "store of comptime reinterpreted memory to packed union" { if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const bytes = [_]u8{ 0xaa, 0xbb, 0xcc, 0xdd }; diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig index 5a4da799c2..b97fea1cd7 100644 --- a/test/behavior/vector.zig +++ b/test/behavior/vector.zig @@ -1316,6 +1316,7 @@ test "zero multiplicand" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; const zeros = @Vector(2, u32){ 0.0, 0.0 }; var ones = @Vector(2, u32){ 1.0, 1.0 };