Apply noundef attribute to &T, &mut T, Box<T>, bool
This doesn't handle `char` because it's a bit awkward to distinguish it from u32 at this point in codegen. Note that for some types (like `&Struct` and `&mut Struct`), we already apply `dereferenceable`, which implies `noundef`, so the IR does not change.
This commit is contained in:
parent
71226d717a
commit
8cb0b6ca5b
10 changed files with 56 additions and 22 deletions
|
@ -73,6 +73,7 @@ mod attr_impl {
|
|||
// or not to actually emit the attribute. It can also be controlled
|
||||
// with the `-Zmutable-noalias` debugging option.
|
||||
const NoAliasMutRef = 1 << 6;
|
||||
const NoUndef = 1 << 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -494,7 +495,11 @@ impl<'a, Ty> ArgAbi<'a, Ty> {
|
|||
// For non-immediate arguments the callee gets its own copy of
|
||||
// the value on the stack, so there are no aliases. It's also
|
||||
// program-invisible so can't possibly capture
|
||||
attrs.set(ArgAttribute::NoAlias).set(ArgAttribute::NoCapture).set(ArgAttribute::NonNull);
|
||||
attrs
|
||||
.set(ArgAttribute::NoAlias)
|
||||
.set(ArgAttribute::NoCapture)
|
||||
.set(ArgAttribute::NonNull)
|
||||
.set(ArgAttribute::NoUndef);
|
||||
attrs.pointee_size = layout.size;
|
||||
// FIXME(eddyb) We should be doing this, but at least on
|
||||
// i686-pc-windows-msvc, it results in wrong stack offsets.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue