riscv: math progress

This commit is contained in:
David Rubin 2024-04-16 16:39:31 -07:00
parent a615fbc1f8
commit a30af172e8
32 changed files with 73 additions and 191 deletions

View File

@ -11,6 +11,7 @@ const Type = @import("../../type.zig").Type;
const Value = @import("../../Value.zig"); const Value = @import("../../Value.zig");
const link = @import("../../link.zig"); const link = @import("../../link.zig");
const Module = @import("../../Module.zig"); const Module = @import("../../Module.zig");
const Package = @import("../../Package.zig");
const InternPool = @import("../../InternPool.zig"); const InternPool = @import("../../InternPool.zig");
const Compilation = @import("../../Compilation.zig"); const Compilation = @import("../../Compilation.zig");
const ErrorMsg = Module.ErrorMsg; const ErrorMsg = Module.ErrorMsg;
@ -54,6 +55,7 @@ const RegisterView = enum(u1) {
gpa: Allocator, gpa: Allocator,
air: Air, air: Air,
mod: *Package.Module,
liveness: Liveness, liveness: Liveness,
bin_file: *link.File, bin_file: *link.File,
target: *const std.Target, target: *const std.Target,
@ -724,6 +726,7 @@ pub fn generate(
var function = Self{ var function = Self{
.gpa = gpa, .gpa = gpa,
.air = air, .air = air,
.mod = mod,
.liveness = liveness, .liveness = liveness,
.target = target, .target = target,
.bin_file = bin_file, .bin_file = bin_file,
@ -2138,82 +2141,78 @@ fn airAddWithOverflow(self: *Self, inst: Air.Inst.Index) !void {
const lhs_ty = self.typeOf(extra.lhs); const lhs_ty = self.typeOf(extra.lhs);
const rhs_ty = self.typeOf(extra.rhs); const rhs_ty = self.typeOf(extra.rhs);
const add_result_mcv = try self.binOp(.add, lhs, lhs_ty, rhs, rhs_ty);
const add_result_lock = self.register_manager.lockRegAssumeUnused(add_result_mcv.register);
defer self.register_manager.unlockReg(add_result_lock);
const tuple_ty = self.typeOfIndex(inst);
const int_info = lhs_ty.intInfo(zcu); const int_info = lhs_ty.intInfo(zcu);
// TODO: optimization, set this to true. needs the other struct access stuff to support const tuple_ty = self.typeOfIndex(inst);
// accessing registers.
const result_mcv = try self.allocRegOrMem(inst, false); const result_mcv = try self.allocRegOrMem(inst, false);
const offset = result_mcv.load_frame; const offset = result_mcv.load_frame;
try self.genSetStack(
lhs_ty,
.{
.index = offset.index,
.off = offset.off + @as(i32, @intCast(tuple_ty.structFieldOffset(0, zcu))),
},
add_result_mcv,
);
if (int_info.bits >= 8 and math.isPowerOfTwo(int_info.bits)) { if (int_info.bits >= 8 and math.isPowerOfTwo(int_info.bits)) {
if (int_info.signedness == .unsigned) { const add_result = try self.binOp(.add, lhs, lhs_ty, rhs, rhs_ty);
switch (int_info.bits) { const add_result_reg = try self.copyToTmpRegister(lhs_ty, add_result);
1...8 => { const add_result_reg_lock = self.register_manager.lockRegAssumeUnused(add_result_reg);
const max_val = std.math.pow(u16, 2, int_info.bits) - 1; defer self.register_manager.unlockReg(add_result_reg_lock);
const overflow_reg, const overflow_lock = try self.allocReg(); const shift_amount: u6 = @intCast(Type.usize.bitSize(zcu) - int_info.bits);
defer self.register_manager.unlockReg(overflow_lock);
const add_reg, const add_lock = blk: { const shift_reg, const shift_lock = try self.allocReg();
if (add_result_mcv == .register) break :blk .{ add_result_mcv.register, null }; defer self.register_manager.unlockReg(shift_lock);
const add_reg, const add_lock = try self.allocReg();
try self.genSetReg(lhs_ty, add_reg, add_result_mcv);
break :blk .{ add_reg, add_lock };
};
defer if (add_lock) |lock| self.register_manager.unlockReg(lock);
_ = try self.addInst(.{ _ = try self.addInst(.{
.tag = .andi, .tag = .slli,
.ops = .rri, .ops = .rri,
.data = .{ .i_type = .{ .data = .{
.rd = overflow_reg, .i_type = .{
.rs1 = add_reg, .rd = shift_reg,
.imm12 = Immediate.s(max_val), .rs1 = add_result_reg,
} }, .imm12 = Immediate.s(shift_amount),
},
},
}); });
_ = try self.addInst(.{
.tag = if (int_info.signedness == .unsigned) .srli else .srai,
.ops = .rri,
.data = .{
.i_type = .{
.rd = shift_reg,
.rs1 = shift_reg,
.imm12 = Immediate.s(shift_amount),
},
},
});
const add_result_frame: FrameAddr = .{
.index = offset.index,
.off = offset.off + @as(i32, @intCast(tuple_ty.structFieldOffset(0, zcu))),
};
try self.genSetStack(
lhs_ty,
add_result_frame,
add_result,
);
const overflow_mcv = try self.binOp( const overflow_mcv = try self.binOp(
.cmp_neq, .cmp_neq,
.{ .register = overflow_reg }, .{ .register = shift_reg },
lhs_ty, lhs_ty,
.{ .register = add_reg }, .{ .register = add_result_reg },
lhs_ty, lhs_ty,
); );
try self.genSetStack( const overflow_frame: FrameAddr = .{
Type.u1,
.{
.index = offset.index, .index = offset.index,
.off = offset.off + @as(i32, @intCast(tuple_ty.structFieldOffset(1, zcu))), .off = offset.off + @as(i32, @intCast(tuple_ty.structFieldOffset(1, zcu))),
}, };
try self.genSetStack(
Type.u1,
overflow_frame,
overflow_mcv, overflow_mcv,
); );
break :result result_mcv; break :result result_mcv;
},
else => return self.fail("TODO: addWithOverflow check for size {d}", .{int_info.bits}),
}
} else { } else {
return self.fail("TODO: airAddWithOverFlow calculate carry for signed addition", .{}); return self.fail("TODO: less than 8 bit or non-pow 2 addition", .{});
}
} else {
return self.fail("TODO: airAddWithOverflow with < 8 bits or non-pow of 2", .{});
} }
}; };
@ -3500,9 +3499,11 @@ fn genCall(
if (self.bin_file.cast(link.File.Elf)) |elf_file| { if (self.bin_file.cast(link.File.Elf)) |elf_file| {
const sym_index = try elf_file.zigObjectPtr().?.getOrCreateMetadataForDecl(elf_file, func.owner_decl); const sym_index = try elf_file.zigObjectPtr().?.getOrCreateMetadataForDecl(elf_file, func.owner_decl);
const sym = elf_file.symbol(sym_index); const sym = elf_file.symbol(sym_index);
_ = try sym.getOrCreateZigGotEntry(sym_index, elf_file); _ = try sym.getOrCreateZigGotEntry(sym_index, elf_file);
const got_addr = sym.zigGotAddress(elf_file); const got_addr = sym.zigGotAddress(elf_file);
try self.genSetReg(Type.usize, .ra, .{ .memory = got_addr }); try self.genSetReg(Type.usize, .ra, .{ .memory = got_addr });
_ = try self.addInst(.{ _ = try self.addInst(.{
.tag = .jalr, .tag = .jalr,
.ops = .rri, .ops = .rri,

View File

@ -16,6 +16,7 @@ pub const Mnemonic = enum {
andi, andi,
slli, slli,
srli, srli,
srai,
addi, addi,
jalr, jalr,
@ -69,6 +70,7 @@ pub const Mnemonic = enum {
.jalr => .{ .opcode = 0b1100111, .funct3 = 0b000, .funct7 = null }, .jalr => .{ .opcode = 0b1100111, .funct3 = 0b000, .funct7 = null },
.slli => .{ .opcode = 0b0010011, .funct3 = 0b001, .funct7 = null }, .slli => .{ .opcode = 0b0010011, .funct3 = 0b001, .funct7 = null },
.srli => .{ .opcode = 0b0010011, .funct3 = 0b101, .funct7 = null }, .srli => .{ .opcode = 0b0010011, .funct3 = 0b101, .funct7 = null },
.srai => .{ .opcode = 0b0010011, .funct3 = 0b101, .funct7 = null, .offset = 1 << 10 },
.lui => .{ .opcode = 0b0110111, .funct3 = null, .funct7 = null }, .lui => .{ .opcode = 0b0110111, .funct3 = null, .funct7 = null },
@ -123,6 +125,7 @@ pub const InstEnc = enum {
.andi, .andi,
.slli, .slli,
.srli, .srli,
.srai,
=> .I, => .I,
.lui, .lui,
@ -299,7 +302,7 @@ pub const Data = union(InstEnc) {
.I = .{ .I = .{
.rd = ops[0].reg.id(), .rd = ops[0].reg.id(),
.rs1 = ops[1].reg.id(), .rs1 = ops[1].reg.id(),
.imm0_11 = ops[2].imm.asBits(u12), .imm0_11 = ops[2].imm.asBits(u12) + enc.offset,
.opcode = enc.opcode, .opcode = enc.opcode,
.funct3 = enc.funct3.?, .funct3 = enc.funct3.?,
@ -374,6 +377,7 @@ const Enc = struct {
opcode: u7, opcode: u7,
funct3: ?u3, funct3: ?u3,
funct7: ?u7, funct7: ?u7,
offset: u12 = 0,
}; };
fn verifyOps(mnem: Mnemonic, ops: []const Operand) bool { fn verifyOps(mnem: Mnemonic, ops: []const Operand) bool {

View File

@ -53,6 +53,8 @@ pub const Inst = struct {
srli, srli,
/// Immediate Logical Left Shift, uses i_type payload /// Immediate Logical Left Shift, uses i_type payload
slli, slli,
/// Immediate Arithmetic Right Shift, uses i_type payload.
srai,
/// Register Logical Left Shift, uses r_type payload /// Register Logical Left Shift, uses r_type payload
sllw, sllw,
/// Register Logical Right Shit, uses r_type payload /// Register Logical Right Shit, uses r_type payload

View File

@ -44,7 +44,6 @@ test "default alignment allows unspecified in type syntax" {
} }
test "implicitly decreasing pointer alignment" { test "implicitly decreasing pointer alignment" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
const a: u32 align(4) = 3; const a: u32 align(4) = 3;
const b: u32 align(8) = 4; const b: u32 align(8) = 4;
try expect(addUnaligned(&a, &b) == 7); try expect(addUnaligned(&a, &b) == 7);
@ -227,7 +226,6 @@ fn fnWithAlignedStack() i32 {
} }
test "implicitly decreasing slice alignment" { test "implicitly decreasing slice alignment" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO

View File

@ -203,7 +203,6 @@ test "nested arrays of strings" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const array_of_strings = [_][]const u8{ "hello", "this", "is", "my", "thing" }; const array_of_strings = [_][]const u8{ "hello", "this", "is", "my", "thing" };
for (array_of_strings, 0..) |s, i| { for (array_of_strings, 0..) |s, i| {
@ -329,7 +328,6 @@ test "read/write through global variable array of struct fields initialized via
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = struct { const S = struct {
fn doTheTest() !void { fn doTheTest() !void {
@ -738,8 +736,6 @@ test "pointer to array has ptr field" {
} }
test "discarded array init preserves result location" { test "discarded array init preserves result location" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = struct { const S = struct {
fn f(p: *u32) u16 { fn f(p: *u32) u16 {
p.* += 1; p.* += 1;

View File

@ -85,8 +85,6 @@ test "type equality" {
} }
test "pointer dereferencing" { test "pointer dereferencing" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var x = @as(i32, 3); var x = @as(i32, 3);
const y = &x; const y = &x;
@ -138,21 +136,18 @@ fn first4KeysOfHomeRow() []const u8 {
test "return string from function" { test "return string from function" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(mem.eql(u8, first4KeysOfHomeRow(), "aoeu")); try expect(mem.eql(u8, first4KeysOfHomeRow(), "aoeu"));
} }
test "hex escape" { test "hex escape" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(mem.eql(u8, "\x68\x65\x6c\x6c\x6f", "hello")); try expect(mem.eql(u8, "\x68\x65\x6c\x6c\x6f", "hello"));
} }
test "multiline string" { test "multiline string" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const s1 = const s1 =
\\one \\one
@ -165,7 +160,6 @@ test "multiline string" {
test "multiline string comments at start" { test "multiline string comments at start" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const s1 = const s1 =
//\\one //\\one
@ -178,7 +172,6 @@ test "multiline string comments at start" {
test "multiline string comments at end" { test "multiline string comments at end" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const s1 = const s1 =
\\one \\one
@ -191,7 +184,6 @@ test "multiline string comments at end" {
test "multiline string comments in middle" { test "multiline string comments in middle" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const s1 = const s1 =
\\one \\one
@ -204,7 +196,6 @@ test "multiline string comments in middle" {
test "multiline string comments at multiple places" { test "multiline string comments at multiple places" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const s1 = const s1 =
\\one \\one
@ -218,14 +209,11 @@ test "multiline string comments at multiple places" {
} }
test "string concatenation simple" { test "string concatenation simple" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(mem.eql(u8, "OK" ++ " IT " ++ "WORKED", "OK IT WORKED")); try expect(mem.eql(u8, "OK" ++ " IT " ++ "WORKED", "OK IT WORKED"));
} }
test "array mult operator" { test "array mult operator" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(mem.eql(u8, "ab" ** 5, "ababababab")); try expect(mem.eql(u8, "ab" ** 5, "ababababab"));
} }
@ -308,8 +296,6 @@ test "function closes over local const" {
} }
test "volatile load and store" { test "volatile load and store" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var number: i32 = 1234; var number: i32 = 1234;
const ptr = @as(*volatile i32, &number); const ptr = @as(*volatile i32, &number);
ptr.* += 1; ptr.* += 1;
@ -326,7 +312,6 @@ fn fB() []const u8 {
test "call function pointer in struct" { test "call function pointer in struct" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(mem.eql(u8, f3(true), "a")); try expect(mem.eql(u8, f3(true), "a"));
try expect(mem.eql(u8, f3(false), "b")); try expect(mem.eql(u8, f3(false), "b"));
@ -350,7 +335,6 @@ const FnPtrWrapper = struct {
test "const ptr from var variable" { test "const ptr from var variable" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var x: u64 = undefined; var x: u64 = undefined;
var y: u64 = undefined; var y: u64 = undefined;
@ -370,7 +354,6 @@ test "call result of if else expression" {
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(mem.eql(u8, f2(true), "a")); try expect(mem.eql(u8, f2(true), "a"));
try expect(mem.eql(u8, f2(false), "b")); try expect(mem.eql(u8, f2(false), "b"));
@ -479,7 +462,6 @@ fn nine() u8 {
test "struct inside function" { test "struct inside function" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try testStructInFn(); try testStructInFn();
try comptime testStructInFn(); try comptime testStructInFn();
@ -1219,7 +1201,6 @@ test "integer compare" {
test "reference to inferred local variable works as expected" { test "reference to inferred local variable works as expected" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const Crasher = struct { const Crasher = struct {
lets_crash: u64 = 0, lets_crash: u64 = 0,

View File

@ -520,7 +520,6 @@ test "@bitCast of packed struct of bools all false" {
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const P = packed struct { const P = packed struct {
b0: bool, b0: bool,

View File

@ -572,8 +572,6 @@ test "call function pointer in comptime field" {
} }
test "generic function pointer can be called" { test "generic function pointer can be called" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = struct { const S = struct {
var ok = false; var ok = false;
fn foo(x: anytype) void { fn foo(x: anytype) void {

View File

@ -400,7 +400,6 @@ test "cast from ?[*]T to ??[*]T" {
test "peer type unsigned int to signed" { test "peer type unsigned int to signed" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var w: u31 = 5; var w: u31 = 5;
var x: u8 = 7; var x: u8 = 7;
@ -443,7 +442,6 @@ test "peer resolve array and const slice" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try testPeerResolveArrayConstSlice(true); try testPeerResolveArrayConstSlice(true);
try comptime testPeerResolveArrayConstSlice(true); try comptime testPeerResolveArrayConstSlice(true);
@ -535,7 +533,6 @@ fn peerTypeEmptyArrayAndSliceAndError(a: bool, slice: []u8) anyerror![]u8 {
test "implicit cast from *const [N]T to []const T" { test "implicit cast from *const [N]T to []const T" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try testCastConstArrayRefToConstSlice(); try testCastConstArrayRefToConstSlice();
try comptime testCastConstArrayRefToConstSlice(); try comptime testCastConstArrayRefToConstSlice();
@ -718,7 +715,6 @@ test "peer type resolution: error set supersets" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO 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_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const a: error{ One, Two } = undefined; const a: error{ One, Two } = undefined;
const b: error{One} = undefined; const b: error{One} = undefined;
@ -748,7 +744,6 @@ test "peer type resolution: disjoint error sets" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO 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_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const a: error{ One, Two } = undefined; const a: error{ One, Two } = undefined;
const b: error{Three} = undefined; const b: error{Three} = undefined;
@ -813,7 +808,6 @@ test "peer type resolution: error union after non-error" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO 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_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const a: u32 = undefined; const a: u32 = undefined;
const b: error{ One, Two }!u32 = undefined; const b: error{ One, Two }!u32 = undefined;
@ -1393,7 +1387,6 @@ test "cast between *[N]void and []void" {
test "peer resolve arrays of different size to const slice" { test "peer resolve arrays of different size to const slice" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(mem.eql(u8, boolToStr(true), "true")); try expect(mem.eql(u8, boolToStr(true), "true"));
try expect(mem.eql(u8, boolToStr(false), "false")); try expect(mem.eql(u8, boolToStr(false), "false"));

View File

@ -5,7 +5,5 @@ pub fn the_add_function(a: u32, b: u32) u32 {
} }
test the_add_function { test the_add_function {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (the_add_function(1, 2) != 3) unreachable; if (the_add_function(1, 2) != 3) unreachable;
} }

View File

@ -5,8 +5,6 @@ const expectEqual = std.testing.expectEqual;
const expectError = std.testing.expectError; const expectError = std.testing.expectError;
test "break and continue inside loop inside defer expression" { test "break and continue inside loop inside defer expression" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
testBreakContInDefer(10); testBreakContInDefer(10);
comptime testBreakContInDefer(10); comptime testBreakContInDefer(10);
} }
@ -23,8 +21,6 @@ fn testBreakContInDefer(x: usize) void {
} }
test "defer and labeled break" { test "defer and labeled break" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var i = @as(usize, 0); var i = @as(usize, 0);
blk: { blk: {
@ -38,7 +34,6 @@ test "defer and labeled break" {
test "errdefer does not apply to fn inside fn" { test "errdefer does not apply to fn inside fn" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (testNestedFnErrDefer()) |_| @panic("expected error") else |e| try expect(e == error.Bad); if (testNestedFnErrDefer()) |_| @panic("expected error") else |e| try expect(e == error.Bad);
} }

View File

@ -1055,7 +1055,6 @@ test "tag name with assigned enum values" {
test "@tagName on enum literals" { test "@tagName on enum literals" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(mem.eql(u8, @tagName(.FooBar), "FooBar")); try expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
comptime assert(mem.eql(u8, @tagName(.FooBar), "FooBar")); comptime assert(mem.eql(u8, @tagName(.FooBar), "FooBar"));

View File

@ -306,8 +306,6 @@ fn performFn(comptime prefix_char: u8, start_value: i32) i32 {
} }
test "comptime iterate over fn ptr list" { test "comptime iterate over fn ptr list" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(performFn('t', 1) == 6); try expect(performFn('t', 1) == 6);
try expect(performFn('o', 0) == 1); try expect(performFn('o', 0) == 1);
try expect(performFn('w', 99) == 99); try expect(performFn('w', 99) == 99);
@ -413,8 +411,6 @@ var st_init_str_foo = StInitStrFoo{
}; };
test "inline for with same type but different values" { test "inline for with same type but different values" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var res: usize = 0; var res: usize = 0;
inline for ([_]type{ [2]u8, [1]u8, [2]u8 }) |T| { inline for ([_]type{ [2]u8, [1]u8, [2]u8 }) |T| {
var a: T = undefined; var a: T = undefined;
@ -544,7 +540,6 @@ test "runtime 128 bit integer division" {
test "@tagName of @typeInfo" { test "@tagName of @typeInfo" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const str = @tagName(@typeInfo(u8)); const str = @tagName(@typeInfo(u8));
try expect(std.mem.eql(u8, str, "Int")); try expect(std.mem.eql(u8, str, "Int"));
@ -1007,7 +1002,6 @@ test "closure capture type of runtime-known var" {
test "comptime break passing through runtime condition converted to runtime break" { test "comptime break passing through runtime condition converted to runtime break" {
if (builtin.zig_backend == .stage2_sparc64) 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 S = struct {
fn doTheTest() !void { fn doTheTest() !void {
@ -1042,7 +1036,6 @@ test "comptime break to outer loop passing through runtime condition converted t
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO 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_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) 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 S = struct {
fn doTheTest() !void { fn doTheTest() !void {
@ -1266,7 +1259,6 @@ test "pass pointer to field of comptime-only type as a runtime parameter" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = struct { const S = struct {
const Mixed = struct { const Mixed = struct {
@ -1508,7 +1500,6 @@ test "continue nested inline for loop in named block expr" {
test "x and false is comptime-known false" { test "x and false is comptime-known false" {
if (builtin.zig_backend == .stage2_sparc64) 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 T = struct {
var x: u32 = 0; var x: u32 = 0;
@ -1536,7 +1527,6 @@ test "x and false is comptime-known false" {
test "x or true is comptime-known true" { test "x or true is comptime-known true" {
if (builtin.zig_backend == .stage2_sparc64) 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 T = struct {
var x: u32 = 0; var x: u32 = 0;
@ -1598,8 +1588,6 @@ test "comptime function turns function value to function pointer" {
} }
test "container level const and var have unique addresses" { test "container level const and var have unique addresses" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = struct { const S = struct {
x: i32, x: i32,
y: i32, y: i32,

View File

@ -26,7 +26,6 @@ const PackedUnion = packed union {
test "packed struct, enum, union parameters in extern function" { test "packed struct, enum, union parameters in extern function" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
testPackedStuff(&(PackedStruct{ testPackedStuff(&(PackedStruct{
.a = 1, .a = 1,

View File

@ -6,8 +6,6 @@ const expect = testing.expect;
const expectEqual = testing.expectEqual; const expectEqual = testing.expectEqual;
test "params" { test "params" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(testParamsAdd(22, 11) == 33); try expect(testParamsAdd(22, 11) == 33);
} }
fn testParamsAdd(a: i32, b: i32) i32 { fn testParamsAdd(a: i32, b: i32) i32 {
@ -15,8 +13,6 @@ fn testParamsAdd(a: i32, b: i32) i32 {
} }
test "local variables" { test "local variables" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
testLocVars(2); testLocVars(2);
} }
fn testLocVars(b: i32) void { fn testLocVars(b: i32) void {
@ -25,8 +21,6 @@ fn testLocVars(b: i32) void {
} }
test "mutable local variables" { test "mutable local variables" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var zero: i32 = 0; var zero: i32 = 0;
_ = &zero; _ = &zero;
try expect(zero == 0); try expect(zero == 0);
@ -325,7 +319,6 @@ test "function pointers" {
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const fns = [_]*const @TypeOf(fn1){ const fns = [_]*const @TypeOf(fn1){
&fn1, &fn1,
@ -403,8 +396,6 @@ test "function call with anon list literal - 2D" {
} }
test "ability to give comptime types and non comptime types to same parameter" { test "ability to give comptime types and non comptime types to same parameter" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = struct { const S = struct {
fn doTheTest() !void { fn doTheTest() !void {
var x: i32 = 1; var x: i32 = 1;

View File

@ -7,7 +7,6 @@ const mem = std.mem;
test "continue in for loop" { test "continue in for loop" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const array = [_]i32{ 1, 2, 3, 4, 5 }; const array = [_]i32{ 1, 2, 3, 4, 5 };
var sum: i32 = 0; var sum: i32 = 0;
@ -22,8 +21,6 @@ test "continue in for loop" {
} }
test "break from outer for loop" { test "break from outer for loop" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try testBreakOuter(); try testBreakOuter();
try comptime testBreakOuter(); try comptime testBreakOuter();
} }
@ -41,8 +38,6 @@ fn testBreakOuter() !void {
} }
test "continue outer for loop" { test "continue outer for loop" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try testContinueOuter(); try testContinueOuter();
try comptime testContinueOuter(); try comptime testContinueOuter();
} }
@ -263,7 +258,6 @@ test "for loop with else branch" {
test "count over fixed range" { test "count over fixed range" {
if (builtin.zig_backend == .stage2_sparc64) 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_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var sum: usize = 0; var sum: usize = 0;
for (0..6) |i| { for (0..6) |i| {
@ -276,7 +270,6 @@ test "count over fixed range" {
test "two counters" { test "two counters" {
if (builtin.zig_backend == .stage2_sparc64) 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_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var sum: usize = 0; var sum: usize = 0;
for (0..10, 10..20) |i, j| { for (0..10, 10..20) |i, j| {

View File

@ -5,8 +5,6 @@ const expect = testing.expect;
const expectEqual = testing.expectEqual; const expectEqual = testing.expectEqual;
test "one param, explicit comptime" { test "one param, explicit comptime" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var x: usize = 0; var x: usize = 0;
x += checkSize(i32); x += checkSize(i32);
x += checkSize(bool); x += checkSize(bool);
@ -151,8 +149,6 @@ fn GenericDataThing(comptime count: isize) type {
} }
test "use generic param in generic param" { test "use generic param in generic param" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(aGenericFn(i32, 3, 4) == 7); try expect(aGenericFn(i32, 3, 4) == 7);
} }
fn aGenericFn(comptime T: type, comptime a: T, b: T) T { fn aGenericFn(comptime T: type, comptime a: T, b: T) T {
@ -258,7 +254,6 @@ test "generic function instantiation turns into comptime call" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO 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_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) 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 S = struct {
fn doTheTest() !void { fn doTheTest() !void {

View File

@ -50,7 +50,6 @@ test "global loads can affect liveness" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = struct { const S = struct {
const ByRef = struct { const ByRef = struct {

View File

@ -889,7 +889,6 @@ test "runtime init of unnamed packed struct type" {
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var z: u8 = 123; var z: u8 = 123;
_ = &z; _ = &z;

View File

@ -6,8 +6,6 @@ const expect = testing.expect;
const expectError = testing.expectError; const expectError = testing.expectError;
test "dereference pointer" { test "dereference pointer" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try comptime testDerefPtr(); try comptime testDerefPtr();
try testDerefPtr(); try testDerefPtr();
} }
@ -55,7 +53,6 @@ fn PtrOf(comptime T: type) type {
test "implicit cast single item pointer to C pointer and back" { test "implicit cast single item pointer to C pointer and back" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var y: u8 = 11; var y: u8 = 11;
const x: [*c]u8 = &y; const x: [*c]u8 = &y;

View File

@ -176,7 +176,6 @@ test "reinterpret struct field at comptime" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) 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_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const numNative = comptime Bytes.init(0x12345678); const numNative = comptime Bytes.init(0x12345678);
if (native_endian != .little) { if (native_endian != .little) {

View File

@ -144,8 +144,6 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" {
} }
test "@TypeOf() has no runtime side effects" { test "@TypeOf() has no runtime side effects" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = struct { const S = struct {
fn foo(comptime T: type, ptr: *T) T { fn foo(comptime T: type, ptr: *T) T {
ptr.* += 1; ptr.* += 1;
@ -438,8 +436,6 @@ test "Extern function calls, dereferences and field access in @TypeOf" {
} }
test "@sizeOf struct is resolved when used as operand of slicing" { test "@sizeOf struct is resolved when used as operand of slicing" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const dummy = struct {}; const dummy = struct {};
const S = struct { const S = struct {
var buf: [1]u8 = undefined; var buf: [1]u8 = undefined;

View File

@ -176,7 +176,6 @@ test "comptime pointer cast array and then slice" {
test "slicing zero length array" { test "slicing zero length array" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const s1 = ""[0..]; const s1 = ""[0..];
const s2 = ([_]u32{})[0..]; const s2 = ([_]u32{})[0..];
@ -738,7 +737,6 @@ test "array mult of slice gives ptr to array" {
test "slice bounds in comptime concatenation" { test "slice bounds in comptime concatenation" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const bs = comptime blk: { const bs = comptime blk: {
const b = "........1........"; const b = "........1........";

View File

@ -8,7 +8,6 @@ const ptr_tag_name: [*:0]const u8 = tag_name;
test "@tagName() returns a string literal" { test "@tagName() returns a string literal" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try std.testing.expect(*const [13:0]u8 == @TypeOf(tag_name)); try std.testing.expect(*const [13:0]u8 == @TypeOf(tag_name));
try std.testing.expect(std.mem.eql(u8, "TestEnumValue", tag_name)); try std.testing.expect(std.mem.eql(u8, "TestEnumValue", tag_name));
@ -22,7 +21,6 @@ const ptr_error_name: [*:0]const u8 = error_name;
test "@errorName() returns a string literal" { test "@errorName() returns a string literal" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try std.testing.expect(*const [13:0]u8 == @TypeOf(error_name)); try std.testing.expect(*const [13:0]u8 == @TypeOf(error_name));
try std.testing.expect(std.mem.eql(u8, "TestErrorCode", error_name)); try std.testing.expect(std.mem.eql(u8, "TestErrorCode", error_name));

View File

@ -12,7 +12,6 @@ top_level_field: i32,
test "top level fields" { test "top level fields" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var instance = @This(){ var instance = @This(){
.top_level_field = 1234, .top_level_field = 1234,
@ -125,8 +124,6 @@ test "struct byval assign" {
} }
test "call struct static method" { test "call struct static method" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const result = StructWithNoFields.add(3, 4); const result = StructWithNoFields.add(3, 4);
try expect(result == 7); try expect(result == 7);
} }
@ -759,7 +756,6 @@ test "packed struct with u0 field access" {
test "access to global struct fields" { test "access to global struct fields" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
g_foo.bar.value = 42; g_foo.bar.value = 42;
try expect(g_foo.bar.value == 42); try expect(g_foo.bar.value == 42);
@ -2134,7 +2130,6 @@ test "struct field default value is a call" {
test "aggregate initializers should allow initializing comptime fields, verifying equality" { test "aggregate initializers should allow initializing comptime fields, verifying equality" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var x: u32 = 15; var x: u32 = 15;
_ = &x; _ = &x;

View File

@ -21,8 +21,6 @@ fn add(x: i32, y: i32) i32 {
} }
test "this refer to module call private fn" { test "this refer to module call private fn" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try expect(module.add(1, 2) == 3); try expect(module.add(1, 2) == 3);
} }

View File

@ -258,7 +258,6 @@ test "offsetOf anon struct" {
test "initializing tuple with mixed comptime-runtime fields" { test "initializing tuple with mixed comptime-runtime fields" {
if (builtin.zig_backend == .stage2_aarch64) 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_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var x: u32 = 15; var x: u32 = 15;
_ = &x; _ = &x;
@ -271,7 +270,6 @@ test "initializing tuple with mixed comptime-runtime fields" {
test "initializing anon struct with mixed comptime-runtime fields" { test "initializing anon struct with mixed comptime-runtime fields" {
if (builtin.zig_backend == .stage2_aarch64) 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_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var x: u32 = 15; var x: u32 = 15;
_ = &x; _ = &x;

View File

@ -161,7 +161,6 @@ test "type info: error set, error union info, anyerror" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try testErrorSet(); try testErrorSet();
try comptime testErrorSet(); try comptime testErrorSet();
@ -193,7 +192,6 @@ test "type info: error set single value" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const TestSet = error.One; const TestSet = error.One;
@ -207,7 +205,6 @@ test "type info: error set merged" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const TestSet = error{ One, Two } || error{Three}; const TestSet = error{ One, Two } || error{Three};
@ -223,7 +220,6 @@ test "type info: enum info" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try testEnum(); try testEnum();
try comptime testEnum(); try comptime testEnum();
@ -286,7 +282,6 @@ fn testUnion() !void {
test "type info: struct info" { test "type info: struct info" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try testStruct(); try testStruct();
try comptime testStruct(); try comptime testStruct();
@ -535,7 +530,6 @@ test "type info for async frames" {
test "Declarations are returned in declaration order" { test "Declarations are returned in declaration order" {
if (builtin.zig_backend == .stage2_sparc64) 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 S = struct {
pub const a = 1; pub const a = 1;
@ -558,7 +552,6 @@ test "Struct.is_tuple for anon list literal" {
test "Struct.is_tuple for anon struct literal" { test "Struct.is_tuple for anon struct literal" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const info = @typeInfo(@TypeOf(.{ .a = 0 })); const info = @typeInfo(@TypeOf(.{ .a = 0 }));
try expect(!info.Struct.is_tuple); try expect(!info.Struct.is_tuple);

View File

@ -48,7 +48,6 @@ test "assign undefined to struct" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
comptime { comptime {
var foo: Foo = undefined; var foo: Foo = undefined;
@ -66,7 +65,6 @@ test "assign undefined to struct with method" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
comptime { comptime {
var foo: Foo = undefined; var foo: Foo = undefined;
@ -82,7 +80,6 @@ test "assign undefined to struct with method" {
test "type name of undefined" { test "type name of undefined" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const x = undefined; const x = undefined;
try expect(mem.eql(u8, @typeName(@TypeOf(x)), "@TypeOf(undefined)")); try expect(mem.eql(u8, @typeName(@TypeOf(x)), "@TypeOf(undefined)"));

View File

@ -486,7 +486,6 @@ test "global union with single field is correctly initialized" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
glbl = Foo1{ glbl = Foo1{
.f = @typeInfo(Foo1).Union.fields[0].type{ .x = 123 }, .f = @typeInfo(Foo1).Union.fields[0].type{ .x = 123 },
@ -546,7 +545,6 @@ test "union initializer generates padding only if needed" {
test "runtime tag name with single field" { test "runtime tag name with single field" {
if (builtin.zig_backend == .stage2_aarch64) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const U = union(enum) { const U = union(enum) {
A: i32, A: i32,
@ -1467,7 +1465,6 @@ test "packed union in packed struct" {
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = packed struct { const S = packed struct {
nested: packed union { nested: packed union {
@ -1556,7 +1553,6 @@ test "packed union with zero-bit field" {
if (builtin.zig_backend == .stage2_arm) 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_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
const S = packed struct { const S = packed struct {
nested: packed union { nested: packed union {

View File

@ -433,7 +433,6 @@ test "load vector elements via runtime index" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO 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_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) 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 S = struct {
fn doTheTest() !void { fn doTheTest() !void {

View File

@ -5,7 +5,6 @@ const assert = std.debug.assert;
test "while loop" { test "while loop" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var i: i32 = 0; var i: i32 = 0;
while (i < 4) { while (i < 4) {
@ -39,8 +38,6 @@ fn staticWhileLoop2() i32 {
} }
test "while with continue expression" { test "while with continue expression" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var sum: i32 = 0; var sum: i32 = 0;
{ {
var i: i32 = 0; var i: i32 = 0;
@ -53,8 +50,6 @@ test "while with continue expression" {
} }
test "while with else" { test "while with else" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var sum: i32 = 0; var sum: i32 = 0;
var i: i32 = 0; var i: i32 = 0;
var got_else: i32 = 0; var got_else: i32 = 0;
@ -82,8 +77,6 @@ fn getNumberOrNull() ?i32 {
} }
test "continue outer while loop" { test "continue outer while loop" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
testContinueOuter(); testContinueOuter();
comptime testContinueOuter(); comptime testContinueOuter();
} }
@ -131,7 +124,6 @@ test "while copies its payload" {
test "continue and break" { test "continue and break" {
if (builtin.zig_backend == .stage2_aarch64 and builtin.os.tag == .macos) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64 and builtin.os.tag == .macos) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
try runContinueAndBreakTest(); try runContinueAndBreakTest();
try expect(continue_and_break_counter == 8); try expect(continue_and_break_counter == 8);
@ -349,8 +341,6 @@ test "continue inline while loop" {
} }
test "else continue outer while" { test "else continue outer while" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
var i: usize = 0; var i: usize = 0;
while (true) { while (true) {
i += 1; i += 1;