Author: majnemer Date: Mon Jul 11 00:59:24 2016 New Revision: 275047 URL: http://llvm.org/viewvc/llvm-project?rev=275047&view=rev Log: [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. Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/test/SemaCXX/make_integer_seq.cpp Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=275047&r1=275046&r2=275047&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Mon Jul 11 00:59:24 2016 @@ -5378,11 +5378,13 @@ bool Sema::CheckTemplateArgument(Templat if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template)) { - assert(isa<FunctionTemplateDecl>(Template) && - "Only function templates are possible here"); + assert((isa<FunctionTemplateDecl>(Template) || + isa<BuiltinTemplateDecl>(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<FunctionTemplateDecl>(Template)) + Diag(Template->getLocation(), diag::note_template_arg_refers_here_func) + << Template; } TemplateParameterList *Params = Param->getTemplateParameters(); Modified: cfe/trunk/test/SemaCXX/make_integer_seq.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/make_integer_seq.cpp?rev=275047&r1=275046&r2=275047&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/make_integer_seq.cpp (original) +++ cfe/trunk/test/SemaCXX/make_integer_seq.cpp Mon Jul 11 00:59:24 2016 @@ -47,3 +47,7 @@ using illformed2 = ErrorSeq<int, -5>; template <typename T, T N> void f() {} __make_integer_seq<f, int, 0> 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}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits