authorgravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2022-03-09 18:26:48+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-09 13:53:20-07:00
log90f08a69aaf8b5d6c36faa92d605afcd5fde0002
tree18a320927655ba151a658a7003693a825dde96f1
parent3ea113e00887638bf8bfb1d00bae5649db7ded35

wasm: Enable passing behavior tests

This also adds some float-related instructions to MIR/Emit

27 files changed, 205 insertions(+), 35 deletions(-)

src/arch/wasm/Emit.zig+28
......@@ -153,6 +153,34 @@ pub fn emitMir(emit: *Emit) InnerError!void {
153153 .i64_shl => try emit.emitTag(tag),
154154 .i64_shr_s => try emit.emitTag(tag),
155155 .i64_shr_u => try emit.emitTag(tag),
156 .f32_abs => try emit.emitTag(tag),
157 .f32_neg => try emit.emitTag(tag),
158 .f32_ceil => try emit.emitTag(tag),
159 .f32_floor => try emit.emitTag(tag),
160 .f32_trunc => try emit.emitTag(tag),
161 .f32_nearest => try emit.emitTag(tag),
162 .f32_sqrt => try emit.emitTag(tag),
163 .f32_add => try emit.emitTag(tag),
164 .f32_sub => try emit.emitTag(tag),
165 .f32_mul => try emit.emitTag(tag),
166 .f32_div => try emit.emitTag(tag),
167 .f32_min => try emit.emitTag(tag),
168 .f32_max => try emit.emitTag(tag),
169 .f32_copysign => try emit.emitTag(tag),
170 .f64_abs => try emit.emitTag(tag),
171 .f64_neg => try emit.emitTag(tag),
172 .f64_ceil => try emit.emitTag(tag),
173 .f64_floor => try emit.emitTag(tag),
174 .f64_trunc => try emit.emitTag(tag),
175 .f64_nearest => try emit.emitTag(tag),
176 .f64_sqrt => try emit.emitTag(tag),
177 .f64_add => try emit.emitTag(tag),
178 .f64_sub => try emit.emitTag(tag),
179 .f64_mul => try emit.emitTag(tag),
180 .f64_div => try emit.emitTag(tag),
181 .f64_min => try emit.emitTag(tag),
182 .f64_max => try emit.emitTag(tag),
183 .f64_copysign => try emit.emitTag(tag),
156184 .i32_wrap_i64 => try emit.emitTag(tag),
157185 .i64_extend_i32_s => try emit.emitTag(tag),
158186 .i64_extend_i32_u => try emit.emitTag(tag),
src/arch/wasm/Mir.zig+56
......@@ -369,6 +369,62 @@ pub const Inst = struct {
369369 /// Uses `tag`
370370 i64_shr_u = 0x88,
371371 /// Uses `tag`
372 f32_abs = 0x8B,
373 /// Uses `tag`
374 f32_neg = 0x8C,
375 /// Uses `tag`
376 f32_ceil = 0x8D,
377 /// Uses `tag`
378 f32_floor = 0x8E,
379 /// Uses `tag`
380 f32_trunc = 0x8F,
381 /// Uses `tag`
382 f32_nearest = 0x90,
383 /// Uses `tag`
384 f32_sqrt = 0x91,
385 /// Uses `tag`
386 f32_add = 0x92,
387 /// Uses `tag`
388 f32_sub = 0x93,
389 /// Uses `tag`
390 f32_mul = 0x94,
391 /// Uses `tag`
392 f32_div = 0x95,
393 /// Uses `tag`
394 f32_min = 0x96,
395 /// Uses `tag`
396 f32_max = 0x97,
397 /// Uses `tag`
398 f32_copysign = 0x98,
399 /// Uses `tag`
400 f64_abs = 0x99,
401 /// Uses `tag`
402 f64_neg = 0x9A,
403 /// Uses `tag`
404 f64_ceil = 0x9B,
405 /// Uses `tag`
406 f64_floor = 0x9C,
407 /// Uses `tag`
408 f64_trunc = 0x9D,
409 /// Uses `tag`
410 f64_nearest = 0x9E,
411 /// Uses `tag`
412 f64_sqrt = 0x9F,
413 /// Uses `tag`
414 f64_add = 0xA0,
415 /// Uses `tag`
416 f64_sub = 0xA1,
417 /// Uses `tag`
418 f64_mul = 0xA2,
419 /// Uses `tag`
420 f64_div = 0xA3,
421 /// Uses `tag`
422 f64_min = 0xA4,
423 /// Uses `tag`
424 f64_max = 0xA5,
425 /// Uses `tag`
426 f64_copysign = 0xA6,
427 /// Uses `tag`
372428 i32_wrap_i64 = 0xA7,
373429 /// Uses `tag`
374430 i32_trunc_f32_s = 0xA8,
test/behavior.zig+21-21
......@@ -18,14 +18,19 @@ test {
1818 _ = @import("behavior/bugs/679.zig");
1919 _ = @import("behavior/bugs/704.zig");
2020 _ = @import("behavior/bugs/718.zig");
21 _ = @import("behavior/bugs/726.zig");
22 _ = @import("behavior/bugs/828.zig");
2123 _ = @import("behavior/bugs/1025.zig");
2224 _ = @import("behavior/bugs/1076.zig");
2325 _ = @import("behavior/bugs/1111.zig");
2426 _ = @import("behavior/bugs/1277.zig");
2527 _ = @import("behavior/bugs/1310.zig");
2628 _ = @import("behavior/bugs/1381.zig");
29 _ = @import("behavior/bugs/1421.zig");
30 _ = @import("behavior/bugs/1442.zig");
2731 _ = @import("behavior/bugs/1486.zig");
2832 _ = @import("behavior/bugs/1500.zig");
33 _ = @import("behavior/bugs/1607.zig");
2934 _ = @import("behavior/bugs/1735.zig");
3035 _ = @import("behavior/bugs/1741.zig");
3136 _ = @import("behavior/bugs/1914.zig");
......@@ -38,25 +43,34 @@ test {
3843 _ = @import("behavior/bugs/3046.zig");
3944 _ = @import("behavior/bugs/3112.zig");
4045 _ = @import("behavior/bugs/3367.zig");
46 _ = @import("behavior/bugs/3384.zig");
4147 _ = @import("behavior/bugs/3586.zig");
48 _ = @import("behavior/bugs/3742.zig");
4249 _ = @import("behavior/bugs/4328.zig");
4350 _ = @import("behavior/bugs/4560.zig");
4451 _ = @import("behavior/bugs/4769_a.zig");
4552 _ = @import("behavior/bugs/4769_b.zig");
4653 _ = @import("behavior/bugs/4954.zig");
54 _ = @import("behavior/bugs/5398.zig");
55 _ = @import("behavior/bugs/5413.zig");
56 _ = @import("behavior/bugs/5474.zig");
57 _ = @import("behavior/bugs/5487.zig");
4758 _ = @import("behavior/bugs/6850.zig");
59 _ = @import("behavior/bugs/7003.zig");
4860 _ = @import("behavior/bugs/7250.zig");
4961 _ = @import("behavior/bugs/11100.zig");
62 _ = @import("behavior/bugs/10970.zig");
5063 _ = @import("behavior/call.zig");
5164 _ = @import("behavior/cast.zig");
5265 _ = @import("behavior/comptime_memory.zig");
5366 _ = @import("behavior/defer.zig");
5467 _ = @import("behavior/enum.zig");
5568 _ = @import("behavior/error.zig");
69 _ = @import("behavior/field_parent_ptr.zig");
5670 _ = @import("behavior/floatop.zig");
57 _ = @import("behavior/fn.zig");
5871 _ = @import("behavior/fn_delegation.zig");
5972 _ = @import("behavior/fn_in_struct_in_comptime.zig");
73 _ = @import("behavior/fn.zig");
6074 _ = @import("behavior/for.zig");
6175 _ = @import("behavior/generics.zig");
6276 _ = @import("behavior/hasdecl.zig");
......@@ -69,6 +83,7 @@ test {
6983 _ = @import("behavior/ir_block_deps.zig");
7084 _ = @import("behavior/math.zig");
7185 _ = @import("behavior/member_func.zig");
86 _ = @import("behavior/merge_error_sets.zig");
7287 _ = @import("behavior/muladd.zig");
7388 _ = @import("behavior/namespace_depends_on_compile_var.zig");
7489 _ = @import("behavior/null.zig");
......@@ -79,10 +94,14 @@ test {
7994 _ = @import("behavior/pub_enum.zig");
8095 _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
8196 _ = @import("behavior/reflection.zig");
82 _ = @import("behavior/slice.zig");
97 _ = @import("behavior/sizeof_and_typeof.zig");
8398 _ = @import("behavior/slice_sentinel_comptime.zig");
99 _ = @import("behavior/slice.zig");
84100 _ = @import("behavior/src.zig");
101 _ = @import("behavior/struct_contains_null_ptr_itself.zig");
85102 _ = @import("behavior/struct.zig");
103 _ = @import("behavior/switch_prong_err_enum.zig");
104 _ = @import("behavior/switch_prong_implicit_cast.zig");
86105 _ = @import("behavior/switch.zig");
87106 _ = @import("behavior/this.zig");
88107 _ = @import("behavior/truncate.zig");
......@@ -113,22 +132,11 @@ test {
113132 {
114133 // Tests that pass for stage1, llvm backend, C backend
115134 _ = @import("behavior/bugs/421.zig");
116 _ = @import("behavior/bugs/726.zig");
117 _ = @import("behavior/bugs/828.zig");
118 _ = @import("behavior/bugs/1421.zig");
119 _ = @import("behavior/bugs/1607.zig");
120 _ = @import("behavior/bugs/3384.zig");
121 _ = @import("behavior/bugs/5398.zig");
122 _ = @import("behavior/bugs/5413.zig");
123 _ = @import("behavior/bugs/5474.zig");
124 _ = @import("behavior/bugs/7003.zig");
125135 _ = @import("behavior/bugs/9584.zig");
126 _ = @import("behavior/bugs/10970.zig");
127136 _ = @import("behavior/cast_int.zig");
128137 _ = @import("behavior/eval.zig");
129138 _ = @import("behavior/export_self_referential_type_info.zig");
130139 _ = @import("behavior/int128.zig");
131 _ = @import("behavior/merge_error_sets.zig");
132140 _ = @import("behavior/translate_c_macros.zig");
133141
134142 if (builtin.zig_backend != .stage2_c) {
......@@ -137,17 +145,9 @@ test {
137145 _ = @import("behavior/maximum_minimum.zig");
138146 _ = @import("behavior/popcount.zig");
139147 _ = @import("behavior/saturating_arithmetic.zig");
140 _ = @import("behavior/sizeof_and_typeof.zig");
141148 _ = @import("behavior/widening.zig");
142 _ = @import("behavior/bugs/1442.zig");
143149 _ = @import("behavior/bugs/2114.zig");
144 _ = @import("behavior/bugs/3742.zig");
145 _ = @import("behavior/bugs/5487.zig");
146 _ = @import("behavior/struct_contains_null_ptr_itself.zig");
147 _ = @import("behavior/switch_prong_err_enum.zig");
148 _ = @import("behavior/switch_prong_implicit_cast.zig");
149150 _ = @import("behavior/union_with_members.zig");
150 _ = @import("behavior/field_parent_ptr.zig");
151151
152152 if (builtin.zig_backend == .stage1) {
153153 // Tests that only pass for the stage1 backend.
test/behavior/align.zig-3
......@@ -158,7 +158,6 @@ fn give() anyerror!u128 {
158158
159159test "page aligned array on stack" {
160160 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
161 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
162161 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
163162 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
164163
......@@ -359,7 +358,6 @@ test "read 128-bit field from default aligned struct in global memory" {
359358test "struct field explicit alignment" {
360359 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
361360 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
362 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
363361 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
364362 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
365363 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
......@@ -411,7 +409,6 @@ test "align(N) on functions" {
411409 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
412410 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
413411 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
414 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
415412 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
416413 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
417414 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
test/behavior/bugs/10970.zig+4
......@@ -4,6 +4,10 @@ fn retOpt() ?u32 {
44 return null;
55}
66test {
7 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
10 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
711 var cond = true;
812 const opt = while (cond) {
913 if (retOpt()) |opt| {
test/behavior/bugs/1421.zig+5
......@@ -1,5 +1,6 @@
11const std = @import("std");
22const expect = std.testing.expect;
3const builtin = @import("builtin");
34
45const S = struct {
56 fn method() std.builtin.Type {
......@@ -8,6 +9,10 @@ const S = struct {
89};
910
1011test "functions with return type required to be comptime are generic" {
12 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
13 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
14 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
15 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1116 const ti = S.method();
1217 try expect(@as(std.builtin.TypeId, ti) == std.builtin.TypeId.Struct);
1318}
test/behavior/bugs/1442.zig+4
......@@ -7,6 +7,10 @@ const Union = union(enum) {
77};
88
99test "const error union field alignment" {
10 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
11 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
12 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
13 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1014 var union_or_err: anyerror!Union = Union{ .Color = 1234 };
1115 try std.testing.expect((union_or_err catch unreachable).Color == 1234);
1216}
test/behavior/bugs/1607.zig+5
......@@ -1,5 +1,6 @@
11const std = @import("std");
22const testing = std.testing;
3const builtin = @import("builtin");
34
45const a = [_]u8{ 1, 2, 3 };
56
......@@ -10,6 +11,10 @@ fn checkAddress(s: []const u8) !void {
1011}
1112
1213test "slices pointing at the same address as global array." {
14 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
16 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
17 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1318 try checkAddress(&a);
1419 comptime try checkAddress(&a);
1520}
test/behavior/bugs/3742.zig+5
......@@ -1,4 +1,5 @@
11const std = @import("std");
2const builtin = @import("builtin");
23
34pub const GET = struct {
45 key: []const u8,
......@@ -34,5 +35,9 @@ pub const ArgSerializer = struct {
3435};
3536
3637test "fixed" {
38 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
39 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
40 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
41 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
3742 ArgSerializer.serializeCommand(GET.init("banana"));
3843}
test/behavior/bugs/5398.zig+5
......@@ -1,5 +1,6 @@
11const std = @import("std");
22const testing = std.testing;
3const builtin = @import("builtin");
34
45pub const Mesh = struct {
56 id: u32,
......@@ -18,6 +19,10 @@ pub const Renderable = struct {
1819var renderable: Renderable = undefined;
1920
2021test "assignment of field with padding" {
22 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
23 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
24 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
25 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
2126 renderable = Renderable{
2227 .mesh = Mesh{ .id = 0 },
2328 .material = Material{
test/behavior/bugs/5474.zig+8
......@@ -49,11 +49,19 @@ fn constant() !void {
4949}
5050
5151test "pointer-to-array constness for zero-size elements, var" {
52 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
53 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
54 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
55 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
5256 try mutable();
5357 comptime try mutable();
5458}
5559
5660test "pointer-to-array constness for zero-size elements, const" {
61 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
62 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
63 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
64 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
5765 try constant();
5866 comptime try constant();
5967}
test/behavior/bugs/5487.zig+5
......@@ -1,4 +1,5 @@
11const io = @import("std").io;
2const builtin = @import("builtin");
23
34pub fn write(_: void, bytes: []const u8) !usize {
45 _ = bytes;
......@@ -9,5 +10,9 @@ pub fn writer() io.Writer(void, @typeInfo(@typeInfo(@TypeOf(write)).Fn.return_ty
910}
1011
1112test "crash" {
13 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
14 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
15 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
16 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1217 _ = io.multiWriter(.{writer()});
1318}
test/behavior/bugs/726.zig+11
......@@ -1,12 +1,23 @@
11const expect = @import("std").testing.expect;
2const builtin = @import("builtin");
23
34test "@ptrCast from const to nullable" {
5 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
6 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
9
410 const c: u8 = 4;
511 var x: ?*const u8 = @ptrCast(?*const u8, &c);
612 try expect(x.?.* == 4);
713}
814
915test "@ptrCast from var in empty struct to nullable" {
16 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
17 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
18 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
19 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
20
1021 const container = struct {
1122 var c: u8 = 4;
1223 };
test/behavior/bugs/828.zig+5
......@@ -1,3 +1,5 @@
1const builtin = @import("builtin");
2
13const CountBy = struct {
24 a: usize,
35
......@@ -28,6 +30,9 @@ fn constCount(comptime cb: *const CountBy, comptime unused: u32) void {
2830}
2931
3032test "comptime struct return should not return the same instance" {
33 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
34 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
35
3136 //the first parameter must be passed by reference to trigger the bug
3237 //a second parameter is required to trigger the bug
3338 const ValA = constCount(&CountBy.One, 12);
test/behavior/enum.zig-1
......@@ -938,7 +938,6 @@ test "constant enum initialization with differing sizes" {
938938 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
939939 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
940940 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
941 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
942941
943942 try test3_1(test3_foo);
944943 try test3_2(test3_bar);
test/behavior/error.zig-3
......@@ -156,7 +156,6 @@ fn bar2() (error{}!void) {}
156156
157157test "error union type " {
158158 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
159 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
160159
161160 try testErrorUnionType();
162161 comptime try testErrorUnionType();
......@@ -199,7 +198,6 @@ fn testErrorSetType() !void {
199198test "explicit error set cast" {
200199 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
201200 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
202 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
203201
204202 try testExplicitErrorSetCast(Set1.A);
205203 comptime try testExplicitErrorSetCast(Set1.A);
......@@ -296,7 +294,6 @@ test "error: Infer error set from literals" {
296294 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
297295 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
298296 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
299 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
300297
301298 _ = nullLiteral("n") catch |err| handleErrors(err);
302299 _ = floatLiteral("n") catch |err| handleErrors(err);
test/behavior/field_parent_ptr.zig+9
......@@ -1,11 +1,20 @@
11const expect = @import("std").testing.expect;
2const builtin = @import("builtin");
23
34test "@fieldParentPtr non-first field" {
5 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
6 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
49 try testParentFieldPtr(&foo.c);
510 comptime try testParentFieldPtr(&foo.c);
611}
712
813test "@fieldParentPtr first field" {
14 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
16 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
17 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
918 try testParentFieldPtrFirst(&foo.a);
1019 comptime try testParentFieldPtrFirst(&foo.a);
1120}
test/behavior/math.zig-1
......@@ -191,7 +191,6 @@ test "const number literal" {
191191const ten = 10;
192192
193193test "float equality" {
194 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
195194 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
196195 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
197196 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
test/behavior/merge_error_sets.zig+5
......@@ -1,3 +1,4 @@
1const builtin = @import("builtin");
12const A = error{
23 FileNotFound,
34 NotDir,
......@@ -11,6 +12,10 @@ fn foo() C!void {
1112}
1213
1314test "merge error sets" {
15 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
16 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
17 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
18 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1419 if (foo()) {
1520 @panic("unexpected");
1621 } else |err| switch (err) {
test/behavior/null.zig-1
......@@ -182,7 +182,6 @@ const here_is_a_null_literal = SillyStruct{ .context = null };
182182
183183test "unwrap optional which is field of global var" {
184184 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
185 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
186185 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
187186 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
188187 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
test/behavior/ptrcast.zig-1
......@@ -43,7 +43,6 @@ fn testReinterpretBytesAsExternStruct() !void {
4343}
4444
4545test "reinterpret struct field at comptime" {
46 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
4746 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
4847 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
4948 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
test/behavior/sizeof_and_typeof.zig+14
......@@ -18,6 +18,10 @@ test "@sizeOf on compile-time types" {
1818}
1919
2020test "@TypeOf() with multiple arguments" {
21 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
22 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
23 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
24 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
2125 {
2226 var var_1: u32 = undefined;
2327 var var_2: u8 = undefined;
......@@ -74,6 +78,8 @@ const P = packed struct {
7478};
7579
7680test "@offsetOf" {
81 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
82 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7783
7884 // Packed structs have fixed memory layout
7985 try expect(@offsetOf(P, "a") == 0);
......@@ -180,6 +186,10 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" {
180186}
181187
182188test "@TypeOf() has no runtime side effects" {
189 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
190 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
191 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
192 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
183193 const S = struct {
184194 fn foo(comptime T: type, ptr: *T) T {
185195 ptr.* += 1;
......@@ -193,6 +203,10 @@ test "@TypeOf() has no runtime side effects" {
193203}
194204
195205test "branching logic inside @TypeOf" {
206 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
207 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
208 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
209 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
196210 const S = struct {
197211 var data: i32 = 0;
198212 fn foo() anyerror!i32 {
test/behavior/struct_contains_null_ptr_itself.zig+5
......@@ -1,7 +1,12 @@
11const std = @import("std");
22const expect = std.testing.expect;
3const builtin = @import("builtin");
34
45test "struct contains null pointer which contains original struct" {
6 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
510 var x: ?*NodeLineComment = null;
611 try expect(x == null);
712}
test/behavior/switch_prong_err_enum.zig+5
......@@ -1,4 +1,5 @@
11const expect = @import("std").testing.expect;
2const builtin = @import("builtin");
23
34var read_count: u64 = 0;
45
......@@ -20,6 +21,10 @@ fn doThing(form_id: u64) anyerror!FormValue {
2021}
2122
2223test "switch prong returns error enum" {
24 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
25 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
26 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
27 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
2328 switch (doThing(17) catch unreachable) {
2429 FormValue.Address => |payload| {
2530 try expect(payload == 1);
test/behavior/switch_prong_implicit_cast.zig+5
......@@ -1,4 +1,5 @@
11const expect = @import("std").testing.expect;
2const builtin = @import("builtin");
23
34const FormValue = union(enum) {
45 One: void,
......@@ -14,6 +15,10 @@ fn foo(id: u64) !FormValue {
1415}
1516
1617test "switch prong implicit cast" {
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_x86_64) return error.SkipZigTest;
21 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1722 const result = switch (foo(2) catch unreachable) {
1823 FormValue.One => false,
1924 FormValue.Two => |x| x,
test/behavior/union.zig-1
......@@ -457,7 +457,6 @@ test "initialize global array of union" {
457457 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
458458 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
459459
460 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
461460 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
462461
463462 glbl_array[1] = FooUnion{ .U1 = 2 };
test/behavior/var_args.zig-3
......@@ -28,7 +28,6 @@ fn readFirstVarArg(args: anytype) void {
2828
2929test "send void arg to var args" {
3030 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
31 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
3231 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
3332 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
3433
......@@ -92,7 +91,6 @@ fn foo2(args: anytype) bool {
9291
9392test "array of var args functions" {
9493 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
95 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
9694 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
9795 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
9896
......@@ -102,7 +100,6 @@ test "array of var args functions" {
102100
103101test "pass zero length array to var args param" {
104102 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
105 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
106103 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
107104 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
108105