]> granicus.if.org Git - clang/commitdiff
[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)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@239954 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 9cb145e4b48970950681f7dc12c280d49481d461..548ce9c4a4ca9e1d48fca8a4764a7073933485a7 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 02a4ae946cd486cf61e9601cddebe45305667de9..247b05c47082c757e9fe0d3cbaf6ca5bdcf51510 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 c204f31336711a0591892073e2548be699092e4e..2946013b6131e3159f42f3568c2d67ae236f0aac 100644 (file)
@@ -1 +1,2 @@
 template<typename T = int> struct F;
+template<typename T, typename U> struct I;
index ee5e4fe1bfd50320f3e6704240a234831e3e2245..38b3147adec1df42be4acd0c209d2deb8326dbc8 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 9b2865421f2c585bfa0d0c011a62d8eed4920e05..dc44534302b2c821e30a0d5f2d00aa0294d31ca5 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;