From c61b0135cc8c6a557a227a2ebbc9e2435a3462a9 Mon Sep 17 00:00:00 2001 From: jason Date: Tue, 30 Mar 2010 22:34:02 +0000 Subject: [PATCH] PR c++/43076 * pt.c (push_template_decl_real): Deal better with running out of scopes before running out of template parms. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157842 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/pt.c | 3 +++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/template/error-recovery1.C | 9 +++++++++ 4 files changed, 19 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/error-recovery1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2f6ae04daf9..9138ee1f1aa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2010-03-30 Jason Merrill + PR c++/43076 + * pt.c (push_template_decl_real): Deal better with running out of + scopes before running out of template parms. + PR c++/41185 PR c++/41786 * parser.c (cp_parser_direct_declarator): Don't allow VLAs in diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index a58dba29ee3..a8e1b78b73c 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -4548,6 +4548,9 @@ push_template_decl_real (tree decl, bool is_friend) if (current == decl) current = ctx; + else if (current == NULL_TREE) + /* Can happen in erroneous input. */ + break; else current = (TYPE_P (current) ? TYPE_CONTEXT (current) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a561219e5ab..818dbdefb0e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2010-03-30 Jason Merrill + PR c++/43076 + * g++.dg/template/error-recovery1.C: New. + PR c++/41786 * g++.dg/parse/ambig5.C: New. diff --git a/gcc/testsuite/g++.dg/template/error-recovery1.C b/gcc/testsuite/g++.dg/template/error-recovery1.C new file mode 100644 index 00000000000..ef9dc141bc7 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/error-recovery1.C @@ -0,0 +1,9 @@ +// PR c++/43076 + +struct S; +template < typename > struct T +{ + template < typename > + template < bool > struct T < S > // { dg-error "" } + { + void f () { // { dg-error "" } -- 2.11.0