[modules] Fix typo in default argument merging.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 17 Jun 2015 22:13:23 +0000 (22:13 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 17 Jun 2015 22:13:23 +0000 (22:13 +0000)
llvm-svn: 239954

clang/lib/Serialization/ASTReaderDecl.cpp
clang/test/Modules/Inputs/submodules-merge-defs/defs.h
clang/test/Modules/Inputs/template-default-args/c.h
clang/test/Modules/submodules-merge-defs.cpp
clang/test/Modules/template-default-args.cpp

index 9cb145e..548ce9c 100644 (file)
@@ -2924,13 +2924,13 @@ static void inheritDefaultTemplateArguments(ASTContext &Context,
     NamedDecl *ToParam = ToTP->getParam(N - I - 1);
 
     if (auto *FTTP = dyn_cast<TemplateTypeParmDecl>(FromParam)) {
-      if (inheritDefaultTemplateArgument(Context, FTTP, ToParam))
+      if (!inheritDefaultTemplateArgument(Context, FTTP, ToParam))
         break;
     } else if (auto *FNTTP = dyn_cast<NonTypeTemplateParmDecl>(FromParam)) {
-      if (inheritDefaultTemplateArgument(Context, FNTTP, ToParam))
+      if (!inheritDefaultTemplateArgument(Context, FNTTP, ToParam))
         break;
     } else {
-      if (inheritDefaultTemplateArgument(
+      if (!inheritDefaultTemplateArgument(
               Context, cast<TemplateTemplateParmDecl>(FromParam), ToParam))
         break;
     }
index 02a4ae9..247b05c 100644 (file)
@@ -66,9 +66,11 @@ namespace FriendDefArg {
   template<typename = int> struct A;
   template<int = 0> struct B;
   template<template<typename> class = A> struct C;
+  template<typename = int, int = 0, template<typename> class = A> struct D {};
   template<typename U> struct Y {
     template<typename> friend struct A;
     template<int> friend struct B;
     template<template<typename> class> friend struct C;
+    template<typename, int, template<typename> class> friend struct D;
   };
 }
index c204f31..2946013 100644 (file)
@@ -1 +1,2 @@
 template<typename T = int> struct F;
+template<typename T, typename U> struct I;
index ee5e4fe..38b3147 100644 (file)
@@ -82,3 +82,4 @@ J<> post_j;
 template<typename T, int N, template<typename> class K> struct J;
 J<> post_j2;
 FriendDefArg::Y<int> friend_def_arg;
+FriendDefArg::D<> friend_def_arg_d;
index 9b28654..dc44534 100644 (file)
@@ -7,6 +7,7 @@ template<typename T> struct C;
 template<typename T = int> struct D;
 template<typename T = int> struct E {};
 template<typename T> struct H {};
+template<typename T = int, typename U = int> struct I {};
 
 #include "b.h"
 
@@ -30,3 +31,4 @@ G<> g; // expected-error {{default argument of 'G' must be imported from module
 // expected-note@a.h:6 {{default argument declared here}}
 H<> h; // expected-error {{default argument of 'H' must be imported from module 'X.A' before it is required}}
 // expected-note@a.h:7 {{default argument declared here}}
+I<> i;