Skip to content
This repository was archived by the owner on Aug 31, 2019. It is now read-only.

Commit a32ebdf

Browse files
committed
[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
1 parent 1bb23e6 commit a32ebdf

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

lib/Sema/SemaTemplate.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5378,11 +5378,13 @@ bool Sema::CheckTemplateArgument(TemplateTemplateParmDecl *Param,
53785378
if (!isa<ClassTemplateDecl>(Template) &&
53795379
!isa<TemplateTemplateParmDecl>(Template) &&
53805380
!isa<TypeAliasTemplateDecl>(Template)) {
5381-
assert(isa<FunctionTemplateDecl>(Template) &&
5382-
"Only function templates are possible here");
5381+
assert((isa<FunctionTemplateDecl>(Template) ||
5382+
isa<BuiltinTemplateDecl>(Template)) &&
5383+
"Only function or builtin templates are possible here");
53835384
Diag(Arg.getLocation(), diag::err_template_arg_not_valid_template);
5384-
Diag(Template->getLocation(), diag::note_template_arg_refers_here_func)
5385-
<< Template;
5385+
if (isa<FunctionTemplateDecl>(Template))
5386+
Diag(Template->getLocation(), diag::note_template_arg_refers_here_func)
5387+
<< Template;
53865388
}
53875389

53885390
TemplateParameterList *Params = Param->getTemplateParameters();

test/SemaCXX/make_integer_seq.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,7 @@ using illformed2 = ErrorSeq<int, -5>;
4747

4848
template <typename T, T N> void f() {}
4949
__make_integer_seq<f, int, 0> x; // expected-error{{template template parameter must be a class template or type alias template}}
50+
51+
__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}}
52+
// expected-note@make_integer_seq.cpp:* {{template parameter has a different kind}}
53+
// expected-note@make_integer_seq.cpp:* {{previous template template parameter is here}}

0 commit comments

Comments
 (0)