]> granicus.if.org Git - clang/commitdiff
Correctly handle > 257 substitutions in a single mangling, and don't introduce
authorJohn McCall <rjmccall@apple.com>
Wed, 9 Jun 2010 07:26:17 +0000 (07:26 +0000)
committerJohn McCall <rjmccall@apple.com>
Wed, 9 Jun 2010 07:26:17 +0000 (07:26 +0000)
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

index faa9a9e4535652657e862f2f13adbecd5d31cce3..d8f1ca0b909fbbdf0bc8fb2e2e3a4051139f6626 100644 (file)
@@ -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;