[cfe-commits] r127108 - in /cfe/trunk: lib/Sema/SemaTemplateInstantiate.cpp test/SemaTemplate/issue150.cpp

Douglas Gregor dgregor at apple.com
Sat Mar 5 12:06:51 PST 2011


Author: dgregor
Date: Sat Mar  5 14:06:51 2011
New Revision: 127108

URL: http://llvm.org/viewvc/llvm-project?rev=127108&view=rev
Log:
When substituting in for a template name, do not produce a qualified
template name as the result of substitution. The qualifier is handled
separately by the tree transformer, so we would end up in an
inconsistent state.

This is actually the last bit of PR9016, and possibly also fixes
PR8965. It takes Boost.Icl from "epic fail" down to a single failure.

Modified:
    cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp
    cfe/trunk/test/SemaTemplate/issue150.cpp

Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp?rev=127108&r1=127107&r2=127108&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp (original)
+++ cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp Sat Mar  5 14:06:51 2011
@@ -967,6 +967,13 @@
       TemplateName Template = Arg.getAsTemplate();
       assert(!Template.isNull() && Template.getAsTemplateDecl() &&
              "Wrong kind of template template argument");
+      
+      // We don't ever want to substitute for a qualified template name, since
+      // the qualifier is handled separately. So, look through the qualified
+      // template name to its underlying declaration.
+      if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
+        Template = TemplateName(QTN->getTemplateDecl());
+          
       return Template;
     }
   }

Modified: cfe/trunk/test/SemaTemplate/issue150.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/issue150.cpp?rev=127108&r1=127107&r2=127108&view=diff
==============================================================================
--- cfe/trunk/test/SemaTemplate/issue150.cpp (original)
+++ cfe/trunk/test/SemaTemplate/issue150.cpp Sat Mar  5 14:06:51 2011
@@ -83,7 +83,7 @@
   };
 
   template <class T,
-            template<class _T, template<class> class Compare = less,
+            template<class _T, template<class> class Compare = PR9016::less,
                      class = typename interval_type_default<_T,Compare>::type,
                      template<class> class = allocator> class IntervalSet>
   struct ZZZ
@@ -92,7 +92,7 @@
   };
   
   template <class T, 
-            template<class _T, template<class> class Compare = less,
+            template<class _T, template<class> class Compare = PR9016::less,
                      class = typename interval_type_default<_T,Compare>::type,
                      template<class> class = allocator> class IntervalSet>
   void int40()





More information about the cfe-commits mailing list