]> granicus.if.org Git - clang/commitdiff
Propagate the "deduced from array bound" bit when comparing deduced
authorDouglas Gregor <dgregor@apple.com>
Wed, 5 Jan 2011 21:00:53 +0000 (21:00 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 5 Jan 2011 21:00:53 +0000 (21:00 +0000)
template argument packs. Plus, remove a FIXME that I fixed yesterday.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122903 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateDeduction.cpp

index f6dacc7ceae27ad38868052c80d7a2cf8a6dad42..0df2899855c589a6b1f4fba1412412952c354862 100644 (file)
@@ -228,8 +228,10 @@ checkDeducedTemplateArguments(ASTContext &Context,
                                       XAEnd = X.pack_end(),
                                          YA = Y.pack_begin();
          XA != XAEnd; ++XA, ++YA) {
-      // FIXME: We've lost the "deduced from array bound" bit.
-      if (checkDeducedTemplateArguments(Context, *XA, *YA).isNull())
+      if (checkDeducedTemplateArguments(Context, 
+                    DeducedTemplateArgument(*XA, X.wasDeducedFromArrayBound()), 
+                    DeducedTemplateArgument(*YA, Y.wasDeducedFromArrayBound()))
+            .isNull())
         return DeducedTemplateArgument();
     }
       
@@ -1400,7 +1402,7 @@ static bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param,
     // the template parameter.
     llvm::SmallVector<TemplateArgument, 2> PackedArgsBuilder;
     for (TemplateArgument::pack_iterator PA = Arg.pack_begin(), 
-         PAEnd = Arg.pack_end();
+                                      PAEnd = Arg.pack_end();
          PA != PAEnd; ++PA) {
       // When converting the deduced template argument, append it to the
       // general output list. We need to do this so that the template argument
@@ -1522,8 +1524,6 @@ FinishTemplateArgumentDeduction(Sema &S,
   // verify that the instantiated template arguments are both valid
   // and are equivalent to the template arguments originally provided
   // to the class template.
-  // FIXME: Do we have to correct the types of deduced non-type template 
-  // arguments (in particular, integral non-type template arguments?).
   LocalInstantiationScope InstScope(S);
   ClassTemplateDecl *ClassTemplate = Partial->getSpecializedTemplate();
   const TemplateArgumentLoc *PartialTemplateArgs