authorgravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2022-02-14 22:33:01+01:00
committergravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2022-02-14 22:33:01+01:00
log22895f5616c663bb7b8ad9866c29d00bc4bc315c
treed0bec94aacb933d99b54e469317a1160f8c08ffe
parent98c71cc88a2d472dded057a4a6f1d610dad9e491
signature Commit is signed but in an unrecognized format.

stage2 AArch64: Enable behavior testing


28 files changed, 226 insertions(+), 5 deletions(-)

src/arch/aarch64/CodeGen.zig+30-4
......@@ -1029,14 +1029,16 @@ fn binOpRegister(
10291029 if (!rhs_is_register) try self.genSetReg(rhs_ty, rhs_reg, rhs);
10301030
10311031 const mir_tag: Mir.Inst.Tag = switch (tag) {
1032 .add => .add_shifted_register,
1033 .sub => .sub_shifted_register,
1032 .add, .ptr_add => .add_shifted_register,
1033 .sub, .ptr_sub => .sub_shifted_register,
10341034 .xor => .eor_shifted_register,
10351035 else => unreachable,
10361036 };
10371037 const mir_data: Mir.Inst.Data = switch (tag) {
10381038 .add,
10391039 .sub,
1040 .ptr_add,
1041 .ptr_sub,
10401042 => .{ .rrr_imm6_shift = .{
10411043 .rd = dest_reg,
10421044 .rn = lhs_reg,
......@@ -1225,7 +1227,24 @@ fn binOp(
12251227 },
12261228 .ptr_add,
12271229 .ptr_sub,
1228 => return self.fail("TODO ptr_add, ptr_sub", .{}),
1230 => {
1231 switch (lhs_ty.zigTypeTag()) {
1232 .Pointer => {
1233 const ptr_ty = lhs_ty;
1234 const pointee_ty = switch (ptr_ty.ptrSize()) {
1235 .One => ptr_ty.childType().childType(), // ptr to array, so get array element type
1236 else => ptr_ty.childType(),
1237 };
1238
1239 if (pointee_ty.abiSize(self.target.*) > 1) {
1240 return self.fail("TODO ptr_add, ptr_sub with more element sizes", .{});
1241 }
1242
1243 return try self.binOpRegister(tag, maybe_inst, lhs, rhs, lhs_ty, rhs_ty);
1244 },
1245 else => unreachable,
1246 }
1247 },
12291248 else => unreachable,
12301249 }
12311250}
......@@ -1439,7 +1458,14 @@ fn airWrapErrUnionPayload(self: *Self, inst: Air.Inst.Index) !void {
14391458/// E to E!T
14401459fn airWrapErrUnionErr(self: *Self, inst: Air.Inst.Index) !void {
14411460 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
1442 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement wrap errunion error for {}", .{self.target.cpu.arch});
1461 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
1462 const error_union_ty = self.air.getRefType(ty_op.ty);
1463 const payload_ty = error_union_ty.errorUnionPayload();
1464 const mcv = try self.resolveInst(ty_op.operand);
1465 if (!payload_ty.hasRuntimeBits()) break :result mcv;
1466
1467 return self.fail("TODO implement wrap errunion error for non-empty payloads", .{});
1468 };
14431469 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
14441470}
14451471
test/behavior.zig+1-1
......@@ -54,7 +54,7 @@ test {
5454 _ = @import("behavior/decltest.zig");
5555 }
5656
57 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64) {
57 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64 and builtin.zig_backend != .stage2_aarch64) {
5858 // Tests that pass (partly) for stage1, llvm backend, C backend, wasm backend.
5959 _ = @import("behavior/bitcast.zig");
6060 _ = @import("behavior/bugs/624.zig");
test/behavior/align.zig+18
......@@ -27,6 +27,7 @@ test "default alignment allows unspecified in type syntax" {
2727}
2828
2929test "implicitly decreasing pointer alignment" {
30 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3031 const a: u32 align(4) = 3;
3132 const b: u32 align(8) = 4;
3233 try expect(addUnaligned(&a, &b) == 7);
......@@ -37,6 +38,7 @@ fn addUnaligned(a: *align(1) const u32, b: *align(1) const u32) u32 {
3738}
3839
3940test "@alignCast pointers" {
41 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
4042 var x: u32 align(4) = 1;
4143 expectsOnly1(&x);
4244 try expect(x == 2);
......@@ -102,6 +104,7 @@ fn fnWithAlignedStack() i32 {
102104}
103105
104106test "implicitly decreasing slice alignment" {
107 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
105108 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
106109
107110 const a: u32 align(4) = 3;
......@@ -113,6 +116,7 @@ fn addUnalignedSlice(a: []align(1) const u32, b: []align(1) const u32) u32 {
113116}
114117
115118test "specifying alignment allows pointer cast" {
119 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
116120 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
117121
118122 try testBytesAlign(0x33);
......@@ -124,6 +128,7 @@ fn testBytesAlign(b: u8) !void {
124128}
125129
126130test "@alignCast slices" {
131 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
127132 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
128133
129134 var array align(4) = [_]u32{ 1, 1 };
......@@ -139,6 +144,7 @@ fn sliceExpects4(slice: []align(4) u32) void {
139144}
140145
141146test "return error union with 128-bit integer" {
147 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
142148 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
143149
144150 try expect(3 == try give());
......@@ -148,6 +154,7 @@ fn give() anyerror!u128 {
148154}
149155
150156test "page aligned array on stack" {
157 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
151158 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
152159 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
153160 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
......@@ -173,6 +180,7 @@ fn noop1() align(1) void {}
173180fn noop4() align(4) void {}
174181
175182test "function alignment" {
183 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
176184 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
177185 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
178186 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
......@@ -189,6 +197,7 @@ test "function alignment" {
189197}
190198
191199test "implicitly decreasing fn alignment" {
200 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
192201 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
193202 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
194203 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
......@@ -216,6 +225,7 @@ fn alignedBig() align(16) i32 {
216225}
217226
218227test "@alignCast functions" {
228 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
219229 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
220230 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
221231 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
......@@ -239,6 +249,7 @@ fn simple4() align(4) i32 {
239249}
240250
241251test "generic function with align param" {
252 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
242253 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
243254 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
244255 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
......@@ -260,6 +271,7 @@ fn whyWouldYouEverDoThis(comptime align_bytes: u8) align(align_bytes) u8 {
260271}
261272
262273test "runtime known array index has best alignment possible" {
274 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
263275 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
264276 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
265277 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
......@@ -302,6 +314,7 @@ fn testIndex2(ptr: [*]align(4) u8, index: usize, comptime T: type) !void {
302314}
303315
304316test "alignment of function with c calling convention" {
317 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
305318 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
306319
307320 var runtime_nothing = &nothing;
......@@ -318,6 +331,7 @@ const DefaultAligned = struct {
318331};
319332
320333test "read 128-bit field from default aligned struct in stack memory" {
334 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
321335 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
322336 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
323337 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
......@@ -337,6 +351,7 @@ var default_aligned_global = DefaultAligned{
337351};
338352
339353test "read 128-bit field from default aligned struct in global memory" {
354 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
340355 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
341356 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
342357 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
......@@ -348,6 +363,7 @@ test "read 128-bit field from default aligned struct in global memory" {
348363}
349364
350365test "struct field explicit alignment" {
366 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
351367 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
352368 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
353369 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
......@@ -369,6 +385,7 @@ test "struct field explicit alignment" {
369385}
370386
371387test "align(@alignOf(T)) T does not force resolution of T" {
388 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
372389 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
373390 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
374391 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
......@@ -397,6 +414,7 @@ test "align(@alignOf(T)) T does not force resolution of T" {
397414}
398415
399416test "align(N) on functions" {
417 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
400418 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
401419 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
402420 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
test/behavior/alignof.zig+1
......@@ -11,6 +11,7 @@ const Foo = struct {
1111};
1212
1313test "@alignOf(T) before referencing T" {
14 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1415 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1516 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1617 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
test/behavior/array.zig+27
......@@ -6,6 +6,7 @@ const expect = testing.expect;
66const expectEqual = testing.expectEqual;
77
88test "array to slice" {
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
910 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1011
1112 const a: u32 align(4) = 3;
......@@ -20,6 +21,7 @@ test "array to slice" {
2021}
2122
2223test "arrays" {
24 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2325 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
2426
2527 var array: [5]u32 = undefined;
......@@ -46,6 +48,7 @@ fn getArrayLen(a: []const u32) usize {
4648}
4749
4850test "array init with mult" {
51 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
4952 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
5053
5154 const a = 'a';
......@@ -57,6 +60,7 @@ test "array init with mult" {
5760}
5861
5962test "array literal with explicit type" {
63 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6064 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
6165
6266 const hex_mult: [4]u16 = .{ 4096, 256, 16, 1 };
......@@ -86,6 +90,7 @@ const ArrayDotLenConstExpr = struct {
8690const some_array = [_]u8{ 0, 1, 2, 3 };
8791
8892test "array literal with specified size" {
93 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8994 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9095
9196 var array = [2]u8{ 1, 2 };
......@@ -94,6 +99,7 @@ test "array literal with specified size" {
9499}
95100
96101test "array len field" {
102 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
97103 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
98104
99105 var arr = [4]u8{ 0, 0, 0, 0 };
......@@ -105,6 +111,7 @@ test "array len field" {
105111}
106112
107113test "array with sentinels" {
114 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
108115 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
109116
110117 const S = struct {
......@@ -134,6 +141,7 @@ test "array with sentinels" {
134141}
135142
136143test "void arrays" {
144 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
137145 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
138146
139147 var array: [4]void = undefined;
......@@ -144,6 +152,7 @@ test "void arrays" {
144152}
145153
146154test "nested arrays" {
155 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
147156 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
148157
149158 const array_of_strings = [_][]const u8{ "hello", "this", "is", "my", "thing" };
......@@ -157,6 +166,7 @@ test "nested arrays" {
157166}
158167
159168test "implicit comptime in array type size" {
169 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
160170 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
161171
162172 var arr: [plusOne(10)]bool = undefined;
......@@ -168,6 +178,7 @@ fn plusOne(x: u32) u32 {
168178}
169179
170180test "single-item pointer to array indexing and slicing" {
181 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
171182 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
172183
173184 try testSingleItemPtrArrayIndexSlice();
......@@ -193,6 +204,7 @@ fn doSomeMangling(array: *[4]u8) void {
193204}
194205
195206test "implicit cast zero sized array ptr to slice" {
207 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
196208 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
197209
198210 {
......@@ -208,6 +220,7 @@ test "implicit cast zero sized array ptr to slice" {
208220}
209221
210222test "anonymous list literal syntax" {
223 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
211224 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
212225
213226 const S = struct {
......@@ -227,6 +240,7 @@ var s_array: [8]Sub = undefined;
227240const Sub = struct { b: u8 };
228241const Str = struct { a: []Sub };
229242test "set global var array via slice embedded in struct" {
243 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
230244 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
231245 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
232246 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -243,6 +257,7 @@ test "set global var array via slice embedded in struct" {
243257}
244258
245259test "read/write through global variable array of struct fields initialized via array mult" {
260 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
246261 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
247262 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
248263 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -264,6 +279,7 @@ test "read/write through global variable array of struct fields initialized via
264279}
265280
266281test "implicit cast single-item pointer" {
282 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
267283 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
268284 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
269285 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -284,6 +300,7 @@ fn testArrayByValAtComptime(b: [2]u8) u8 {
284300}
285301
286302test "comptime evaluating function that takes array by value" {
303 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
287304 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
288305 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
289306 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -296,6 +313,7 @@ test "comptime evaluating function that takes array by value" {
296313}
297314
298315test "runtime initialize array elem and then implicit cast to slice" {
316 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
299317 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
300318 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
301319 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -306,6 +324,7 @@ test "runtime initialize array elem and then implicit cast to slice" {
306324}
307325
308326test "array literal as argument to function" {
327 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
309328 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
310329 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
311330 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -334,6 +353,7 @@ test "array literal as argument to function" {
334353}
335354
336355test "double nested array to const slice cast in array literal" {
356 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
337357 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
338358 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
339359 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -395,6 +415,7 @@ test "double nested array to const slice cast in array literal" {
395415}
396416
397417test "anonymous literal in array" {
418 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
398419 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
399420 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
400421 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -420,6 +441,7 @@ test "anonymous literal in array" {
420441}
421442
422443test "access the null element of a null terminated array" {
444 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
423445 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
424446 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
425447 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -437,6 +459,7 @@ test "access the null element of a null terminated array" {
437459}
438460
439461test "type deduction for array subscript expression" {
462 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
440463 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
441464 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
442465 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -455,6 +478,7 @@ test "type deduction for array subscript expression" {
455478}
456479
457480test "sentinel element count towards the ABI size calculation" {
481 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
458482 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO
459483 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
460484 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
......@@ -481,6 +505,7 @@ test "sentinel element count towards the ABI size calculation" {
481505}
482506
483507test "zero-sized array with recursive type definition" {
508 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
484509 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO
485510 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
486511 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
......@@ -505,6 +530,7 @@ test "zero-sized array with recursive type definition" {
505530}
506531
507532test "type coercion of anon struct literal to array" {
533 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
508534 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
509535 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
510536 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -540,6 +566,7 @@ test "type coercion of anon struct literal to array" {
540566}
541567
542568test "type coercion of pointer to anon struct literal to pointer to array" {
569 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
543570 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO
544571 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
545572 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
test/behavior/basic.zig+32
......@@ -15,6 +15,7 @@ test "empty function with comments" {
1515}
1616
1717test "truncate" {
18 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1819 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1920
2021 try expect(testTruncate(0x10fd) == 0xfd);
......@@ -25,6 +26,7 @@ fn testTruncate(x: u32) u8 {
2526}
2627
2728test "truncate to non-power-of-two integers" {
29 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2830 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
2931
3032 try testTrunc(u32, u1, 0b10101, 0b1);
......@@ -46,6 +48,7 @@ const g1: i32 = 1233 + 1;
4648var g2: i32 = 0;
4749
4850test "global variables" {
51 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
4952 try expect(g2 == 0);
5053 g2 = g1;
5154 try expect(g2 == 1234);
......@@ -112,6 +115,7 @@ fn first4KeysOfHomeRow() []const u8 {
112115}
113116
114117test "return string from function" {
118 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
115119 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
116120 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
117121
......@@ -119,12 +123,14 @@ test "return string from function" {
119123}
120124
121125test "hex escape" {
126 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
122127 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
123128
124129 try expect(mem.eql(u8, "\x68\x65\x6c\x6c\x6f", "hello"));
125130}
126131
127132test "multiline string" {
133 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
128134 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
129135
130136 const s1 =
......@@ -137,6 +143,7 @@ test "multiline string" {
137143}
138144
139145test "multiline string comments at start" {
146 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
140147 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
141148
142149 const s1 =
......@@ -149,6 +156,7 @@ test "multiline string comments at start" {
149156}
150157
151158test "multiline string comments at end" {
159 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
152160 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
153161
154162 const s1 =
......@@ -161,6 +169,7 @@ test "multiline string comments at end" {
161169}
162170
163171test "multiline string comments in middle" {
172 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
164173 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
165174
166175 const s1 =
......@@ -173,6 +182,7 @@ test "multiline string comments in middle" {
173182}
174183
175184test "multiline string comments at multiple places" {
185 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
176186 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
177187
178188 const s1 =
......@@ -191,6 +201,7 @@ test "string concatenation" {
191201}
192202
193203test "array mult operator" {
204 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
194205 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
195206
196207 try expect(mem.eql(u8, "ab" ** 5, "ababababab"));
......@@ -216,6 +227,7 @@ test "compile time global reinterpret" {
216227}
217228
218229test "cast undefined" {
230 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
219231 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
220232
221233 const array: [100]u8 = undefined;
......@@ -227,6 +239,7 @@ fn testCastUndefined(x: []const u8) void {
227239}
228240
229241test "implicit cast after unreachable" {
242 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
230243 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
231244
232245 try expect(outer() == 1234);
......@@ -284,6 +297,7 @@ fn fB() []const u8 {
284297}
285298
286299test "call function pointer in struct" {
300 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
287301 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
288302 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
289303
......@@ -310,6 +324,7 @@ const FnPtrWrapper = struct {
310324};
311325
312326test "const ptr from var variable" {
327 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
313328 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
314329
315330 var x: u64 = undefined;
......@@ -326,6 +341,7 @@ fn copy(src: *const u64, dst: *u64) void {
326341}
327342
328343test "call result of if else expression" {
344 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
329345 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
330346 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
331347 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
......@@ -339,6 +355,7 @@ fn f2(x: bool) []const u8 {
339355}
340356
341357test "memcpy and memset intrinsics" {
358 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
342359 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
343360 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
344361 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
......@@ -361,6 +378,7 @@ fn testMemcpyMemset() !void {
361378}
362379
363380test "variable is allowed to be a pointer to an opaque type" {
381 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
364382 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
365383 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
366384 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
......@@ -374,6 +392,7 @@ fn hereIsAnOpaqueType(ptr: *OpaqueA) *OpaqueA {
374392}
375393
376394test "take address of parameter" {
395 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
377396 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
378397 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
379398
......@@ -400,6 +419,7 @@ fn testPointerToVoidReturnType2() *const void {
400419}
401420
402421test "array 2D const double ptr" {
422 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
403423 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
404424 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
405425
......@@ -419,6 +439,7 @@ fn testArray2DConstDoublePtr(ptr: *const f32) !void {
419439}
420440
421441test "double implicit cast in same expression" {
442 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
422443 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
423444 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
424445
......@@ -430,6 +451,7 @@ fn nine() u8 {
430451}
431452
432453test "struct inside function" {
454 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
433455 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
434456
435457 try testStructInFn();
......@@ -451,6 +473,7 @@ fn testStructInFn() !void {
451473}
452474
453475test "fn call returning scalar optional in equality expression" {
476 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
454477 try expect(getNull() == null);
455478}
456479
......@@ -459,6 +482,7 @@ fn getNull() ?*i32 {
459482}
460483
461484test "global variable assignment with optional unwrapping with var initialized to undefined" {
485 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
462486 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
463487
464488 const S = struct {
......@@ -476,6 +500,7 @@ test "global variable assignment with optional unwrapping with var initialized t
476500var global_foo: *i32 = undefined;
477501
478502test "peer result location with typed parent, runtime condition, comptime prongs" {
503 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
479504 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
480505 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
481506
......@@ -550,6 +575,7 @@ test "comptime cast fn to ptr" {
550575}
551576
552577test "equality compare fn ptrs" {
578 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
553579 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
554580
555581 var a = &emptyFn;
......@@ -557,6 +583,7 @@ test "equality compare fn ptrs" {
557583}
558584
559585test "self reference through fn ptr field" {
586 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
560587 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
561588 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
562589
......@@ -576,6 +603,7 @@ test "self reference through fn ptr field" {
576603}
577604
578605test "global variable initialized to global variable array element" {
606 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
579607 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
580608 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
581609
......@@ -593,6 +621,7 @@ var gdt = [_]GDTEntry{
593621var global_ptr = &gdt[0];
594622
595623test "global constant is loaded with a runtime-known index" {
624 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
596625 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
597626
598627 const S = struct {
......@@ -610,6 +639,7 @@ test "global constant is loaded with a runtime-known index" {
610639}
611640
612641test "multiline string literal is null terminated" {
642 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
613643 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
614644 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
615645
......@@ -643,6 +673,7 @@ test "explicit cast optional pointers" {
643673}
644674
645675test "pointer comparison" {
676 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
646677 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
647678 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
648679
......@@ -655,6 +686,7 @@ fn ptrEql(a: *const []const u8, b: *const []const u8) bool {
655686}
656687
657688test "string concatenation" {
689 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
658690 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
659691 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
660692
test/behavior/bit_shifting.zig+1
......@@ -61,6 +61,7 @@ fn ShardedTable(comptime Key: type, comptime mask_bit_count: comptime_int, compt
6161}
6262
6363test "sharded table" {
64 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6465 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
6566 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
6667 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
test/behavior/bugs/1381.zig+1
......@@ -12,6 +12,7 @@ const A = union(enum) {
1212};
1313
1414test "union that needs padding bytes inside an array" {
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1516 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1617 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1718 var as = [_]A{
test/behavior/bugs/1486.zig+2
......@@ -1,10 +1,12 @@
11const std = @import("std");
22const expect = std.testing.expect;
3const builtin = @import("builtin");
34
45const ptr = &global;
56var global: usize = 123;
67
78test "constant pointer to global variable causes runtime load" {
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
810 global = 1234;
911 try expect(&global == ptr);
1012 try expect(ptr.* == 1234);
test/behavior/bugs/1735.zig+1
......@@ -42,6 +42,7 @@ const a = struct {
4242};
4343
4444test "initialization" {
45 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
4546 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
4647 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
4748 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
test/behavior/bugs/1741.zig+1
......@@ -2,6 +2,7 @@ const std = @import("std");
22const builtin = @import("builtin");
33
44test "fixed" {
5 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
56 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
67 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
78 const x: f32 align(128) = 12.34;
test/behavior/bugs/2006.zig+1
......@@ -6,6 +6,7 @@ const S = struct {
66 p: *S,
77};
88test "bug 2006" {
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
910 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1011 var a: S = undefined;
1112 a = S{ .p = undefined };
test/behavior/bugs/2578.zig+1
......@@ -12,6 +12,7 @@ fn bar(pointer: ?*anyopaque) void {
1212}
1313
1414test "fixed" {
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1516 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1617 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1718 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
test/behavior/bugs/3007.zig+1
......@@ -19,6 +19,7 @@ fn get_foo() Foo.FooError!*Foo {
1919}
2020
2121test "fixed" {
22 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2223 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2324 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
2425 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
test/behavior/bugs/3112.zig+1
......@@ -12,6 +12,7 @@ fn prev(p: ?State) void {
1212}
1313
1414test "zig test crash" {
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1516 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
1617 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1718 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
test/behavior/bugs/3367.zig+1
......@@ -10,6 +10,7 @@ const Mixin = struct {
1010};
1111
1212test "container member access usingnamespace decls" {
13 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1314 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1415 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1516 var foo = Foo{};
test/behavior/bugs/394.zig+1
......@@ -11,6 +11,7 @@ const expect = @import("std").testing.expect;
1111const builtin = @import("builtin");
1212
1313test "bug 394 fixed" {
14 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1415 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1516 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1617 const x = S{
test/behavior/bugs/656.zig+1
......@@ -11,6 +11,7 @@ const Value = struct {
1111};
1212
1313test "optional if after an if in a switch prong of a switch with 2 prongs in an else" {
14 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1415 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1516 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1617 try foo(false, true);
test/behavior/bugs/7250.zig+1
......@@ -14,6 +14,7 @@ threadlocal var g_uart0 = nrfx_uart_t{
1414};
1515
1616test "reference a global threadlocal variable" {
17 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1718 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1819 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1920 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
test/behavior/cast.zig+36
......@@ -18,6 +18,7 @@ test "integer literal to pointer cast" {
1818}
1919
2020test "peer type resolution: ?T and T" {
21 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2122 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
2223
2324 try expect(peerTypeTAndOptionalT(true, false).? == 0);
......@@ -94,6 +95,7 @@ test "comptime_int @intToFloat" {
9495}
9596
9697test "@floatToInt" {
98 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9799 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
98100 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
99101
......@@ -116,6 +118,7 @@ fn expectFloatToInt(comptime F: type, f: F, comptime I: type, i: I) !void {
116118}
117119
118120test "implicitly cast indirect pointer to maybe-indirect pointer" {
121 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
119122 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
120123
121124 const S = struct {
......@@ -174,6 +177,7 @@ test "@floatCast comptime_int and comptime_float" {
174177}
175178
176179test "coerce undefined to optional" {
180 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
177181 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
178182
179183 try expect(MakeType(void).getNull() == null);
......@@ -193,6 +197,7 @@ fn MakeType(comptime T: type) type {
193197}
194198
195199test "implicit cast from *[N]T to [*c]T" {
200 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
196201 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
197202
198203 var x: [4]u16 = [4]u16{ 0, 1, 2, 3 };
......@@ -205,6 +210,7 @@ test "implicit cast from *[N]T to [*c]T" {
205210}
206211
207212test "*usize to *void" {
213 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
208214 var i = @as(usize, 0);
209215 var v = @ptrCast(*void, &i);
210216 v.* = {};
......@@ -230,6 +236,7 @@ test "@intCast to u0 and use the result" {
230236}
231237
232238test "peer result null and comptime_int" {
239 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
233240 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
234241
235242 const S = struct {
......@@ -253,6 +260,7 @@ test "peer result null and comptime_int" {
253260}
254261
255262test "*const ?[*]const T to [*c]const [*c]const T" {
263 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
256264 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
257265
258266 var array = [_]u8{ 'o', 'k' };
......@@ -264,6 +272,7 @@ test "*const ?[*]const T to [*c]const [*c]const T" {
264272}
265273
266274test "array coersion to undefined at runtime" {
275 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
267276 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
268277
269278 @setRuntimeSafety(true);
......@@ -293,6 +302,7 @@ fn implicitIntLitToOptional() void {
293302}
294303
295304test "return u8 coercing into ?u32 return type" {
305 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
296306 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
297307
298308 const S = struct {
......@@ -313,6 +323,7 @@ test "cast from ?[*]T to ??[*]T" {
313323}
314324
315325test "peer type unsigned int to signed" {
326 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
316327 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
317328 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
318329
......@@ -325,6 +336,7 @@ test "peer type unsigned int to signed" {
325336}
326337
327338test "expected [*c]const u8, found [*:0]const u8" {
339 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
328340 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
329341 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
330342
......@@ -384,6 +396,7 @@ fn castToOptionalTypeError(z: i32) !void {
384396}
385397
386398test "implicitly cast from [0]T to anyerror![]T" {
399 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
387400 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
388401 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
389402 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -455,6 +468,7 @@ fn testCastConstArrayRefToConstSlice() !void {
455468}
456469
457470test "peer type resolution: error and [N]T" {
471 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
458472 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
459473 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
460474
......@@ -689,6 +703,7 @@ test "type coercion related to sentinel-termination" {
689703}
690704
691705test "peer type resolution implicit cast to return type" {
706 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
692707 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
693708 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
694709 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -710,6 +725,7 @@ test "peer type resolution implicit cast to return type" {
710725}
711726
712727test "peer type resolution implicit cast to variable type" {
728 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
713729 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
714730 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
715731 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -806,6 +822,7 @@ test "comptime float casts" {
806822}
807823
808824test "pointer reinterpret const float to int" {
825 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
809826 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
810827 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
811828 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -822,6 +839,7 @@ test "pointer reinterpret const float to int" {
822839}
823840
824841test "implicit cast from [*]T to ?*anyopaque" {
842 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
825843 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
826844 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
827845 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -840,6 +858,7 @@ fn incrementVoidPtrArray(array: ?*anyopaque, len: usize) void {
840858}
841859
842860test "compile time int to ptr of function" {
861 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
843862 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
844863 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) return error.SkipZigTest; // TODO
845864 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
......@@ -857,6 +876,7 @@ fn foobar(func: PFN_void) !void {
857876}
858877
859878test "implicit ptr to *anyopaque" {
879 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
860880 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
861881 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
862882 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -871,6 +891,7 @@ test "implicit ptr to *anyopaque" {
871891}
872892
873893test "return null from fn() anyerror!?&T" {
894 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
874895 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
875896 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
876897
......@@ -887,6 +908,7 @@ fn returnNullLitFromOptionalTypeErrorRef() anyerror!?*A {
887908}
888909
889910test "peer type resolution: [0]u8 and []const u8" {
911 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
890912 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
891913 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
892914 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -907,6 +929,7 @@ fn peerTypeEmptyArrayAndSlice(a: bool, slice: []const u8) []const u8 {
907929}
908930
909931test "implicitly cast from [N]T to ?[]const T" {
932 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
910933 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
911934 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
912935 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -920,6 +943,7 @@ fn castToOptionalSlice() ?[]const u8 {
920943}
921944
922945test "cast u128 to f128 and back" {
946 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
923947 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
924948 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
925949 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -941,6 +965,7 @@ fn cast128Float(x: u128) f128 {
941965}
942966
943967test "implicit cast from *[N]T to ?[*]T" {
968 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
944969 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
945970 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
946971 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -956,6 +981,7 @@ test "implicit cast from *[N]T to ?[*]T" {
956981}
957982
958983test "implicit cast from *T to ?*anyopaque" {
984 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
959985 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
960986 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
961987 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -970,6 +996,7 @@ fn incrementVoidPtrValue(value: ?*anyopaque) void {
970996}
971997
972998test "implicit cast *[0]T to E![]const u8" {
999 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9731000 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
9741001 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
9751002 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -987,6 +1014,7 @@ test "cast from array reference to fn: comptime fn ptr" {
9871014 try expect(@ptrToInt(f) == @ptrToInt(&global_array));
9881015}
9891016test "cast from array reference to fn: runtime fn ptr" {
1017 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9901018 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
9911019 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
9921020 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -996,6 +1024,7 @@ test "cast from array reference to fn: runtime fn ptr" {
9961024}
9971025
9981026test "*const [N]null u8 to ?[]const u8" {
1027 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9991028 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
10001029 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10011030 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -1034,6 +1063,7 @@ test "cast between [*c]T and ?[*:0]T on fn parameter" {
10341063
10351064var global_struct: struct { f0: usize } = undefined;
10361065test "assignment to optional pointer result loc" {
1066 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10371067 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
10381068 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10391069 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -1043,6 +1073,7 @@ test "assignment to optional pointer result loc" {
10431073}
10441074
10451075test "cast between *[N]void and []void" {
1076 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10461077 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10471078 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
10481079
......@@ -1052,6 +1083,7 @@ test "cast between *[N]void and []void" {
10521083}
10531084
10541085test "peer resolve arrays of different size to const slice" {
1086 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10551087 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10561088 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
10571089
......@@ -1065,6 +1097,7 @@ fn boolToStr(b: bool) []const u8 {
10651097}
10661098
10671099test "cast f16 to wider types" {
1100 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10681101 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
10691102 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10701103 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -1083,6 +1116,7 @@ test "cast f16 to wider types" {
10831116}
10841117
10851118test "cast f128 to narrower types" {
1119 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10861120 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
10871121 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10881122 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -1101,6 +1135,7 @@ test "cast f128 to narrower types" {
11011135}
11021136
11031137test "peer type resolution: unreachable, null, slice" {
1138 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11041139 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
11051140 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
11061141 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -1119,6 +1154,7 @@ test "peer type resolution: unreachable, null, slice" {
11191154}
11201155
11211156test "cast i8 fn call peers to i32 result" {
1157 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11221158 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
11231159 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
11241160
test/behavior/fn_delegation.zig+1
......@@ -32,6 +32,7 @@ fn custom(comptime T: type, comptime num: u64) fn (T) u64 {
3232}
3333
3434test "fn delegation" {
35 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3536 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
3637
3738 const foo = Foo{};
test/behavior/ir_block_deps.zig+1
......@@ -18,6 +18,7 @@ fn getErrInt() anyerror!i32 {
1818}
1919
2020test "ir block deps" {
21 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2122 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2223 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
2324
test/behavior/optional.zig+10
......@@ -5,6 +5,7 @@ const expect = testing.expect;
55const expectEqual = testing.expectEqual;
66
77test "passing an optional integer as a parameter" {
8 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
89 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
910 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1011
......@@ -25,6 +26,7 @@ test "passing an optional integer as a parameter" {
2526pub const EmptyStruct = struct {};
2627
2728test "optional pointer to size zero struct" {
29 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2830 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2931 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
3032
......@@ -34,6 +36,7 @@ test "optional pointer to size zero struct" {
3436}
3537
3638test "equality compare optional pointers" {
39 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3740 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
3841 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
3942
......@@ -58,6 +61,7 @@ fn testNullPtrsEql() !void {
5861}
5962
6063test "optional with void type" {
64 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6165 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
6266 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
6367
......@@ -69,6 +73,7 @@ test "optional with void type" {
6973}
7074
7175test "address of unwrap optional" {
76 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7277 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
7378 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
7479
......@@ -89,6 +94,7 @@ test "address of unwrap optional" {
8994}
9095
9196test "nested optional field in struct" {
97 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9298 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
9399 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
94100
......@@ -105,6 +111,7 @@ test "nested optional field in struct" {
105111}
106112
107113test "equality compare optional with non-optional" {
114 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
108115 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
109116 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
110117
......@@ -142,6 +149,7 @@ fn test_cmp_optional_non_optional() !void {
142149}
143150
144151test "unwrap function call with optional pointer return value" {
152 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
145153 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
146154 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
147155
......@@ -163,6 +171,7 @@ test "unwrap function call with optional pointer return value" {
163171}
164172
165173test "nested orelse" {
174 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
166175 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
167176 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
168177
......@@ -189,6 +198,7 @@ test "nested orelse" {
189198}
190199
191200test "self-referential struct through a slice of optional" {
201 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
192202 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
193203 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
194204 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
test/behavior/reflection.zig+1
......@@ -28,6 +28,7 @@ fn dummy(a: bool, b: i32, c: f32) i32 {
2828}
2929
3030test "reflection: @field" {
31 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3132 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
3233 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
3334
test/behavior/slice.zig+14
......@@ -27,6 +27,7 @@ comptime {
2727}
2828
2929test "slicing" {
30 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3031 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
3132 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
3233 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
......@@ -68,6 +69,7 @@ test "comptime slice of undefined pointer of length 0" {
6869}
6970
7071test "implicitly cast array of size 0 to slice" {
72 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7173 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
7274 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7375
......@@ -80,6 +82,7 @@ fn assertLenIsZero(msg: []const u8) !void {
8082}
8183
8284test "access len index of sentinel-terminated slice" {
85 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8386 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
8487
8588 const S = struct {
......@@ -129,6 +132,7 @@ test "slice of type" {
129132}
130133
131134test "generic malloc free" {
135 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
132136 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
133137 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
134138 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
......@@ -187,6 +191,7 @@ test "comptime pointer cast array and then slice" {
187191}
188192
189193test "slicing zero length array" {
194 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
190195 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
191196 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
192197 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
......@@ -202,6 +207,7 @@ test "slicing zero length array" {
202207const x = @intToPtr([*]i32, 0x1000)[0..0x500];
203208const y = x[0x100..];
204209test "compile time slice of pointer to hard coded address" {
210 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
205211 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
206212 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
207213 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
......@@ -215,6 +221,7 @@ test "compile time slice of pointer to hard coded address" {
215221}
216222
217223test "slice string literal has correct type" {
224 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
218225 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
219226 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
220227
......@@ -230,6 +237,7 @@ test "slice string literal has correct type" {
230237}
231238
232239test "result location zero sized array inside struct field implicit cast to slice" {
240 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
233241 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
234242
235243 const E = struct {
......@@ -240,6 +248,7 @@ test "result location zero sized array inside struct field implicit cast to slic
240248}
241249
242250test "runtime safety lets us slice from len..len" {
251 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
243252 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
244253 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
245254
......@@ -252,6 +261,7 @@ fn sliceFromLenToLen(a_slice: []u8, start: usize, end: usize) []u8 {
252261}
253262
254263test "C pointer" {
264 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
255265 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
256266 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
257267
......@@ -262,6 +272,7 @@ test "C pointer" {
262272}
263273
264274test "C pointer slice access" {
275 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
265276 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
266277 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
267278
......@@ -291,6 +302,7 @@ fn sliceSum(comptime q: []const u8) i32 {
291302}
292303
293304test "slice type with custom alignment" {
305 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
294306 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
295307 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
296308
......@@ -305,6 +317,7 @@ test "slice type with custom alignment" {
305317}
306318
307319test "obtaining a null terminated slice" {
320 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
308321 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
309322 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
310323 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
......@@ -350,6 +363,7 @@ test "empty array to slice" {
350363}
351364
352365test "@ptrCast slice to pointer" {
366 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
353367 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
354368 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
355369
test/behavior/struct.zig+28
......@@ -9,6 +9,7 @@ const maxInt = std.math.maxInt;
99top_level_field: i32,
1010
1111test "top level fields" {
12 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1213 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1314
1415 var instance = @This(){
......@@ -42,6 +43,7 @@ const StructWithFields = struct {
4243};
4344
4445test "non-packed struct has fields padded out to the required alignment" {
46 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
4547 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
4648
4749 const foo = StructWithFields{ .a = 5, .b = 1, .c = 10, .d = 2 };
......@@ -65,6 +67,7 @@ const SmallStruct = struct {
6567};
6668
6769test "lower unnamed constants" {
70 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6871 var foo = SmallStruct{ .a = 1, .b = 255 };
6972 try expect(foo.first() == 1);
7073 try expect(foo.second() == 255);
......@@ -83,6 +86,7 @@ const StructFoo = struct {
8386};
8487
8588test "structs" {
89 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8690 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
8791
8892 var foo: StructFoo = undefined;
......@@ -101,6 +105,7 @@ fn testMutation(foo: *StructFoo) void {
101105}
102106
103107test "struct byval assign" {
108 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
104109 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
105110
106111 var foo1: StructFoo = undefined;
......@@ -134,6 +139,7 @@ fn returnEmptyStructInstance() StructWithNoFields {
134139}
135140
136141test "fn call of struct field" {
142 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
137143 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
138144
139145 const Foo = struct {
......@@ -165,12 +171,14 @@ const MemberFnTestFoo = struct {
165171};
166172
167173test "call member function directly" {
174 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
168175 const instance = MemberFnTestFoo{ .x = 1234 };
169176 const result = MemberFnTestFoo.member(instance);
170177 try expect(result == 1234);
171178}
172179
173180test "store member function in variable" {
181 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
174182 const instance = MemberFnTestFoo{ .x = 1234 };
175183 const memberFn = MemberFnTestFoo.member;
176184 const result = memberFn(instance);
......@@ -178,6 +186,7 @@ test "store member function in variable" {
178186}
179187
180188test "member functions" {
189 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
181190 const r = MemberFnRand{ .seed = 1234 };
182191 try expect(r.getSeed() == 1234);
183192}
......@@ -189,6 +198,7 @@ const MemberFnRand = struct {
189198};
190199
191200test "return struct byval from function" {
201 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
192202 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
193203
194204 const bar = makeBar2(1234, 5678);
......@@ -206,6 +216,7 @@ fn makeBar2(x: i32, y: i32) Bar {
206216}
207217
208218test "call method with mutable reference to struct with no fields" {
219 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
209220 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
210221
211222 const S = struct {
......@@ -238,6 +249,7 @@ test "usingnamespace within struct scope" {
238249}
239250
240251test "struct field init with catch" {
252 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
241253 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
242254
243255 const S = struct {
......@@ -296,6 +308,7 @@ const Val = struct {
296308};
297309
298310test "struct point to self" {
311 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
299312 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
300313 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
301314 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -314,6 +327,7 @@ test "struct point to self" {
314327}
315328
316329test "void struct fields" {
330 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
317331 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
318332 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
319333 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -334,6 +348,7 @@ const VoidStructFieldsFoo = struct {
334348};
335349
336350test "return empty struct from fn" {
351 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
337352 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
338353 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
339354 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -347,6 +362,7 @@ fn testReturnEmptyStructFromFn() EmptyStruct2 {
347362}
348363
349364test "pass slice of empty struct to fn" {
365 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
350366 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
351367 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
352368 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -359,6 +375,7 @@ fn testPassSliceOfEmptyStructToFn(slice: []const EmptyStruct2) usize {
359375}
360376
361377test "self-referencing struct via array member" {
378 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
362379 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
363380 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
364381 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -389,6 +406,7 @@ const EmptyStruct = struct {
389406};
390407
391408test "align 1 field before self referential align 8 field as slice return type" {
409 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
392410 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
393411 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
394412 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -413,6 +431,7 @@ const APackedStruct = packed struct {
413431};
414432
415433test "packed struct" {
434 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
416435 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
417436 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
418437 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -438,6 +457,7 @@ const Foo96Bits = packed struct {
438457};
439458
440459test "packed struct 24bits" {
460 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
441461 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
442462 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
443463 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -484,6 +504,7 @@ test "packed struct 24bits" {
484504}
485505
486506test "runtime struct initialization of bitfield" {
507 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
487508 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
488509 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
489510 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -523,6 +544,7 @@ const Bitfields = packed struct {
523544};
524545
525546test "native bit field understands endianness" {
547 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
526548 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
527549 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
528550 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -546,6 +568,7 @@ test "native bit field understands endianness" {
546568}
547569
548570test "implicit cast packed struct field to const ptr" {
571 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
549572 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
550573 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
551574 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -581,6 +604,7 @@ test "zero-bit field in packed struct" {
581604}
582605
583606test "packed struct with non-ABI-aligned field" {
607 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
584608 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
585609 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
586610 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -610,6 +634,7 @@ const bit_field_1 = BitField1{
610634};
611635
612636test "bit field access" {
637 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
613638 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
614639 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
615640 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -642,6 +667,7 @@ fn getC(data: *const BitField1) u2 {
642667}
643668
644669test "default struct initialization fields" {
670 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
645671 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
646672 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
647673 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -907,6 +933,7 @@ test "packed struct field passed to generic function" {
907933}
908934
909935test "anonymous struct literal syntax" {
936 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
910937 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
911938 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
912939 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -1100,6 +1127,7 @@ test "type coercion of pointer to anon struct literal to pointer to struct" {
11001127}
11011128
11021129test "packed struct with undefined initializers" {
1130 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11031131 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
11041132 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
11051133 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
test/behavior/truncate.zig+9
......@@ -3,6 +3,7 @@ const builtin = @import("builtin");
33const expect = std.testing.expect;
44
55test "truncate u0 to larger integer allowed and has comptime known result" {
6 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
67 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
78
89 var x: u0 = 0;
......@@ -11,6 +12,7 @@ test "truncate u0 to larger integer allowed and has comptime known result" {
1112}
1213
1314test "truncate.u0.literal" {
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1416 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1517
1618 var z = @truncate(u0, 0);
......@@ -18,6 +20,7 @@ test "truncate.u0.literal" {
1820}
1921
2022test "truncate.u0.const" {
23 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2124 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
2225
2326 const c0: usize = 0;
......@@ -26,6 +29,7 @@ test "truncate.u0.const" {
2629}
2730
2831test "truncate.u0.var" {
32 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2933 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
3034
3135 var d: u8 = 2;
......@@ -34,6 +38,7 @@ test "truncate.u0.var" {
3438}
3539
3640test "truncate i0 to larger integer allowed and has comptime known result" {
41 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3742 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
3843
3944 var x: i0 = 0;
......@@ -42,6 +47,7 @@ test "truncate i0 to larger integer allowed and has comptime known result" {
4247}
4348
4449test "truncate.i0.literal" {
50 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
4551 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
4652
4753 var z = @truncate(i0, 0);
......@@ -49,6 +55,7 @@ test "truncate.i0.literal" {
4955}
5056
5157test "truncate.i0.const" {
58 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
5259 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
5360
5461 const c0: isize = 0;
......@@ -57,6 +64,7 @@ test "truncate.i0.const" {
5764}
5865
5966test "truncate.i0.var" {
67 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6068 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
6169
6270 var d: i8 = 2;
......@@ -65,6 +73,7 @@ test "truncate.i0.var" {
6573}
6674
6775test "truncate on comptime integer" {
76 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6877 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
6978
7079 var x = @truncate(u16, 9999);
test/behavior/var_args.zig+3
......@@ -25,6 +25,7 @@ fn readFirstVarArg(args: anytype) void {
2525}
2626
2727test "send void arg to var args" {
28 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2829 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
2930 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
3031 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -84,6 +85,7 @@ fn foo2(args: anytype) bool {
8485}
8586
8687test "array of var args functions" {
88 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8789 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
8890 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
8991 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
......@@ -93,6 +95,7 @@ test "array of var args functions" {
9395}
9496
9597test "pass zero length array to var args param" {
98 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9699 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
97100 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
98101 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO