]>
Commit | Line | Data |
---|---|---|
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] | |
9 | fn a() {} | |
10 | ||
11 | // CHECK: define void @b() | |
12 | #[no_mangle] | |
13 | pub fn b() {} | |
14 | ||
15 | mod 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 | ||
25 | const 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)] |
40 | fn 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] | |
60 | fn i() {} | |
61 | ||
62 | // CHECK: define void @j() | |
63 | #[no_mangle] | |
64 | #[inline] | |
65 | pub fn j() {} | |
66 | ||
67 | // CHECK: define void @k() | |
68 | #[no_mangle] | |
69 | #[inline(always)] | |
70 | fn k() {} | |
71 | ||
72 | // CHECK: define void @l() | |
73 | #[no_mangle] | |
74 | #[inline(always)] | |
75 | pub fn l() {} |