authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-12-27 18:59:59+01:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-12-27 18:59:59+01:00
logaea3460cf5a7f0bf03f09181bd6352ea5818d00e
tree8cdef5054989654ef2253d14793bc594a74d5128
parenta70cbe779adb11faeb88ceffad0cfa729d2eec6e
parent485082064aa3dee6cffec8db9f8146f1cf2aefbc
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #14084 from joachimschmidt557/stage2-aarch64

stage2 AArch64: small improvements

27 files changed, 28 insertions(+), 105 deletions(-)

src/arch/aarch64/CodeGen.zig+18-3
...@@ -4043,9 +4043,24 @@ fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void {...@@ -4043,9 +4043,24 @@ fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void {
40434043
4044fn airFieldParentPtr(self: *Self, inst: Air.Inst.Index) !void {4044fn airFieldParentPtr(self: *Self, inst: Air.Inst.Index) !void {
4045 const ty_pl = self.air.instructions.items(.data)[inst].ty_pl;4045 const ty_pl = self.air.instructions.items(.data)[inst].ty_pl;
4046 const extra = self.air.extraData(Air.StructField, ty_pl.payload).data;4046 const extra = self.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
4047 _ = extra;4047 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
4048 return self.fail("TODO implement codegen airFieldParentPtr", .{});4048 const field_ptr = try self.resolveInst(extra.field_ptr);
4049 const struct_ty = self.air.getRefType(ty_pl.ty).childType();
4050 const struct_field_offset = @intCast(u32, struct_ty.structFieldOffset(extra.field_index, self.target.*));
4051 switch (field_ptr) {
4052 .ptr_stack_offset => |off| {
4053 break :result MCValue{ .ptr_stack_offset = off + struct_field_offset };
4054 },
4055 else => {
4056 const lhs_bind: ReadArg.Bind = .{ .mcv = field_ptr };
4057 const rhs_bind: ReadArg.Bind = .{ .mcv = .{ .immediate = struct_field_offset } };
4058
4059 break :result try self.addSub(.sub, lhs_bind, rhs_bind, Type.usize, Type.usize, null);
4060 },
4061 }
4062 };
4063 return self.finishAir(inst, result, .{ extra.field_ptr, .none, .none });
4049}4064}
40504065
4051fn airArg(self: *Self, inst: Air.Inst.Index) !void {4066fn airArg(self: *Self, inst: Air.Inst.Index) !void {
src/arch/aarch64/abi.zig+7-16
...@@ -136,19 +136,10 @@ pub fn getFloatArrayType(ty: Type) ?Type {...@@ -136,19 +136,10 @@ pub fn getFloatArrayType(ty: Type) ?Type {
136 }136 }
137}137}
138138
139const callee_preserved_regs_impl = if (builtin.os.tag.isDarwin()) struct {139pub const callee_preserved_regs = [_]Register{
140 pub const callee_preserved_regs = [_]Register{140 .x19, .x20, .x21, .x22, .x23,
141 .x20, .x21, .x22, .x23,141 .x24, .x25, .x26, .x27, .x28,
142 .x24, .x25, .x26, .x27,
143 .x28,
144 };
145} else struct {
146 pub const callee_preserved_regs = [_]Register{
147 .x19, .x20, .x21, .x22, .x23,
148 .x24, .x25, .x26, .x27, .x28,
149 };
150};142};
151pub const callee_preserved_regs = callee_preserved_regs_impl.callee_preserved_regs;
152143
153pub const c_abi_int_param_regs = [_]Register{ .x0, .x1, .x2, .x3, .x4, .x5, .x6, .x7 };144pub const c_abi_int_param_regs = [_]Register{ .x0, .x1, .x2, .x3, .x4, .x5, .x6, .x7 };
154pub const c_abi_int_return_regs = [_]Register{ .x0, .x1, .x2, .x3, .x4, .x5, .x6, .x7 };145pub const c_abi_int_return_regs = [_]Register{ .x0, .x1, .x2, .x3, .x4, .x5, .x6, .x7 };
...@@ -161,10 +152,10 @@ const RegisterBitSet = RegisterManager.RegisterBitSet;...@@ -161,10 +152,10 @@ const RegisterBitSet = RegisterManager.RegisterBitSet;
161pub const RegisterClass = struct {152pub const RegisterClass = struct {
162 pub const gp: RegisterBitSet = blk: {153 pub const gp: RegisterBitSet = blk: {
163 var set = RegisterBitSet.initEmpty();154 var set = RegisterBitSet.initEmpty();
164 set.setRangeValue(.{155 for (callee_preserved_regs) |reg| {
165 .start = 0,156 const index = RegisterManager.indexOfRegIntoTracked(reg).?;
166 .end = callee_preserved_regs.len,157 set.set(index);
167 }, true);158 }
168 break :blk set;159 break :blk set;
169 };160 };
170};161};
src/arch/aarch64/bits.zig+3-1
...@@ -4,13 +4,15 @@ const DW = std.dwarf;...@@ -4,13 +4,15 @@ const DW = std.dwarf;
4const assert = std.debug.assert;4const assert = std.debug.assert;
5const testing = std.testing;5const testing = std.testing;
66
7/// Disjoint sets of registers. Every register must belong to
8/// exactly one register class.
7pub const RegisterClass = enum {9pub const RegisterClass = enum {
8 general_purpose,10 general_purpose,
9 stack_pointer,11 stack_pointer,
10 floating_point,12 floating_point,
11};13};
1214
13/// General purpose registers in the AArch64 instruction set15/// Registers in the AArch64 instruction set
14pub const Register = enum(u8) {16pub const Register = enum(u8) {
15 // zig fmt: off17 // zig fmt: off
16 // 64-bit general-purpose registers18 // 64-bit general-purpose registers
test/behavior/alignof.zig-1
...@@ -11,7 +11,6 @@ const Foo = struct {...@@ -11,7 +11,6 @@ const Foo = struct {
11};11};
1212
13test "@alignOf(T) before referencing T" {13test "@alignOf(T) before referencing T" {
14 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
15 comptime try expect(@alignOf(Foo) != maxInt(usize));14 comptime try expect(@alignOf(Foo) != maxInt(usize));
16 if (native_arch == .x86_64) {15 if (native_arch == .x86_64) {
17 comptime try expect(@alignOf(Foo) == 4);16 comptime try expect(@alignOf(Foo) == 4);
test/behavior/basic.zig-16
...@@ -113,21 +113,18 @@ fn first4KeysOfHomeRow() []const u8 {...@@ -113,21 +113,18 @@ fn first4KeysOfHomeRow() []const u8 {
113}113}
114114
115test "return string from function" {115test "return string from function" {
116 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
117 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO116 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
118117
119 try expect(mem.eql(u8, first4KeysOfHomeRow(), "aoeu"));118 try expect(mem.eql(u8, first4KeysOfHomeRow(), "aoeu"));
120}119}
121120
122test "hex escape" {121test "hex escape" {
123 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
124 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO122 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
125123
126 try expect(mem.eql(u8, "\x68\x65\x6c\x6c\x6f", "hello"));124 try expect(mem.eql(u8, "\x68\x65\x6c\x6c\x6f", "hello"));
127}125}
128126
129test "multiline string" {127test "multiline string" {
130 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
131 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO128 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
132129
133 const s1 =130 const s1 =
...@@ -140,7 +137,6 @@ test "multiline string" {...@@ -140,7 +137,6 @@ test "multiline string" {
140}137}
141138
142test "multiline string comments at start" {139test "multiline string comments at start" {
143 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
144 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO140 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
145141
146 const s1 =142 const s1 =
...@@ -153,7 +149,6 @@ test "multiline string comments at start" {...@@ -153,7 +149,6 @@ test "multiline string comments at start" {
153}149}
154150
155test "multiline string comments at end" {151test "multiline string comments at end" {
156 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
157 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO152 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
158153
159 const s1 =154 const s1 =
...@@ -166,7 +161,6 @@ test "multiline string comments at end" {...@@ -166,7 +161,6 @@ test "multiline string comments at end" {
166}161}
167162
168test "multiline string comments in middle" {163test "multiline string comments in middle" {
169 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
170 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO164 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
171165
172 const s1 =166 const s1 =
...@@ -179,7 +173,6 @@ test "multiline string comments in middle" {...@@ -179,7 +173,6 @@ test "multiline string comments in middle" {
179}173}
180174
181test "multiline string comments at multiple places" {175test "multiline string comments at multiple places" {
182 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
183 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO176 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
184177
185 const s1 =178 const s1 =
...@@ -198,7 +191,6 @@ test "string concatenation" {...@@ -198,7 +191,6 @@ test "string concatenation" {
198}191}
199192
200test "array mult operator" {193test "array mult operator" {
201 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
202 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO194 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
203195
204 try expect(mem.eql(u8, "ab" ** 5, "ababababab"));196 try expect(mem.eql(u8, "ab" ** 5, "ababababab"));
...@@ -208,7 +200,6 @@ const OpaqueA = opaque {};...@@ -208,7 +200,6 @@ const OpaqueA = opaque {};
208const OpaqueB = opaque {};200const OpaqueB = opaque {};
209201
210test "opaque types" {202test "opaque types" {
211 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
212 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO203 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
213204
214 try expect(*OpaqueA != *OpaqueB);205 try expect(*OpaqueA != *OpaqueB);
...@@ -226,7 +217,6 @@ test "compile time global reinterpret" {...@@ -226,7 +217,6 @@ test "compile time global reinterpret" {
226}217}
227218
228test "cast undefined" {219test "cast undefined" {
229 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
230 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO220 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
231221
232 const array: [100]u8 = undefined;222 const array: [100]u8 = undefined;
...@@ -238,7 +228,6 @@ fn testCastUndefined(x: []const u8) void {...@@ -238,7 +228,6 @@ fn testCastUndefined(x: []const u8) void {
238}228}
239229
240test "implicit cast after unreachable" {230test "implicit cast after unreachable" {
241 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
242 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;231 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
243 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO232 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
244233
...@@ -297,7 +286,6 @@ fn fB() []const u8 {...@@ -297,7 +286,6 @@ fn fB() []const u8 {
297}286}
298287
299test "call function pointer in struct" {288test "call function pointer in struct" {
300 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
301 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO289 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
302290
303 try expect(mem.eql(u8, f3(true), "a"));291 try expect(mem.eql(u8, f3(true), "a"));
...@@ -459,7 +447,6 @@ fn testArray2DConstDoublePtr(ptr: *const f32) !void {...@@ -459,7 +447,6 @@ fn testArray2DConstDoublePtr(ptr: *const f32) !void {
459}447}
460448
461test "double implicit cast in same expression" {449test "double implicit cast in same expression" {
462 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
463 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO450 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
464451
465 var x = @as(i32, @as(u16, nine()));452 var x = @as(i32, @as(u16, nine()));
...@@ -492,7 +479,6 @@ fn testStructInFn() !void {...@@ -492,7 +479,6 @@ fn testStructInFn() !void {
492}479}
493480
494test "fn call returning scalar optional in equality expression" {481test "fn call returning scalar optional in equality expression" {
495 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
496 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO482 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
497 try expect(getNull() == null);483 try expect(getNull() == null);
498}484}
...@@ -502,7 +488,6 @@ fn getNull() ?*i32 {...@@ -502,7 +488,6 @@ fn getNull() ?*i32 {
502}488}
503489
504test "global variable assignment with optional unwrapping with var initialized to undefined" {490test "global variable assignment with optional unwrapping with var initialized to undefined" {
505 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
506 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;491 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
507 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO492 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
508493
...@@ -628,7 +613,6 @@ var gdt = [_]GDTEntry{...@@ -628,7 +613,6 @@ var gdt = [_]GDTEntry{
628var global_ptr = &gdt[0];613var global_ptr = &gdt[0];
629614
630test "global constant is loaded with a runtime-known index" {615test "global constant is loaded with a runtime-known index" {
631 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
632 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO616 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
633617
634 const S = struct {618 const S = struct {
test/behavior/bitcast.zig-1
...@@ -239,7 +239,6 @@ test "bitcast packed struct to integer and back" {...@@ -239,7 +239,6 @@ test "bitcast packed struct to integer and back" {
239}239}
240240
241test "implicit cast to error union by returning" {241test "implicit cast to error union by returning" {
242 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
243 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;242 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
244 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO243 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
245244
test/behavior/byval_arg_var.zig-1
...@@ -5,7 +5,6 @@ var result: []const u8 = "wrong";...@@ -5,7 +5,6 @@ var result: []const u8 = "wrong";
55
6test "pass string literal byvalue to a generic var param" {6test "pass string literal byvalue to a generic var param" {
7 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;7 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO8 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
109
11 start();10 start();
test/behavior/call.zig-1
...@@ -107,7 +107,6 @@ test "result location of function call argument through runtime condition and st...@@ -107,7 +107,6 @@ test "result location of function call argument through runtime condition and st
107}107}
108108
109test "function call with 40 arguments" {109test "function call with 40 arguments" {
110 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
111 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO110 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
112111
113 const S = struct {112 const S = struct {
test/behavior/error.zig-13
...@@ -29,7 +29,6 @@ fn shouldBeNotEqual(a: anyerror, b: anyerror) void {...@@ -29,7 +29,6 @@ fn shouldBeNotEqual(a: anyerror, b: anyerror) void {
29}29}
3030
31test "error binary operator" {31test "error binary operator" {
32 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
33 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO32 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
3433
35 const a = errBinaryOperatorG(true) catch 3;34 const a = errBinaryOperatorG(true) catch 3;
...@@ -68,7 +67,6 @@ test "error wrapping" {...@@ -68,7 +67,6 @@ test "error wrapping" {
68}67}
6968
70test "unwrap simple value from error" {69test "unwrap simple value from error" {
71 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
72 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO70 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
7371
74 const i = unwrapSimpleValueFromErrorDo() catch unreachable;72 const i = unwrapSimpleValueFromErrorDo() catch unreachable;
...@@ -128,7 +126,6 @@ test "debug info for optional error set" {...@@ -128,7 +126,6 @@ test "debug info for optional error set" {
128}126}
129127
130test "implicit cast to optional to error union to return result loc" {128test "implicit cast to optional to error union to return result loc" {
131 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
132 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO129 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
133130
134 const S = struct {131 const S = struct {
...@@ -151,7 +148,6 @@ test "implicit cast to optional to error union to return result loc" {...@@ -151,7 +148,6 @@ test "implicit cast to optional to error union to return result loc" {
151148
152test "fn returning empty error set can be passed as fn returning any error" {149test "fn returning empty error set can be passed as fn returning any error" {
153 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO150 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
154 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
155151
156 entry();152 entry();
157 comptime entry();153 comptime entry();
...@@ -159,7 +155,6 @@ test "fn returning empty error set can be passed as fn returning any error" {...@@ -159,7 +155,6 @@ test "fn returning empty error set can be passed as fn returning any error" {
159155
160test "fn returning empty error set can be passed as fn returning any error - pointer" {156test "fn returning empty error set can be passed as fn returning any error - pointer" {
161 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO157 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
162 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
163158
164 entryPtr();159 entryPtr();
165 comptime entryPtr();160 comptime entryPtr();
...@@ -228,7 +223,6 @@ fn testErrorSetType() !void {...@@ -228,7 +223,6 @@ fn testErrorSetType() !void {
228223
229test "explicit error set cast" {224test "explicit error set cast" {
230 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO225 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
231 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
232 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO226 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
233227
234 try testExplicitErrorSetCast(Set1.A);228 try testExplicitErrorSetCast(Set1.A);
...@@ -248,7 +242,6 @@ fn testExplicitErrorSetCast(set1: Set1) !void {...@@ -248,7 +242,6 @@ fn testExplicitErrorSetCast(set1: Set1) !void {
248242
249test "comptime test error for empty error set" {243test "comptime test error for empty error set" {
250 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO244 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
251 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
252 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO245 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
253246
254 try testComptimeTestErrorEmptySet(1234);247 try testComptimeTestErrorEmptySet(1234);
...@@ -266,7 +259,6 @@ fn testComptimeTestErrorEmptySet(x: EmptyErrorSet!i32) !void {...@@ -266,7 +259,6 @@ fn testComptimeTestErrorEmptySet(x: EmptyErrorSet!i32) !void {
266259
267test "comptime err to int of error set with only 1 possible value" {260test "comptime err to int of error set with only 1 possible value" {
268 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO261 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
269 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
270262
271 testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A));263 testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A));
272 comptime testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A));264 comptime testErrToIntWithOnePossibleValue(error.A, @errorToInt(error.A));
...@@ -309,7 +301,6 @@ test "error inference with an empty set" {...@@ -309,7 +301,6 @@ test "error inference with an empty set" {
309}301}
310302
311test "error union peer type resolution" {303test "error union peer type resolution" {
312 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
313 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO304 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
314305
315 try testErrorUnionPeerTypeResolution(1);306 try testErrorUnionPeerTypeResolution(1);
...@@ -341,7 +332,6 @@ fn quux_1() !i32 {...@@ -341,7 +332,6 @@ fn quux_1() !i32 {
341}332}
342333
343test "error: Zero sized error set returned with value payload crash" {334test "error: Zero sized error set returned with value payload crash" {
344 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
345 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO335 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
346336
347 _ = try foo3(0);337 _ = try foo3(0);
...@@ -354,7 +344,6 @@ fn foo3(b: usize) Error!usize {...@@ -354,7 +344,6 @@ fn foo3(b: usize) Error!usize {
354}344}
355345
356test "error: Infer error set from literals" {346test "error: Infer error set from literals" {
357 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
358 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO347 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
359348
360 _ = nullLiteral("n") catch |err| handleErrors(err);349 _ = nullLiteral("n") catch |err| handleErrors(err);
...@@ -501,7 +490,6 @@ test "nested catch" {...@@ -501,7 +490,6 @@ test "nested catch" {
501490
502test "function pointer with return type that is error union with payload which is pointer of parent struct" {491test "function pointer with return type that is error union with payload which is pointer of parent struct" {
503 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO492 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
504 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
505 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO493 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
506494
507 const S = struct {495 const S = struct {
...@@ -632,7 +620,6 @@ test "error set equality" {...@@ -632,7 +620,6 @@ test "error set equality" {
632}620}
633621
634test "inferred error set equality" {622test "inferred error set equality" {
635 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
636 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO623 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
637624
638 const S = struct {625 const S = struct {
test/behavior/field_parent_ptr.zig-2
...@@ -2,7 +2,6 @@ const expect = @import("std").testing.expect;...@@ -2,7 +2,6 @@ const expect = @import("std").testing.expect;
2const builtin = @import("builtin");2const builtin = @import("builtin");
33
4test "@fieldParentPtr non-first field" {4test "@fieldParentPtr non-first field" {
5 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;5 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO6 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8 try testParentFieldPtr(&foo.c);7 try testParentFieldPtr(&foo.c);
...@@ -10,7 +9,6 @@ test "@fieldParentPtr non-first field" {...@@ -10,7 +9,6 @@ test "@fieldParentPtr non-first field" {
10}9}
1110
12test "@fieldParentPtr first field" {11test "@fieldParentPtr first field" {
13 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
14 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;12 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
15 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO13 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
16 try testParentFieldPtrFirst(&foo.a);14 try testParentFieldPtrFirst(&foo.a);
test/behavior/fn.zig-5
...@@ -145,7 +145,6 @@ fn fnWithUnreachable() noreturn {...@@ -145,7 +145,6 @@ fn fnWithUnreachable() noreturn {
145145
146test "extern struct with stdcallcc fn pointer" {146test "extern struct with stdcallcc fn pointer" {
147 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;147 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
148 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
149148
150 const S = extern struct {149 const S = extern struct {
151 ptr: *const fn () callconv(if (builtin.target.cpu.arch == .x86) .Stdcall else .C) i32,150 ptr: *const fn () callconv(if (builtin.target.cpu.arch == .x86) .Stdcall else .C) i32,
...@@ -196,7 +195,6 @@ fn addPointCoords(pt: Point) i32 {...@@ -196,7 +195,6 @@ fn addPointCoords(pt: Point) i32 {
196}195}
197196
198test "pass by non-copying value through var arg" {197test "pass by non-copying value through var arg" {
199 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
200 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO198 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
201199
202 try expect((try addPointCoordsVar(Point{ .x = 1, .y = 2 })) == 3);200 try expect((try addPointCoordsVar(Point{ .x = 1, .y = 2 })) == 3);
...@@ -292,7 +290,6 @@ fn voidFun(a: i32, b: void, c: i32, d: void) !void {...@@ -292,7 +290,6 @@ fn voidFun(a: i32, b: void, c: i32, d: void) !void {
292}290}
293291
294test "call function with empty string" {292test "call function with empty string" {
295 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
296 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO293 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
297294
298 acceptsString("");295 acceptsString("");
...@@ -410,7 +407,6 @@ test "function with inferred error set but returning no error" {...@@ -410,7 +407,6 @@ test "function with inferred error set but returning no error" {
410}407}
411408
412test "import passed byref to function in return type" {409test "import passed byref to function in return type" {
413 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
414 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO410 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
415411
416 const S = struct {412 const S = struct {
...@@ -445,7 +441,6 @@ test "implicit cast function to function ptr" {...@@ -445,7 +441,6 @@ test "implicit cast function to function ptr" {
445441
446test "method call with optional and error union first param" {442test "method call with optional and error union first param" {
447 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO443 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
448 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
449 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO444 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
450445
451 const S = struct {446 const S = struct {
test/behavior/if.zig-1
...@@ -81,7 +81,6 @@ test "const result loc, runtime if cond, else unreachable" {...@@ -81,7 +81,6 @@ test "const result loc, runtime if cond, else unreachable" {
81test "if copies its payload" {81test "if copies its payload" {
82 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;82 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
83 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;83 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
84 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
85 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO84 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8685
87 const S = struct {86 const S = struct {
test/behavior/math.zig-2
...@@ -9,7 +9,6 @@ const mem = std.mem;...@@ -9,7 +9,6 @@ const mem = std.mem;
9const math = std.math;9const math = std.math;
1010
11test "assignment operators" {11test "assignment operators" {
12 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
13 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO12 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
14 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO13 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1514
...@@ -546,7 +545,6 @@ fn negateWrap(comptime T: type, x: T) T {...@@ -546,7 +545,6 @@ fn negateWrap(comptime T: type, x: T) T {
546}545}
547546
548test "unsigned 64-bit division" {547test "unsigned 64-bit division" {
549 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
550 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO548 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
551 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO549 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
552550
test/behavior/merge_error_sets.zig-1
...@@ -12,7 +12,6 @@ fn foo() C!void {...@@ -12,7 +12,6 @@ fn foo() C!void {
12}12}
1313
14test "merge error sets" {14test "merge error sets" {
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
16 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;15 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
17 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO16 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1817
test/behavior/null.zig-4
...@@ -73,7 +73,6 @@ fn foo(x: ?i32) ?bool {...@@ -73,7 +73,6 @@ fn foo(x: ?i32) ?bool {
73test "test null runtime" {73test "test null runtime" {
74 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;74 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
75 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;75 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
76 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
77 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO76 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
7877
79 try testTestNullRuntime(null);78 try testTestNullRuntime(null);
...@@ -85,7 +84,6 @@ fn testTestNullRuntime(x: ?i32) !void {...@@ -85,7 +84,6 @@ fn testTestNullRuntime(x: ?i32) !void {
8584
86test "optional void" {85test "optional void" {
87 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;86 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
88 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
89 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO87 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
9088
91 try optionalVoidImpl();89 try optionalVoidImpl();
...@@ -109,7 +107,6 @@ const Empty = struct {};...@@ -109,7 +107,6 @@ const Empty = struct {};
109107
110test "optional struct{}" {108test "optional struct{}" {
111 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;109 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
112 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
113 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO110 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
114111
115 _ = try optionalEmptyStructImpl();112 _ = try optionalEmptyStructImpl();
...@@ -135,7 +132,6 @@ test "null with default unwrap" {...@@ -135,7 +132,6 @@ test "null with default unwrap" {
135}132}
136133
137test "optional pointer to 0 bit type null value at runtime" {134test "optional pointer to 0 bit type null value at runtime" {
138 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
139 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO135 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
140136
141 const EmptyStruct = struct {};137 const EmptyStruct = struct {};
test/behavior/pointers.zig-2
...@@ -66,7 +66,6 @@ test "initialize const optional C pointer to null" {...@@ -66,7 +66,6 @@ test "initialize const optional C pointer to null" {
66}66}
6767
68test "assigning integer to C pointer" {68test "assigning integer to C pointer" {
69 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
70 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO69 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
7170
72 var x: i32 = 0;71 var x: i32 = 0;
...@@ -193,7 +192,6 @@ test "allowzero pointer and slice" {...@@ -193,7 +192,6 @@ test "allowzero pointer and slice" {
193 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO192 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
194 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;193 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
195 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;194 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
196 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
197 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO195 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
198196
199 var ptr = @intToPtr([*]allowzero i32, 0);197 var ptr = @intToPtr([*]allowzero i32, 0);
test/behavior/ptrcast.zig-5
...@@ -4,8 +4,6 @@ const expect = std.testing.expect;...@@ -4,8 +4,6 @@ const expect = std.testing.expect;
4const native_endian = builtin.target.cpu.arch.endian();4const native_endian = builtin.target.cpu.arch.endian();
55
6test "reinterpret bytes as integer with nonzero offset" {6test "reinterpret bytes as integer with nonzero offset" {
7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
8
9 try testReinterpretBytesAsInteger();7 try testReinterpretBytesAsInteger();
10 comptime try testReinterpretBytesAsInteger();8 comptime try testReinterpretBytesAsInteger();
11}9}
...@@ -38,7 +36,6 @@ fn testReinterpretWithOffsetAndNoWellDefinedLayout() !void {...@@ -38,7 +36,6 @@ fn testReinterpretWithOffsetAndNoWellDefinedLayout() !void {
38}36}
3937
40test "reinterpret bytes inside auto-layout struct as integer with nonzero offset" {38test "reinterpret bytes inside auto-layout struct as integer with nonzero offset" {
41 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
42 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO39 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
4340
44 try testReinterpretStructWrappedBytesAsInteger();41 try testReinterpretStructWrappedBytesAsInteger();
...@@ -173,7 +170,6 @@ test "lower reinterpreted comptime field ptr" {...@@ -173,7 +170,6 @@ test "lower reinterpreted comptime field ptr" {
173}170}
174171
175test "reinterpret struct field at comptime" {172test "reinterpret struct field at comptime" {
176 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
177 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO173 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
178174
179 const numNative = comptime Bytes.init(0x12345678);175 const numNative = comptime Bytes.init(0x12345678);
...@@ -236,7 +232,6 @@ test "ptrcast of const integer has the correct object size" {...@@ -236,7 +232,6 @@ test "ptrcast of const integer has the correct object size" {
236232
237test "implicit optional pointer to optional anyopaque pointer" {233test "implicit optional pointer to optional anyopaque pointer" {
238 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO234 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
239 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
240 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO235 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
241236
242 var buf: [4]u8 = "aoeu".*;237 var buf: [4]u8 = "aoeu".*;
test/behavior/sizeof_and_typeof.zig-1
...@@ -75,7 +75,6 @@ const P = packed struct {...@@ -75,7 +75,6 @@ const P = packed struct {
75};75};
7676
77test "@offsetOf" {77test "@offsetOf" {
78 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
79 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO78 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8079
81 // Packed structs have fixed memory layout80 // Packed structs have fixed memory layout
test/behavior/slice.zig-6
...@@ -28,7 +28,6 @@ comptime {...@@ -28,7 +28,6 @@ comptime {
28}28}
2929
30test "slicing" {30test "slicing" {
31 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
32 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO31 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
3332
34 var array: [20]i32 = undefined;33 var array: [20]i32 = undefined;
...@@ -64,7 +63,6 @@ test "comptime slice of undefined pointer of length 0" {...@@ -64,7 +63,6 @@ test "comptime slice of undefined pointer of length 0" {
64}63}
6564
66test "implicitly cast array of size 0 to slice" {65test "implicitly cast array of size 0 to slice" {
67 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
68 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO66 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
6967
70 var msg = [_]u8{};68 var msg = [_]u8{};
...@@ -121,7 +119,6 @@ test "slice of type" {...@@ -121,7 +119,6 @@ test "slice of type" {
121}119}
122120
123test "generic malloc free" {121test "generic malloc free" {
124 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
125 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;122 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
126 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO123 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
127124
...@@ -233,7 +230,6 @@ fn sliceFromLenToLen(a_slice: []u8, start: usize, end: usize) []u8 {...@@ -233,7 +230,6 @@ fn sliceFromLenToLen(a_slice: []u8, start: usize, end: usize) []u8 {
233}230}
234231
235test "C pointer" {232test "C pointer" {
236 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
237 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO233 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
238234
239 var buf: [*c]const u8 = "kjdhfkjdhfdkjhfkfjhdfkjdhfkdjhfdkjhf";235 var buf: [*c]const u8 = "kjdhfkjdhfdkjhfkfjhdfkjdhfkdjhfdkjhf";
...@@ -288,7 +284,6 @@ test "slice type with custom alignment" {...@@ -288,7 +284,6 @@ test "slice type with custom alignment" {
288}284}
289285
290test "obtaining a null terminated slice" {286test "obtaining a null terminated slice" {
291 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
292 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO287 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
293288
294 // here we have a normal array289 // here we have a normal array
...@@ -590,7 +585,6 @@ test "array mult of slice gives ptr to array" {...@@ -590,7 +585,6 @@ test "array mult of slice gives ptr to array" {
590}585}
591586
592test "slice bounds in comptime concatenation" {587test "slice bounds in comptime concatenation" {
593 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
594 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO588 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
595589
596 const bs = comptime blk: {590 const bs = comptime blk: {
test/behavior/struct.zig-7
...@@ -106,7 +106,6 @@ fn testMutation(foo: *StructFoo) void {...@@ -106,7 +106,6 @@ fn testMutation(foo: *StructFoo) void {
106}106}
107107
108test "struct byval assign" {108test "struct byval assign" {
109 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
110 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO109 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
111110
112 var foo1: StructFoo = undefined;111 var foo1: StructFoo = undefined;
...@@ -140,7 +139,6 @@ fn returnEmptyStructInstance() StructWithNoFields {...@@ -140,7 +139,6 @@ fn returnEmptyStructInstance() StructWithNoFields {
140}139}
141140
142test "fn call of struct field" {141test "fn call of struct field" {
143 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
144 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO142 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
145143
146 const Foo = struct {144 const Foo = struct {
...@@ -323,7 +321,6 @@ const VoidStructFieldsFoo = struct {...@@ -323,7 +321,6 @@ const VoidStructFieldsFoo = struct {
323};321};
324322
325test "return empty struct from fn" {323test "return empty struct from fn" {
326 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
327 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO324 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
328325
329 _ = testReturnEmptyStructFromFn();326 _ = testReturnEmptyStructFromFn();
...@@ -334,7 +331,6 @@ fn testReturnEmptyStructFromFn() EmptyStruct2 {...@@ -334,7 +331,6 @@ fn testReturnEmptyStructFromFn() EmptyStruct2 {
334}331}
335332
336test "pass slice of empty struct to fn" {333test "pass slice of empty struct to fn" {
337 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
338 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO334 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
339335
340 try expect(testPassSliceOfEmptyStructToFn(&[_]EmptyStruct2{EmptyStruct2{}}) == 1);336 try expect(testPassSliceOfEmptyStructToFn(&[_]EmptyStruct2{EmptyStruct2{}}) == 1);
...@@ -369,7 +365,6 @@ const EmptyStruct = struct {...@@ -369,7 +365,6 @@ const EmptyStruct = struct {
369};365};
370366
371test "align 1 field before self referential align 8 field as slice return type" {367test "align 1 field before self referential align 8 field as slice return type" {
372 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
373 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO368 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
374369
375 const result = alloc(Expr);370 const result = alloc(Expr);
...@@ -1094,7 +1089,6 @@ test "packed struct with undefined initializers" {...@@ -1094,7 +1089,6 @@ test "packed struct with undefined initializers" {
10941089
1095test "for loop over pointers to struct, getting field from struct pointer" {1090test "for loop over pointers to struct, getting field from struct pointer" {
1096 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1091 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1097 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1098 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1092 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1099 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1093 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
11001094
...@@ -1236,7 +1230,6 @@ test "initialize struct with empty literal" {...@@ -1236,7 +1230,6 @@ test "initialize struct with empty literal" {
1236}1230}
12371231
1238test "loading a struct pointer perfoms a copy" {1232test "loading a struct pointer perfoms a copy" {
1239 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1240 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1233 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
12411234
1242 const S = struct {1235 const S = struct {
test/behavior/struct_contains_slice_of_itself.zig-1
...@@ -12,7 +12,6 @@ const NodeAligned = struct {...@@ -12,7 +12,6 @@ const NodeAligned = struct {
12};12};
1313
14test "struct contains slice of itself" {14test "struct contains slice of itself" {
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
16 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO15 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1716
18 var other_nodes = [_]Node{17 var other_nodes = [_]Node{
test/behavior/type_info.zig-3
...@@ -284,7 +284,6 @@ fn testUnion() !void {...@@ -284,7 +284,6 @@ fn testUnion() !void {
284}284}
285285
286test "type info: struct info" {286test "type info: struct info" {
287 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
288 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO287 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
289288
290 try testStruct();289 try testStruct();
...@@ -511,7 +510,6 @@ test "type info for async frames" {...@@ -511,7 +510,6 @@ test "type info for async frames" {
511510
512test "Declarations are returned in declaration order" {511test "Declarations are returned in declaration order" {
513 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;512 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
514 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
515 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO513 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
516514
517 const S = struct {515 const S = struct {
...@@ -535,7 +533,6 @@ test "Struct.is_tuple for anon list literal" {...@@ -535,7 +533,6 @@ test "Struct.is_tuple for anon list literal" {
535533
536test "Struct.is_tuple for anon struct literal" {534test "Struct.is_tuple for anon struct literal" {
537 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO535 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
538 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
539 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO536 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
540537
541 const info = @typeInfo(@TypeOf(.{ .a = 0 }));538 const info = @typeInfo(@TypeOf(.{ .a = 0 }));
test/behavior/undefined.zig-2
...@@ -16,7 +16,6 @@ test "init static array to undefined" {...@@ -16,7 +16,6 @@ test "init static array to undefined" {
16 // This test causes `initStaticArray()` to be codegen'd, and the16 // This test causes `initStaticArray()` to be codegen'd, and the
17 // C backend does not yet support returning arrays, so it fails17 // C backend does not yet support returning arrays, so it fails
18 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;18 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
19 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
20 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO19 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2120
22 try expect(static_array[0] == 1);21 try expect(static_array[0] == 1);
...@@ -79,7 +78,6 @@ test "assign undefined to struct with method" {...@@ -79,7 +78,6 @@ test "assign undefined to struct with method" {
79}78}
8079
81test "type name of undefined" {80test "type name of undefined" {
82 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
83 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO81 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8482
85 const x = undefined;83 const x = undefined;
test/behavior/underscore.zig-1
...@@ -7,7 +7,6 @@ test "ignore lval with underscore" {...@@ -7,7 +7,6 @@ test "ignore lval with underscore" {
7}7}
88
9test "ignore lval with underscore (while loop)" {9test "ignore lval with underscore (while loop)" {
10 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO10 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1211
13 while (optionalReturnError()) |_| {12 while (optionalReturnError()) |_| {
test/behavior/union.zig-3
...@@ -413,7 +413,6 @@ test "tagged union with no payloads" {...@@ -413,7 +413,6 @@ test "tagged union with no payloads" {
413}413}
414414
415test "union with only 1 field casted to its enum type" {415test "union with only 1 field casted to its enum type" {
416 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
417 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO416 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
418417
419 const Literal = union(enum) {418 const Literal = union(enum) {
...@@ -563,7 +562,6 @@ const Baz = enum { A, B, C, D };...@@ -563,7 +562,6 @@ const Baz = enum { A, B, C, D };
563562
564test "tagged union type" {563test "tagged union type" {
565 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;564 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
566 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
567 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO565 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
568566
569 const foo1 = TaggedFoo{ .One = 13 };567 const foo1 = TaggedFoo{ .One = 13 };
...@@ -697,7 +695,6 @@ const PartialInstWithPayload = union(enum) {...@@ -697,7 +695,6 @@ const PartialInstWithPayload = union(enum) {
697};695};
698696
699test "union with only 1 field casted to its enum type which has enum value specified" {697test "union with only 1 field casted to its enum type which has enum value specified" {
700 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
701 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO698 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
702699
703 const Literal = union(enum) {700 const Literal = union(enum) {
test/behavior/void.zig-1
...@@ -19,7 +19,6 @@ test "compare void with void compile time known" {...@@ -19,7 +19,6 @@ test "compare void with void compile time known" {
19}19}
2020
21test "iterate over a void slice" {21test "iterate over a void slice" {
22 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
23 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO22 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2423
25 var j: usize = 0;24 var j: usize = 0;
test/behavior/while.zig-5
...@@ -4,7 +4,6 @@ const expect = std.testing.expect;...@@ -4,7 +4,6 @@ const expect = std.testing.expect;
4const assert = std.debug.assert;4const assert = std.debug.assert;
55
6test "while loop" {6test "while loop" {
7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO7 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
98
10 var i: i32 = 0;9 var i: i32 = 0;
...@@ -24,7 +23,6 @@ fn whileLoop2() i32 {...@@ -24,7 +23,6 @@ fn whileLoop2() i32 {
24}23}
2524
26test "static eval while" {25test "static eval while" {
27 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
28 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO26 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2927
30 try expect(static_eval_while_number == 1);28 try expect(static_eval_while_number == 1);
...@@ -108,7 +106,6 @@ fn testBreakOuter() void {...@@ -108,7 +106,6 @@ fn testBreakOuter() void {
108test "while copies its payload" {106test "while copies its payload" {
109 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;107 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
110 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;108 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
111 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
112 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO109 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
113110
114 const S = struct {111 const S = struct {
...@@ -148,7 +145,6 @@ fn runContinueAndBreakTest() !void {...@@ -148,7 +145,6 @@ fn runContinueAndBreakTest() !void {
148test "while with optional as condition" {145test "while with optional as condition" {
149 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;146 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
150 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;147 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
151 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
152 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO148 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
153149
154 numbers_left = 10;150 numbers_left = 10;
...@@ -162,7 +158,6 @@ test "while with optional as condition" {...@@ -162,7 +158,6 @@ test "while with optional as condition" {
162test "while with optional as condition with else" {158test "while with optional as condition with else" {
163 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;159 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
164 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;160 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
165 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
166 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO161 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
167162
168 numbers_left = 10;163 numbers_left = 10;