| // This test checks for absence of noalias and dereferenceable attributes on | |
| // arguments wrapped in `MaybeDangling`. | |
| // | |
| // This also tests | |
| // | |
| //@ compile-flags: -Copt-level=3 -Zmerge-functions=disabled -Cno-prepopulate-passes | |
| #![crate_type = "lib"] | |
| #![feature(maybe_dangling)] | |
| use std::mem::MaybeDangling; | |
| // CHECK: define {{(dso_local )?}}noundef nonnull ptr @f(ptr noundef nonnull %x) unnamed_addr | |
| #[no_mangle] | |
| pub fn f(x: MaybeDangling<Box<u8>>) -> MaybeDangling<Box<u8>> { | |
| x | |
| } | |
| // CHECK: define {{(dso_local )?}}noundef nonnull ptr @g(ptr noundef nonnull %x) unnamed_addr | |
| #[no_mangle] | |
| pub fn g(x: MaybeDangling<&u8>) -> MaybeDangling<&u8> { | |
| x | |
| } | |
| // CHECK: define {{(dso_local )?}}noundef nonnull ptr @h(ptr noundef nonnull %x) unnamed_addr | |
| #[no_mangle] | |
| pub fn h(x: MaybeDangling<&mut u8>) -> MaybeDangling<&mut u8> { | |
| x | |
| } | |
| // CHECK: define {{(dso_local )?}}noundef nonnull align 4 ptr @i(ptr noundef nonnull align 4 %x) unnamed_addr | |
| #[no_mangle] | |
| pub fn i(x: MaybeDangling<Box<u32>>) -> MaybeDangling<Box<u32>> { | |
| x | |
| } | |
| // CHECK: define {{(dso_local )?}}noundef nonnull align 4 ptr @j(ptr noundef nonnull align 4 %x) unnamed_addr | |
| #[no_mangle] | |
| pub fn j(x: MaybeDangling<&u32>) -> MaybeDangling<&u32> { | |
| x | |
| } | |
| // CHECK: define {{(dso_local )?}}noundef nonnull align 4 ptr @k(ptr noundef nonnull align 4 %x) unnamed_addr | |
| #[no_mangle] | |
| pub fn k(x: MaybeDangling<&mut u32>) -> MaybeDangling<&mut u32> { | |
| x | |
| } |