// compile-flags: -C no-prepopulate-passes // `#[no_mangle]`d functions always have external linkage, i.e., no `internal` in their `define`s #![crate_type = "lib"] #![no_std] // CHECK: define{{( dso_local)?}} void @a() #[no_mangle] fn a() {} // CHECK: define{{( dso_local)?}} void @b() #[no_mangle] pub fn b() {} mod private { // CHECK: define{{( dso_local)?}} void @c() #[no_mangle] fn c() {} // CHECK: define{{( dso_local)?}} void @d() #[no_mangle] pub fn d() {} } const HIDDEN: () = { // CHECK: define{{( dso_local)?}} void @e() #[no_mangle] fn e() {} // CHECK: define{{( dso_local)?}} void @f() #[no_mangle] pub fn f() {} }; // The surrounding item should not accidentally become external // CHECK-LABEL: ; external_no_mangle_fns::x // CHECK-NEXT: ; Function Attrs: // CHECK-NEXT: define internal #[inline(never)] fn x() { // CHECK: define{{( dso_local)?}} void @g() #[no_mangle] fn g() { x(); } // CHECK: define{{( dso_local)?}} void @h() #[no_mangle] pub fn h() {} // side effect to keep `x` around unsafe { core::ptr::read_volatile(&42); } } // CHECK: define{{( dso_local)?}} void @i() #[no_mangle] #[inline] fn i() {} // CHECK: define{{( dso_local)?}} void @j() #[no_mangle] #[inline] pub fn j() {} // CHECK: define{{( dso_local)?}} void @k() #[no_mangle] #[inline(always)] fn k() {} // CHECK: define{{( dso_local)?}} void @l() #[no_mangle] #[inline(always)] pub fn l() {}