72800d3b89
Except for `simd-intrinsic/`, which has a lot of files containing multiple types like `u8x64` which really are better when hand-formatted. There is a surprising amount of two-space indenting in this directory. Non-trivial changes: - `rustfmt::skip` needed in `debug-column.rs` to preserve meaning of the test. - `rustfmt::skip` used in a few places where hand-formatting read more nicely: `enum/enum-match.rs` - Line number adjustments needed for the expected output of `debug-column.rs` and `coroutine-debug.rs`.
39 lines
919 B
Rust
39 lines
919 B
Rust
//@ compile-flags: -O -C no-prepopulate-passes
|
|
|
|
// Tests that the compiler can apply `noalias` and other &mut attributes to `drop_in_place`.
|
|
// Note that non-Unpin types should not get `noalias`, matching &mut behavior.
|
|
|
|
#![crate_type = "lib"]
|
|
|
|
use std::marker::PhantomPinned;
|
|
|
|
// CHECK: define internal void @{{.*}}core{{.*}}ptr{{.*}}drop_in_place{{.*}}StructUnpin{{.*}}(ptr noalias noundef align 4 dereferenceable(12) %{{.+}})
|
|
|
|
// CHECK: define internal void @{{.*}}core{{.*}}ptr{{.*}}drop_in_place{{.*}}StructNotUnpin{{.*}}(ptr noundef nonnull align 4 %{{.+}})
|
|
|
|
pub struct StructUnpin {
|
|
a: i32,
|
|
b: i32,
|
|
c: i32,
|
|
}
|
|
|
|
impl Drop for StructUnpin {
|
|
fn drop(&mut self) {}
|
|
}
|
|
|
|
pub struct StructNotUnpin {
|
|
a: i32,
|
|
b: i32,
|
|
c: i32,
|
|
p: PhantomPinned,
|
|
}
|
|
|
|
impl Drop for StructNotUnpin {
|
|
fn drop(&mut self) {}
|
|
}
|
|
|
|
pub unsafe fn main(x: StructUnpin, y: StructNotUnpin) {
|
|
drop(x);
|
|
drop(y);
|
|
}
|