Skip to content

Commit f9a2525

Browse files
committed
Rename mangleNameOrStandardSubstitution to mangleCXXRecordDecl and add Record to the substitution
1 parent 614aeda commit f9a2525

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

clang/lib/AST/ItaniumMangle.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ class CXXNameMangler {
464464
void mangleSeqID(unsigned SeqID);
465465
void mangleName(GlobalDecl GD);
466466
void mangleType(QualType T);
467-
void mangleNameOrStandardSubstitution(const NamedDecl *ND);
467+
void mangleCXXRecordDecl(const CXXRecordDecl *Record);
468468
void mangleLambdaSig(const CXXRecordDecl *Lambda);
469469
void mangleModuleNamePrefix(StringRef Name, bool IsPartition = false);
470470
void mangleVendorQualifier(StringRef Name);
@@ -3029,9 +3029,11 @@ void CXXNameMangler::mangleType(QualType T) {
30293029
addSubstitution(T);
30303030
}
30313031

3032-
void CXXNameMangler::mangleNameOrStandardSubstitution(const NamedDecl *ND) {
3033-
if (!mangleStandardSubstitution(ND))
3034-
mangleName(ND);
3032+
void CXXNameMangler::mangleCXXRecordDecl(const CXXRecordDecl *Record) {
3033+
if (mangleSubstitution(Record))
3034+
return;
3035+
mangleName(Record);
3036+
addSubstitution(Record);
30353037
}
30363038

30373039
void CXXNameMangler::mangleType(const BuiltinType *T) {
@@ -7309,15 +7311,15 @@ void ItaniumMangleContextImpl::mangleCXXVTable(const CXXRecordDecl *RD,
73097311
// <special-name> ::= TV <type> # virtual table
73107312
CXXNameMangler Mangler(*this, Out);
73117313
Mangler.getStream() << "_ZTV";
7312-
Mangler.mangleNameOrStandardSubstitution(RD);
7314+
Mangler.mangleCXXRecordDecl(RD);
73137315
}
73147316

73157317
void ItaniumMangleContextImpl::mangleCXXVTT(const CXXRecordDecl *RD,
73167318
raw_ostream &Out) {
73177319
// <special-name> ::= TT <type> # VTT structure
73187320
CXXNameMangler Mangler(*this, Out);
73197321
Mangler.getStream() << "_ZTT";
7320-
Mangler.mangleNameOrStandardSubstitution(RD);
7322+
Mangler.mangleCXXRecordDecl(RD);
73217323
}
73227324

73237325
void ItaniumMangleContextImpl::mangleCXXCtorVTable(const CXXRecordDecl *RD,
@@ -7327,10 +7329,10 @@ void ItaniumMangleContextImpl::mangleCXXCtorVTable(const CXXRecordDecl *RD,
73277329
// <special-name> ::= TC <type> <offset number> _ <base type>
73287330
CXXNameMangler Mangler(*this, Out);
73297331
Mangler.getStream() << "_ZTC";
7330-
Mangler.mangleNameOrStandardSubstitution(RD);
7332+
Mangler.mangleCXXRecordDecl(RD);
73317333
Mangler.getStream() << Offset;
73327334
Mangler.getStream() << '_';
7333-
Mangler.mangleNameOrStandardSubstitution(Type);
7335+
Mangler.mangleCXXRecordDecl(Type);
73347336
}
73357337

73367338
void ItaniumMangleContextImpl::mangleCXXRTTI(QualType Ty, raw_ostream &Out) {

clang/test/CodeGenCXX/mangle.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ struct Y { };
1111
//CHECK: @pr5966_i = external global
1212
//CHECK: @_ZL8pr5966_j = internal global
1313

14+
//CHECK: @_ZTCN6test624InstE0_NS_1A4ImplINS1_4WrapEEE
15+
1416
// CHECK-LABEL: define{{.*}} zeroext i1 @_ZplRK1YRA100_P1X
1517
bool operator+(const Y&, X* (&xs)[100]) { return false; }
1618

@@ -1214,3 +1216,25 @@ namespace test61 {
12141216
// CHECK-LABEL: @_ZN6test611fINS_1XEEEvNT_1Y1aENS3_1bE
12151217
template void f<X>(int, int);
12161218
}
1219+
1220+
namespace test62 {
1221+
namespace A {
1222+
1223+
class VBase {
1224+
public:
1225+
virtual ~VBase() {};
1226+
};
1227+
1228+
struct Wrap {};
1229+
1230+
template <typename T>
1231+
class Impl : public virtual VBase {
1232+
public:
1233+
};
1234+
1235+
} // namespace A
1236+
1237+
struct Inst : public A::Impl<A::Wrap> {};
1238+
1239+
void Test() { Inst a; }
1240+
}

0 commit comments

Comments
 (0)