]>
Commit | Line | Data |
---|---|---|
1b1a35ee XL |
1 | // Checks that only functions with compatible attributes are inlined. |
2 | // | |
3 | // only-x86_64 | |
1b1a35ee XL |
4 | |
5 | #![crate_type = "lib"] | |
6 | #![feature(no_sanitize)] | |
7 | #![feature(target_feature_11)] | |
fc512014 | 8 | #![feature(c_variadic)] |
1b1a35ee XL |
9 | |
10 | // EMIT_MIR inline_compatibility.inlined_target_feature.Inline.diff | |
11 | #[target_feature(enable = "sse2")] | |
12 | pub unsafe fn inlined_target_feature() { | |
13 | target_feature(); | |
14 | } | |
15 | ||
16 | // EMIT_MIR inline_compatibility.not_inlined_target_feature.Inline.diff | |
17 | pub unsafe fn not_inlined_target_feature() { | |
18 | target_feature(); | |
19 | } | |
20 | ||
21 | // EMIT_MIR inline_compatibility.inlined_no_sanitize.Inline.diff | |
22 | #[no_sanitize(address)] | |
23 | pub unsafe fn inlined_no_sanitize() { | |
24 | no_sanitize(); | |
25 | } | |
26 | ||
27 | // EMIT_MIR inline_compatibility.not_inlined_no_sanitize.Inline.diff | |
28 | pub unsafe fn not_inlined_no_sanitize() { | |
29 | no_sanitize(); | |
30 | } | |
31 | ||
32 | #[inline] | |
33 | #[target_feature(enable = "sse2")] | |
34 | pub unsafe fn target_feature() {} | |
35 | ||
36 | #[inline] | |
fc512014 | 37 | #[no_sanitize(address)] |
1b1a35ee | 38 | pub unsafe fn no_sanitize() {} |
fc512014 XL |
39 | |
40 | // EMIT_MIR inline_compatibility.not_inlined_c_variadic.Inline.diff | |
41 | pub unsafe fn not_inlined_c_variadic() { | |
42 | let s = sum(4u32, 4u32, 30u32, 200u32, 1000u32); | |
43 | } | |
44 | ||
45 | #[no_mangle] | |
46 | #[inline(always)] | |
47 | unsafe extern "C" fn sum(n: u32, mut vs: ...) -> u32 { | |
48 | let mut s = 0; | |
49 | let mut i = 0; | |
50 | while i != n { | |
51 | s += vs.arg::<u32>(); | |
52 | i += 1; | |
53 | } | |
54 | s | |
55 | } |