diff --git a/tests/codegen-llvm/function-arguments.rs b/tests/codegen-llvm/function-arguments.rs index 46e153a0cfc62..95edecfc6f79b 100644 --- a/tests/codegen-llvm/function-arguments.rs +++ b/tests/codegen-llvm/function-arguments.rs @@ -257,11 +257,11 @@ pub fn option_trait_borrow_mut(x: Option<&mut dyn Drop>) {} #[no_mangle] pub fn trait_raw(_: *const dyn Drop) {} +// Ensure that `Box` gets `noalias` when the right traits are present, but removing *either* `Unpin` +// or `UnsafeUnpin` is enough to lose the attribute. // CHECK: @trait_box(ptr noalias noundef nonnull align 1{{( %0)?}}, {{.+}} noalias noundef readonly align {{.*}} dereferenceable({{.*}}){{( %1)?}}) #[no_mangle] pub fn trait_box(_: Box) {} - -// Ensure that removing *either* `Unpin` or `UnsafeUnpin` is enough to lose the attribute. // CHECK: @trait_box_pin1(ptr noundef nonnull align 1{{( %0)?}}, {{.+}} noalias noundef readonly align {{.*}} dereferenceable({{.*}}){{( %1)?}}) #[no_mangle] pub fn trait_box_pin1(_: Box) {} @@ -269,6 +269,18 @@ pub fn trait_box_pin1(_: Box) {} #[no_mangle] pub fn trait_box_pin2(_: Box) {} +// Same for mutable references (with a non-zero minimal size so that we also see the +// `dereferenceable` disappear). +// CHECK: @trait_mutref(ptr noalias noundef align 4 dereferenceable(4){{( %_1.0)?}}, {{.+}} noalias noundef readonly align {{.*}} dereferenceable({{.*}}){{( %_1.1)?}}) +#[no_mangle] +pub fn trait_mutref(_: &mut (i32, dyn Drop + Unpin + UnsafeUnpin)) {} +// CHECK: @trait_mutref_pin1(ptr noundef nonnull align 4{{( %_1.0)?}}, {{.+}} noalias noundef readonly align {{.*}} dereferenceable({{.*}}){{( %_1.1)?}}) +#[no_mangle] +pub fn trait_mutref_pin1(_: &mut (i32, dyn Drop + Unpin)) {} +// CHECK: @trait_mutref_pin2(ptr noundef nonnull align 4{{( %_1.0)?}}, {{.+}} noalias noundef readonly align {{.*}} dereferenceable({{.*}}){{( %_1.1)?}}) +#[no_mangle] +pub fn trait_mutref_pin2(_: &mut (i32, dyn Drop + UnsafeUnpin)) {} + // CHECK: { ptr, ptr } @trait_option(ptr noalias noundef align 1 %x.0, ptr %x.1) #[no_mangle] pub fn trait_option(