]> git.proxmox.com Git - rustc.git/blame - src/test/codegen/external-no-mangle-fns.rs
New upstream version 1.46.0~beta.2+dfsg1
[rustc.git] / src / test / codegen / external-no-mangle-fns.rs
CommitLineData
a1dfa0c6 1// compile-flags: -C no-prepopulate-passes
0731742a 2// `#[no_mangle]`d functions always have external linkage, i.e., no `internal` in their `define`s
0bf4aa26
XL
3
4#![crate_type = "lib"]
5#![no_std]
6
7// CHECK: define void @a()
8#[no_mangle]
9fn a() {}
10
11// CHECK: define void @b()
12#[no_mangle]
13pub fn b() {}
14
15mod private {
16 // CHECK: define void @c()
17 #[no_mangle]
18 fn c() {}
19
20 // CHECK: define void @d()
21 #[no_mangle]
22 pub fn d() {}
23}
24
25const HIDDEN: () = {
26 // CHECK: define void @e()
27 #[no_mangle]
28 fn e() {}
29
30 // CHECK: define void @f()
31 #[no_mangle]
32 pub fn f() {}
33};
34
35// The surrounding item should not accidentally become external
dc9dc135
XL
36// CHECK-LABEL: ; external_no_mangle_fns::x
37// CHECK-NEXT: ; Function Attrs:
38// CHECK-NEXT: define internal
0bf4aa26
XL
39#[inline(never)]
40fn x() {
41 // CHECK: define void @g()
42 #[no_mangle]
43 fn g() {
44 x();
45 }
46
47 // CHECK: define void @h()
48 #[no_mangle]
49 pub fn h() {}
50
51 // side effect to keep `x` around
52 unsafe {
53 core::ptr::read_volatile(&42);
54 }
55}
f035d41b
XL
56
57// CHECK: define void @i()
58#[no_mangle]
59#[inline]
60fn i() {}
61
62// CHECK: define void @j()
63#[no_mangle]
64#[inline]
65pub fn j() {}
66
67// CHECK: define void @k()
68#[no_mangle]
69#[inline(always)]
70fn k() {}
71
72// CHECK: define void @l()
73#[no_mangle]
74#[inline(always)]
75pub fn l() {}