From a32ebdfb224b7cbb1bbf50cb6d07175516799500 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Mon, 11 Jul 2016 05:59:24 +0000 Subject: [PATCH] [Sema] Disallow __make_integer_seq from showing up in __make_integer_seq We hit over stringent asserts when trying to diagnose. Loosen them as appropriate. This fixes PR28494. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@275047 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaTemplate.cpp | 10 ++++++---- test/SemaCXX/make_integer_seq.cpp | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index 862447b7d5..c1b6b5e45a 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -5378,11 +5378,13 @@ bool Sema::CheckTemplateArgument(TemplateTemplateParmDecl *Param, if (!isa(Template) && !isa(Template) && !isa(Template)) { - assert(isa(Template) && - "Only function templates are possible here"); + assert((isa(Template) || + isa(Template)) && + "Only function or builtin templates are possible here"); Diag(Arg.getLocation(), diag::err_template_arg_not_valid_template); - Diag(Template->getLocation(), diag::note_template_arg_refers_here_func) - << Template; + if (isa(Template)) + Diag(Template->getLocation(), diag::note_template_arg_refers_here_func) + << Template; } TemplateParameterList *Params = Param->getTemplateParameters(); diff --git a/test/SemaCXX/make_integer_seq.cpp b/test/SemaCXX/make_integer_seq.cpp index 4e15414cbe..0cab0cf6e7 100644 --- a/test/SemaCXX/make_integer_seq.cpp +++ b/test/SemaCXX/make_integer_seq.cpp @@ -47,3 +47,7 @@ using illformed2 = ErrorSeq; template void f() {} __make_integer_seq x; // expected-error{{template template parameter must be a class template or type alias template}} + +__make_integer_seq<__make_integer_seq, int, 10> PR28494; // expected-error{{does not refer to a class or alias template, or template template parameter}} expected-error{{different template parameters}} +// expected-note@make_integer_seq.cpp:* {{template parameter has a different kind}} +// expected-note@make_integer_seq.cpp:* {{previous template template parameter is here}} -- 2.50.1