re PR c++/23440 ("void f(){for" crashes the C++ frontend)
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>
Mon, 17 Oct 2005 22:22:30 +0000 (22:22 +0000)
committerVolker Reichelt <reichelt@gcc.gnu.org>
Mon, 17 Oct 2005 22:22:30 +0000 (22:22 +0000)
PR c++/23440
* parser.c (cp_parser_statement): If the parser reached CPP_EOF,
only complain about missing statement.

* g++.dg/parse/for1.C: New test.

From-SVN: r105520

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/for1.C [new file with mode: 0644]

index 08344ee960ae4bef99ba53f08cbcd9d52c638228..62235408b7332e888d6f9fa373f54dc300e86c98 100644 (file)
@@ -1,3 +1,9 @@
+2005-10-17  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/23440
+       * parser.c (cp_parser_statement): If the parser reached CPP_EOF,
+       only complain about missing statement.
+
 2005-10-17  Nathan Sidwell  <nathan@codesourcery.com>
 
        PR c++/24386
index 45fc69f1e3847c584b81ac3c5413cf939c5e0680..300c266da9e1f07c0fbf70440e9be111538bd624 100644 (file)
@@ -6087,6 +6087,11 @@ cp_parser_statement (cp_parser* parser, tree in_statement_expr)
       cp_lexer_handle_pragma (parser->lexer);
       return;
     }
+  else if (token->type == CPP_EOF)
+    {
+      cp_parser_error (parser, "expected statement");
+      return;
+    }
 
   /* Everything else must be a declaration-statement or an
      expression-statement.  Try for the declaration-statement
index 5e1d0af3af26ee8a9f8fe96e0235fe8f321e2848..081542030a45db2e3bd9e2bade09654fe4668c5c 100644 (file)
@@ -1,3 +1,8 @@
+2005-10-17  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/23440
+       * g++.dg/parse/for1.C: New test.
+
 2005-10-17  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/23446
diff --git a/gcc/testsuite/g++.dg/parse/for1.C b/gcc/testsuite/g++.dg/parse/for1.C
new file mode 100644 (file)
index 0000000..1e310ee
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/23440
+// Origin: Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+// { dg-do compile }
+// { dg-options "" }
+
+# 0 "for1.C"
+void foo() { for (;;)  // { dg-error "at end of input" "" { target *-*-* } 0 }