diff options
| author | marc0246 <40955683+marc0246@users.noreply.github.com> | 2023-05-16 08:53:05 +0200 |
|---|---|---|
| committer | marc0246 <40955683+marc0246@users.noreply.github.com> | 2023-05-16 08:53:05 +0200 |
| commit | 2a466466c768dc56382550a3130674b2eebe227c (patch) | |
| tree | 23dd55e2989c91026281f89a61e19cc9156cc7c8 /tests | |
| parent | 8006510ab0f69ee75e9c3f7e8bff3776886dae51 (diff) | |
| download | rust-2a466466c768dc56382550a3130674b2eebe227c.tar.gz rust-2a466466c768dc56382550a3130674b2eebe227c.zip | |
Fix duplicate `arcinner_layout_for_value_layout` calls
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/codegen/issues/issue-111603.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/codegen/issues/issue-111603.rs b/tests/codegen/issues/issue-111603.rs new file mode 100644 index 00000000000..90b3c314d2f --- /dev/null +++ b/tests/codegen/issues/issue-111603.rs @@ -0,0 +1,28 @@ +// compile-flags: -O + +#![crate_type = "lib"] +#![feature(get_mut_unchecked, new_uninit)] + +use std::sync::Arc; + +// CHECK-LABEL: @new_uninit +#[no_mangle] +pub fn new_uninit(x: u64) -> Arc<[u64; 1000]> { + // CHECK: call alloc::sync::arcinner_layout_for_value_layout + // CHECK-NOT: call alloc::sync::arcinner_layout_for_value_layout + let mut arc = Arc::new_uninit(); + unsafe { Arc::get_mut_unchecked(&mut arc) }.write([x; 1000]); + unsafe { arc.assume_init() } +} + +// CHECK-LABEL: @new_uninit_slice +#[no_mangle] +pub fn new_uninit_slice(x: u64) -> Arc<[u64]> { + // CHECK: call alloc::sync::arcinner_layout_for_value_layout + // CHECK-NOT: call alloc::sync::arcinner_layout_for_value_layout + let mut arc = Arc::new_uninit_slice(1000); + for elem in unsafe { Arc::get_mut_unchecked(&mut arc) } { + elem.write(x); + } + unsafe { arc.assume_init() } +} |
