diff options
author | John McCall <rjmccall@apple.com> | 2010-06-09 07:26:17 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-06-09 07:26:17 +0000 |
commit | 6ab30e0c027458ff5293b898204ac2d1a789668e (patch) | |
tree | dfb7b2315f5a4d17ac855fb9b8314dda8c4a478b /lib/CodeGen/Mangle.cpp | |
parent | 9b1468311d625ac8920adda5440ce8ffb1a5a5d2 (diff) |
Correctly handle > 257 substitutions in a single mangling, and don't introduce
a spurious substitution for an unscoped dependent template-id after introducing
a substitution for the scoped template-id.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105699 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/Mangle.cpp')
-rw-r--r-- | lib/CodeGen/Mangle.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index faa9a9e453..d8f1ca0b90 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -1374,16 +1374,14 @@ void CXXNameMangler::mangleType(const DependentNameType *T) { mangleSourceName(T->getIdentifier()); } else { const TemplateSpecializationType *TST = T->getTemplateId(); - if (!mangleSubstitution(QualType(TST, 0))) { - mangleTemplatePrefix(TST->getTemplateName()); + + mangleTemplatePrefix(TST->getTemplateName()); - // FIXME: GCC does not appear to mangle the template arguments when - // the template in question is a dependent template name. Should we - // emulate that badness? - mangleTemplateArgs(TST->getTemplateName(), TST->getArgs(), - TST->getNumArgs()); - addSubstitution(QualType(TST, 0)); - } + // FIXME: GCC does not appear to mangle the template arguments when + // the template in question is a dependent template name. Should we + // emulate that badness? + mangleTemplateArgs(TST->getTemplateName(), TST->getArgs(), + TST->getNumArgs()); } Out << 'E'; @@ -1950,7 +1948,7 @@ bool CXXNameMangler::mangleSubstitution(uintptr_t Ptr) { while (SeqID) { assert(BufferPtr > Buffer && "Buffer overflow!"); - unsigned char c = static_cast<unsigned char>(SeqID) % 36; + char c = static_cast<char>(SeqID % 36); *--BufferPtr = (c < 10 ? '0' + c : 'A' + c - 10); SeqID /= 36; |