File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change
1
+ //@ compile-flags: -C opt-level=3
2
+ #![ feature( c_variadic) ]
3
+
4
+ // Test that the inline attributes are accepted on C-variadic functions.
5
+ //
6
+ // Currently LLVM is unable to inline C-variadic functions, but that is valid because despite
7
+ // the name even `#[inline(always)]` is just a hint.
8
+
9
+ #[ inline( always) ]
10
+ unsafe extern "C" fn inline_always ( mut ap: ...) -> u32 {
11
+ ap. arg :: < u32 > ( )
12
+ }
13
+
14
+ #[ inline]
15
+ unsafe extern "C" fn inline ( mut ap: ...) -> u32 {
16
+ ap. arg :: < u32 > ( )
17
+ }
18
+
19
+ #[ inline( never) ]
20
+ unsafe extern "C" fn inline_never ( mut ap: ...) -> u32 {
21
+ ap. arg :: < u32 > ( )
22
+ }
23
+
24
+ #[ cold]
25
+ unsafe extern "C" fn cold ( mut ap: ...) -> u32 {
26
+ ap. arg :: < u32 > ( )
27
+ }
28
+
29
+ #[ unsafe( no_mangle) ]
30
+ #[ inline( never) ]
31
+ fn helper ( ) {
32
+ // CHECK-LABEL: helper
33
+ // CHECK-LABEL: call c_variadic_inline::inline_always
34
+ // CHECK-LABEL: call c_variadic_inline::inline
35
+ // CHECK-LABEL: call c_variadic_inline::inline_never
36
+ // CHECK-LABEL: call c_variadic_inline::cold
37
+ unsafe {
38
+ inline_always ( 1 ) ;
39
+ inline ( 2 ) ;
40
+ inline_never ( 3 ) ;
41
+ cold ( 4 ) ;
42
+ }
43
+ }
44
+
45
+ fn main ( ) {
46
+ helper ( )
47
+ }
You can’t perform that action at this time.
0 commit comments