diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-01-04 08:33:26 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-04 08:33:26 +0100 |
| commit | c505d760a6a52a07b63016e1f9635a994cd4094f (patch) | |
| tree | d48a598b8d8311bd55dd605feee416f973231c2c /tests/codegen | |
| parent | f4335a419f743d08b1e371ef78881ce0d8b53a2a (diff) | |
| parent | 0c56ccff048570161bcc64470689b9e6b0f4158e (diff) | |
| download | rust-c505d760a6a52a07b63016e1f9635a994cd4094f.tar.gz rust-c505d760a6a52a07b63016e1f9635a994cd4094f.zip | |
Rollup merge of #119555 - Kobzol:maybeuninit-rvo-codegen-test, r=nikic
Add codegen test for RVO on MaybeUninit Codegen test for https://github.com/rust-lang/rust/issues/90595. Currently, this only works with `-Cpanic=abort`, but hopefully in the [future](https://www.npopov.com/2024/01/01/This-year-in-LLVM-2023.html#writable-and-dead_on_unwind) it should also work in the presence of panics. r? ``@nikic``
Diffstat (limited to 'tests/codegen')
| -rw-r--r-- | tests/codegen/maybeuninit-rvo.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/codegen/maybeuninit-rvo.rs b/tests/codegen/maybeuninit-rvo.rs new file mode 100644 index 00000000000..feed513e1fb --- /dev/null +++ b/tests/codegen/maybeuninit-rvo.rs @@ -0,0 +1,33 @@ +// compile-flags: -O +#![feature(c_unwind)] +#![crate_type = "lib"] + +pub struct Foo([u8; 1000]); + +extern "C" { + fn init(p: *mut Foo); +} + +pub fn new_from_uninit() -> Foo { + // CHECK-LABEL: new_from_uninit + // CHECK-NOT: call void @llvm.memcpy. + let mut x = std::mem::MaybeUninit::uninit(); + unsafe { + init(x.as_mut_ptr()); + x.assume_init() + } +} + +extern "C-unwind" { + fn init_unwind(p: *mut Foo); +} + +pub fn new_from_uninit_unwind() -> Foo { + // CHECK-LABEL: new_from_uninit + // CHECK: call void @llvm.memcpy. + let mut x = std::mem::MaybeUninit::uninit(); + unsafe { + init_unwind(x.as_mut_ptr()); + x.assume_init() + } +} |
