authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-02-22 14:15:09+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-02-22 21:57:42+01:00
log25e4b16e25502ca5e76e4049ed9f727168782dde
tree947799ee1d22e621937c95842370cc7aee679412
parenta94267b2906e90aadf397b3f524e1069721fb496

Port more behavior tests


40 files changed, 832 insertions(+), 140 deletions(-)

test/behavior.zig+110-110
......@@ -9,12 +9,16 @@ test {
99 _ = @import("behavior/bitcast.zig");
1010 _ = @import("behavior/bitreverse.zig");
1111 _ = @import("behavior/byteswap.zig");
12 _ = @import("behavior/byval_arg_var.zig");
1213 _ = @import("behavior/bool.zig");
1314 _ = @import("behavior/bugs/394.zig");
15 _ = @import("behavior/bugs/624.zig");
1416 _ = @import("behavior/bugs/655.zig");
1517 _ = @import("behavior/bugs/656.zig");
1618 _ = @import("behavior/bugs/679.zig");
19 _ = @import("behavior/bugs/704.zig");
1720 _ = @import("behavior/bugs/1025.zig");
21 _ = @import("behavior/bugs/1076.zig");
1822 _ = @import("behavior/bugs/1111.zig");
1923 _ = @import("behavior/bugs/1277.zig");
2024 _ = @import("behavior/bugs/1310.zig");
......@@ -27,149 +31,145 @@ test {
2731 _ = @import("behavior/bugs/2006.zig");
2832 _ = @import("behavior/bugs/2346.zig");
2933 _ = @import("behavior/bugs/2578.zig");
34 _ = @import("behavior/bugs/2692.zig");
35 _ = @import("behavior/bugs/2889.zig");
3036 _ = @import("behavior/bugs/3007.zig");
37 _ = @import("behavior/bugs/3046.zig");
3138 _ = @import("behavior/bugs/3112.zig");
3239 _ = @import("behavior/bugs/3367.zig");
40 _ = @import("behavior/bugs/3586.zig");
41 _ = @import("behavior/bugs/4560.zig");
42 _ = @import("behavior/bugs/4769_a.zig");
43 _ = @import("behavior/bugs/4769_b.zig");
44 _ = @import("behavior/bugs/4954.zig");
3345 _ = @import("behavior/bugs/6850.zig");
3446 _ = @import("behavior/bugs/7250.zig");
47 _ = @import("behavior/call.zig");
3548 _ = @import("behavior/cast.zig");
3649 _ = @import("behavior/comptime_memory.zig");
50 _ = @import("behavior/defer.zig");
51 _ = @import("behavior/enum.zig");
52 _ = @import("behavior/error.zig");
53 _ = @import("behavior/fn.zig");
3754 _ = @import("behavior/fn_delegation.zig");
3855 _ = @import("behavior/fn_in_struct_in_comptime.zig");
56 _ = @import("behavior/for.zig");
57 _ = @import("behavior/generics.zig");
3958 _ = @import("behavior/hasdecl.zig");
4059 _ = @import("behavior/hasfield.zig");
60 _ = @import("behavior/if.zig");
61 _ = @import("behavior/import.zig");
62 _ = @import("behavior/incomplete_struct_param_tld.zig");
63 _ = @import("behavior/int_div.zig");
64 _ = @import("behavior/inttoptr.zig");
4165 _ = @import("behavior/ir_block_deps.zig");
66 _ = @import("behavior/member_func.zig");
4267 _ = @import("behavior/namespace_depends_on_compile_var.zig");
68 _ = @import("behavior/null.zig");
4369 _ = @import("behavior/optional.zig");
4470 _ = @import("behavior/prefetch.zig");
71 _ = @import("behavior/pointers.zig");
4572 _ = @import("behavior/pub_enum.zig");
73 _ = @import("behavior/ptrcast.zig");
4674 _ = @import("behavior/reflection.zig");
75 _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
4776 _ = @import("behavior/slice.zig");
4877 _ = @import("behavior/slice_sentinel_comptime.zig");
4978 _ = @import("behavior/struct.zig");
79 _ = @import("behavior/src.zig");
80 _ = @import("behavior/this.zig");
5081 _ = @import("behavior/truncate.zig");
82 _ = @import("behavior/try.zig");
5183 _ = @import("behavior/tuple.zig");
5284 _ = @import("behavior/type.zig");
85 _ = @import("behavior/type_info.zig");
86 _ = @import("behavior/undefined.zig");
87 _ = @import("behavior/underscore.zig");
88 _ = @import("behavior/union.zig");
89 _ = @import("behavior/usingnamespace.zig");
5390 _ = @import("behavior/var_args.zig");
54 _ = @import("behavior/int_div.zig");
91 _ = @import("behavior/void.zig");
92 _ = @import("behavior/while.zig");
5593
5694 // tests that don't pass for stage1
5795 if (builtin.zig_backend != .stage1) {
5896 _ = @import("behavior/decltest.zig");
5997 }
6098
61 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64 and builtin.zig_backend != .stage2_aarch64) {
62 // Tests that pass (partly) for stage1, llvm backend, C backend, wasm backend.
63 _ = @import("behavior/bugs/624.zig");
64 _ = @import("behavior/bugs/704.zig");
65 _ = @import("behavior/bugs/1076.zig");
66 _ = @import("behavior/bugs/2692.zig");
67 _ = @import("behavior/bugs/2889.zig");
68 _ = @import("behavior/bugs/3046.zig");
69 _ = @import("behavior/bugs/3586.zig");
70 _ = @import("behavior/bugs/4560.zig");
71 _ = @import("behavior/bugs/4769_a.zig");
72 _ = @import("behavior/bugs/4769_b.zig");
73 _ = @import("behavior/bugs/4954.zig");
74 _ = @import("behavior/byval_arg_var.zig");
75 _ = @import("behavior/call.zig");
76 _ = @import("behavior/defer.zig");
77 _ = @import("behavior/enum.zig");
78 _ = @import("behavior/error.zig");
79 _ = @import("behavior/fn.zig");
80 _ = @import("behavior/for.zig");
81 _ = @import("behavior/generics.zig");
82 _ = @import("behavior/if.zig");
83 _ = @import("behavior/import.zig");
84 _ = @import("behavior/incomplete_struct_param_tld.zig");
85 _ = @import("behavior/inttoptr.zig");
86 _ = @import("behavior/member_func.zig");
87 _ = @import("behavior/null.zig");
88 _ = @import("behavior/pointers.zig");
89 _ = @import("behavior/ptrcast.zig");
90 _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
91 _ = @import("behavior/src.zig");
92 _ = @import("behavior/this.zig");
93 _ = @import("behavior/try.zig");
94 _ = @import("behavior/type_info.zig");
95 _ = @import("behavior/undefined.zig");
96 _ = @import("behavior/underscore.zig");
97 _ = @import("behavior/union.zig");
98 _ = @import("behavior/usingnamespace.zig");
99 _ = @import("behavior/void.zig");
100 _ = @import("behavior/while.zig");
99 if (builtin.zig_backend != .stage2_arm and
100 builtin.zig_backend != .stage2_x86_64 and
101 builtin.zig_backend != .stage2_aarch64 and
102 builtin.zig_backend != .stage2_wasm)
103 {
104 // Tests that pass for stage1, llvm backend, C backend
105 _ = @import("behavior/bugs/9584.zig");
106 _ = @import("behavior/cast_int.zig");
107 _ = @import("behavior/eval.zig");
108 _ = @import("behavior/int128.zig");
109 _ = @import("behavior/merge_error_sets.zig");
110 _ = @import("behavior/translate_c_macros.zig");
101111
102 if (builtin.zig_backend != .stage2_wasm) {
103 // Tests that pass for stage1, llvm backend, C backend
104 _ = @import("behavior/bugs/9584.zig");
105 _ = @import("behavior/cast_int.zig");
106 _ = @import("behavior/eval.zig");
107 _ = @import("behavior/int128.zig");
108 _ = @import("behavior/merge_error_sets.zig");
109 _ = @import("behavior/translate_c_macros.zig");
112 if (builtin.zig_backend != .stage2_c) {
113 // Tests that pass for stage1 and the llvm backend.
114 _ = @import("behavior/atomics.zig");
115 _ = @import("behavior/floatop.zig");
116 _ = @import("behavior/math.zig");
117 _ = @import("behavior/maximum_minimum.zig");
118 _ = @import("behavior/popcount.zig");
119 _ = @import("behavior/saturating_arithmetic.zig");
120 _ = @import("behavior/sizeof_and_typeof.zig");
121 _ = @import("behavior/switch.zig");
122 _ = @import("behavior/widening.zig");
110123
111 if (builtin.zig_backend != .stage2_c) {
112 // Tests that pass for stage1 and the llvm backend.
113 _ = @import("behavior/atomics.zig");
114 _ = @import("behavior/floatop.zig");
115 _ = @import("behavior/math.zig");
116 _ = @import("behavior/maximum_minimum.zig");
117 _ = @import("behavior/popcount.zig");
118 _ = @import("behavior/saturating_arithmetic.zig");
119 _ = @import("behavior/sizeof_and_typeof.zig");
120 _ = @import("behavior/switch.zig");
121 _ = @import("behavior/widening.zig");
124 if (builtin.zig_backend == .stage1) {
125 // Tests that only pass for the stage1 backend.
126 if (builtin.os.tag != .wasi) {
127 _ = @import("behavior/asm.zig");
128 _ = @import("behavior/async_fn.zig");
129 }
130 _ = @import("behavior/await_struct.zig");
131 _ = @import("behavior/bugs/421.zig");
132 _ = @import("behavior/bugs/529.zig");
133 _ = @import("behavior/bugs/718.zig");
134 _ = @import("behavior/bugs/726.zig");
135 _ = @import("behavior/bugs/828.zig");
136 _ = @import("behavior/bugs/920.zig");
137 _ = @import("behavior/bugs/1120.zig");
138 _ = @import("behavior/bugs/1421.zig");
122139 _ = @import("behavior/bugs/1442.zig");
123
124 if (builtin.zig_backend == .stage1) {
125 // Tests that only pass for the stage1 backend.
126 if (builtin.os.tag != .wasi) {
127 _ = @import("behavior/asm.zig");
128 _ = @import("behavior/async_fn.zig");
129 }
130 _ = @import("behavior/await_struct.zig");
131 _ = @import("behavior/bugs/421.zig");
132 _ = @import("behavior/bugs/529.zig");
133 _ = @import("behavior/bugs/718.zig");
134 _ = @import("behavior/bugs/726.zig");
135 _ = @import("behavior/bugs/828.zig");
136 _ = @import("behavior/bugs/920.zig");
137 _ = @import("behavior/bugs/1120.zig");
138 _ = @import("behavior/bugs/1421.zig");
139 _ = @import("behavior/bugs/1607.zig");
140 _ = @import("behavior/bugs/1851.zig");
141 _ = @import("behavior/bugs/2114.zig");
142 _ = @import("behavior/bugs/3384.zig");
143 _ = @import("behavior/bugs/3742.zig");
144 _ = @import("behavior/bugs/3779.zig");
145 _ = @import("behavior/bugs/4328.zig");
146 _ = @import("behavior/bugs/5398.zig");
147 _ = @import("behavior/bugs/5413.zig");
148 _ = @import("behavior/bugs/5474.zig");
149 _ = @import("behavior/bugs/5487.zig");
150 _ = @import("behavior/bugs/6456.zig");
151 _ = @import("behavior/bugs/6781.zig");
152 _ = @import("behavior/bugs/7003.zig");
153 _ = @import("behavior/bugs/7027.zig");
154 _ = @import("behavior/bugs/7047.zig");
155 _ = @import("behavior/bugs/10147.zig");
156 _ = @import("behavior/const_slice_child.zig");
157 _ = @import("behavior/export_self_referential_type_info.zig");
158 _ = @import("behavior/field_parent_ptr.zig");
159 _ = @import("behavior/misc.zig");
160 _ = @import("behavior/muladd.zig");
161 _ = @import("behavior/select.zig");
162 _ = @import("behavior/shuffle.zig");
163 _ = @import("behavior/struct_contains_null_ptr_itself.zig");
164 _ = @import("behavior/struct_contains_slice_of_itself.zig");
165 _ = @import("behavior/switch_prong_err_enum.zig");
166 _ = @import("behavior/switch_prong_implicit_cast.zig");
167 _ = @import("behavior/typename.zig");
168 _ = @import("behavior/union_with_members.zig");
169 _ = @import("behavior/vector.zig");
170 if (builtin.target.cpu.arch == .wasm32) {
171 _ = @import("behavior/wasm.zig");
172 }
140 _ = @import("behavior/bugs/1607.zig");
141 _ = @import("behavior/bugs/1851.zig");
142 _ = @import("behavior/bugs/2114.zig");
143 _ = @import("behavior/bugs/3384.zig");
144 _ = @import("behavior/bugs/3742.zig");
145 _ = @import("behavior/bugs/3779.zig");
146 _ = @import("behavior/bugs/4328.zig");
147 _ = @import("behavior/bugs/5398.zig");
148 _ = @import("behavior/bugs/5413.zig");
149 _ = @import("behavior/bugs/5474.zig");
150 _ = @import("behavior/bugs/5487.zig");
151 _ = @import("behavior/bugs/6456.zig");
152 _ = @import("behavior/bugs/6781.zig");
153 _ = @import("behavior/bugs/7003.zig");
154 _ = @import("behavior/bugs/7027.zig");
155 _ = @import("behavior/bugs/7047.zig");
156 _ = @import("behavior/bugs/10147.zig");
157 _ = @import("behavior/const_slice_child.zig");
158 _ = @import("behavior/export_self_referential_type_info.zig");
159 _ = @import("behavior/field_parent_ptr.zig");
160 _ = @import("behavior/misc.zig");
161 _ = @import("behavior/muladd.zig");
162 _ = @import("behavior/select.zig");
163 _ = @import("behavior/shuffle.zig");
164 _ = @import("behavior/struct_contains_null_ptr_itself.zig");
165 _ = @import("behavior/struct_contains_slice_of_itself.zig");
166 _ = @import("behavior/switch_prong_err_enum.zig");
167 _ = @import("behavior/switch_prong_implicit_cast.zig");
168 _ = @import("behavior/typename.zig");
169 _ = @import("behavior/union_with_members.zig");
170 _ = @import("behavior/vector.zig");
171 if (builtin.target.cpu.arch == .wasm32) {
172 _ = @import("behavior/wasm.zig");
173173 }
174174 }
175175 }
test/behavior/align.zig-6
......@@ -180,8 +180,6 @@ fn noop4() align(4) void {}
180180test "function alignment" {
181181 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
182182 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
183 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
184 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
185183 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
186184
187185 // function alignment is a compile error on wasm32/wasm64
......@@ -199,7 +197,6 @@ test "implicitly decreasing fn alignment" {
199197 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
200198 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
201199 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
202 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
203200 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
204201 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
205202
......@@ -226,8 +223,6 @@ test "@alignCast functions" {
226223 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
227224 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
228225 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
229 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
230 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
231226 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
232227
233228 // function alignment is a compile error on wasm32/wasm64
......@@ -250,7 +245,6 @@ test "generic function with align param" {
250245 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
251246 if (builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
252247 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
253 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
254248 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
255249 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
256250
test/behavior/array.zig+6-4
......@@ -49,7 +49,7 @@ fn getArrayLen(a: []const u32) usize {
4949
5050test "array init with mult" {
5151 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
52 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
52 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
5353
5454 const a = 'a';
5555 var i: [8]u8 = [2]u8{ a, 'b' } ** 4;
......@@ -112,7 +112,7 @@ test "array len field" {
112112
113113test "array with sentinels" {
114114 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
115 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
115 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
116116
117117 const S = struct {
118118 fn doTheTest(is_ct: bool) !void {
......@@ -179,7 +179,8 @@ fn plusOne(x: u32) u32 {
179179
180180test "single-item pointer to array indexing and slicing" {
181181 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
182 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
182 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
183 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
183184
184185 try testSingleItemPtrArrayIndexSlice();
185186 comptime try testSingleItemPtrArrayIndexSlice();
......@@ -205,7 +206,8 @@ fn doSomeMangling(array: *[4]u8) void {
205206
206207test "implicit cast zero sized array ptr to slice" {
207208 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
208 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
209 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
210 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
209211
210212 {
211213 var b = "".*;
test/behavior/basic.zig-6
......@@ -117,7 +117,6 @@ fn first4KeysOfHomeRow() []const u8 {
117117test "return string from function" {
118118 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
119119 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
120 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
121120
122121 try expect(mem.eql(u8, first4KeysOfHomeRow(), "aoeu"));
123122}
......@@ -231,7 +230,6 @@ test "compile time global reinterpret" {
231230
232231test "cast undefined" {
233232 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
234 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
235233
236234 const array: [100]u8 = undefined;
237235 const slice = @as([]const u8, &array);
......@@ -303,7 +301,6 @@ test "call function pointer in struct" {
303301 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
304302 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
305303 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
306
307304 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
308305
309306 try expect(mem.eql(u8, f3(true), "a"));
......@@ -382,7 +379,6 @@ fn testMemcpyMemset() !void {
382379test "variable is allowed to be a pointer to an opaque type" {
383380 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
384381 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
385 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
386382 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
387383
388384 var x: i32 = 1234;
......@@ -425,7 +421,6 @@ test "array 2D const double ptr" {
425421 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
426422 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
427423 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
428
429424 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
430425
431426 const rect_2d_vertexes = [_][1]f32{
......@@ -476,7 +471,6 @@ fn testArray2DConstDoublePtr(ptr: *const f32) !void {
476471test "double implicit cast in same expression" {
477472 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
478473 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
479 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
480474
481475 var x = @as(i32, @as(u16, nine()));
482476 try expect(x == 9);
test/behavior/bugs/1076.zig+5
......@@ -1,8 +1,13 @@
11const std = @import("std");
2const builtin = @import("builtin");
23const mem = std.mem;
34const expect = std.testing.expect;
45
56test "comptime code should not modify constant data" {
7 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10
611 try testCastPtrOfArrayToSliceAndPtr();
712 comptime try testCastPtrOfArrayToSliceAndPtr();
813}
test/behavior/bugs/1442.zig+3
......@@ -1,4 +1,5 @@
11const std = @import("std");
2const builtin = @import("builtin");
23
34const Union = union(enum) {
45 Text: []const u8,
......@@ -6,6 +7,8 @@ const Union = union(enum) {
67};
78
89test "const error union field alignment" {
10 if (builtin.zig_backend != .stage1) return error.SkipZigTest;
11
912 var union_or_err: anyerror!Union = Union{ .Color = 1234 };
1013 try std.testing.expect((union_or_err catch unreachable).Color == 1234);
1114}
test/behavior/bugs/2692.zig+5
......@@ -1,8 +1,13 @@
1const builtin = @import("builtin");
2
13fn foo(a: []u8) void {
24 _ = a;
35}
46
57test "address of 0 length array" {
8 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10
611 var pt: [0]u8 = undefined;
712 foo(&pt);
813}
test/behavior/bugs/2889.zig+5
......@@ -1,4 +1,5 @@
11const std = @import("std");
2const builtin = @import("builtin");
23
34const source = "A-";
45
......@@ -26,6 +27,10 @@ fn parseNote() ?i32 {
2627}
2728
2829test "fixed" {
30 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
31 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
32 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
33
2934 const result = parseNote();
3035 try std.testing.expect(result.? == 9);
3136}
test/behavior/bugs/3046.zig+5-1
......@@ -1,4 +1,5 @@
11const std = @import("std");
2const builtin = @import("builtin");
23const expect = std.testing.expect;
34
45const SomeStruct = struct {
......@@ -12,7 +13,10 @@ fn couldFail() anyerror!i32 {
1213var some_struct: SomeStruct = undefined;
1314
1415test "fixed" {
15 if (@import("builtin").zig_backend == .stage2_c) return error.SkipZigTest; // TODO
16 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
17 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
18 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
19 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1620
1721 some_struct = SomeStruct{
1822 .field = couldFail() catch @as(i32, 0),
test/behavior/bugs/3586.zig+5
......@@ -1,3 +1,5 @@
1const builtin = @import("builtin");
2
13const NoteParams = struct {};
24
35const Container = struct {
......@@ -5,6 +7,9 @@ const Container = struct {
57};
68
79test "fixed" {
10 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
11 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
12
813 var ctr = Container{
914 .params = NoteParams{},
1015 };
test/behavior/bugs/4560.zig+4
......@@ -1,6 +1,10 @@
11const std = @import("std");
2const builtin = @import("builtin");
23
34test "fixed" {
5 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
6 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7
48 var s: S = .{
59 .a = 1,
610 .b = .{
test/behavior/bugs/4954.zig+6
......@@ -1,8 +1,14 @@
1const builtin = @import("builtin");
2
13fn f(buf: []u8) void {
24 _ = &buf[@sizeOf(u32)];
35}
46
57test "crash" {
8 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
10 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11
612 var buf: [4096]u8 = undefined;
713 f(&buf);
814}
test/behavior/bugs/624.zig+4
......@@ -1,4 +1,5 @@
11const std = @import("std");
2const builtin = @import("builtin");
23const expect = std.testing.expect;
34
45const TestContext = struct {
......@@ -19,6 +20,9 @@ fn MemoryPool(comptime T: type) type {
1920}
2021
2122test "foo" {
23 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
24 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
25
2226 var allocator = ContextAllocator{ .n = 10 };
2327 try expect(allocator.n == 10);
2428}
test/behavior/bugs/704.zig+5
......@@ -1,9 +1,14 @@
1const builtin = @import("builtin");
2
13const xxx = struct {
24 pub fn bar(self: *xxx) void {
35 _ = self;
46 }
57};
68test "bug 704" {
9 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
10 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11
712 var x: xxx = undefined;
813 x.bar();
914}
test/behavior/byval_arg_var.zig+5
......@@ -1,8 +1,13 @@
11const std = @import("std");
2const builtin = @import("builtin");
23
34var result: []const u8 = "wrong";
45
56test "pass string literal byvalue to a generic var param" {
7 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10
611 start();
712 blowUpStack(10);
813
test/behavior/defer.zig+13
......@@ -5,6 +5,9 @@ const expectEqual = std.testing.expectEqual;
55const expectError = std.testing.expectError;
66
77test "break and continue inside loop inside defer expression" {
8 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10
811 testBreakContInDefer(10);
912 comptime testBreakContInDefer(10);
1013}
......@@ -21,6 +24,9 @@ fn testBreakContInDefer(x: usize) void {
2124}
2225
2326test "defer and labeled break" {
27 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
28 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
29
2430 var i = @as(usize, 0);
2531
2632 blk: {
......@@ -32,6 +38,9 @@ test "defer and labeled break" {
3238}
3339
3440test "errdefer does not apply to fn inside fn" {
41 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
42 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
43
3544 if (testNestedFnErrDefer()) |_| @panic("expected error") else |e| try expect(e == error.Bad);
3645}
3746
......@@ -47,6 +56,10 @@ fn testNestedFnErrDefer() anyerror!void {
4756}
4857
4958test "return variable while defer expression in scope to modify it" {
59 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
60 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
61 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
62
5063 const S = struct {
5164 fn doTheTest() !void {
5265 try expect(notNull().? == 1);
test/behavior/enum.zig+110
......@@ -11,6 +11,9 @@ fn shouldEqual(n: Number, expected: u3) !void {
1111}
1212
1313test "enum to int" {
14 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
16
1417 try shouldEqual(Number.Zero, 0);
1518 try shouldEqual(Number.One, 1);
1619 try shouldEqual(Number.Two, 2);
......@@ -24,6 +27,9 @@ fn testIntToEnumEval(x: i32) !void {
2427const IntToEnumNumber = enum { Zero, One, Two, Three, Four };
2528
2629test "int to enum" {
30 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
31 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
32
2733 try testIntToEnumEval(3);
2834}
2935
......@@ -553,6 +559,9 @@ const ValueCount257 = enum {
553559};
554560
555561test "enum sizes" {
562 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
563 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
564
556565 comptime {
557566 try expect(@sizeOf(ValueCount1) == 0);
558567 try expect(@sizeOf(ValueCount2) == 1);
......@@ -562,6 +571,9 @@ test "enum sizes" {
562571}
563572
564573test "enum literal equality" {
574 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
575 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
576
565577 const x = .hi;
566578 const y = .ok;
567579 const z = .hi;
......@@ -571,6 +583,9 @@ test "enum literal equality" {
571583}
572584
573585test "enum literal cast to enum" {
586 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
587 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
588
574589 const Color = enum { Auto, Off, On };
575590
576591 var color1: Color = .Auto;
......@@ -579,6 +594,9 @@ test "enum literal cast to enum" {
579594}
580595
581596test "peer type resolution with enum literal" {
597 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
598 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
599
582600 const Items = enum { one, two };
583601
584602 try expect(Items.two == .two);
......@@ -603,11 +621,19 @@ fn testEnumWithSpecifiedTagValues(x: MultipleChoice) !void {
603621}
604622
605623test "enum with specified tag values" {
624 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
625 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
626 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
627
606628 try testEnumWithSpecifiedTagValues(MultipleChoice.C);
607629 comptime try testEnumWithSpecifiedTagValues(MultipleChoice.C);
608630}
609631
610632test "non-exhaustive enum" {
633 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
634 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
635 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
636
611637 const S = struct {
612638 const E = enum(u8) { a, b, _ };
613639
......@@ -649,6 +675,9 @@ test "non-exhaustive enum" {
649675}
650676
651677test "empty non-exhaustive enum" {
678 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
679 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
680
652681 const S = struct {
653682 const E = enum(u8) { _ };
654683
......@@ -668,6 +697,10 @@ test "empty non-exhaustive enum" {
668697}
669698
670699test "single field non-exhaustive enum" {
700 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
701 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
702 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
703
671704 const S = struct {
672705 const E = enum(u8) { a, _ };
673706 fn doTheTest(y: u8) !void {
......@@ -708,6 +741,9 @@ const EnumWithTagValues = enum(u4) {
708741 D = 1 << 3,
709742};
710743test "enum with tag values don't require parens" {
744 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
745 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
746
711747 try expect(@enumToInt(EnumWithTagValues.C) == 0b0100);
712748}
713749
......@@ -724,11 +760,18 @@ const MultipleChoice2 = enum(u32) {
724760};
725761
726762test "cast integer literal to enum" {
763 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
764 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
765
727766 try expect(@intToEnum(MultipleChoice2, 0) == MultipleChoice2.Unspecified1);
728767 try expect(@intToEnum(MultipleChoice2, 40) == MultipleChoice2.B);
729768}
730769
731770test "enum with specified and unspecified tag values" {
771 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
772 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
773 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
774
732775 try testEnumWithSpecifiedAndUnspecifiedTagValues(MultipleChoice2.D);
733776 comptime try testEnumWithSpecifiedAndUnspecifiedTagValues(MultipleChoice2.D);
734777}
......@@ -752,6 +795,9 @@ const Small2 = enum(u2) { One, Two };
752795const Small = enum(u2) { One, Two, Three, Four };
753796
754797test "set enum tag type" {
798 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
799 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
800
755801 {
756802 var x = Small.One;
757803 x = Small.Two;
......@@ -765,6 +811,9 @@ test "set enum tag type" {
765811}
766812
767813test "casting enum to its tag type" {
814 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
815 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
816
768817 try testCastEnumTag(Small2.Two);
769818 comptime try testCastEnumTag(Small2.Two);
770819}
......@@ -774,6 +823,9 @@ fn testCastEnumTag(value: Small2) !void {
774823}
775824
776825test "enum with 1 field but explicit tag type should still have the tag type" {
826 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
827 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
828
777829 const Enum = enum(u8) {
778830 B = 2,
779831 };
......@@ -781,6 +833,9 @@ test "enum with 1 field but explicit tag type should still have the tag type" {
781833}
782834
783835test "signed integer as enum tag" {
836 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
837 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
838
784839 const SignedEnum = enum(i2) {
785840 A0 = -1,
786841 A1 = 0,
......@@ -793,6 +848,9 @@ test "signed integer as enum tag" {
793848}
794849
795850test "enum with one member and custom tag type" {
851 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
852 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
853
796854 const E = enum(u2) {
797855 One,
798856 };
......@@ -804,6 +862,9 @@ test "enum with one member and custom tag type" {
804862}
805863
806864test "enum with one member and u1 tag type @enumToInt" {
865 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
866 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
867
807868 const Enum = enum(u1) {
808869 Test,
809870 };
......@@ -811,6 +872,9 @@ test "enum with one member and u1 tag type @enumToInt" {
811872}
812873
813874test "enum with comptime_int tag type" {
875 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
876 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
877
814878 const Enum = enum(comptime_int) {
815879 One = 3,
816880 Two = 2,
......@@ -820,6 +884,9 @@ test "enum with comptime_int tag type" {
820884}
821885
822886test "enum with one member default to u0 tag type" {
887 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
888 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
889
823890 const E0 = enum { X };
824891 comptime try expect(Tag(E0) == u0);
825892}
......@@ -836,11 +903,17 @@ fn doALoopThing(id: EnumWithOneMember) void {
836903}
837904
838905test "comparison operator on enum with one member is comptime known" {
906 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
907 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
908
839909 doALoopThing(EnumWithOneMember.Eof);
840910}
841911
842912const State = enum { Start };
843913test "switch on enum with one member is comptime known" {
914 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
915 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
916
844917 var state = State.Start;
845918 switch (state) {
846919 State.Start => return,
......@@ -849,6 +922,9 @@ test "switch on enum with one member is comptime known" {
849922}
850923
851924test "method call on an enum" {
925 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
926 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
927
852928 const S = struct {
853929 const E = enum {
854930 one,
......@@ -885,6 +961,10 @@ test "enum value allocation" {
885961}
886962
887963test "enum literal casting to tagged union" {
964 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
965 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
966 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
967
888968 const Arch = union(enum) {
889969 x86_64,
890970 arm: Arm32,
......@@ -930,6 +1010,11 @@ test "exporting enum type and value" {
9301010}
9311011
9321012test "constant enum initialization with differing sizes" {
1013 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1014 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1015 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1016 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1017
9331018 try test3_1(test3_foo);
9341019 try test3_2(test3_bar);
9351020}
......@@ -970,6 +1055,9 @@ fn test3_2(f: Test3Foo) !void {
9701055test "@tagName" {
9711056 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
9721057 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1058 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1059 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1060 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9731061
9741062 try expect(mem.eql(u8, testEnumTagNameBare(BareNumber.Three), "Three"));
9751063 comptime try expect(mem.eql(u8, testEnumTagNameBare(BareNumber.Three), "Three"));
......@@ -984,6 +1072,9 @@ const BareNumber = enum { One, Two, Three };
9841072test "@tagName non-exhaustive enum" {
9851073 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
9861074 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1075 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1076 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1077 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9871078
9881079 try expect(mem.eql(u8, testEnumTagNameBare(NonExhaustive.B), "B"));
9891080 comptime try expect(mem.eql(u8, testEnumTagNameBare(NonExhaustive.B), "B"));
......@@ -993,6 +1084,9 @@ const NonExhaustive = enum(u8) { A, B, _ };
9931084test "@tagName is null-terminated" {
9941085 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
9951086 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1087 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1088 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1089 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9961090
9971091 const S = struct {
9981092 fn doTheTest(n: BareNumber) !void {
......@@ -1006,6 +1100,9 @@ test "@tagName is null-terminated" {
10061100test "tag name with assigned enum values" {
10071101 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
10081102 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1103 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1104 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1105 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10091106
10101107 const LocalFoo = enum(u8) {
10111108 A = 1,
......@@ -1016,11 +1113,18 @@ test "tag name with assigned enum values" {
10161113}
10171114
10181115test "@tagName on enum literals" {
1116 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1117 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1118
10191119 try expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
10201120 comptime try expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
10211121}
10221122
10231123test "enum literal casting to optional" {
1124 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1125 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1126 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1127
10241128 var bar: ?Bar = undefined;
10251129 bar = .B;
10261130
......@@ -1045,6 +1149,9 @@ const bit_field_1 = BitFieldOfEnums{
10451149
10461150test "bit field access with enum fields" {
10471151 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1152 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1153 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1154 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10481155
10491156 var data = bit_field_1;
10501157 try expect(getA(&data) == A.Two);
......@@ -1073,6 +1180,9 @@ fn getC(data: *const BitFieldOfEnums) C {
10731180}
10741181
10751182test "enum literal in array literal" {
1183 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1184 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1185
10761186 const Items = enum { one, two };
10771187 const array = [_]Items{ .one, .two };
10781188
test/behavior/error.zig+48
......@@ -6,12 +6,18 @@ const expectEqual = std.testing.expectEqual;
66const mem = std.mem;
77
88test "error values" {
9 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
10 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11
912 const a = @errorToInt(error.err1);
1013 const b = @errorToInt(error.err2);
1114 try expect(a != b);
1215}
1316
1417test "redefinition of error values allowed" {
18 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
19 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
20
1521 shouldBeNotEqual(error.AnError, error.SecondError);
1622}
1723fn shouldBeNotEqual(a: anyerror, b: anyerror) void {
......@@ -19,6 +25,10 @@ fn shouldBeNotEqual(a: anyerror, b: anyerror) void {
1925}
2026
2127test "error binary operator" {
28 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
29 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
30 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
31
2232 const a = errBinaryOperatorG(true) catch 3;
2333 const b = errBinaryOperatorG(false) catch 3;
2434 try expect(a == 3);
......@@ -29,6 +39,9 @@ fn errBinaryOperatorG(x: bool) anyerror!isize {
2939}
3040
3141test "empty error union" {
42 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
43 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
44
3245 const x = error{} || error{};
3346 _ = x;
3447}
......@@ -48,10 +61,18 @@ pub fn baz() anyerror!i32 {
4861}
4962
5063test "error wrapping" {
64 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
65 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
66 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
67
5168 try expect((baz() catch unreachable) == 15);
5269}
5370
5471test "unwrap simple value from error" {
72 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
73 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
74 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
75
5576 const i = unwrapSimpleValueFromErrorDo() catch unreachable;
5677 try expect(i == 13);
5778}
......@@ -60,6 +81,10 @@ fn unwrapSimpleValueFromErrorDo() anyerror!isize {
6081}
6182
6283test "error return in assignment" {
84 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
85 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
86 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
87
6388 doErrReturnInAssignment() catch unreachable;
6489}
6590
......@@ -73,12 +98,19 @@ fn makeANonErr() anyerror!i32 {
7398}
7499
75100test "syntax: optional operator in front of error union operator" {
101 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
102 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
103
76104 comptime {
77105 try expect(?(anyerror!i32) == ?(anyerror!i32));
78106 }
79107}
80108
81109test "widen cast integer payload of error union function call" {
110 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
111 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
112 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
113
82114 const S = struct {
83115 fn errorable() !u64 {
84116 var x = @as(u64, try number());
......@@ -93,12 +125,19 @@ test "widen cast integer payload of error union function call" {
93125}
94126
95127test "debug info for optional error set" {
128 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
129 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
130 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
131
96132 const SomeError = error{Hello};
97133 var a_local_variable: ?SomeError = null;
98134 _ = a_local_variable;
99135}
100136
101137test "implicit cast to optional to error union to return result loc" {
138 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
139 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
140
102141 const S = struct {
103142 fn entry() !void {
104143 var x: Foo = undefined;
......@@ -118,6 +157,9 @@ test "implicit cast to optional to error union to return result loc" {
118157}
119158
120159test "error: fn returning empty error set can be passed as fn returning any error" {
160 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
161 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
162
121163 entry();
122164 comptime entry();
123165}
......@@ -482,6 +524,9 @@ test "error union comptime caching" {
482524test "@errorName" {
483525 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
484526 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
527 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
528 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
529 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
485530
486531 try expect(mem.eql(u8, @errorName(error.AnError), "AnError"));
487532 try expect(mem.eql(u8, @errorName(error.ALongerErrorName), "ALongerErrorName"));
......@@ -494,6 +539,9 @@ fn gimmeItBroke() anyerror {
494539test "@errorName sentinel length matches slice length" {
495540 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
496541 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
542 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
543 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
544 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
497545
498546 const name = testBuiltinErrorName(error.FooBar);
499547 const length: usize = 6;
test/behavior/fn.zig+71
......@@ -5,6 +5,9 @@ const expect = testing.expect;
55const expectEqual = testing.expectEqual;
66
77test "params" {
8 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10
811 try expect(testParamsAdd(22, 11) == 33);
912}
1013fn testParamsAdd(a: i32, b: i32) i32 {
......@@ -12,6 +15,9 @@ fn testParamsAdd(a: i32, b: i32) i32 {
1215}
1316
1417test "local variables" {
18 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
19 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
20
1521 testLocVars(2);
1622}
1723fn testLocVars(b: i32) void {
......@@ -20,6 +26,9 @@ fn testLocVars(b: i32) void {
2026}
2127
2228test "mutable local variables" {
29 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
30 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
31
2332 var zero: i32 = 0;
2433 try expect(zero == 0);
2534
......@@ -31,6 +40,9 @@ test "mutable local variables" {
3140}
3241
3342test "separate block scopes" {
43 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
44 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
45
3446 {
3547 const no_conflict: i32 = 5;
3648 try expect(no_conflict == 5);
......@@ -47,10 +59,16 @@ fn @"weird function name"() i32 {
4759 return 1234;
4860}
4961test "weird function name" {
62 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
63 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
64
5065 try expect(@"weird function name"() == 1234);
5166}
5267
5368test "assign inline fn to const variable" {
69 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
70 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
71
5472 const a = inlineFn;
5573 a();
5674}
......@@ -68,6 +86,9 @@ fn outer(y: u32) *const fn (u32) u32 {
6886}
6987
7088test "return inner function which references comptime variable of outer function" {
89 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
90 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
91
7192 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
7293
7394 var func = outer(10);
......@@ -76,6 +97,9 @@ test "return inner function which references comptime variable of outer function
7697
7798test "discard the result of a function that returns a struct" {
7899 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
100 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
101 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
102
79103 const S = struct {
80104 fn entry() void {
81105 _ = func();
......@@ -97,6 +121,9 @@ test "discard the result of a function that returns a struct" {
97121test "inline function call that calls optional function pointer, return pointer at callsite interacts correctly with callsite return type" {
98122 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
99123 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
124 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
125 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
126 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
100127
101128 const S = struct {
102129 field: u32,
......@@ -129,6 +156,9 @@ test "inline function call that calls optional function pointer, return pointer
129156}
130157
131158test "implicit cast function unreachable return" {
159 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
160 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
161
132162 wantsFnWithVoid(fnWithUnreachable);
133163}
134164
......@@ -143,6 +173,8 @@ fn fnWithUnreachable() noreturn {
143173test "extern struct with stdcallcc fn pointer" {
144174 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
145175 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
176 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
177 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
146178
147179 const S = extern struct {
148180 ptr: *const fn () callconv(if (builtin.target.cpu.arch == .i386) .Stdcall else .C) i32,
......@@ -170,10 +202,16 @@ fn fComplexCallconvRet(x: u32) callconv(blk: {
170202}
171203
172204test "function with complex callconv and return type expressions" {
205 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
206 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
207
173208 try expect(fComplexCallconvRet(3).x == 9);
174209}
175210
176211test "pass by non-copying value" {
212 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
213 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
214
177215 try expect(addPointCoords(Point{ .x = 1, .y = 2 }) == 3);
178216}
179217
......@@ -187,6 +225,10 @@ fn addPointCoords(pt: Point) i32 {
187225}
188226
189227test "pass by non-copying value through var arg" {
228 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
229 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
230 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
231
190232 try expect((try addPointCoordsVar(Point{ .x = 1, .y = 2 })) == 3);
191233}
192234
......@@ -196,6 +238,9 @@ fn addPointCoordsVar(pt: anytype) !i32 {
196238}
197239
198240test "pass by non-copying value as method" {
241 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
242 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
243
199244 var pt = Point2{ .x = 1, .y = 2 };
200245 try expect(pt.addPointCoords() == 3);
201246}
......@@ -210,6 +255,9 @@ const Point2 = struct {
210255};
211256
212257test "pass by non-copying value as method, which is generic" {
258 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
259 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
260
213261 var pt = Point3{ .x = 1, .y = 2 };
214262 try expect(pt.addPointCoords(i32) == 3);
215263}
......@@ -225,6 +273,9 @@ const Point3 = struct {
225273};
226274
227275test "pass by non-copying value as method, at comptime" {
276 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
277 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
278
228279 comptime {
229280 var pt = Point2{ .x = 1, .y = 2 };
230281 try expect(pt.addPointCoords() == 3);
......@@ -232,6 +283,9 @@ test "pass by non-copying value as method, at comptime" {
232283}
233284
234285test "implicit cast fn call result to optional in field result" {
286 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
287 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
288
235289 const S = struct {
236290 fn entry() !void {
237291 var x = Foo{
......@@ -255,6 +309,10 @@ test "implicit cast fn call result to optional in field result" {
255309}
256310
257311test "void parameters" {
312 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
313 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
314 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
315
258316 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
259317 try voidFun(1, void{}, 2, {});
260318}
......@@ -267,6 +325,9 @@ fn voidFun(a: i32, b: void, c: i32, d: void) !void {
267325}
268326
269327test "call function with empty string" {
328 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
329 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
330
270331 acceptsString("");
271332}
272333
......@@ -301,6 +362,9 @@ fn fn4() u32 {
301362}
302363
303364test "number literal as an argument" {
365 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
366 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
367
304368 try numberLiteralArg(3);
305369 comptime try numberLiteralArg(3);
306370}
......@@ -311,6 +375,10 @@ fn numberLiteralArg(a: anytype) !void {
311375
312376test "function call with anon list literal" {
313377 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
378 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
379 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
380 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
381
314382 const S = struct {
315383 fn doTheTest() !void {
316384 try consumeVec(.{ 9, 8, 7 });
......@@ -327,6 +395,9 @@ test "function call with anon list literal" {
327395}
328396
329397test "ability to give comptime types and non comptime types to same parameter" {
398 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
399 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
400
330401 const S = struct {
331402 fn doTheTest() !void {
332403 var x: i32 = 1;
test/behavior/for.zig+23-1
......@@ -5,6 +5,9 @@ const expectEqual = std.testing.expectEqual;
55const mem = std.mem;
66
77test "continue in for loop" {
8 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10
811 const array = [_]i32{ 1, 2, 3, 4, 5 };
912 var sum: i32 = 0;
1013 for (array) |x| {
......@@ -18,6 +21,9 @@ test "continue in for loop" {
1821}
1922
2023test "break from outer for loop" {
24 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
25 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
26
2127 try testBreakOuter();
2228 comptime try testBreakOuter();
2329}
......@@ -35,6 +41,9 @@ fn testBreakOuter() !void {
3541}
3642
3743test "continue outer for loop" {
44 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
45 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
46
3847 try testContinueOuter();
3948 comptime try testContinueOuter();
4049}
......@@ -52,6 +61,9 @@ fn testContinueOuter() !void {
5261}
5362
5463test "ignore lval with underscore (for loop)" {
64 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
65 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
66
5567 for ([_]void{}) |_, i| {
5668 _ = i;
5769 for ([_]void{}) |_, j| {
......@@ -63,7 +75,10 @@ test "ignore lval with underscore (for loop)" {
6375}
6476
6577test "basic for loop" {
66 if (@import("builtin").zig_backend == .stage2_c) return error.SkipZigTest; // TODO
78 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
79 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
80 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
81 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6782
6883 const expected_result = [_]u8{ 9, 8, 7, 6, 0, 1, 2, 3 } ** 3;
6984
......@@ -104,6 +119,10 @@ test "basic for loop" {
104119}
105120
106121test "for with null and T peer types and inferred result location type" {
122 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
123 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
124 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
125
107126 const S = struct {
108127 fn doTheTest(slice: []const u8) !void {
109128 if (for (slice) |item| {
......@@ -121,6 +140,9 @@ test "for with null and T peer types and inferred result location type" {
121140}
122141
123142test "2 break statements and an else" {
143 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
144 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
145
124146 const S = struct {
125147 fn entry(t: bool, f: bool) !void {
126148 var buf: [10]u8 = undefined;
test/behavior/generics.zig+41-2
......@@ -5,6 +5,9 @@ const expect = testing.expect;
55const expectEqual = testing.expectEqual;
66
77test "one param, explicit comptime" {
8 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10
811 var x: usize = 0;
912 x += checkSize(i32);
1013 x += checkSize(bool);
......@@ -17,6 +20,9 @@ fn checkSize(comptime T: type) usize {
1720}
1821
1922test "simple generic fn" {
23 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
24 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
25
2026 try expect(max(i32, 3, -1) == 3);
2127 try expect(max(u8, 1, 100) == 100);
2228 if (builtin.zig_backend == .stage1) {
......@@ -37,6 +43,9 @@ fn add(comptime a: i32, b: i32) i32 {
3743
3844const the_max = max(u32, 1234, 5678);
3945test "compile time generic eval" {
46 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
47 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
48
4049 try expect(the_max == 5678);
4150}
4251
......@@ -53,12 +62,20 @@ fn sameButWithFloats(a: f64, b: f64) f64 {
5362}
5463
5564test "fn with comptime args" {
65 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
66 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
67 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
68
5669 try expect(gimmeTheBigOne(1234, 5678) == 5678);
5770 try expect(shouldCallSameInstance(34, 12) == 34);
5871 try expect(sameButWithFloats(0.43, 0.49) == 0.49);
5972}
6073
6174test "anytype params" {
75 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
76 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
77 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
78
6279 try expect(max_i32(12, 34) == 34);
6380 try expect(max_f64(1.2, 3.4) == 3.4);
6481 comptime {
......@@ -80,6 +97,10 @@ fn max_f64(a: f64, b: f64) f64 {
8097}
8198
8299test "type constructed by comptime function call" {
100 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
101 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
102 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
103
83104 var l: SimpleList(10) = undefined;
84105 l.array[0] = 10;
85106 l.array[1] = 11;
......@@ -99,6 +120,9 @@ fn SimpleList(comptime L: usize) type {
99120}
100121
101122test "function with return type type" {
123 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
124 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
125
102126 var list: List(i32) = undefined;
103127 var list2: List(i32) = undefined;
104128 list.length = 10;
......@@ -120,6 +144,9 @@ pub fn SmallList(comptime T: type, comptime STATIC_SIZE: usize) type {
120144}
121145
122146test "const decls in struct" {
147 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
148 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
149
123150 try expect(GenericDataThing(3).count_plus_one == 4);
124151}
125152fn GenericDataThing(comptime count: isize) type {
......@@ -129,6 +156,9 @@ fn GenericDataThing(comptime count: isize) type {
129156}
130157
131158test "use generic param in generic param" {
159 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
160 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
161
132162 try expect(aGenericFn(i32, 3, 4) == 7);
133163}
134164fn aGenericFn(comptime T: type, comptime a: T, b: T) T {
......@@ -136,6 +166,9 @@ fn aGenericFn(comptime T: type, comptime a: T, b: T) T {
136166}
137167
138168test "generic fn with implicit cast" {
169 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
170 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
171
139172 try expect(getFirstByte(u8, &[_]u8{13}) == 13);
140173 try expect(getFirstByte(u16, &[_]u16{
141174 0,
......@@ -150,6 +183,9 @@ fn getFirstByte(comptime T: type, mem: []const T) u8 {
150183}
151184
152185test "generic fn keeps non-generic parameter types" {
186 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
187 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
188
153189 const A = 128;
154190
155191 const S = struct {
......@@ -165,8 +201,10 @@ test "generic fn keeps non-generic parameter types" {
165201}
166202
167203test "array of generic fns" {
204 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
205 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
168206 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
169 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
207
170208 try expect(foos[0](true));
171209 try expect(!foos[1](true));
172210}
......@@ -185,7 +223,8 @@ fn foo2(arg: anytype) bool {
185223
186224test "generic struct" {
187225 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
188 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
226 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
227 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
189228 var a1 = GenNode(i32){
190229 .value = 13,
191230 .next = null,
test/behavior/if.zig+20
......@@ -4,6 +4,9 @@ const expect = std.testing.expect;
44const expectEqual = std.testing.expectEqual;
55
66test "if statements" {
7 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9
710 shouldBeEqual(1, 1);
811 firstEqlThird(2, 1, 2);
912}
......@@ -27,6 +30,9 @@ fn firstEqlThird(a: i32, b: i32, c: i32) void {
2730}
2831
2932test "else if expression" {
33 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
34 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
35
3036 try expect(elseIfExpressionF(1) == 1);
3137}
3238fn elseIfExpressionF(c: u8) u8 {
......@@ -44,6 +50,10 @@ var global_with_val: anyerror!u32 = 0;
4450var global_with_err: anyerror!u32 = error.SomeError;
4551
4652test "unwrap mutable global var" {
53 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
54 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
55 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
56
4757 if (global_with_val) |v| {
4858 try expect(v == 0);
4959 } else |_| {
......@@ -57,6 +67,9 @@ test "unwrap mutable global var" {
5767}
5868
5969test "labeled break inside comptime if inside runtime if" {
70 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
71 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
72
6073 var answer: i32 = 0;
6174 var c = true;
6275 if (c) {
......@@ -68,6 +81,9 @@ test "labeled break inside comptime if inside runtime if" {
6881}
6982
7083test "const result loc, runtime if cond, else unreachable" {
84 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
85 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
86
7187 const Num = enum { One, Two };
7288
7389 var t = true;
......@@ -76,6 +92,10 @@ test "const result loc, runtime if cond, else unreachable" {
7692}
7793
7894test "if copies its payload" {
95 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
96 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
97 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
98
7999 const S = struct {
80100 fn doTheTest() !void {
81101 var tmp: ?i32 = 10;
test/behavior/incomplete_struct_param_tld.zig+3
......@@ -1,3 +1,4 @@
1const builtin = @import("builtin");
12const expect = @import("std").testing.expect;
23
34const A = struct {
......@@ -21,6 +22,8 @@ fn foo(a: A) i32 {
2122}
2223
2324test "incomplete struct param top level declaration" {
25 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
26 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
2427 const a = A{
2528 .b = B{
2629 .c = C{ .x = 13 },
test/behavior/inttoptr.zig+6
......@@ -3,6 +3,8 @@ const builtin = @import("builtin");
33test "casting integer address to function pointer" {
44 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
55 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) return error.SkipZigTest; // TODO
6 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
68
79 addressToFunction();
810 comptime addressToFunction();
......@@ -14,6 +16,10 @@ fn addressToFunction() void {
1416}
1517
1618test "mutate through ptr initialized with constant intToPtr value" {
19 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
20 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
21 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
22
1723 forceCompilerAnalyzeBranchHardCodedPtrDereference(false);
1824}
1925
test/behavior/member_func.zig+6
......@@ -28,6 +28,9 @@ const HasFuncs = struct {
2828
2929test "standard field calls" {
3030 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
31 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
32 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
33 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3134
3235 try expect(HasFuncs.one(0) == 1);
3336 try expect(HasFuncs.two(0) == 2);
......@@ -69,6 +72,9 @@ test "standard field calls" {
6972
7073test "@field field calls" {
7174 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
75 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
76 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
77 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7278
7379 try expect(@field(HasFuncs, "one")(0) == 1);
7480 try expect(@field(HasFuncs, "two")(0) == 2);
test/behavior/null.zig+29
......@@ -29,6 +29,10 @@ test "optional type" {
2929}
3030
3131test "test maybe object and get a pointer to the inner value" {
32 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
33 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
34 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
35
3236 var maybe_bool: ?bool = true;
3337
3438 if (maybe_bool) |*b| {
......@@ -45,6 +49,10 @@ test "rhs maybe unwrap return" {
4549}
4650
4751test "maybe return" {
52 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
53 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
54 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
55
4856 try maybeReturnImpl();
4957 comptime try maybeReturnImpl();
5058}
......@@ -61,6 +69,10 @@ fn foo(x: ?i32) ?bool {
6169}
6270
6371test "test null runtime" {
72 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
73 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
74 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
75
6476 try testTestNullRuntime(null);
6577}
6678fn testTestNullRuntime(x: ?i32) !void {
......@@ -69,6 +81,9 @@ fn testTestNullRuntime(x: ?i32) !void {
6981}
7082
7183test "optional void" {
84 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
85 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
86
7287 try optionalVoidImpl();
7388 comptime try optionalVoidImpl();
7489}
......@@ -89,6 +104,9 @@ fn bar(x: ?void) ?void {
89104const Empty = struct {};
90105
91106test "optional struct{}" {
107 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
108 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
109
92110 _ = try optionalEmptyStructImpl();
93111 _ = comptime try optionalEmptyStructImpl();
94112}
......@@ -107,17 +125,25 @@ fn baz(x: ?Empty) ?Empty {
107125}
108126
109127test "null with default unwrap" {
128 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
129
110130 const x: i32 = null orelse 1;
111131 try expect(x == 1);
112132}
113133
114134test "optional pointer to 0 bit type null value at runtime" {
135 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
136
115137 const EmptyStruct = struct {};
116138 var x: ?*EmptyStruct = null;
117139 try expect(x == null);
118140}
119141
120142test "if var maybe pointer" {
143 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
144 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
145 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
146
121147 try expect(shouldBeAPlus1(Particle{
122148 .a = 14,
123149 .b = 1,
......@@ -159,6 +185,9 @@ const here_is_a_null_literal = SillyStruct{ .context = null };
159185test "unwrap optional which is field of global var" {
160186 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
161187 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
188 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
189 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
190 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
162191
163192 struct_with_optional.field = null;
164193 if (struct_with_optional.field) |payload| {
test/behavior/pointers.zig+19
......@@ -17,6 +17,10 @@ fn testDerefPtr() !void {
1717}
1818
1919test "pointer arithmetic" {
20 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
21 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
22 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
23
2024 var ptr: [*]const u8 = "abcd";
2125
2226 try expect(ptr[0] == 'a');
......@@ -61,6 +65,10 @@ test "initialize const optional C pointer to null" {
6165}
6266
6367test "assigning integer to C pointer" {
68 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
69 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
70 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
71
6472 var x: i32 = 0;
6573 var y: i32 = 1;
6674 var ptr: [*c]u8 = 0;
......@@ -75,6 +83,10 @@ test "assigning integer to C pointer" {
7583}
7684
7785test "C pointer comparison and arithmetic" {
86 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
87 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
88 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
89
7890 const S = struct {
7991 fn doTheTest() !void {
8092 var ptr1: [*c]u32 = 0;
......@@ -133,6 +145,10 @@ test "peer type resolution with C pointers" {
133145}
134146
135147test "implicit casting between C pointer and optional non-C pointer" {
148 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
149 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
150 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
151
136152 var slice: []const u8 = "aoeu";
137153 const opt_many_ptr: ?[*]const u8 = slice.ptr;
138154 var ptr_opt_many_ptr = &opt_many_ptr;
......@@ -172,6 +188,9 @@ test "compare equality of optional and non-optional pointer" {
172188test "allowzero pointer and slice" {
173189 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
174190 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
191 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
192 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
193 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
175194
176195 var ptr = @intToPtr([*]allowzero i32, 0);
177196 var opt_ptr: ?[*]allowzero i32 = ptr;
test/behavior/ref_var_in_if_after_if_2nd_switch_prong.zig+5
......@@ -1,9 +1,14 @@
11const std = @import("std");
2const builtin = @import("builtin");
23const expect = std.testing.expect;
34const mem = std.mem;
45
56var ok: bool = false;
67test "reference a variable in an if after an if in the 2nd switch prong" {
8 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
10 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11
712 try foo(true, Num.Two, false, "aoeu");
813 try expect(!ok);
914 try foo(false, Num.One, false, "aoeu");
test/behavior/slice.zig-1
......@@ -248,7 +248,6 @@ test "result location zero sized array inside struct field implicit cast to slic
248248test "runtime safety lets us slice from len..len" {
249249 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
250250 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
251 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
252251
253252 var an_array = [_]u8{ 1, 2, 3 };
254253 try expect(mem.eql(u8, sliceFromLenToLen(an_array[0..], 3, 3), ""));
test/behavior/src.zig+3
......@@ -1,7 +1,10 @@
11const std = @import("std");
2const builtin = @import("builtin");
23const expect = std.testing.expect;
34
45test "@src" {
6 if (builtin.zig_backend != .stage1) return error.SkipZigTest;
7
58 try doTheTest();
69}
710
test/behavior/struct.zig+4-8
......@@ -86,7 +86,8 @@ const StructFoo = struct {
8686
8787test "structs" {
8888 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
89 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
89 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
90 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9091
9192 var foo: StructFoo = undefined;
9293 @memset(@ptrCast([*]u8, &foo), 0, @sizeOf(StructFoo));
......@@ -248,7 +249,8 @@ test "usingnamespace within struct scope" {
248249
249250test "struct field init with catch" {
250251 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
251 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
252 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
253 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
252254
253255 const S = struct {
254256 fn doTheTest() !void {
......@@ -310,7 +312,6 @@ test "struct point to self" {
310312 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
311313 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
312314 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
313 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
314315
315316 var root: Node = undefined;
316317 root.val.x = 1;
......@@ -350,7 +351,6 @@ test "return empty struct from fn" {
350351 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
351352 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
352353 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
353 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
354354
355355 _ = testReturnEmptyStructFromFn();
356356}
......@@ -364,7 +364,6 @@ test "pass slice of empty struct to fn" {
364364 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
365365 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
366366 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
367 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
368367
369368 try expect(testPassSliceOfEmptyStructToFn(&[_]EmptyStruct2{EmptyStruct2{}}) == 1);
370369}
......@@ -409,7 +408,6 @@ test "align 1 field before self referential align 8 field as slice return type"
409408 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
410409 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
411410 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
412 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
413411
414412 const result = alloc(Expr);
415413 try expect(result.len == 0);
......@@ -670,7 +668,6 @@ test "default struct initialization fields" {
670668 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
671669 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
672670 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
673 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
674671
675672 const S = struct {
676673 a: i32 = 1234,
......@@ -936,7 +933,6 @@ test "anonymous struct literal syntax" {
936933 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
937934 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
938935 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
939 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
940936
941937 const S = struct {
942938 const Point = struct {
test/behavior/this.zig+7
......@@ -1,4 +1,5 @@
11const expect = @import("std").testing.expect;
2const builtin = @import("builtin");
23
34const module = @This();
45
......@@ -20,10 +21,16 @@ fn add(x: i32, y: i32) i32 {
2021}
2122
2223test "this refer to module call private fn" {
24 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
25 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
26
2327 try expect(module.add(1, 2) == 3);
2428}
2529
2630test "this refer to container" {
31 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
32 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
33
2734 var pt: Point(i32) = undefined;
2835 pt.x = 12;
2936 pt.y = 34;
test/behavior/try.zig+13-1
......@@ -1,6 +1,12 @@
1const expect = @import("std").testing.expect;
1const std = @import("std");
2const builtin = @import("builtin");
3const expect = std.testing.expect;
24
35test "try on error union" {
6 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9
410 try tryOnErrorUnionImpl();
511 comptime try tryOnErrorUnionImpl();
612}
......@@ -19,6 +25,9 @@ fn returnsTen() anyerror!i32 {
1925}
2026
2127test "try without vars" {
28 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
29 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
30
2231 const result1 = if (failIfTrue(true)) 1 else |_| @as(i32, 2);
2332 try expect(result1 == 2);
2433
......@@ -35,6 +44,9 @@ fn failIfTrue(ok: bool) anyerror!void {
3544}
3645
3746test "try then not executed with assignment" {
47 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
48 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
49
3850 if (failIfTrue(true)) {
3951 unreachable;
4052 } else |err| {
test/behavior/type_info.zig+11
......@@ -186,6 +186,10 @@ fn testErrorSet() !void {
186186}
187187
188188test "type info: enum info" {
189 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
190 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
191 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
192
189193 try testEnum();
190194 comptime try testEnum();
191195}
......@@ -249,6 +253,9 @@ fn testUnion() !void {
249253}
250254
251255test "type info: struct info" {
256 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
257 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
258
252259 try testStruct();
253260 comptime try testStruct();
254261}
......@@ -439,6 +446,10 @@ test "type info for async frames" {
439446}
440447
441448test "Declarations are returned in declaration order" {
449 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
450 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
451 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
452
442453 const S = struct {
443454 const a = 1;
444455 const b = 2;
test/behavior/undefined.zig+11
......@@ -16,6 +16,8 @@ test "init static array to undefined" {
1616 // This test causes `initStaticArray()` to be codegen'd, and the
1717 // C backend does not yet support returning arrays, so it fails
1818 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
19 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
20 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1921
2022 try expect(static_array[0] == 1);
2123 try expect(static_array[4] == 2);
......@@ -43,6 +45,9 @@ fn setFooX(foo: *Foo) void {
4345}
4446
4547test "assign undefined to struct" {
48 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
49 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
50
4651 comptime {
4752 var foo: Foo = undefined;
4853 setFooX(&foo);
......@@ -56,6 +61,9 @@ test "assign undefined to struct" {
5661}
5762
5863test "assign undefined to struct with method" {
64 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
65 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
66
5967 comptime {
6068 var foo: Foo = undefined;
6169 foo.setFooXMethod();
......@@ -69,6 +77,9 @@ test "assign undefined to struct with method" {
6977}
7078
7179test "type name of undefined" {
80 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
81 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
82
7283 const x = undefined;
7384 try expect(mem.eql(u8, @typeName(@TypeOf(x)), "@Type(.Undefined)"));
7485}
test/behavior/underscore.zig+5
......@@ -1,4 +1,5 @@
11const std = @import("std");
2const builtin = @import("builtin");
23const expect = std.testing.expect;
34
45test "ignore lval with underscore" {
......@@ -6,6 +7,10 @@ test "ignore lval with underscore" {
67}
78
89test "ignore lval with underscore (while loop)" {
10 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
11 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
12 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
13
914 while (optionalReturnError()) |_| {
1015 while (optionalReturnError()) |_| {
1116 break;
test/behavior/union.zig+139
......@@ -10,6 +10,10 @@ const Foo = union {
1010};
1111
1212test "basic unions" {
13 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
14 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
16
1317 var foo = Foo{ .int = 1 };
1418 try expect(foo.int == 1);
1519 foo = Foo{ .float = 12.34 };
......@@ -17,6 +21,10 @@ test "basic unions" {
1721}
1822
1923test "init union with runtime value" {
24 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
25 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
26 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
27
2028 var foo: Foo = undefined;
2129
2230 setFloat(&foo, 12.34);
......@@ -35,6 +43,9 @@ fn setInt(foo: *Foo, x: i32) void {
3543}
3644
3745test "comptime union field access" {
46 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
47 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
48
3849 comptime {
3950 var foo = Foo{ .int = 0 };
4051 try expect(foo.int == 0);
......@@ -50,6 +61,10 @@ const FooExtern = extern union {
5061};
5162
5263test "basic extern unions" {
64 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
65 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
66 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
67
5368 var foo = FooExtern{ .int = 1 };
5469 try expect(foo.int == 1);
5570 foo.float = 12.34;
......@@ -61,10 +76,16 @@ const ExternPtrOrInt = extern union {
6176 int: u64,
6277};
6378test "extern union size" {
79 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
80 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
81
6482 comptime try expect(@sizeOf(ExternPtrOrInt) == 8);
6583}
6684
6785test "0-sized extern union definition" {
86 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
87 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
88
6889 const U = extern union {
6990 a: void,
7091 const f = 1;
......@@ -94,6 +115,9 @@ const err = @as(anyerror!Agg, Agg{
94115const array = [_]Value{ v1, v2, v1, v2 };
95116
96117test "unions embedded in aggregate types" {
118 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
119 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
120
97121 switch (array[1]) {
98122 Value.Array => |arr| try expect(arr[4] == 3),
99123 else => unreachable,
......@@ -105,6 +129,9 @@ test "unions embedded in aggregate types" {
105129}
106130
107131test "access a member of tagged union with conflicting enum tag name" {
132 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
133 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
134
108135 const Bar = union(enum) {
109136 A: A,
110137 B: B,
......@@ -117,6 +144,10 @@ test "access a member of tagged union with conflicting enum tag name" {
117144}
118145
119146test "constant tagged union with payload" {
147 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
148 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
149 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
150
120151 var empty = TaggedUnionWithPayload{ .Empty = {} };
121152 var full = TaggedUnionWithPayload{ .Full = 13 };
122153 shouldBeEmpty(empty);
......@@ -143,6 +174,9 @@ const TaggedUnionWithPayload = union(enum) {
143174};
144175
145176test "union alignment" {
177 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
178 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
179
146180 comptime {
147181 try expect(@alignOf(AlignTestTaggedUnion) >= @alignOf([9]u8));
148182 try expect(@alignOf(AlignTestTaggedUnion) >= @alignOf(u64));
......@@ -162,11 +196,18 @@ const Payload = union(Letter) {
162196};
163197
164198test "union with specified enum tag" {
199 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
200 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
201 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
202
165203 try doTest();
166204 comptime try doTest();
167205}
168206
169207test "packed union generates correctly aligned LLVM type" {
208 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
209 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
210 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
170211 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
171212
172213 const U = packed union {
......@@ -204,6 +245,10 @@ fn testComparison() !void {
204245}
205246
206247test "comparison between union and enum literal" {
248 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
249 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
250 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
251
207252 try testComparison();
208253 comptime try testComparison();
209254}
......@@ -215,6 +260,10 @@ const TheUnion = union(TheTag) {
215260 C: i32,
216261};
217262test "cast union to tag type of union" {
263 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
264 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
265 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
266
218267 try testCastUnionToTag();
219268 comptime try testCastUnionToTag();
220269}
......@@ -225,12 +274,19 @@ fn testCastUnionToTag() !void {
225274}
226275
227276test "union field access gives the enum values" {
277 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
278 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
279
228280 try expect(TheUnion.A == TheTag.A);
229281 try expect(TheUnion.B == TheTag.B);
230282 try expect(TheUnion.C == TheTag.C);
231283}
232284
233285test "cast tag type of union to union" {
286 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
287 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
288 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
289
234290 var x: Value2 = Letter2.B;
235291 try expect(@as(Letter2, x) == Letter2.B);
236292}
......@@ -242,6 +298,10 @@ const Value2 = union(Letter2) {
242298};
243299
244300test "implicit cast union to its tag type" {
301 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
302 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
303 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
304
245305 var x: Value2 = Letter2.B;
246306 try expect(x == Letter2.B);
247307 try giveMeLetterB(x);
......@@ -258,6 +318,10 @@ pub const PackThis = union(enum) {
258318};
259319
260320test "constant packed union" {
321 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
322 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
323 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
324
261325 try testConstPackedUnion(&[_]PackThis{PackThis{ .StringLiteral = 1 }});
262326}
263327
......@@ -272,6 +336,10 @@ const MultipleChoice = union(enum(u32)) {
272336 D = 1000,
273337};
274338test "simple union(enum(u32))" {
339 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
340 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
341 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
342
275343 var x = MultipleChoice.C;
276344 try expect(x == MultipleChoice.C);
277345 try expect(@enumToInt(@as(Tag(MultipleChoice), x)) == 60);
......@@ -282,6 +350,9 @@ const PackedPtrOrInt = packed union {
282350 int: u64,
283351};
284352test "packed union size" {
353 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
354 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
355
285356 comptime try expect(@sizeOf(PackedPtrOrInt) == 8);
286357}
287358
......@@ -289,10 +360,17 @@ const ZeroBits = union {
289360 OnlyField: void,
290361};
291362test "union with only 1 field which is void should be zero bits" {
363 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
364 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
365
292366 comptime try expect(@sizeOf(ZeroBits) == 0);
293367}
294368
295369test "tagged union initialization with runtime void" {
370 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
371 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
372 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
373
296374 try expect(testTaggedUnionInit({}));
297375}
298376
......@@ -309,6 +387,10 @@ fn testTaggedUnionInit(x: anytype) bool {
309387pub const UnionEnumNoPayloads = union(enum) { A, B };
310388
311389test "tagged union with no payloads" {
390 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
391 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
392 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
393
312394 const a = UnionEnumNoPayloads{ .B = {} };
313395 switch (a) {
314396 Tag(UnionEnumNoPayloads).A => @panic("wrong"),
......@@ -317,6 +399,10 @@ test "tagged union with no payloads" {
317399}
318400
319401test "union with only 1 field casted to its enum type" {
402 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
403 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
404 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
405
320406 const Literal = union(enum) {
321407 Number: f64,
322408 Bool: bool,
......@@ -334,6 +420,9 @@ test "union with only 1 field casted to its enum type" {
334420}
335421
336422test "union with one member defaults to u0 tag type" {
423 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
424 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
425
337426 const U0 = union(enum) {
338427 X: u32,
339428 };
......@@ -348,6 +437,10 @@ const Foo1 = union(enum) {
348437var glbl: Foo1 = undefined;
349438
350439test "global union with single field is correctly initialized" {
440 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
441 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
442 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
443
351444 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
352445 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
353446
......@@ -365,6 +458,10 @@ pub const FooUnion = union(enum) {
365458var glbl_array: [2]FooUnion = undefined;
366459
367460test "initialize global array of union" {
461 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
462 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
463 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
464
368465 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
369466 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
370467
......@@ -375,6 +472,10 @@ test "initialize global array of union" {
375472}
376473
377474test "update the tag value for zero-sized unions" {
475 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
476 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
477 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
478
378479 const S = union(enum) {
379480 U0: void,
380481 U1: void,
......@@ -386,6 +487,10 @@ test "update the tag value for zero-sized unions" {
386487}
387488
388489test "union initializer generates padding only if needed" {
490 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
491 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
492 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
493
389494 const U = union(enum) {
390495 A: u24,
391496 };
......@@ -395,6 +500,10 @@ test "union initializer generates padding only if needed" {
395500}
396501
397502test "runtime tag name with single field" {
503 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
504 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
505 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
506
398507 const U = union(enum) {
399508 A: i32,
400509 };
......@@ -404,6 +513,10 @@ test "runtime tag name with single field" {
404513}
405514
406515test "method call on an empty union" {
516 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
517 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
518 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
519
407520 const S = struct {
408521 const MyUnion = union(MyUnionTag) {
409522 pub const MyUnionTag = enum { X1, X2 };
......@@ -441,6 +554,10 @@ const FooNoVoid = union(enum) {
441554const Baz = enum { A, B, C, D };
442555
443556test "tagged union type" {
557 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
558 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
559 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
560
444561 const foo1 = TaggedFoo{ .One = 13 };
445562 const foo2 = TaggedFoo{
446563 .Two = Point{
......@@ -460,6 +577,10 @@ test "tagged union type" {
460577}
461578
462579test "tagged union as return value" {
580 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
581 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
582 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
583
463584 switch (returnAnInt(13)) {
464585 TaggedFoo.One => |value| try expect(value == 13),
465586 else => unreachable,
......@@ -471,6 +592,10 @@ fn returnAnInt(x: i32) TaggedFoo {
471592}
472593
473594test "tagged union with all void fields but a meaningful tag" {
595 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
596 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
597 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
598
474599 const S = struct {
475600 const B = union(enum) {
476601 c: C,
......@@ -496,6 +621,9 @@ test "tagged union with all void fields but a meaningful tag" {
496621
497622test "union(enum(u32)) with specified and unspecified tag values" {
498623 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
624 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
625 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
626 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
499627
500628 comptime try expect(Tag(Tag(MultipleChoice2)) == u32);
501629 try testEnumWithSpecifiedAndUnspecifiedTagValues(MultipleChoice2{ .C = 123 });
......@@ -558,6 +686,10 @@ const PartialInstWithPayload = union(enum) {
558686};
559687
560688test "union with only 1 field casted to its enum type which has enum value specified" {
689 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
690 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
691 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
692
561693 const Literal = union(enum) {
562694 Number: f64,
563695 Bool: bool,
......@@ -638,6 +770,10 @@ fn Setter(attr: Attribute) type {
638770}
639771
640772test "return union init with void payload" {
773 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
774 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
775 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
776
641777 const S = struct {
642778 fn entry() !void {
643779 try expect(func().state == State.one);
......@@ -948,6 +1084,9 @@ test "union enum type gets a separate scope" {
9481084test "global variable struct contains union initialized to non-most-aligned field" {
9491085 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
9501086 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1087 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
1088 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1089 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9511090
9521091 const T = struct {
9531092 const U = union(enum) {
test/behavior/usingnamespace.zig+19
......@@ -1,4 +1,5 @@
11const std = @import("std");
2const builtin = @import("builtin");
23const expect = std.testing.expect;
34
45const A = struct {
......@@ -10,6 +11,9 @@ const C = struct {
1011};
1112
1213test "basic usingnamespace" {
14 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
15 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
16
1317 try std.testing.expect(C.B == bool);
1418}
1519
......@@ -20,6 +24,9 @@ fn Foo(comptime T: type) type {
2024}
2125
2226test "usingnamespace inside a generic struct" {
27 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
28 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
29
2330 const std2 = Foo(std);
2431 const testing2 = Foo(std.testing);
2532 try std2.testing.expect(true);
......@@ -31,11 +38,17 @@ usingnamespace struct {
3138};
3239
3340test "usingnamespace does not redeclare an imported variable" {
41 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
42 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
43
3444 comptime try std.testing.expect(@This().foo == 42);
3545}
3646
3747usingnamespace @import("usingnamespace/foo.zig");
3848test "usingnamespace omits mixing in private functions" {
49 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
50 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
51
3952 try expect(@This().privateFunction());
4053 try expect(!@This().printText());
4154}
......@@ -44,10 +57,16 @@ fn privateFunction() bool {
4457}
4558
4659test {
60 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
61 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
62
4763 _ = @import("usingnamespace/import_segregation.zig");
4864}
4965
5066usingnamespace @import("usingnamespace/a.zig");
5167test "two files usingnamespace import each other" {
68 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
69 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
70
5271 try expect(@This().ok());
5372}
test/behavior/void.zig+11
......@@ -1,4 +1,5 @@
11const expect = @import("std").testing.expect;
2const builtin = @import("builtin");
23
34const Foo = struct {
45 a: void,
......@@ -18,6 +19,9 @@ test "compare void with void compile time known" {
1819}
1920
2021test "iterate over a void slice" {
22 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
23 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
24
2125 var j: usize = 0;
2226 for (times(10)) |_, i| {
2327 try expect(i == j);
......@@ -30,11 +34,18 @@ fn times(n: usize) []const void {
3034}
3135
3236test "void optional" {
37 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
38 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
39 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
40
3341 var x: ?void = {};
3442 try expect(x != null);
3543}
3644
3745test "void array as a local variable initializer" {
46 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
47 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
48
3849 var x = [_]void{{}} ** 1004;
3950 _ = x[0];
4051}
test/behavior/while.zig+47
......@@ -1,7 +1,11 @@
11const std = @import("std");
2const builtin = @import("builtin");
23const expect = std.testing.expect;
34
45test "while loop" {
6 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
8
59 var i: i32 = 0;
610 while (i < 4) {
711 i += 1;
......@@ -19,6 +23,9 @@ fn whileLoop2() i32 {
1923}
2024
2125test "static eval while" {
26 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
27 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
28
2229 try expect(static_eval_while_number == 1);
2330}
2431const static_eval_while_number = staticWhileLoop1();
......@@ -98,6 +105,10 @@ fn testBreakOuter() void {
98105}
99106
100107test "while copies its payload" {
108 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
109 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
110 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
111
101112 const S = struct {
102113 fn doTheTest() !void {
103114 var tmp: ?i32 = 10;
......@@ -131,6 +142,10 @@ fn runContinueAndBreakTest() !void {
131142}
132143
133144test "while with optional as condition" {
145 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
146 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
147 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
148
134149 numbers_left = 10;
135150 var sum: i32 = 0;
136151 while (getNumberOrNull()) |value| {
......@@ -140,6 +155,10 @@ test "while with optional as condition" {
140155}
141156
142157test "while with optional as condition with else" {
158 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
159 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
160 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
161
143162 numbers_left = 10;
144163 var sum: i32 = 0;
145164 var got_else: i32 = 0;
......@@ -154,6 +173,10 @@ test "while with optional as condition with else" {
154173}
155174
156175test "while with error union condition" {
176 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
177 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
178 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
179
157180 numbers_left = 10;
158181 var sum: i32 = 0;
159182 var got_else: i32 = 0;
......@@ -182,6 +205,10 @@ test "while on bool with else result follow break prong" {
182205}
183206
184207test "while on optional with else result follow else prong" {
208 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
209 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
210 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
211
185212 const result = while (returnNull()) |value| {
186213 break value;
187214 } else @as(i32, 2);
......@@ -189,6 +216,10 @@ test "while on optional with else result follow else prong" {
189216}
190217
191218test "while on optional with else result follow break prong" {
219 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
220 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
221 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
222
192223 const result = while (returnOptional(10)) |value| {
193224 break value;
194225 } else @as(i32, 2);
......@@ -215,6 +246,10 @@ fn returnTrue() bool {
215246}
216247
217248test "return with implicit cast from while loop" {
249 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
250 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
251 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
252
218253 returnWithImplicitCastFromWhileLoopTest() catch unreachable;
219254}
220255fn returnWithImplicitCastFromWhileLoopTest() anyerror!void {
......@@ -224,6 +259,10 @@ fn returnWithImplicitCastFromWhileLoopTest() anyerror!void {
224259}
225260
226261test "while on error union with else result follow else prong" {
262 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
263 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
264 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
265
227266 const result = while (returnError()) |value| {
228267 break value;
229268 } else |_| @as(i32, 2);
......@@ -231,6 +270,10 @@ test "while on error union with else result follow else prong" {
231270}
232271
233272test "while on error union with else result follow break prong" {
273 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
274 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
275 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
276
234277 const result = while (returnSuccess(10)) |value| {
235278 break value;
236279 } else |_| @as(i32, 2);
......@@ -253,6 +296,10 @@ test "while bool 2 break statements and an else" {
253296}
254297
255298test "while optional 2 break statements and an else" {
299 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
300 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
301 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
302
256303 const S = struct {
257304 fn entry(opt_t: ?bool, f: bool) !void {
258305 var ok = false;