mirror of https://github.com/rust-lang/rust.git
use non-inbounds GEP for ZSTs, add fixmes
This commit is contained in:
parent
4724cd4dc4
commit
c1017d4828
|
@ -104,6 +104,10 @@ impl<'a, 'tcx, V: CodegenObject> PlaceRef<'tcx, V> {
|
|||
let mut simple = || {
|
||||
let llval = if offset.bytes() == 0 {
|
||||
self.llval
|
||||
} else if field.is_zst() {
|
||||
// FIXME(erikdesjardins): it should be fine to use inbounds for ZSTs too;
|
||||
// keeping this logic for now to preserve previous behavior.
|
||||
bx.ptradd(self.llval, bx.const_usize(offset.bytes()))
|
||||
} else {
|
||||
bx.inbounds_ptradd(self.llval, bx.const_usize(offset.bytes()))
|
||||
};
|
||||
|
@ -164,6 +168,7 @@ impl<'a, 'tcx, V: CodegenObject> PlaceRef<'tcx, V> {
|
|||
debug!("struct_field_ptr: DST field offset: {:?}", offset);
|
||||
|
||||
// Adjust pointer.
|
||||
// FIXME(erikdesjardins): should be able to use inbounds here too.
|
||||
let ptr = bx.ptradd(self.llval, offset);
|
||||
|
||||
PlaceRef { llval: ptr, llextra: self.llextra, layout: field, align: effective_field_align }
|
||||
|
|
|
@ -13,7 +13,7 @@ pub fn helper(_: usize) {
|
|||
// CHECK-LABEL: @scalar_layout
|
||||
#[no_mangle]
|
||||
pub fn scalar_layout(s: &(u64, ())) {
|
||||
// CHECK: getelementptr inbounds i8, {{.+}}, [[USIZE]] 8
|
||||
// CHECK: getelementptr i8, {{.+}}, [[USIZE]] 8
|
||||
let x = &s.1;
|
||||
witness(&x); // keep variable in an alloca
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ pub fn scalar_layout(s: &(u64, ())) {
|
|||
// CHECK-LABEL: @scalarpair_layout
|
||||
#[no_mangle]
|
||||
pub fn scalarpair_layout(s: &(u64, u32, ())) {
|
||||
// CHECK: getelementptr inbounds i8, {{.+}}, [[USIZE]] 12
|
||||
// CHECK: getelementptr i8, {{.+}}, [[USIZE]] 12
|
||||
let x = &s.2;
|
||||
witness(&x); // keep variable in an alloca
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ pub struct U64x4(u64, u64, u64, u64);
|
|||
// CHECK-LABEL: @vector_layout
|
||||
#[no_mangle]
|
||||
pub fn vector_layout(s: &(U64x4, ())) {
|
||||
// CHECK: getelementptr inbounds i8, {{.+}}, [[USIZE]] 32
|
||||
// CHECK: getelementptr i8, {{.+}}, [[USIZE]] 32
|
||||
let x = &s.1;
|
||||
witness(&x); // keep variable in an alloca
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue