|  | //@ compile-flags: -C no-prepopulate-passes -Copt-level=0 | 
|  |  | 
|  | #![crate_type = "lib"] | 
|  | #![feature(repr_simd)] | 
|  |  | 
|  | // Hack to get the correct size for the length part in slices | 
|  | // CHECK: @helper([[USIZE:i[0-9]+]] %_1) | 
|  | #[no_mangle] | 
|  | pub fn helper(_: usize) {} | 
|  |  | 
|  | // Check that we correctly generate a GEP for a ZST that is not included in Scalar layout | 
|  | // CHECK-LABEL: @scalar_layout | 
|  | #[no_mangle] | 
|  | pub fn scalar_layout(s: &(u64, ())) { | 
|  | // CHECK: getelementptr inbounds i8, {{.+}}, [[USIZE]] 8 | 
|  | let x = &s.1; | 
|  | witness(&x); // keep variable in an alloca | 
|  | } | 
|  |  | 
|  | // Check that we correctly generate a GEP for a ZST that is not included in ScalarPair layout | 
|  | // CHECK-LABEL: @scalarpair_layout | 
|  | #[no_mangle] | 
|  | pub fn scalarpair_layout(s: &(u64, u32, ())) { | 
|  | // CHECK: getelementptr inbounds i8, {{.+}}, [[USIZE]] 12 | 
|  | let x = &s.2; | 
|  | witness(&x); // keep variable in an alloca | 
|  | } | 
|  |  | 
|  | #[repr(simd)] | 
|  | pub struct U64x4([u64; 4]); | 
|  |  | 
|  | // Check that we correctly generate a GEP for a ZST that is not included in Vector layout | 
|  | // CHECK-LABEL: @vector_layout | 
|  | #[no_mangle] | 
|  | pub fn vector_layout(s: &(U64x4, ())) { | 
|  | // CHECK: getelementptr inbounds i8, {{.+}}, [[USIZE]] 32 | 
|  | let x = &s.1; | 
|  | witness(&x); // keep variable in an alloca | 
|  | } | 
|  |  | 
|  | #[inline(never)] | 
|  | fn witness(_: &impl Sized) {} |