From 7525f7696fb07ad6486625b0bca9497b65f00cd4 Mon Sep 17 00:00:00 2001 From: mmitchel Date: Fri, 23 Mar 2007 04:37:40 +0000 Subject: [PATCH] PR c++/30863 * parser.c (cp_parser_parse_and_diagnose_invalid_type_name): Do not consume tokens when failing. PR c++/30863 * g++.dg/template/error24.C: New test. * g++.dg/parse/tmpl-outside1.C: Tweak error markers. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123152 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 5 +++-- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/parse/tmpl-outside1.C | 3 +-- gcc/testsuite/g++.dg/template/error24.C | 8 ++++++++ 5 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/error24.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3de84b6..523d52b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-03-22 Mark Mitchell + + PR c++/30863 + * parser.c (cp_parser_parse_and_diagnose_invalid_type_name): Do + not consume tokens when failing. + 2007-03-22 Jim Wilson Mark Mitchell diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 41e7b52..5cfcf43 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -2343,12 +2343,13 @@ cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser) the scope is dependent, we cannot do much. */ if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME) || (parser->scope && TYPE_P (parser->scope) - && dependent_type_p (parser->scope))) + && dependent_type_p (parser->scope)) + || TREE_CODE (id) == TYPE_DECL) { cp_parser_abort_tentative_parse (parser); return false; } - if (!cp_parser_parse_definitely (parser) || TREE_CODE (id) == TYPE_DECL) + if (!cp_parser_parse_definitely (parser)) return false; /* Emit a diagnostic for the invalid type. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a22b4c8..1cbb1af 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2007-03-22 Mark Mitchell + PR c++/30863 + * g++.dg/template/error24.C: New test. + * g++.dg/parse/tmpl-outside1.C: Tweak error markers. + +2007-03-22 Mark Mitchell + PR c++/31273 * g++.dg/expr/bitfield7.C: New test. diff --git a/gcc/testsuite/g++.dg/parse/tmpl-outside1.C b/gcc/testsuite/g++.dg/parse/tmpl-outside1.C index 4b8bb72..e63e3cd 100644 --- a/gcc/testsuite/g++.dg/parse/tmpl-outside1.C +++ b/gcc/testsuite/g++.dg/parse/tmpl-outside1.C @@ -7,5 +7,4 @@ struct X template struct Y {}; }; -typedef X::template Y<0> y; // { dg-error "template" } -// { dg-bogus "with no type" "" { xfail *-*-* } 10 } +typedef X::template Y<0> y; // { dg-error "template|invalid" } diff --git a/gcc/testsuite/g++.dg/template/error24.C b/gcc/testsuite/g++.dg/template/error24.C new file mode 100644 index 0000000..9ce5cbb --- /dev/null +++ b/gcc/testsuite/g++.dg/template/error24.C @@ -0,0 +1,8 @@ +// PR c++/30863 + +template +struct s {}; + +void f() { + unsigned s x; // { dg-error "invalid" } +} -- 2.7.4