[cfe-commits] r82843 - in /cfe/trunk: lib/CodeGen/Mangle.cpp test/CodeGenCXX/PR5050-constructor-conversion.cpp test/CodeGenCXX/constructor-default-arg.cpp test/CodeGenCXX/copy-assign-synthesis-1.cpp test/CodeGenCXX/copy-constructor-synthesis.cpp test/CodeGenCXX/mangle-subst.cpp test/CodeGenCXX/member-functions.cpp
Anders Carlsson
andersca at mac.com
Fri Sep 25 20:55:45 PDT 2009
Author: andersca
Date: Fri Sep 25 22:55:37 2009
New Revision: 82843
URL: http://llvm.org/viewvc/llvm-project?rev=82843&view=rev
Log:
Mangle record types as decls.
Modified:
cfe/trunk/lib/CodeGen/Mangle.cpp
cfe/trunk/test/CodeGenCXX/PR5050-constructor-conversion.cpp
cfe/trunk/test/CodeGenCXX/constructor-default-arg.cpp
cfe/trunk/test/CodeGenCXX/copy-assign-synthesis-1.cpp
cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis.cpp
cfe/trunk/test/CodeGenCXX/mangle-subst.cpp
cfe/trunk/test/CodeGenCXX/member-functions.cpp
Modified: cfe/trunk/lib/CodeGen/Mangle.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/Mangle.cpp?rev=82843&r1=82842&r2=82843&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/Mangle.cpp (original)
+++ cfe/trunk/lib/CodeGen/Mangle.cpp Fri Sep 25 22:55:37 2009
@@ -456,7 +456,7 @@
void CXXNameMangler::mangleNestedName(const NamedDecl *ND) {
// <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E
// ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
- // FIXME: no class template support
+
Out << 'N';
if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(ND))
mangleQualifiers(Qualifiers::fromCVRMask(Method->getTypeQualifiers()));
@@ -1077,6 +1077,11 @@
}
bool CXXNameMangler::mangleSubstitution(QualType T) {
+ if (!T.getCVRQualifiers()) {
+ if (const RecordType *RT = T->getAs<RecordType>())
+ return mangleSubstitution(RT->getDecl());
+ }
+
uintptr_t TypePtr = reinterpret_cast<uintptr_t>(T.getAsOpaquePtr());
return mangleSubstitution(TypePtr);
@@ -1117,6 +1122,13 @@
}
void CXXNameMangler::addSubstitution(QualType T) {
+ if (!T.getCVRQualifiers()) {
+ if (const RecordType *RT = T->getAs<RecordType>()) {
+ addSubstitution(RT->getDecl());
+ return;
+ }
+ }
+
uintptr_t TypePtr = reinterpret_cast<uintptr_t>(T.getAsOpaquePtr());
addSubstitution(TypePtr);
}
@@ -1144,6 +1156,10 @@
assert(!isa<CXXDestructorDecl>(D) &&
"Use mangleCXXDtor for destructor decls!");
+ PrettyStackTraceDecl CrashInfo(const_cast<NamedDecl *>(D), SourceLocation(),
+ Context.getSourceManager(),
+ "Mangling declaration");
+
CXXNameMangler Mangler(Context, os);
if (!Mangler.mangle(D))
return false;
Modified: cfe/trunk/test/CodeGenCXX/PR5050-constructor-conversion.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/PR5050-constructor-conversion.cpp?rev=82843&r1=82842&r2=82843&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/PR5050-constructor-conversion.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/PR5050-constructor-conversion.cpp Fri Sep 25 22:55:37 2009
@@ -12,8 +12,8 @@
return b;
}
-// CHECK-LP64: call __ZN1AC1ERK1Ai
+// CHECK-LP64: call __ZN1AC1ERKS_i
-// CHECK-LP32: call L__ZN1AC1ERK1Ai
+// CHECK-LP32: call L__ZN1AC1ERKS_i
Modified: cfe/trunk/test/CodeGenCXX/constructor-default-arg.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/constructor-default-arg.cpp?rev=82843&r1=82842&r2=82843&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/constructor-default-arg.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/constructor-default-arg.cpp Fri Sep 25 22:55:37 2009
@@ -31,10 +31,10 @@
X d(a, 5, 6);
}
-// CHECK-LP64: call __ZN1XC1ERK1Xiii
-// CHECK-LP64: call __ZN1XC1ERK1Xiii
-// CHECK-LP64: call __ZN1XC1ERK1Xiii
+// CHECK-LP64: call __ZN1XC1ERKS_iii
+// CHECK-LP64: call __ZN1XC1ERKS_iii
+// CHECK-LP64: call __ZN1XC1ERKS_iii
-// CHECK-LP32: call L__ZN1XC1ERK1Xiii
-// CHECK-LP32: call L__ZN1XC1ERK1Xiii
-// CHECK-LP32: call L__ZN1XC1ERK1Xiii
+// CHECK-LP32: call L__ZN1XC1ERKS_iii
+// CHECK-LP32: call L__ZN1XC1ERKS_iii
+// CHECK-LP32: call L__ZN1XC1ERKS_iii
Modified: cfe/trunk/test/CodeGenCXX/copy-assign-synthesis-1.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/copy-assign-synthesis-1.cpp?rev=82843&r1=82842&r2=82843&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/copy-assign-synthesis-1.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/copy-assign-synthesis-1.cpp Fri Sep 25 22:55:37 2009
@@ -93,17 +93,17 @@
dstY.pr();
}
-// CHECK-LP64: .globl __ZN1XaSERK1X
-// CHECK-LP64: .weak_definition __ZN1XaSERK1X
-// CHECK-LP64: __ZN1XaSERK1X:
-// CHECK-LP64: .globl __ZN1QaSERK1Q
-// CHECK-LP64: .weak_definition __ZN1QaSERK1Q
-// CHECK-LP64: __ZN1QaSERK1Q:
+// CHECK-LP64: .globl __ZN1XaSERKS_
+// CHECK-LP64: .weak_definition __ZN1XaSERKS_
+// CHECK-LP64: __ZN1XaSERKS_:
+// CHECK-LP64: .globl __ZN1QaSERKS_
+// CHECK-LP64: .weak_definition __ZN1QaSERKS_
+// CHECK-LP64: __ZN1QaSERKS_:
-// CHECK-LP32: .globl __ZN1XaSERK1X
-// CHECK-LP32: .weak_definition __ZN1XaSERK1X
-// CHECK-LP32: __ZN1XaSERK1X:
-// CHECK-LP32: .globl __ZN1QaSERK1Q
-// CHECK-LP32: .weak_definition __ZN1QaSERK1Q
-// CHECK-LP32: __ZN1QaSERK1Q:
+// CHECK-LP32: .globl __ZN1XaSERKS_
+// CHECK-LP32: .weak_definition __ZN1XaSERKS_
+// CHECK-LP32: __ZN1XaSERKS_:
+// CHECK-LP32: .globl __ZN1QaSERKS_
+// CHECK-LP32: .weak_definition __ZN1QaSERKS_
+// CHECK-LP32: __ZN1QaSERKS_:
Modified: cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis.cpp?rev=82843&r1=82842&r2=82843&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis.cpp Fri Sep 25 22:55:37 2009
@@ -101,10 +101,10 @@
m1.pr();
}
-// CHECK-LP64: .globl __ZN1XC1ERK1X
-// CHECK-LP64: .weak_definition __ZN1XC1ERK1X
-// CHECK-LP64: __ZN1XC1ERK1X:
+// CHECK-LP64: .globl __ZN1XC1ERKS_
+// CHECK-LP64: .weak_definition __ZN1XC1ERKS_
+// CHECK-LP64: __ZN1XC1ERKS_:
-// CHECK-LP32: .globl __ZN1XC1ERK1X
-// CHECK-LP32: .weak_definition __ZN1XC1ERK1X
-// CHECK-LP32: __ZN1XC1ERK1X:
+// CHECK-LP32: .globl __ZN1XC1ERKS_
+// CHECK-LP32: .weak_definition __ZN1XC1ERKS_
+// CHECK-LP32: __ZN1XC1ERKS_:
Modified: cfe/trunk/test/CodeGenCXX/mangle-subst.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-subst.cpp?rev=82843&r1=82842&r2=82843&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/mangle-subst.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/mangle-subst.cpp Fri Sep 25 22:55:37 2009
@@ -24,3 +24,10 @@
// CHECK: define void @_Z1fN1A1AENS_1BE(
void f(A::A a, A::B b) { }
+
+struct C {
+ struct D { };
+};
+
+// CHECK: define void @_Z1fN1C1DERS_PS_S1_(
+void f(C::D, C&, C*, C&) { }
Modified: cfe/trunk/test/CodeGenCXX/member-functions.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/member-functions.cpp?rev=82843&r1=82842&r2=82843&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/member-functions.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/member-functions.cpp Fri Sep 25 22:55:37 2009
@@ -58,6 +58,6 @@
void test3() {
T t1, t2;
- // RUN: grep "call void @_ZN1TpsERK1T" %t
+ // RUN: grep "call void @_ZN1TpsERKS_" %t
T result = t1 + t2;
}
More information about the cfe-commits
mailing list