1
1
//@ revisions: z10 z10_vector z13 z13_no_vector
2
+ //@ add-core-stubs
2
3
// ignore-tidy-linelength
3
4
//@ assembly-output: emit-asm
4
5
//@ compile-flags: -Copt-level=3 -Z merge-functions=disabled
18
19
// Cases where vector feature is disabled are rejected.
19
20
// See tests/ui/simd-abi-checks-s390x.rs for test for them.
20
21
21
- #[ lang = "pointee_sized" ]
22
- pub trait PointeeSized { }
23
-
24
- #[ lang = "meta_sized" ]
25
- pub trait MetaSized : PointeeSized { }
26
-
27
- #[ lang = "sized" ]
28
- pub trait Sized : MetaSized { }
29
- #[ lang = "copy" ]
30
- pub trait Copy { }
31
- #[ lang = "freeze" ]
32
- pub trait Freeze { }
33
-
34
- impl < T : Copy , const N : usize > Copy for [ T ; N ] { }
35
-
36
- #[ lang = "phantom_data" ]
37
- pub struct PhantomData < T : ?Sized > ;
38
- impl < T : ?Sized > Copy for PhantomData < T > { }
22
+ extern crate minicore;
23
+ use minicore:: * ;
39
24
40
25
#[ repr( simd) ]
41
26
pub struct i8x8 ( [ i8 ; 8 ] ) ;
@@ -52,8 +37,6 @@ pub struct WrapperWithZst<T>(T, PhantomData<()>);
52
37
#[ repr( transparent) ]
53
38
pub struct TransparentWrapper < T > ( T ) ;
54
39
55
- impl Copy for i8 { }
56
- impl Copy for i64 { }
57
40
impl Copy for i8x8 { }
58
41
impl Copy for i8x16 { }
59
42
impl Copy for i8x32 { }
@@ -221,23 +204,23 @@ unsafe extern "C" fn vector_transparent_wrapper_ret_large(
221
204
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
222
205
#[ no_mangle]
223
206
unsafe extern "C" fn vector_arg_small ( x : i8x8 ) -> i64 {
224
- unsafe { * ( & x as * const i8x8 as * const i64 ) }
207
+ unsafe { * ( & raw const x as * const i64 ) }
225
208
}
226
209
// CHECK-LABEL: vector_arg:
227
210
// CHECK: vlgvg %r2, %v24, 0
228
211
// CHECK-NEXT: br %r14
229
212
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
230
213
#[ no_mangle]
231
214
unsafe extern "C" fn vector_arg ( x : i8x16 ) -> i64 {
232
- unsafe { * ( & x as * const i8x16 as * const i64 ) }
215
+ unsafe { * ( & raw const x as * const i64 ) }
233
216
}
234
217
// CHECK-LABEL: vector_arg_large:
235
218
// CHECK: lg %r2, 0(%r2)
236
219
// CHECK-NEXT: br %r14
237
220
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
238
221
#[ no_mangle]
239
222
unsafe extern "C" fn vector_arg_large ( x : i8x32 ) -> i64 {
240
- unsafe { * ( & x as * const i8x32 as * const i64 ) }
223
+ unsafe { * ( & raw const x as * const i64 ) }
241
224
}
242
225
243
226
// CHECK-LABEL: vector_wrapper_arg_small:
@@ -246,23 +229,23 @@ unsafe extern "C" fn vector_arg_large(x: i8x32) -> i64 {
246
229
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
247
230
#[ no_mangle]
248
231
unsafe extern "C" fn vector_wrapper_arg_small ( x : Wrapper < i8x8 > ) -> i64 {
249
- unsafe { * ( & x as * const Wrapper < i8x8 > as * const i64 ) }
232
+ unsafe { * ( & raw const x as * const i64 ) }
250
233
}
251
234
// CHECK-LABEL: vector_wrapper_arg:
252
235
// CHECK: vlgvg %r2, %v24, 0
253
236
// CHECK-NEXT: br %r14
254
237
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
255
238
#[ no_mangle]
256
239
unsafe extern "C" fn vector_wrapper_arg ( x : Wrapper < i8x16 > ) -> i64 {
257
- unsafe { * ( & x as * const Wrapper < i8x16 > as * const i64 ) }
240
+ unsafe { * ( & raw const x as * const i64 ) }
258
241
}
259
242
// CHECK-LABEL: vector_wrapper_arg_large:
260
243
// CHECK: lg %r2, 0(%r2)
261
244
// CHECK-NEXT: br %r14
262
245
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
263
246
#[ no_mangle]
264
247
unsafe extern "C" fn vector_wrapper_arg_large ( x : Wrapper < i8x32 > ) -> i64 {
265
- unsafe { * ( & x as * const Wrapper < i8x32 > as * const i64 ) }
248
+ unsafe { * ( & raw const x as * const i64 ) }
266
249
}
267
250
268
251
// https://github.com/rust-lang/rust/pull/131586#discussion_r1837071121
@@ -272,7 +255,7 @@ unsafe extern "C" fn vector_wrapper_arg_large(x: Wrapper<i8x32>) -> i64 {
272
255
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
273
256
#[ no_mangle]
274
257
unsafe extern "C" fn vector_wrapper_padding_arg ( x : WrapperAlign16 < i8x8 > ) -> i64 {
275
- unsafe { * ( & x as * const WrapperAlign16 < i8x8 > as * const i64 ) }
258
+ unsafe { * ( & raw const x as * const i64 ) }
276
259
}
277
260
278
261
// CHECK-LABEL: vector_wrapper_with_zst_arg_small:
@@ -282,23 +265,23 @@ unsafe extern "C" fn vector_wrapper_padding_arg(x: WrapperAlign16<i8x8>) -> i64
282
265
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
283
266
#[ no_mangle]
284
267
unsafe extern "C" fn vector_wrapper_with_zst_arg_small ( x : WrapperWithZst < i8x8 > ) -> i64 {
285
- unsafe { * ( & x as * const WrapperWithZst < i8x8 > as * const i64 ) }
268
+ unsafe { * ( & raw const x as * const i64 ) }
286
269
}
287
270
// CHECK-LABEL: vector_wrapper_with_zst_arg:
288
271
// CHECK: lg %r2, 0(%r2)
289
272
// CHECK-NEXT: br %r14
290
273
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
291
274
#[ no_mangle]
292
275
unsafe extern "C" fn vector_wrapper_with_zst_arg ( x : WrapperWithZst < i8x16 > ) -> i64 {
293
- unsafe { * ( & x as * const WrapperWithZst < i8x16 > as * const i64 ) }
276
+ unsafe { * ( & raw const x as * const i64 ) }
294
277
}
295
278
// CHECK-LABEL: vector_wrapper_with_zst_arg_large:
296
279
// CHECK: lg %r2, 0(%r2)
297
280
// CHECK-NEXT: br %r14
298
281
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
299
282
#[ no_mangle]
300
283
unsafe extern "C" fn vector_wrapper_with_zst_arg_large ( x : WrapperWithZst < i8x32 > ) -> i64 {
301
- unsafe { * ( & x as * const WrapperWithZst < i8x32 > as * const i64 ) }
284
+ unsafe { * ( & raw const x as * const i64 ) }
302
285
}
303
286
304
287
// CHECK-LABEL: vector_transparent_wrapper_arg_small:
@@ -307,21 +290,21 @@ unsafe extern "C" fn vector_wrapper_with_zst_arg_large(x: WrapperWithZst<i8x32>)
307
290
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
308
291
#[ no_mangle]
309
292
unsafe extern "C" fn vector_transparent_wrapper_arg_small ( x : TransparentWrapper < i8x8 > ) -> i64 {
310
- unsafe { * ( & x as * const TransparentWrapper < i8x8 > as * const i64 ) }
293
+ unsafe { * ( & raw const x as * const i64 ) }
311
294
}
312
295
// CHECK-LABEL: vector_transparent_wrapper_arg:
313
296
// CHECK: vlgvg %r2, %v24, 0
314
297
// CHECK-NEXT: br %r14
315
298
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
316
299
#[ no_mangle]
317
300
unsafe extern "C" fn vector_transparent_wrapper_arg ( x : TransparentWrapper < i8x16 > ) -> i64 {
318
- unsafe { * ( & x as * const TransparentWrapper < i8x16 > as * const i64 ) }
301
+ unsafe { * ( & raw const x as * const i64 ) }
319
302
}
320
303
// CHECK-LABEL: vector_transparent_wrapper_arg_large:
321
304
// CHECK: lg %r2, 0(%r2)
322
305
// CHECK-NEXT: br %r14
323
306
#[ cfg_attr( no_vector, target_feature( enable = "vector" ) ) ]
324
307
#[ no_mangle]
325
308
unsafe extern "C" fn vector_transparent_wrapper_arg_large ( x : TransparentWrapper < i8x32 > ) -> i64 {
326
- unsafe { * ( & x as * const TransparentWrapper < i8x32 > as * const i64 ) }
309
+ unsafe { * ( & raw const x as * const i64 ) }
327
310
}
0 commit comments