mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
riscv: truncate airStructFieldVal result
This commit is contained in:
parent
27ceb4ae37
commit
7a02878f4e
23 changed files with 65 additions and 55 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 => {
|
||||
|
|
|
|||
|
|
@ -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)),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 };
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 = .{
|
||||
|
|
|
|||
|
|
@ -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 = .{
|
||||
|
|
|
|||
|
|
@ -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 };
|
||||
|
||||
|
|
|
|||
|
|
@ -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 };
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue