From 6ab30e0c027458ff5293b898204ac2d1a789668e Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 9 Jun 2010 07:26:17 +0000 Subject: [PATCH] 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 --- lib/CodeGen/Mangle.cpp | 18 ++++++++---------- 1 file 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(SeqID) % 36; + char c = static_cast(SeqID % 36); *--BufferPtr = (c < 10 ? '0' + c : 'A' + c - 10); SeqID /= 36; -- 2.40.0