From 88eba637ae7aab78534685b977877a082a8f195d Mon Sep 17 00:00:00 2001 From: nathan Date: Thu, 11 Jan 2001 11:29:06 +0000 Subject: [PATCH] cp: * parse.y (template_parm_header, template_spec_header): New reductions. Split out from ... (template_header): ... here. Use them. (template_template_parm): Use template_parm_header. * semantics.c (finish_template_template_parm): Add assert. testsuite: * g++.old-deja/g++.pt/crash63.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38900 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 8 ++++++++ gcc/cp/parse.y | 17 +++++++++++++---- gcc/cp/semantics.c | 2 ++ gcc/testsuite/ChangeLog | 10 +++++++--- gcc/testsuite/g++.old-deja/g++.pt/crash63.C | 9 +++++++++ 5 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/crash63.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8a93305..31d2d12 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2001-01-11 Nathan Sidwell + + * parse.y (template_parm_header, template_spec_header): New + reductions. Split out from ... + (template_header): ... here. Use them. + (template_template_parm): Use template_parm_header. + * semantics.c (finish_template_template_parm): Add assert. + 2001-01-10 Mark Mitchell * mangle.c (write_builtin_type): Fix thinko. diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index c92b791..f74fae4 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -395,7 +395,8 @@ cp_parse_init () %type maybe_parmlist %type member_init %type member_init_list -%type template_header template_parm_list template_parm +%type template_parm_header template_spec_header template_header +%type template_parm_list template_parm %type template_type_parm template_template_parm %type template_close_bracket %type apparent_template_type @@ -599,16 +600,24 @@ extern_lang_string: pop_lang_context (); push_lang_context ($2); } ; -template_header: +template_parm_header: TEMPLATE '<' { begin_template_parm_list (); } template_parm_list '>' { $$ = end_template_parm_list ($4); } - | TEMPLATE '<' '>' + ; + +template_spec_header: + TEMPLATE '<' '>' { begin_specialization(); $$ = NULL_TREE; } ; +template_header: + template_parm_header + | template_spec_header + ; + template_parm_list: template_parm { $$ = process_template_parm (NULL_TREE, $1); } @@ -630,7 +639,7 @@ template_type_parm: ; template_template_parm: - template_header aggr maybe_identifier + template_parm_header aggr maybe_identifier { $$ = finish_template_template_parm ($2, $3); } ; diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index cf88279..10e67c6 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -1689,6 +1689,8 @@ finish_template_template_parm (aggr, identifier) DECL_ARTIFICIAL (decl) = 1; end_template_decl (); + my_friendly_assert (DECL_TEMPLATE_PARMS (tmpl), 20010110); + return finish_template_type_parm (aggr, tmpl); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e73fd5c..a87cf88 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-01-11 Nathan Sidwell + + * g++.old-deja/g++.pt/crash63.C: New test. + 2001-01-11 Neil Booth * gcc.dg/cpp/if-2.c: Add wide char test without sign extension. @@ -8,15 +12,15 @@ 2001-01-10 Nathan Sidwell - * g++.old_deja/g++.pt/error3.C: New test. + * g++.old-deja/g++.pt/error3.C: New test. 2001-01-10 Nathan Sidwell - * g++.old_deja/g++.other/crash39.C: New test. + * g++.old-deja/g++.other/crash39.C: New test. 2001-01-10 Nathan Sidwell - * g++.old_deja/g++.other/vbase4.C: New test. + * g++.old-deja/g++.other/vbase4.C: New test. 2001-01-08 Jonathan Larmour diff --git a/gcc/testsuite/g++.old-deja/g++.pt/crash63.C b/gcc/testsuite/g++.old-deja/g++.pt/crash63.C new file mode 100644 index 0000000..f88af72 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/crash63.C @@ -0,0 +1,9 @@ +// Build don't link: + +// Copyright (C) 2000 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 10 Jan 2001 + +// Bug 1585. We ICEd on a template template parm with no parms. + +template class C> class B; +template class C> class D; // ERROR - parse error -- 2.7.4