From: Richard Smith Date: Wed, 17 Jun 2015 22:13:23 +0000 (+0000) Subject: [modules] Fix typo in default argument merging. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=94ff30c2f897207422084de3b3efd0396f7ecf8c;p=clang [modules] Fix typo in default argument merging. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@239954 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Serialization/ASTReaderDecl.cpp b/lib/Serialization/ASTReaderDecl.cpp index 9cb145e4b4..548ce9c4a4 100644 --- a/lib/Serialization/ASTReaderDecl.cpp +++ b/lib/Serialization/ASTReaderDecl.cpp @@ -2924,13 +2924,13 @@ static void inheritDefaultTemplateArguments(ASTContext &Context, NamedDecl *ToParam = ToTP->getParam(N - I - 1); if (auto *FTTP = dyn_cast(FromParam)) { - if (inheritDefaultTemplateArgument(Context, FTTP, ToParam)) + if (!inheritDefaultTemplateArgument(Context, FTTP, ToParam)) break; } else if (auto *FNTTP = dyn_cast(FromParam)) { - if (inheritDefaultTemplateArgument(Context, FNTTP, ToParam)) + if (!inheritDefaultTemplateArgument(Context, FNTTP, ToParam)) break; } else { - if (inheritDefaultTemplateArgument( + if (!inheritDefaultTemplateArgument( Context, cast(FromParam), ToParam)) break; } diff --git a/test/Modules/Inputs/submodules-merge-defs/defs.h b/test/Modules/Inputs/submodules-merge-defs/defs.h index 02a4ae946c..247b05c470 100644 --- a/test/Modules/Inputs/submodules-merge-defs/defs.h +++ b/test/Modules/Inputs/submodules-merge-defs/defs.h @@ -66,9 +66,11 @@ namespace FriendDefArg { template struct A; template struct B; template class = A> struct C; + template class = A> struct D {}; template struct Y { template friend struct A; template friend struct B; template class> friend struct C; + template class> friend struct D; }; } diff --git a/test/Modules/Inputs/template-default-args/c.h b/test/Modules/Inputs/template-default-args/c.h index c204f31336..2946013b61 100644 --- a/test/Modules/Inputs/template-default-args/c.h +++ b/test/Modules/Inputs/template-default-args/c.h @@ -1 +1,2 @@ template struct F; +template struct I; diff --git a/test/Modules/submodules-merge-defs.cpp b/test/Modules/submodules-merge-defs.cpp index ee5e4fe1bf..38b3147ade 100644 --- a/test/Modules/submodules-merge-defs.cpp +++ b/test/Modules/submodules-merge-defs.cpp @@ -82,3 +82,4 @@ J<> post_j; template class K> struct J; J<> post_j2; FriendDefArg::Y friend_def_arg; +FriendDefArg::D<> friend_def_arg_d; diff --git a/test/Modules/template-default-args.cpp b/test/Modules/template-default-args.cpp index 9b2865421f..dc44534302 100644 --- a/test/Modules/template-default-args.cpp +++ b/test/Modules/template-default-args.cpp @@ -7,6 +7,7 @@ template struct C; template struct D; template struct E {}; template struct H {}; +template 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;