r203145 - MS ABI: Fix the initializer/finalizer mangling for static data members
David Majnemer
david.majnemer at gmail.com
Thu Mar 6 11:10:28 PST 2014
Author: majnemer
Date: Thu Mar 6 13:10:27 2014
New Revision: 203145
URL: http://llvm.org/viewvc/llvm-project?rev=203145&view=rev
Log:
MS ABI: Fix the initializer/finalizer mangling for static data members
Initializers and finalizers for static data members have the variable's
access-specifier, storage-class, type and CV-qualifiers mangled in.
Modified:
cfe/trunk/lib/AST/MicrosoftMangle.cpp
cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp
Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=203145&r1=203144&r2=203145&view=diff
==============================================================================
--- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original)
+++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Thu Mar 6 13:10:27 2014
@@ -2295,6 +2295,10 @@ void MicrosoftMangleContextImpl::mangleI
MicrosoftCXXNameMangler Mangler(*this, Out);
Mangler.getStream() << "\01??__" << CharCode;
Mangler.mangleName(D);
+ if (D->isStaticDataMember()) {
+ Mangler.mangleVariableEncoding(D);
+ Mangler.getStream() << '@';
+ }
// This is the function class mangling. These stubs are global, non-variadic,
// cdecl functions that return void and take no args.
Mangler.getStream() << "YAXXZ";
Modified: cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp?rev=203145&r1=203144&r2=203145&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp Thu Mar 6 13:10:27 2014
@@ -1,7 +1,7 @@
// RUN: %clang_cc1 -emit-llvm %s -o - -mconstructor-aliases -triple=i386-pc-win32 | FileCheck %s
// CHECK: @llvm.global_ctors = appending global [2 x { i32, void ()* }]
-// CHECK: [{ i32, void ()* } { i32 65535, void ()* @"\01??__Efoo@?$B at H@@YAXXZ" },
+// CHECK: [{ i32, void ()* } { i32 65535, void ()* @"\01??__Efoo@?$B at H@@2VA@@A at YAXXZ"
// CHECK: { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_a }]
struct S {
@@ -134,16 +134,16 @@ void force_usage() {
(void)B<int>::foo; // (void) - force usage
}
-// CHECK: define internal void @"\01??__Efoo@?$B at H@@YAXXZ"() [[NUW]]
+// CHECK: define internal void @"\01??__Efoo@?$B at H@@2VA@@A at YAXXZ"() [[NUW]]
// CHECK: %{{[.0-9A-Z_a-z]+}} = call x86_thiscallcc %class.A* @"\01??0A@@QAE at XZ"
-// CHECK: call i32 @atexit(void ()* @"\01??__Ffoo@?$B at H@@YAXXZ")
+// CHECK: call i32 @atexit(void ()* @"\01??__Ffoo@?$B at H@@2VA@@A at YAXXZ")
// CHECK: ret void
// CHECK: define linkonce_odr x86_thiscallcc %class.A* @"\01??0A@@QAE at XZ"
// CHECK: define linkonce_odr x86_thiscallcc void @"\01??1A@@QAE at XZ"
-// CHECK: define internal void @"\01??__Ffoo@?$B at H@@YAXXZ"
+// CHECK: define internal void @"\01??__Ffoo@?$B at H@@2VA@@A at YAXXZ"
// CHECK: call x86_thiscallcc void @"\01??1A@@QAE at XZ"{{.*}}foo
// CHECK: ret void
More information about the cfe-commits
mailing list