aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-12-16 01:49:41 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-12-16 01:49:41 +0000
commit21eb631b826dd6512cc47013a990a471cdcc1008 (patch)
tree914f5c8226356b671160a50d38b6a3effa0477d8
parentea0e2a51f400471a67bf3979fb9e30390eb7a34b (diff)
downloadgcc-21eb631b826dd6512cc47013a990a471cdcc1008.zip
gcc-21eb631b826dd6512cc47013a990a471cdcc1008.tar.gz
gcc-21eb631b826dd6512cc47013a990a471cdcc1008.tar.bz2
re PR c++/13269 (compiler hangs on invalid code)
PR c++/13269 * parser.c (cp_parser_function_definition_after_declarator): Stop scanning tokens when reaching EOF. PR c++/13269 * g++.dg/parse/error5.C: New test. From-SVN: r74661
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/parser.c3
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/parse/error5.C4
4 files changed, 13 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 43389e8..d00f67c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2003-12-15 Mark Mitchell <mark@codesourcery.com>
+ PR c++/13269
+ * parser.c (cp_parser_function_definition_after_declarator): Stop
+ scanning tokens when reaching EOF.
+
PR c++/12989
* typeck.c (cxx_sizeof_or_alignof_expr): Robustify.
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index a74e33a..fd25aa2 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -13807,7 +13807,8 @@ cp_parser_function_definition_after_declarator (cp_parser* parser,
/* Issue an error message. */
error ("named return values are no longer supported");
/* Skip tokens until we reach the start of the function body. */
- while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
+ while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
+ && cp_lexer_next_token_is_not (parser->lexer, CPP_EOF))
cp_lexer_consume_token (parser->lexer);
}
/* The `extern' in `extern "C" void f () { ... }' does not apply to
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 83352dc..8862f10 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2003-12-15 Mark Mitchell <mark@codesourcery.com>
+ PR c++/13269
+ * g++.dg/parse/error5.C: New test.
+
PR c++/12989
* g++.dg/expr/sizeof1.C: New test.
diff --git a/gcc/testsuite/g++.dg/parse/error5.C b/gcc/testsuite/g++.dg/parse/error5.C
new file mode 100644
index 0000000..81356ce
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/error5.C
@@ -0,0 +1,4 @@
+// PR c++/13269
+
+class Foo { int foo() return 0; } }; // { dg-error "" }
+