about summary refs log tree commit diff
path: root/tests/codegen/pie-relocation-model.rs
diff options
context:
space:
mode:
authorNilstrieb <48135649+Nilstrieb@users.noreply.github.com>2022-12-30 15:55:05 +0100
committernils <48135649+Nilstrieb@users.noreply.github.com>2023-01-17 08:14:35 +0100
commit645c0fddd2e0446cc0e6eecd8a78de4b5ab5a967 (patch)
tree70751b76743a039689b4efe6184bce0b3d2c3c62 /tests/codegen/pie-relocation-model.rs
parent4781233a77e879e49cb5ce3c98d2abba6a6ade7a (diff)
downloadrust-645c0fddd2e0446cc0e6eecd8a78de4b5ab5a967.tar.gz
rust-645c0fddd2e0446cc0e6eecd8a78de4b5ab5a967.zip
Put `noundef` on all scalars that don't allow uninit
Previously, it was only put on scalars with range validity invariants
like bool, was uninit was obviously invalid for those.

Since then, we have normatively declared all uninit primitives to be
undefined behavior and can therefore put `noundef` on them.

The remaining concern was the `mem::uninitialized` function, which cause
quite a lot of UB in the older parts of the ecosystem. This function now
doesn't return uninit values anymore, making users of it safe from this
change.

The only real sources of UB where people could encounter uninit
primitives are `MaybeUninit::uninit().assume_init()`, which has always
be clear in the docs about being UB and from heap allocations (like
reading from the spare capacity of a vec. This is hopefully rare enough
to not break anything.
Diffstat (limited to 'tests/codegen/pie-relocation-model.rs')
-rw-r--r--tests/codegen/pie-relocation-model.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/tests/codegen/pie-relocation-model.rs b/tests/codegen/pie-relocation-model.rs
index ec44edc0667..a59216c3eee 100644
--- a/tests/codegen/pie-relocation-model.rs
+++ b/tests/codegen/pie-relocation-model.rs
@@ -5,7 +5,7 @@
 
 // With PIE we know local functions cannot be interpositioned, we can mark them
 // as dso_local.
-// CHECK: define dso_local i8 @call_foreign_fn()
+// CHECK: define dso_local noundef i8 @call_foreign_fn()
 #[no_mangle]
 pub fn call_foreign_fn() -> u8 {
     unsafe {
@@ -15,7 +15,7 @@ pub fn call_foreign_fn() -> u8 {
 
 // External functions are still marked as non-dso_local, since we don't know if the symbol
 // is defined in the binary or in the shared library.
-// CHECK: declare zeroext i8 @foreign_fn()
+// CHECK: declare noundef zeroext i8 @foreign_fn()
 extern "C" {fn foreign_fn() -> u8;}
 
 // CHECK: !{i32 {{[78]}}, !"PIC Level", i32 2}