authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-01-17 20:30:44+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-01-17 20:30:44+01:00
logab204f81b0632661f9f839ba33df19dfa0b5a84a
tree261aa1924635b76450195a3618b90af84ed26d5c
parent9b715cb46250cbdd610f081b976b2e161df57218

stage2: return error.SkipZigTest in unsupported behavior tests


5 files changed, 350 insertions(+), 305 deletions(-)

test/behavior.zig+185-191
...@@ -16,202 +16,196 @@ test {...@@ -16,202 +16,196 @@ test {
16 _ = @import("behavior/type.zig");16 _ = @import("behavior/type.zig");
17 _ = @import("behavior/bugs/655.zig");17 _ = @import("behavior/bugs/655.zig");
18 _ = @import("behavior/bool.zig");18 _ = @import("behavior/bool.zig");
19 _ = @import("behavior/align.zig");
20 _ = @import("behavior/array.zig");
1921
20 if (builtin.zig_backend != .stage2_arm) {22 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64) {
21 // Tests that pass for stage1, llvm backend, C backend, wasm backend and x86_64 backend.23 // Tests that pass for stage1, llvm backend, C backend, wasm backend.
22 _ = @import("behavior/align_simple.zig");24 _ = @import("behavior/basic.zig");
23 _ = @import("behavior/array_simple.zig");25 _ = @import("behavior/bitcast.zig");
26 _ = @import("behavior/bugs/624.zig");
27 _ = @import("behavior/bugs/704.zig");
28 _ = @import("behavior/bugs/1486.zig");
29 _ = @import("behavior/bugs/2692.zig");
30 _ = @import("behavior/bugs/2889.zig");
31 _ = @import("behavior/bugs/3046.zig");
32 _ = @import("behavior/bugs/3586.zig");
33 _ = @import("behavior/bugs/4560.zig");
34 _ = @import("behavior/bugs/4769_a.zig");
35 _ = @import("behavior/bugs/4769_b.zig");
36 _ = @import("behavior/bugs/4954.zig");
37 _ = @import("behavior/byval_arg_var.zig");
38 _ = @import("behavior/call.zig");
39 _ = @import("behavior/cast.zig");
40 _ = @import("behavior/defer.zig");
41 _ = @import("behavior/enum.zig");
42 _ = @import("behavior/error.zig");
43 _ = @import("behavior/for.zig");
44 _ = @import("behavior/generics.zig");
45 _ = @import("behavior/if.zig");
46 _ = @import("behavior/import.zig");
47 _ = @import("behavior/incomplete_struct_param_tld.zig");
48 _ = @import("behavior/inttoptr.zig");
49 _ = @import("behavior/member_func.zig");
50 _ = @import("behavior/null.zig");
51 _ = @import("behavior/optional.zig");
52 _ = @import("behavior/pointers.zig");
53 _ = @import("behavior/ptrcast.zig");
54 _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
55 _ = @import("behavior/src.zig");
56 _ = @import("behavior/struct.zig");
57 _ = @import("behavior/this.zig");
58 _ = @import("behavior/truncate.zig");
59 _ = @import("behavior/try.zig");
60 _ = @import("behavior/undefined.zig");
61 _ = @import("behavior/underscore.zig");
62 _ = @import("behavior/usingnamespace.zig");
63 _ = @import("behavior/void.zig");
64 _ = @import("behavior/while.zig");
2465
25 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64) {66 if (builtin.zig_backend != .stage2_wasm) {
26 // Tests that pass for stage1, llvm backend, C backend, wasm backend.67 // Tests that pass for stage1, llvm backend, C backend
27 _ = @import("behavior/align.zig");68 _ = @import("behavior/cast_int.zig");
28 _ = @import("behavior/array.zig");69 _ = @import("behavior/int128.zig");
29 _ = @import("behavior/basic.zig");70 _ = @import("behavior/translate_c_macros.zig");
30 _ = @import("behavior/bitcast.zig");
31 _ = @import("behavior/bugs/624.zig");
32 _ = @import("behavior/bugs/704.zig");
33 _ = @import("behavior/bugs/1486.zig");
34 _ = @import("behavior/bugs/2692.zig");
35 _ = @import("behavior/bugs/2889.zig");
36 _ = @import("behavior/bugs/3046.zig");
37 _ = @import("behavior/bugs/3586.zig");
38 _ = @import("behavior/bugs/4560.zig");
39 _ = @import("behavior/bugs/4769_a.zig");
40 _ = @import("behavior/bugs/4769_b.zig");
41 _ = @import("behavior/bugs/4954.zig");
42 _ = @import("behavior/byval_arg_var.zig");
43 _ = @import("behavior/call.zig");
44 _ = @import("behavior/cast.zig");
45 _ = @import("behavior/defer.zig");
46 _ = @import("behavior/enum.zig");
47 _ = @import("behavior/error.zig");
48 _ = @import("behavior/for.zig");
49 _ = @import("behavior/generics.zig");
50 _ = @import("behavior/if.zig");
51 _ = @import("behavior/import.zig");
52 _ = @import("behavior/incomplete_struct_param_tld.zig");
53 _ = @import("behavior/inttoptr.zig");
54 _ = @import("behavior/member_func.zig");
55 _ = @import("behavior/null.zig");
56 _ = @import("behavior/optional.zig");
57 _ = @import("behavior/pointers.zig");
58 _ = @import("behavior/ptrcast.zig");
59 _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
60 _ = @import("behavior/src.zig");
61 _ = @import("behavior/struct.zig");
62 _ = @import("behavior/this.zig");
63 _ = @import("behavior/truncate.zig");
64 _ = @import("behavior/try.zig");
65 _ = @import("behavior/undefined.zig");
66 _ = @import("behavior/underscore.zig");
67 _ = @import("behavior/usingnamespace.zig");
68 _ = @import("behavior/void.zig");
69 _ = @import("behavior/while.zig");
7071
71 if (builtin.zig_backend != .stage2_wasm) {72 if (builtin.zig_backend != .stage2_c) {
72 // Tests that pass for stage1, llvm backend, C backend73 // Tests that pass for stage1 and the llvm backend.
73 _ = @import("behavior/cast_int.zig");74 _ = @import("behavior/align_llvm.zig");
74 _ = @import("behavior/int128.zig");75 _ = @import("behavior/alignof.zig");
75 _ = @import("behavior/translate_c_macros.zig");76 _ = @import("behavior/array_llvm.zig");
77 _ = @import("behavior/atomics.zig");
78 _ = @import("behavior/basic_llvm.zig");
79 _ = @import("behavior/bit_shifting.zig");
80 _ = @import("behavior/bugs/394.zig");
81 _ = @import("behavior/bugs/656.zig");
82 _ = @import("behavior/bugs/1277.zig");
83 _ = @import("behavior/bugs/1310.zig");
84 _ = @import("behavior/bugs/1381.zig");
85 _ = @import("behavior/bugs/1500.zig");
86 _ = @import("behavior/bugs/1735.zig");
87 _ = @import("behavior/bugs/1741.zig");
88 _ = @import("behavior/bugs/2006.zig");
89 _ = @import("behavior/bugs/2578.zig");
90 _ = @import("behavior/bugs/3007.zig");
91 _ = @import("behavior/bugs/3112.zig");
92 _ = @import("behavior/bugs/3367.zig");
93 _ = @import("behavior/bugs/7250.zig");
94 _ = @import("behavior/bugs/9584.zig");
95 _ = @import("behavior/cast_llvm.zig");
96 _ = @import("behavior/enum_llvm.zig");
97 _ = @import("behavior/error_llvm.zig");
98 _ = @import("behavior/eval.zig");
99 _ = @import("behavior/floatop.zig");
100 _ = @import("behavior/fn.zig");
101 _ = @import("behavior/generics_llvm.zig");
102 _ = @import("behavior/math.zig");
103 _ = @import("behavior/maximum_minimum.zig");
104 _ = @import("behavior/merge_error_sets.zig");
105 _ = @import("behavior/namespace_depends_on_compile_var.zig");
106 _ = @import("behavior/null_llvm.zig");
107 _ = @import("behavior/optional_llvm.zig");
108 _ = @import("behavior/popcount.zig");
109 _ = @import("behavior/saturating_arithmetic.zig");
110 _ = @import("behavior/sizeof_and_typeof.zig");
111 _ = @import("behavior/slice.zig");
112 _ = @import("behavior/struct_llvm.zig");
113 _ = @import("behavior/switch.zig");
114 _ = @import("behavior/union.zig");
115 _ = @import("behavior/widening.zig");
76116
77 if (builtin.zig_backend != .stage2_c) {117 if (builtin.zig_backend != .stage1) {
78 // Tests that pass for stage1 and the llvm backend.118 // When all comptime_memory.zig tests pass, #9646 can be closed.
79 _ = @import("behavior/align_llvm.zig");119 // _ = @import("behavior/comptime_memory.zig");
80 _ = @import("behavior/alignof.zig");120 _ = @import("behavior/slice_stage2.zig");
81 _ = @import("behavior/array_llvm.zig");121 } else {
82 _ = @import("behavior/atomics.zig");122 // Tests that only pass for the stage1 backend.
83 _ = @import("behavior/basic_llvm.zig");123 _ = @import("behavior/align_stage1.zig");
84 _ = @import("behavior/bit_shifting.zig");124 if (builtin.os.tag != .wasi) {
85 _ = @import("behavior/bugs/394.zig");125 _ = @import("behavior/asm.zig");
86 _ = @import("behavior/bugs/656.zig");126 _ = @import("behavior/async_fn.zig");
87 _ = @import("behavior/bugs/1277.zig");127 }
88 _ = @import("behavior/bugs/1310.zig");128 _ = @import("behavior/await_struct.zig");
89 _ = @import("behavior/bugs/1381.zig");129 _ = @import("behavior/bitcast_stage1.zig");
90 _ = @import("behavior/bugs/1500.zig");130 _ = @import("behavior/bitreverse.zig");
91 _ = @import("behavior/bugs/1735.zig");131 _ = @import("behavior/bugs/421.zig");
92 _ = @import("behavior/bugs/1741.zig");132 _ = @import("behavior/bugs/529.zig");
93 _ = @import("behavior/bugs/2006.zig");133 _ = @import("behavior/bugs/718.zig");
94 _ = @import("behavior/bugs/2578.zig");134 _ = @import("behavior/bugs/726.zig");
95 _ = @import("behavior/bugs/3007.zig");135 _ = @import("behavior/bugs/828.zig");
96 _ = @import("behavior/bugs/3112.zig");136 _ = @import("behavior/bugs/920.zig");
97 _ = @import("behavior/bugs/3367.zig");137 _ = @import("behavior/bugs/1025.zig");
98 _ = @import("behavior/bugs/7250.zig");138 _ = @import("behavior/bugs/1076.zig");
99 _ = @import("behavior/bugs/9584.zig");139 _ = @import("behavior/bugs/1120.zig");
100 _ = @import("behavior/cast_llvm.zig");140 _ = @import("behavior/bugs/1421.zig");
101 _ = @import("behavior/enum_llvm.zig");141 _ = @import("behavior/bugs/1442.zig");
102 _ = @import("behavior/error_llvm.zig");142 _ = @import("behavior/bugs/1607.zig");
103 _ = @import("behavior/eval.zig");143 _ = @import("behavior/bugs/1851.zig");
104 _ = @import("behavior/floatop.zig");144 _ = @import("behavior/bugs/1914.zig");
105 _ = @import("behavior/fn.zig");145 _ = @import("behavior/bugs/2114.zig");
106 _ = @import("behavior/generics_llvm.zig");146 _ = @import("behavior/bugs/3384.zig");
107 _ = @import("behavior/math.zig");147 _ = @import("behavior/bugs/3742.zig");
108 _ = @import("behavior/maximum_minimum.zig");148 _ = @import("behavior/bugs/3779.zig");
109 _ = @import("behavior/merge_error_sets.zig");149 _ = @import("behavior/bugs/4328.zig");
110 _ = @import("behavior/namespace_depends_on_compile_var.zig");150 _ = @import("behavior/bugs/5398.zig");
111 _ = @import("behavior/null_llvm.zig");151 _ = @import("behavior/bugs/5413.zig");
112 _ = @import("behavior/optional_llvm.zig");152 _ = @import("behavior/bugs/5474.zig");
113 _ = @import("behavior/popcount.zig");153 _ = @import("behavior/bugs/5487.zig");
114 _ = @import("behavior/saturating_arithmetic.zig");154 _ = @import("behavior/bugs/6456.zig");
115 _ = @import("behavior/sizeof_and_typeof.zig");155 _ = @import("behavior/bugs/6781.zig");
116 _ = @import("behavior/slice.zig");156 _ = @import("behavior/bugs/7003.zig");
117 _ = @import("behavior/struct_llvm.zig");157 _ = @import("behavior/bugs/7027.zig");
118 _ = @import("behavior/switch.zig");158 _ = @import("behavior/bugs/7047.zig");
119 _ = @import("behavior/union.zig");159 _ = @import("behavior/bugs/10147.zig");
120 _ = @import("behavior/widening.zig");160 _ = @import("behavior/byteswap.zig");
121161 _ = @import("behavior/call_stage1.zig");
122 if (builtin.zig_backend != .stage1) {162 _ = @import("behavior/cast_stage1.zig");
123 // When all comptime_memory.zig tests pass, #9646 can be closed.163 _ = @import("behavior/const_slice_child.zig");
124 // _ = @import("behavior/comptime_memory.zig");164 _ = @import("behavior/defer_stage1.zig");
125 _ = @import("behavior/slice_stage2.zig");165 _ = @import("behavior/enum_stage1.zig");
126 } else {166 _ = @import("behavior/error_stage1.zig");
127 // Tests that only pass for the stage1 backend.167 _ = @import("behavior/eval_stage1.zig");
128 _ = @import("behavior/align_stage1.zig");168 _ = @import("behavior/field_parent_ptr.zig");
129 if (builtin.os.tag != .wasi) {169 _ = @import("behavior/floatop_stage1.zig");
130 _ = @import("behavior/asm.zig");170 _ = @import("behavior/fn_stage1.zig");
131 _ = @import("behavior/async_fn.zig");171 _ = @import("behavior/fn_delegation.zig");
132 }172 _ = @import("behavior/for_stage1.zig");
133 _ = @import("behavior/await_struct.zig");173 _ = @import("behavior/if_stage1.zig");
134 _ = @import("behavior/bitcast_stage1.zig");174 _ = @import("behavior/ir_block_deps.zig");
135 _ = @import("behavior/bitreverse.zig");175 _ = @import("behavior/math_stage1.zig");
136 _ = @import("behavior/bugs/421.zig");176 _ = @import("behavior/misc.zig");
137 _ = @import("behavior/bugs/529.zig");177 _ = @import("behavior/muladd.zig");
138 _ = @import("behavior/bugs/718.zig");178 _ = @import("behavior/null_stage1.zig");
139 _ = @import("behavior/bugs/726.zig");179 _ = @import("behavior/optional_stage1.zig");
140 _ = @import("behavior/bugs/828.zig");180 _ = @import("behavior/pointers_stage1.zig");
141 _ = @import("behavior/bugs/920.zig");181 _ = @import("behavior/popcount_stage1.zig");
142 _ = @import("behavior/bugs/1025.zig");182 _ = @import("behavior/ptrcast_stage1.zig");
143 _ = @import("behavior/bugs/1076.zig");183 _ = @import("behavior/reflection.zig");
144 _ = @import("behavior/bugs/1120.zig");184 _ = @import("behavior/saturating_arithmetic_stage1.zig");
145 _ = @import("behavior/bugs/1421.zig");185 _ = @import("behavior/select.zig");
146 _ = @import("behavior/bugs/1442.zig");186 _ = @import("behavior/shuffle.zig");
147 _ = @import("behavior/bugs/1607.zig");187 _ = @import("behavior/sizeof_and_typeof_stage1.zig");
148 _ = @import("behavior/bugs/1851.zig");188 _ = @import("behavior/slice_stage1.zig");
149 _ = @import("behavior/bugs/1914.zig");189 _ = @import("behavior/struct_contains_null_ptr_itself.zig");
150 _ = @import("behavior/bugs/2114.zig");190 _ = @import("behavior/struct_contains_slice_of_itself.zig");
151 _ = @import("behavior/bugs/3384.zig");191 _ = @import("behavior/struct_stage1.zig");
152 _ = @import("behavior/bugs/3742.zig");192 _ = @import("behavior/switch_prong_err_enum.zig");
153 _ = @import("behavior/bugs/3779.zig");193 _ = @import("behavior/switch_prong_implicit_cast.zig");
154 _ = @import("behavior/bugs/4328.zig");194 _ = @import("behavior/switch_stage1.zig");
155 _ = @import("behavior/bugs/5398.zig");195 _ = @import("behavior/truncate_stage1.zig");
156 _ = @import("behavior/bugs/5413.zig");196 _ = @import("behavior/tuple.zig");
157 _ = @import("behavior/bugs/5474.zig");197 _ = @import("behavior/type_stage1.zig");
158 _ = @import("behavior/bugs/5487.zig");198 _ = @import("behavior/type_info_stage1.zig");
159 _ = @import("behavior/bugs/6456.zig");199 _ = @import("behavior/typename.zig");
160 _ = @import("behavior/bugs/6781.zig");200 _ = @import("behavior/union_stage1.zig");
161 _ = @import("behavior/bugs/7003.zig");201 _ = @import("behavior/union_with_members.zig");
162 _ = @import("behavior/bugs/7027.zig");202 _ = @import("behavior/var_args.zig");
163 _ = @import("behavior/bugs/7047.zig");203 _ = @import("behavior/vector.zig");
164 _ = @import("behavior/bugs/10147.zig");204 if (builtin.target.cpu.arch == .wasm32) {
165 _ = @import("behavior/byteswap.zig");205 _ = @import("behavior/wasm.zig");
166 _ = @import("behavior/call_stage1.zig");
167 _ = @import("behavior/cast_stage1.zig");
168 _ = @import("behavior/const_slice_child.zig");
169 _ = @import("behavior/defer_stage1.zig");
170 _ = @import("behavior/enum_stage1.zig");
171 _ = @import("behavior/error_stage1.zig");
172 _ = @import("behavior/eval_stage1.zig");
173 _ = @import("behavior/field_parent_ptr.zig");
174 _ = @import("behavior/floatop_stage1.zig");
175 _ = @import("behavior/fn_stage1.zig");
176 _ = @import("behavior/fn_delegation.zig");
177 _ = @import("behavior/for_stage1.zig");
178 _ = @import("behavior/if_stage1.zig");
179 _ = @import("behavior/ir_block_deps.zig");
180 _ = @import("behavior/math_stage1.zig");
181 _ = @import("behavior/misc.zig");
182 _ = @import("behavior/muladd.zig");
183 _ = @import("behavior/null_stage1.zig");
184 _ = @import("behavior/optional_stage1.zig");
185 _ = @import("behavior/pointers_stage1.zig");
186 _ = @import("behavior/popcount_stage1.zig");
187 _ = @import("behavior/ptrcast_stage1.zig");
188 _ = @import("behavior/reflection.zig");
189 _ = @import("behavior/saturating_arithmetic_stage1.zig");
190 _ = @import("behavior/select.zig");
191 _ = @import("behavior/shuffle.zig");
192 _ = @import("behavior/sizeof_and_typeof_stage1.zig");
193 _ = @import("behavior/slice_stage1.zig");
194 _ = @import("behavior/struct_contains_null_ptr_itself.zig");
195 _ = @import("behavior/struct_contains_slice_of_itself.zig");
196 _ = @import("behavior/struct_stage1.zig");
197 _ = @import("behavior/switch_prong_err_enum.zig");
198 _ = @import("behavior/switch_prong_implicit_cast.zig");
199 _ = @import("behavior/switch_stage1.zig");
200 _ = @import("behavior/truncate_stage1.zig");
201 _ = @import("behavior/tuple.zig");
202 _ = @import("behavior/type_stage1.zig");
203 _ = @import("behavior/type_info_stage1.zig");
204 _ = @import("behavior/typename.zig");
205 _ = @import("behavior/union_stage1.zig");
206 _ = @import("behavior/union_with_members.zig");
207 _ = @import("behavior/var_args.zig");
208 _ = @import("behavior/vector.zig");
209 if (builtin.target.cpu.arch == .wasm32) {
210 _ = @import("behavior/wasm.zig");
211 }
212 _ = @import("behavior/while_stage1.zig");
213 _ = @import("behavior/translate_c_macros_stage1.zig");
214 }206 }
207 _ = @import("behavior/while_stage1.zig");
208 _ = @import("behavior/translate_c_macros_stage1.zig");
215 }209 }
216 }210 }
217 }211 }
test/behavior/align.zig+123
...@@ -3,7 +3,124 @@ const expect = std.testing.expect;...@@ -3,7 +3,124 @@ const expect = std.testing.expect;
3const builtin = @import("builtin");3const builtin = @import("builtin");
4const native_arch = builtin.target.cpu.arch;4const native_arch = builtin.target.cpu.arch;
55
6var foo: u8 align(4) = 100;
7
8test "global variable alignment" {
9 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
10
11 comptime try expect(@typeInfo(@TypeOf(&foo)).Pointer.alignment == 4);
12 comptime try expect(@TypeOf(&foo) == *align(4) u8);
13 {
14 const slice = @as(*[1]u8, &foo)[0..];
15 comptime try expect(@TypeOf(slice) == *align(4) [1]u8);
16 }
17 {
18 var runtime_zero: usize = 0;
19 const slice = @as(*[1]u8, &foo)[runtime_zero..];
20 comptime try expect(@TypeOf(slice) == []align(4) u8);
21 }
22}
23
24test "default alignment allows unspecified in type syntax" {
25 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
26
27 try expect(*u32 == *align(@alignOf(u32)) u32);
28}
29
30test "implicitly decreasing pointer alignment" {
31 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
32
33 const a: u32 align(4) = 3;
34 const b: u32 align(8) = 4;
35 try expect(addUnaligned(&a, &b) == 7);
36}
37
38fn addUnaligned(a: *align(1) const u32, b: *align(1) const u32) u32 {
39 return a.* + b.*;
40}
41
42test "@alignCast pointers" {
43 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
44
45 var x: u32 align(4) = 1;
46 expectsOnly1(&x);
47 try expect(x == 2);
48}
49fn expectsOnly1(x: *align(1) u32) void {
50 expects4(@alignCast(4, x));
51}
52fn expects4(x: *align(4) u32) void {
53 x.* += 1;
54}
55
56test "alignment of structs" {
57 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
58
59 try expect(@alignOf(struct {
60 a: i32,
61 b: *i32,
62 }) == @alignOf(usize));
63}
64
65test "alignment of >= 128-bit integer type" {
66 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
67
68 try expect(@alignOf(u128) == 16);
69 try expect(@alignOf(u129) == 16);
70}
71
72test "alignment of struct with 128-bit field" {
73 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
74
75 try expect(@alignOf(struct {
76 x: u128,
77 }) == 16);
78
79 comptime {
80 try expect(@alignOf(struct {
81 x: u128,
82 }) == 16);
83 }
84}
85
86test "size of extern struct with 128-bit field" {
87 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
88
89 try expect(@sizeOf(extern struct {
90 x: u128,
91 y: u8,
92 }) == 32);
93
94 comptime {
95 try expect(@sizeOf(extern struct {
96 x: u128,
97 y: u8,
98 }) == 32);
99 }
100}
101
102test "@ptrCast preserves alignment of bigger source" {
103 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
104
105 var x: u32 align(16) = 1234;
106 const ptr = @ptrCast(*u8, &x);
107 try expect(@TypeOf(ptr) == *align(16) u8);
108}
109
110test "alignstack" {
111 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
112
113 try expect(fnWithAlignedStack() == 1234);
114}
115
116fn fnWithAlignedStack() i32 {
117 @setAlignStack(256);
118 return 1234;
119}
120
6test "implicitly decreasing slice alignment" {121test "implicitly decreasing slice alignment" {
122 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
123
7 const a: u32 align(4) = 3;124 const a: u32 align(4) = 3;
8 const b: u32 align(8) = 4;125 const b: u32 align(8) = 4;
9 try expect(addUnalignedSlice(@as(*const [1]u32, &a)[0..], @as(*const [1]u32, &b)[0..]) == 7);126 try expect(addUnalignedSlice(@as(*const [1]u32, &a)[0..], @as(*const [1]u32, &b)[0..]) == 7);
...@@ -13,6 +130,8 @@ fn addUnalignedSlice(a: []align(1) const u32, b: []align(1) const u32) u32 {...@@ -13,6 +130,8 @@ fn addUnalignedSlice(a: []align(1) const u32, b: []align(1) const u32) u32 {
13}130}
14131
15test "specifying alignment allows pointer cast" {132test "specifying alignment allows pointer cast" {
133 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
134
16 try testBytesAlign(0x33);135 try testBytesAlign(0x33);
17}136}
18fn testBytesAlign(b: u8) !void {137fn testBytesAlign(b: u8) !void {
...@@ -22,6 +141,8 @@ fn testBytesAlign(b: u8) !void {...@@ -22,6 +141,8 @@ fn testBytesAlign(b: u8) !void {
22}141}
23142
24test "@alignCast slices" {143test "@alignCast slices" {
144 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
145
25 var array align(4) = [_]u32{ 1, 1 };146 var array align(4) = [_]u32{ 1, 1 };
26 const slice = array[0..];147 const slice = array[0..];
27 sliceExpectsOnly1(slice);148 sliceExpectsOnly1(slice);
...@@ -35,6 +156,8 @@ fn sliceExpects4(slice: []align(4) u32) void {...@@ -35,6 +156,8 @@ fn sliceExpects4(slice: []align(4) u32) void {
35}156}
36157
37test "return error union with 128-bit integer" {158test "return error union with 128-bit integer" {
159 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
160
38 try expect(3 == try give());161 try expect(3 == try give());
39}162}
40fn give() anyerror!u128 {163fn give() anyerror!u128 {
test/behavior/align_simple.zig deleted-99
...@@ -1,99 +0,0 @@
1const std = @import("std");
2const expect = std.testing.expect;
3const builtin = @import("builtin");
4const native_arch = builtin.target.cpu.arch;
5
6var foo: u8 align(4) = 100;
7
8test "global variable alignment" {
9 comptime try expect(@typeInfo(@TypeOf(&foo)).Pointer.alignment == 4);
10 comptime try expect(@TypeOf(&foo) == *align(4) u8);
11 {
12 const slice = @as(*[1]u8, &foo)[0..];
13 comptime try expect(@TypeOf(slice) == *align(4) [1]u8);
14 }
15 {
16 var runtime_zero: usize = 0;
17 const slice = @as(*[1]u8, &foo)[runtime_zero..];
18 comptime try expect(@TypeOf(slice) == []align(4) u8);
19 }
20}
21
22test "default alignment allows unspecified in type syntax" {
23 try expect(*u32 == *align(@alignOf(u32)) u32);
24}
25
26test "implicitly decreasing pointer alignment" {
27 const a: u32 align(4) = 3;
28 const b: u32 align(8) = 4;
29 try expect(addUnaligned(&a, &b) == 7);
30}
31
32fn addUnaligned(a: *align(1) const u32, b: *align(1) const u32) u32 {
33 return a.* + b.*;
34}
35
36test "@alignCast pointers" {
37 var x: u32 align(4) = 1;
38 expectsOnly1(&x);
39 try expect(x == 2);
40}
41fn expectsOnly1(x: *align(1) u32) void {
42 expects4(@alignCast(4, x));
43}
44fn expects4(x: *align(4) u32) void {
45 x.* += 1;
46}
47
48test "alignment of structs" {
49 try expect(@alignOf(struct {
50 a: i32,
51 b: *i32,
52 }) == @alignOf(usize));
53}
54
55test "alignment of >= 128-bit integer type" {
56 try expect(@alignOf(u128) == 16);
57 try expect(@alignOf(u129) == 16);
58}
59
60test "alignment of struct with 128-bit field" {
61 try expect(@alignOf(struct {
62 x: u128,
63 }) == 16);
64
65 comptime {
66 try expect(@alignOf(struct {
67 x: u128,
68 }) == 16);
69 }
70}
71
72test "size of extern struct with 128-bit field" {
73 try expect(@sizeOf(extern struct {
74 x: u128,
75 y: u8,
76 }) == 32);
77
78 comptime {
79 try expect(@sizeOf(extern struct {
80 x: u128,
81 y: u8,
82 }) == 32);
83 }
84}
85
86test "@ptrCast preserves alignment of bigger source" {
87 var x: u32 align(16) = 1234;
88 const ptr = @ptrCast(*u8, &x);
89 try expect(@TypeOf(ptr) == *align(16) u8);
90}
91
92test "alignstack" {
93 try expect(fnWithAlignedStack() == 1234);
94}
95
96fn fnWithAlignedStack() i32 {
97 @setAlignStack(256);
98 return 1234;
99}
test/behavior/array.zig+42
...@@ -5,7 +5,23 @@ const mem = std.mem;...@@ -5,7 +5,23 @@ const mem = std.mem;
5const expect = testing.expect;5const expect = testing.expect;
6const expectEqual = testing.expectEqual;6const expectEqual = testing.expectEqual;
77
8test "array to slice" {
9 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
10
11 const a: u32 align(4) = 3;
12 const b: u32 align(8) = 4;
13 const a_slice: []align(1) const u32 = @as(*const [1]u32, &a)[0..];
14 const b_slice: []align(1) const u32 = @as(*const [1]u32, &b)[0..];
15 try expect(a_slice[0] + b_slice[0] == 7);
16
17 const d: []const u32 = &[2]u32{ 1, 2 };
18 const e: []const u32 = &[3]u32{ 3, 4, 5 };
19 try expect(d[0] + e[0] + d[1] + e[1] == 10);
20}
21
8test "arrays" {22test "arrays" {
23 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
24
9 var array: [5]u32 = undefined;25 var array: [5]u32 = undefined;
1026
11 var i: u32 = 0;27 var i: u32 = 0;
...@@ -30,6 +46,8 @@ fn getArrayLen(a: []const u32) usize {...@@ -30,6 +46,8 @@ fn getArrayLen(a: []const u32) usize {
30}46}
3147
32test "array init with mult" {48test "array init with mult" {
49 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
50
33 const a = 'a';51 const a = 'a';
34 var i: [8]u8 = [2]u8{ a, 'b' } ** 4;52 var i: [8]u8 = [2]u8{ a, 'b' } ** 4;
35 try expect(std.mem.eql(u8, &i, "abababab"));53 try expect(std.mem.eql(u8, &i, "abababab"));
...@@ -39,6 +57,8 @@ test "array init with mult" {...@@ -39,6 +57,8 @@ test "array init with mult" {
39}57}
4058
41test "array literal with explicit type" {59test "array literal with explicit type" {
60 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
61
42 const hex_mult: [4]u16 = .{ 4096, 256, 16, 1 };62 const hex_mult: [4]u16 = .{ 4096, 256, 16, 1 };
4363
44 try expect(hex_mult.len == 4);64 try expect(hex_mult.len == 4);
...@@ -46,6 +66,8 @@ test "array literal with explicit type" {...@@ -46,6 +66,8 @@ test "array literal with explicit type" {
46}66}
4767
48test "array literal with inferred length" {68test "array literal with inferred length" {
69 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
70
49 const hex_mult = [_]u16{ 4096, 256, 16, 1 };71 const hex_mult = [_]u16{ 4096, 256, 16, 1 };
5072
51 try expect(hex_mult.len == 4);73 try expect(hex_mult.len == 4);
...@@ -53,6 +75,8 @@ test "array literal with inferred length" {...@@ -53,6 +75,8 @@ test "array literal with inferred length" {
53}75}
5476
55test "array dot len const expr" {77test "array dot len const expr" {
78 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
79
56 try expect(comptime x: {80 try expect(comptime x: {
57 break :x some_array.len == 4;81 break :x some_array.len == 4;
58 });82 });
...@@ -64,12 +88,16 @@ const ArrayDotLenConstExpr = struct {...@@ -64,12 +88,16 @@ const ArrayDotLenConstExpr = struct {
64const some_array = [_]u8{ 0, 1, 2, 3 };88const some_array = [_]u8{ 0, 1, 2, 3 };
6589
66test "array literal with specified size" {90test "array literal with specified size" {
91 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
92
67 var array = [2]u8{ 1, 2 };93 var array = [2]u8{ 1, 2 };
68 try expect(array[0] == 1);94 try expect(array[0] == 1);
69 try expect(array[1] == 2);95 try expect(array[1] == 2);
70}96}
7197
72test "array len field" {98test "array len field" {
99 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
100
73 var arr = [4]u8{ 0, 0, 0, 0 };101 var arr = [4]u8{ 0, 0, 0, 0 };
74 var ptr = &arr;102 var ptr = &arr;
75 try expect(arr.len == 4);103 try expect(arr.len == 4);
...@@ -79,6 +107,8 @@ test "array len field" {...@@ -79,6 +107,8 @@ test "array len field" {
79}107}
80108
81test "array with sentinels" {109test "array with sentinels" {
110 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
111
82 const S = struct {112 const S = struct {
83 fn doTheTest(is_ct: bool) !void {113 fn doTheTest(is_ct: bool) !void {
84 if (is_ct or builtin.zig_is_stage2) {114 if (is_ct or builtin.zig_is_stage2) {
...@@ -106,6 +136,8 @@ test "array with sentinels" {...@@ -106,6 +136,8 @@ test "array with sentinels" {
106}136}
107137
108test "void arrays" {138test "void arrays" {
139 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
140
109 var array: [4]void = undefined;141 var array: [4]void = undefined;
110 array[0] = void{};142 array[0] = void{};
111 array[1] = array[2];143 array[1] = array[2];
...@@ -114,6 +146,8 @@ test "void arrays" {...@@ -114,6 +146,8 @@ test "void arrays" {
114}146}
115147
116test "nested arrays" {148test "nested arrays" {
149 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
150
117 if (builtin.zig_backend == .stage2_wasm) {151 if (builtin.zig_backend == .stage2_wasm) {
118 // TODO this is a recent stage2 test case regression due to an enhancement;152 // TODO this is a recent stage2 test case regression due to an enhancement;
119 // now arrays are properly detected as comptime. This exercised a new code153 // now arrays are properly detected as comptime. This exercised a new code
...@@ -132,6 +166,8 @@ test "nested arrays" {...@@ -132,6 +166,8 @@ test "nested arrays" {
132}166}
133167
134test "implicit comptime in array type size" {168test "implicit comptime in array type size" {
169 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
170
135 var arr: [plusOne(10)]bool = undefined;171 var arr: [plusOne(10)]bool = undefined;
136 try expect(arr.len == 11);172 try expect(arr.len == 11);
137}173}
...@@ -141,6 +177,8 @@ fn plusOne(x: u32) u32 {...@@ -141,6 +177,8 @@ fn plusOne(x: u32) u32 {
141}177}
142178
143test "single-item pointer to array indexing and slicing" {179test "single-item pointer to array indexing and slicing" {
180 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
181
144 try testSingleItemPtrArrayIndexSlice();182 try testSingleItemPtrArrayIndexSlice();
145 comptime try testSingleItemPtrArrayIndexSlice();183 comptime try testSingleItemPtrArrayIndexSlice();
146}184}
...@@ -164,6 +202,8 @@ fn doSomeMangling(array: *[4]u8) void {...@@ -164,6 +202,8 @@ fn doSomeMangling(array: *[4]u8) void {
164}202}
165203
166test "implicit cast zero sized array ptr to slice" {204test "implicit cast zero sized array ptr to slice" {
205 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
206
167 {207 {
168 var b = "".*;208 var b = "".*;
169 const c: []const u8 = &b;209 const c: []const u8 = &b;
...@@ -177,6 +217,8 @@ test "implicit cast zero sized array ptr to slice" {...@@ -177,6 +217,8 @@ test "implicit cast zero sized array ptr to slice" {
177}217}
178218
179test "anonymous list literal syntax" {219test "anonymous list literal syntax" {
220 if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
221
180 const S = struct {222 const S = struct {
181 fn doTheTest() !void {223 fn doTheTest() !void {
182 var array: [4]u8 = .{ 1, 2, 3, 4 };224 var array: [4]u8 = .{ 1, 2, 3, 4 };
test/behavior/array_simple.zig deleted-15
...@@ -1,15 +0,0 @@
1const std = @import("std");
2const testing = std.testing;
3const expect = testing.expect;
4
5test "array to slice" {
6 const a: u32 align(4) = 3;
7 const b: u32 align(8) = 4;
8 const a_slice: []align(1) const u32 = @as(*const [1]u32, &a)[0..];
9 const b_slice: []align(1) const u32 = @as(*const [1]u32, &b)[0..];
10 try expect(a_slice[0] + b_slice[0] == 7);
11
12 const d: []const u32 = &[2]u32{ 1, 2 };
13 const e: []const u32 = &[3]u32{ 3, 4, 5 };
14 try expect(d[0] + e[0] + d[1] + e[1] == 10);
15}