From fb9968d6f11f7d8e85362f092445b95f94a55724 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Sat, 3 Dec 2011 18:24:43 +0000 Subject: Fix mangling substitutions for address-space-qualified class types. Patch from Dmitri Rubinstein! llvm-svn: 145776 --- clang/lib/AST/ItaniumMangle.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'clang/lib/AST') diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index b2e1d20ca01..1e71a627ce9 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -2984,8 +2984,15 @@ bool CXXNameMangler::mangleSubstitution(const NamedDecl *ND) { return mangleSubstitution(reinterpret_cast(ND)); } +/// \brief Determine whether the given type has any qualifiers that are +/// relevant for substitutions. +static bool hasMangledSubstitutionQualifiers(QualType T) { + Qualifiers Qs = T.getQualifiers(); + return Qs.getCVRQualifiers() || Qs.hasAddressSpace(); +} + bool CXXNameMangler::mangleSubstitution(QualType T) { - if (!T.getCVRQualifiers()) { + if (!hasMangledSubstitutionQualifiers(T)) { if (const RecordType *RT = T->getAs()) return mangleSubstitution(RT->getDecl()); } @@ -3171,7 +3178,7 @@ bool CXXNameMangler::mangleStandardSubstitution(const NamedDecl *ND) { } void CXXNameMangler::addSubstitution(QualType T) { - if (!T.getCVRQualifiers()) { + if (!hasMangledSubstitutionQualifiers(T)) { if (const RecordType *RT = T->getAs()) { addSubstitution(RT->getDecl()); return; -- cgit v1.2.3