11#![ feature( raw_dylib) ]
2+ #![ feature( abi_vectorcall) ]
23
34#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "undecorated" ) ]
45extern "C" {
56 fn cdecl_fn_undecorated ( i : i32 ) ;
7+ #[ link_name = "cdecl_fn_undecorated2" ]
8+ fn cdecl_fn_undecorated_renamed ( i : i32 ) ;
69 static mut extern_variable_undecorated: i32 ;
710}
811
@@ -21,6 +24,8 @@ extern "C" {
2124#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "undecorated" ) ]
2225extern "stdcall" {
2326 fn stdcall_fn_undecorated ( i : i32 ) ;
27+ #[ link_name = "stdcall_fn_undecorated2" ]
28+ fn stdcall_fn_undecorated_renamed ( i : i32 ) ;
2429}
2530
2631#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "noprefix" ) ]
@@ -36,6 +41,8 @@ extern "stdcall" {
3641#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "undecorated" ) ]
3742extern "fastcall" {
3843 fn fastcall_fn_undecorated ( i : i32 ) ;
44+ #[ link_name = "fastcall_fn_undecorated2" ]
45+ fn fastcall_fn_undecorated_renamed ( i : i32 ) ;
3946}
4047
4148#[ link( name = "extern" , kind = "raw-dylib" , import_name_type = "noprefix" ) ]
@@ -48,6 +55,26 @@ extern "fastcall" {
4855 fn fastcall_fn_decorated ( i : i32 ) ;
4956}
5057
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+
5178#[ link( name = "extern" , kind = "raw-dylib" ) ]
5279extern {
5380 fn print_extern_variable_undecorated ( ) ;
@@ -58,14 +85,17 @@ extern {
5885pub fn main ( ) {
5986 unsafe {
6087 cdecl_fn_undecorated ( 1 ) ;
88+ cdecl_fn_undecorated_renamed ( 10 ) ;
6189 cdecl_fn_noprefix ( 2 ) ;
6290 cdecl_fn_decorated ( 3 ) ;
6391
6492 stdcall_fn_undecorated ( 4 ) ;
93+ stdcall_fn_undecorated_renamed ( 14 ) ;
6594 stdcall_fn_noprefix ( 5 ) ;
6695 stdcall_fn_decorated ( 6 ) ;
6796
6897 fastcall_fn_undecorated ( 7 ) ;
98+ fastcall_fn_undecorated_renamed ( 17 ) ;
6999 fastcall_fn_noprefix ( 8 ) ;
70100 fastcall_fn_decorated ( 9 ) ;
71101
@@ -75,5 +105,21 @@ pub fn main() {
75105 print_extern_variable_noprefix ( ) ;
76106 extern_variable_decorated = 44 ;
77107 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+ }
78124 }
79125}
0 commit comments