]> granicus.if.org Git - clang/commitdiff
Make sure we consistently canonicalize types when canonicalizing TemplateTemplateParm...
authorEli Friedman <eli.friedman@gmail.com>
Wed, 7 Mar 2012 01:09:33 +0000 (01:09 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Wed, 7 Mar 2012 01:09:33 +0000 (01:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152189 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp
test/SemaTemplate/temp_arg_template.cpp

index e122df9d23527e752ddf5e0460a74fbdd6744a22..0d6f6e612c9ffd3ab500033f45039caac31b327c 100644 (file)
@@ -74,12 +74,14 @@ ASTContext::CanonicalTemplateTemplateParm::Profile(llvm::FoldingSetNodeID &ID,
     if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(*P)) {
       ID.AddInteger(1);
       ID.AddBoolean(NTTP->isParameterPack());
-      ID.AddPointer(NTTP->getType().getAsOpaquePtr());
+      ID.AddPointer(NTTP->getType().getCanonicalType().getAsOpaquePtr());
       if (NTTP->isExpandedParameterPack()) {
         ID.AddBoolean(true);
         ID.AddInteger(NTTP->getNumExpansionTypes());
-        for (unsigned I = 0, N = NTTP->getNumExpansionTypes(); I != N; ++I)
-          ID.AddPointer(NTTP->getExpansionType(I).getAsOpaquePtr());
+        for (unsigned I = 0, N = NTTP->getNumExpansionTypes(); I != N; ++I) {
+          QualType T = NTTP->getExpansionType(I);
+          ID.AddPointer(T.getCanonicalType().getAsOpaquePtr());
+        }
       } else 
         ID.AddBoolean(false);
       continue;
index 9c34089e61f762fe44ce73594ca640f293c5d209..106111e4299cabdb3a0689da2be1ff1153c9603b 100644 (file)
@@ -54,3 +54,9 @@ namespace N {
 
   void f0( Y<int,1> y){ 1 << y; } // expected-note{{in instantiation of function template specialization 'N::operator<<<Y, int, 1>' requested here}}
 }
+
+// PR12179
+template <typename Primitive, template <Primitive...> class F>
+struct unbox_args {
+  typedef typename Primitive::template call<F> x;
+};