@@ -134,6 +134,42 @@ TEST(ManglerTest, WindowsX64) {
134134 " ?vectorcall" );
135135}
136136
137+ TEST (ManglerTest, UEFIX64) {
138+ LLVMContext Ctx;
139+ DataLayout DL (" e-m:w-p270:32:32-p271:32:32-p272:64:64-"
140+ " i64:64-i128:128-f80:128-n8:16:32:64-S128" ); // uefi X86_64
141+ Module Mod (" test" , Ctx);
142+ Mod.setDataLayout (DL);
143+ Mangler Mang;
144+ EXPECT_EQ (mangleStr (" foo" , Mang, DL), " foo" );
145+ EXPECT_EQ (mangleStr (" \01 foo" , Mang, DL), " foo" );
146+ EXPECT_EQ (mangleStr (" ?foo" , Mang, DL), " ?foo" );
147+ EXPECT_EQ (mangleFunc (" foo" , llvm::GlobalValue::ExternalLinkage,
148+ llvm::CallingConv::C, Mod, Mang),
149+ " foo" );
150+ EXPECT_EQ (mangleFunc (" ?foo" , llvm::GlobalValue::ExternalLinkage,
151+ llvm::CallingConv::C, Mod, Mang),
152+ " ?foo" );
153+ EXPECT_EQ (mangleFunc (" foo" , llvm::GlobalValue::PrivateLinkage,
154+ llvm::CallingConv::C, Mod, Mang),
155+ " .Lfoo" );
156+ // Test calling conv mangling.
157+ EXPECT_EQ (mangleFunc (" stdcall" , llvm::GlobalValue::ExternalLinkage,
158+ llvm::CallingConv::X86_StdCall, Mod, Mang),
159+ " stdcall" );
160+ EXPECT_EQ (mangleFunc (" fastcall" , llvm::GlobalValue::ExternalLinkage,
161+ llvm::CallingConv::X86_FastCall, Mod, Mang),
162+ " fastcall" );
163+ EXPECT_EQ (mangleFunc (" vectorcall" , llvm::GlobalValue::ExternalLinkage,
164+ llvm::CallingConv::X86_VectorCall, Mod, Mang),
165+ " vectorcall@@24" );
166+
167+ // Adding a '?' prefix blocks calling convention mangling.
168+ EXPECT_EQ (mangleFunc (" ?vectorcall" , llvm::GlobalValue::ExternalLinkage,
169+ llvm::CallingConv::X86_VectorCall, Mod, Mang),
170+ " ?vectorcall" );
171+ }
172+
137173TEST (ManglerTest, XCOFF) {
138174 LLVMContext Ctx;
139175 DataLayout DL (" m:a" ); // XCOFF/AIX
0 commit comments