@@ -38,6 +38,30 @@ const one_u32_orelse = one_u32 orelse unreachable;
3838const one_u32_unwrap = one_u32 .? ;
3939// ^^^^^^^^^^^^^^ (unknown)()
4040
41+ const one_minus_one = one_u32 - one_u32 ;
42+ // ^^^^^^^^^^^^^ (usize)()
43+
44+ const one_minus_many = one_u32 - many_u32 ;
45+ // ^^^^^^^^^^^^^^ (usize)()
46+
47+ const one_minus_c = one_u32 - c_u32 ;
48+ // ^^^^^^^^^^^ (usize)()
49+
50+ const one_plus_u8 = one_u32 + runtime_u8 ;
51+ // ^^^^^^^^^^^ (unknown)()
52+
53+ const one_minus_u8 = one_u32 - runtime_u8 ;
54+ // ^^^^^^^^^^^^ (unknown)()
55+
56+ const one_minus_slice = one_u32 - slice_u32 ;
57+ // ^^^^^^^^^^^^^^^ (unknown)()
58+
59+ const many_minus_slice = many_u32 - slice_u32 ;
60+ // ^^^^^^^^^^^^^^^^ (unknown)()
61+
62+ const c_minus_slice = c_u32 - slice_u32 ;
63+ // ^^^^^^^^^^^^^ (unknown)()
64+
4165//
4266// many item pointer [*]T
4367//
@@ -66,6 +90,29 @@ const many_u32_orelse = many_u32 orelse unreachable;
6690const many_u32_unwrap = many_u32 .? ;
6791// ^^^^^^^^^^^^^^^ (unknown)()
6892
93+ const many_plus_u8 = many_u32 + runtime_u8 ;
94+ // ^^^^^^^^^^^^ ([*]const u32)()
95+
96+ const many_minus_u8 = many_u32 - runtime_u8 ;
97+ // ^^^^^^^^^^^^^ ([*]const u32)()
98+
99+ const many_minus_one = many_u32 - one_u32 ;
100+ // ^^^^^^^^^^^^^^ (usize)()
101+
102+ const many_minus_many = many_u32 - many_u32 ;
103+ // ^^^^^^^^^^^^^^^ (usize)()
104+
105+ const many_minus_c = many_u32 - c_u32 ;
106+ // ^^^^^^^^^^^^ (usize)()
107+
108+ // TODO this should be `unknown`
109+ const many_plus_i8 = many_u32 + runtime_i8 ;
110+ // ^^^^^^^^^^^^ ([*]const u32)()
111+
112+ // TODO this should be `unknown`
113+ const many_minus_i8 = many_u32 - runtime_i8 ;
114+ // ^^^^^^^^^^^^^ ([*]const u32)()
115+
69116//
70117// slice []T
71118//
@@ -95,6 +142,24 @@ const slice_u32_orelse = slice_u32 orelse unreachable;
95142const slice_u32_unwrap = slice_u32 .? ;
96143// ^^^^^^^^^^^^^^^^ (unknown)()
97144
145+ const slice_plus_u8 = slice_u32 + runtime_u8 ;
146+ // ^^^^^^^^^^^^^ (unknown)()
147+
148+ const slice_minus_u8 = slice_u32 - runtime_u8 ;
149+ // ^^^^^^^^^^^^^^ (unknown)()
150+
151+ const slice_minus_one = slice_u32 - one_u32 ;
152+ // ^^^^^^^^^^^^^^^ (unknown)()
153+
154+ const slice_minus_many = slice_u32 - many_u32 ;
155+ // ^^^^^^^^^^^^^^^^ (unknown)()
156+
157+ const slice_minus_slice = slice_u32 - slice_u32 ;
158+ // ^^^^^^^^^^^^^^^^^ (unknown)()
159+
160+ const slice_minus_c = slice_u32 - c_u32 ;
161+ // ^^^^^^^^^^^^^ (unknown)()
162+
98163//
99164// C pointer [*c]T
100165//
@@ -123,109 +188,34 @@ const c_u32_orelse = c_u32 orelse unreachable;
123188const c_u32_unwrap = c_u32 .? ;
124189// ^^^^^^^^^^^^ ([*c]const u32)()
125190
191+ const c_plus_u8 = c_u32 + runtime_u8 ;
192+ // ^^^^^^^^^ ([*c]const u32)()
193+
194+ const c_minus_u8 = c_u32 - runtime_u8 ;
195+ // ^^^^^^^^^^ ([*c]const u32)()
196+
197+ const c_minus_one = c_u32 - one_u32 ;
198+ // ^^^^^^^^^^^ (usize)()
199+
200+ const c_minus_many = c_u32 - many_u32 ;
201+ // ^^^^^^^^^^^^ (usize)()
202+
203+ const c_minus_c = c_u32 - c_u32 ;
204+ // ^^^^^^^^^ (usize)()
205+
206+ // TODO this should be `unknown`
207+ const c_plus_i8 = c_u32 + runtime_i8 ;
208+ // ^^^^^^^^^ ([*c]const u32)()
209+
210+ // TODO this should be `unknown`
211+ const c_minus_i8 = c_u32 - runtime_i8 ;
212+ // ^^^^^^^^^^ ([*c]const u32)()
213+
126214var runtime_index : usize = 5 ;
215+ var runtime_u8 : u8 = 1 ;
216+ var runtime_i8 : i8 = -1 ;
127217
128218comptime {
129219 // Use @compileLog to verify the expected type with the compiler:
130220 // @compileLog(many_u32_slice_len_comptime);
131221}
132-
133- fn pointer_arithmetic () void {
134- var some_u8 : u8 = 1 ;
135- var some_i8 : i8 = -1 ;
136-
137- const many_plus_u8 = many_u32 + some_u8 ;
138- // ^^^^^^^^^^^^ ([*]const u32)()
139- const many_minus_u8 = many_u32 - some_u8 ;
140- // ^^^^^^^^^^^^^ ([*]const u32)()
141-
142- const c_plus_u8 = c_u32 + some_u8 ;
143- // ^^^^^^^^^ ([*c]const u32)()
144- const c_minus_u8 = c_u32 - some_u8 ;
145- // ^^^^^^^^^^ ([*c]const u32)()
146-
147- const one_minus_one = one_u32 - one_u32 ;
148- // ^^^^^^^^^^^^^ (usize)()
149- const one_minus_many = one_u32 - many_u32 ;
150- // ^^^^^^^^^^^^^^ (usize)()
151- const one_minus_c = one_u32 - c_u32 ;
152- // ^^^^^^^^^^^ (usize)()
153-
154- const many_minus_one = many_u32 - one_u32 ;
155- // ^^^^^^^^^^^^^^ (usize)()
156- const many_minus_many = many_u32 - many_u32 ;
157- // ^^^^^^^^^^^^^^^ (usize)()
158- const many_minus_c = many_u32 - c_u32 ;
159- // ^^^^^^^^^^^^ (usize)()
160-
161- const c_minus_one = c_u32 - one_u32 ;
162- // ^^^^^^^^^^^ (usize)()
163- const c_minus_many = c_u32 - many_u32 ;
164- // ^^^^^^^^^^^^ (usize)()
165- const c_minus_c = c_u32 - c_u32 ;
166- // ^^^^^^^^^ (usize)()
167-
168- _ = .{
169- .{ & some_u8 , & some_i8 },
170- .{ many_plus_u8 , many_minus_u8 },
171- .{ c_plus_u8 , c_minus_u8 },
172- .{ one_minus_one , one_minus_many , one_minus_c },
173- .{ many_minus_one , many_minus_many , many_minus_c },
174- .{ c_minus_one , c_minus_many , c_minus_c },
175- };
176- }
177-
178- fn invalid_pointer_arithmetic () void {
179- var some_u8 : u8 = 1 ;
180- var some_i8 : i8 = -1 ;
181-
182- const one_plus_u8 = one_u32 + some_u8 ;
183- // ^^^^^^^^^^^ (unknown)()
184- const one_minus_u8 = one_u32 - some_u8 ;
185- // ^^^^^^^^^^^^ (unknown)()
186-
187- const slice_plus_u8 = slice_u32 + some_u8 ;
188- // ^^^^^^^^^^^^^ (unknown)()
189- const slice_minus_u8 = slice_u32 - some_u8 ;
190- // ^^^^^^^^^^^^^^ (unknown)()
191-
192- // TODO this should be `unknown`
193- const many_plus_i8 = many_u32 + some_i8 ;
194- // ^^^^^^^^^^^^ ([*]const u32)()
195- // TODO this should be `unknown`
196- const many_minus_i8 = many_u32 - some_i8 ;
197- // ^^^^^^^^^^^^^ ([*]const u32)()
198-
199- // TODO this should be `unknown`
200- const c_plus_i8 = c_u32 + some_i8 ;
201- // ^^^^^^^^^ ([*c]const u32)()
202- // TODO this should be `unknown`
203- const c_minus_i8 = c_u32 - some_i8 ;
204- // ^^^^^^^^^^ ([*c]const u32)()
205-
206- const one_minus_slice = one_u32 - slice_u32 ;
207- // ^^^^^^^^^^^^^^^ (unknown)()
208- const many_minus_slice = many_u32 - slice_u32 ;
209- // ^^^^^^^^^^^^^^^^ (unknown)()
210- const c_minus_slice = c_u32 - slice_u32 ;
211- // ^^^^^^^^^^^^^ (unknown)()
212-
213- const slice_minus_one = slice_u32 - one_u32 ;
214- // ^^^^^^^^^^^^^^^ (unknown)()
215- const slice_minus_many = slice_u32 - many_u32 ;
216- // ^^^^^^^^^^^^^^^^ (unknown)()
217- const slice_minus_slice = slice_u32 - slice_u32 ;
218- // ^^^^^^^^^^^^^^^^^ (unknown)()
219- const slice_minus_c = slice_u32 - c_u32 ;
220- // ^^^^^^^^^^^^^ (unknown)()
221-
222- _ = .{
223- .{ & some_u8 , & some_i8 },
224- .{ one_plus_u8 , one_minus_u8 },
225- .{ slice_plus_u8 , slice_minus_u8 },
226- .{ many_plus_i8 , many_minus_i8 },
227- .{ c_plus_i8 , c_minus_i8 },
228- .{ one_minus_slice , many_minus_slice , c_minus_slice },
229- .{ slice_minus_one , slice_minus_many , slice_minus_slice , slice_minus_c },
230- };
231- }
0 commit comments