1
1
#![ feature( raw_dylib) ]
2
+ #![ feature( abi_vectorcall) ]
2
3
3
4
#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "undecorated" ) ]
4
5
extern "C" {
5
6
fn cdecl_fn_undecorated ( i : i32 ) ;
7
+ #[ link_name = "cdecl_fn_undecorated2" ]
8
+ fn cdecl_fn_undecorated_renamed ( i : i32 ) ;
6
9
static mut extern_variable_undecorated: i32 ;
7
10
}
8
11
@@ -21,6 +24,8 @@ extern "C" {
21
24
#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "undecorated" ) ]
22
25
extern "stdcall" {
23
26
fn stdcall_fn_undecorated ( i : i32 ) ;
27
+ #[ link_name = "stdcall_fn_undecorated2" ]
28
+ fn stdcall_fn_undecorated_renamed ( i : i32 ) ;
24
29
}
25
30
26
31
#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "noprefix" ) ]
@@ -36,6 +41,8 @@ extern "stdcall" {
36
41
#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "undecorated" ) ]
37
42
extern "fastcall" {
38
43
fn fastcall_fn_undecorated ( i : i32 ) ;
44
+ #[ link_name = "fastcall_fn_undecorated2" ]
45
+ fn fastcall_fn_undecorated_renamed ( i : i32 ) ;
39
46
}
40
47
41
48
#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "noprefix" ) ]
@@ -48,6 +55,26 @@ extern "fastcall" {
48
55
fn fastcall_fn_decorated ( i : i32 ) ;
49
56
}
50
57
58
+ #[ cfg( target_env = "msvc" ) ]
59
+ #[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "undecorated" ) ]
60
+ extern "vectorcall" {
61
+ fn vectorcall_fn_undecorated ( i : i32 ) ;
62
+ #[ link_name = "vectorcall_fn_undecorated2" ]
63
+ fn vectorcall_fn_undecorated_renamed ( i : i32 ) ;
64
+ }
65
+
66
+ #[ cfg( target_env = "msvc" ) ]
67
+ #[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "noprefix" ) ]
68
+ extern "vectorcall" {
69
+ fn vectorcall_fn_noprefix ( i : i32 ) ;
70
+ }
71
+
72
+ #[ cfg( target_env = "msvc" ) ]
73
+ #[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "decorated" ) ]
74
+ extern "vectorcall" {
75
+ fn vectorcall_fn_decorated ( i : i32 ) ;
76
+ }
77
+
51
78
#[ link( name = "extern" , kind = "raw-dylib" ) ]
52
79
extern {
53
80
fn print_extern_variable_undecorated ( ) ;
@@ -58,14 +85,17 @@ extern {
58
85
pub fn main ( ) {
59
86
unsafe {
60
87
cdecl_fn_undecorated ( 1 ) ;
88
+ cdecl_fn_undecorated_renamed ( 10 ) ;
61
89
cdecl_fn_noprefix ( 2 ) ;
62
90
cdecl_fn_decorated ( 3 ) ;
63
91
64
92
stdcall_fn_undecorated ( 4 ) ;
93
+ stdcall_fn_undecorated_renamed ( 14 ) ;
65
94
stdcall_fn_noprefix ( 5 ) ;
66
95
stdcall_fn_decorated ( 6 ) ;
67
96
68
97
fastcall_fn_undecorated ( 7 ) ;
98
+ fastcall_fn_undecorated_renamed ( 17 ) ;
69
99
fastcall_fn_noprefix ( 8 ) ;
70
100
fastcall_fn_decorated ( 9 ) ;
71
101
@@ -75,5 +105,21 @@ pub fn main() {
75
105
print_extern_variable_noprefix ( ) ;
76
106
extern_variable_decorated = 44 ;
77
107
print_extern_variable_decorated ( ) ;
108
+
109
+ // GCC doesn't support vectorcall: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89485
110
+ #[ cfg( target_env = "msvc" ) ]
111
+ {
112
+ vectorcall_fn_undecorated ( 10 ) ;
113
+ vectorcall_fn_undecorated_renamed ( 20 ) ;
114
+ vectorcall_fn_noprefix ( 11 ) ;
115
+ vectorcall_fn_decorated ( 12 ) ;
116
+ }
117
+ #[ cfg( not( target_env = "msvc" ) ) ]
118
+ {
119
+ println ! ( "vectorcall_fn_undecorated(10)" ) ;
120
+ println ! ( "vectorcall_fn_undecorated2(20)" ) ;
121
+ println ! ( "vectorcall_fn_noprefix(11)" ) ;
122
+ println ! ( "vectorcall_fn_decorated(12)" ) ;
123
+ }
78
124
}
79
125
}
0 commit comments