2 #![feature(abi_vectorcall)]
4 #[link(name = "extern", kind = "raw-dylib", import_name_type = "undecorated")]
6 fn LooksLikeAPrivateGlobal(i: i32);
7 fn cdecl_fn_undecorated(i: i32);
8 #[link_name = "cdecl_fn_undecorated2"]
9 fn cdecl_fn_undecorated_renamed(i: i32);
10 static mut extern_variable_undecorated: i32;
13 #[link(name = "extern", kind = "raw-dylib", import_name_type = "noprefix")]
15 fn cdecl_fn_noprefix(i: i32);
16 static mut extern_variable_noprefix: i32;
19 #[link(name = "extern", kind = "raw-dylib", import_name_type = "decorated")]
21 fn cdecl_fn_decorated(i: i32);
22 static mut extern_variable_decorated: i32;
25 #[link(name = "extern", kind = "raw-dylib", import_name_type = "undecorated")]
27 fn stdcall_fn_undecorated(i: i32);
28 #[link_name = "stdcall_fn_undecorated2"]
29 fn stdcall_fn_undecorated_renamed(i: i32);
32 #[link(name = "extern", kind = "raw-dylib", import_name_type = "noprefix")]
34 fn stdcall_fn_noprefix(i: i32);
37 #[link(name = "extern", kind = "raw-dylib", import_name_type = "decorated")]
39 fn stdcall_fn_decorated(i: i32);
42 #[link(name = "extern", kind = "raw-dylib", import_name_type = "undecorated")]
44 fn fastcall_fn_undecorated(i: i32);
45 #[link_name = "fastcall_fn_undecorated2"]
46 fn fastcall_fn_undecorated_renamed(i: i32);
49 #[link(name = "extern", kind = "raw-dylib", import_name_type = "noprefix")]
51 fn fastcall_fn_noprefix(i: i32);
54 #[link(name = "extern", kind = "raw-dylib", import_name_type = "decorated")]
56 fn fastcall_fn_decorated(i: i32);
59 #[cfg(target_env = "msvc")]
60 #[link(name = "extern", kind = "raw-dylib", import_name_type = "undecorated")]
62 fn vectorcall_fn_undecorated(i: i32);
63 #[link_name = "vectorcall_fn_undecorated2"]
64 fn vectorcall_fn_undecorated_renamed(i: i32);
67 #[cfg(target_env = "msvc")]
68 #[link(name = "extern", kind = "raw-dylib", import_name_type = "noprefix")]
70 fn vectorcall_fn_noprefix(i: i32);
73 #[cfg(target_env = "msvc")]
74 #[link(name = "extern", kind = "raw-dylib", import_name_type = "decorated")]
76 fn vectorcall_fn_decorated(i: i32);
79 #[link(name = "extern", kind = "raw-dylib")]
81 fn print_extern_variable_undecorated();
82 fn print_extern_variable_noprefix();
83 fn print_extern_variable_decorated();
88 // Regression test for #104453
89 // On x86 LLVM uses 'L' as the prefix for private globals (PrivateGlobalPrefix), which
90 // causes it to believe that undecorated functions starting with 'L' are actually temporary
91 // symbols that it generated, which causes a later check to fail as the symbols we are
92 // creating don't have definitions (whereas all temporary symbols do).
93 LooksLikeAPrivateGlobal(13);
95 cdecl_fn_undecorated(1);
96 cdecl_fn_undecorated_renamed(10);
98 cdecl_fn_decorated(3);
100 stdcall_fn_undecorated(4);
101 stdcall_fn_undecorated_renamed(14);
102 stdcall_fn_noprefix(5);
103 stdcall_fn_decorated(6);
105 fastcall_fn_undecorated(7);
106 fastcall_fn_undecorated_renamed(17);
107 fastcall_fn_noprefix(8);
108 fastcall_fn_decorated(9);
110 extern_variable_undecorated = 42;
111 print_extern_variable_undecorated();
112 extern_variable_noprefix = 43;
113 print_extern_variable_noprefix();
114 extern_variable_decorated = 44;
115 print_extern_variable_decorated();
117 // GCC doesn't support vectorcall: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89485
118 #[cfg(target_env = "msvc")]
120 vectorcall_fn_undecorated(10);
121 vectorcall_fn_undecorated_renamed(20);
122 vectorcall_fn_noprefix(11);
123 vectorcall_fn_decorated(12);
125 #[cfg(not(target_env = "msvc"))]
127 println!("vectorcall_fn_undecorated(10)");
128 println!("vectorcall_fn_undecorated2(20)");
129 println!("vectorcall_fn_noprefix(11)");
130 println!("vectorcall_fn_decorated(12)");