Hi,

fixing this accepts-invalid seems just matter of carefully checking the return value of cp_parser_parenthesized_expression_list (eg, vec_safe_is_empty would not do, because it returns true when the argument is null). Tested x86_64-linux.

Thanks,
Paolo.

/////////////////////
/cp
2015-06-16  Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/59682
        * parser.c (cp_parser_new_placement): Reject an empty expression-list.

/testsuite
2015-06-16  Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/59682
        * g++.dg/parse/new-placement1.C: New.
Index: cp/parser.c
===================================================================
--- cp/parser.c (revision 224523)
+++ cp/parser.c (working copy)
@@ -7560,6 +7560,9 @@ cp_parser_new_placement (cp_parser* parser)
                      /*allow_expansion_p=*/true,
                      /*non_constant_p=*/NULL));
 
+  if (expression_list && expression_list->is_empty ())
+    error ("expected expression");
+
   return expression_list;
 }
 
Index: testsuite/g++.dg/parse/new-placement1.C
===================================================================
--- testsuite/g++.dg/parse/new-placement1.C     (revision 0)
+++ testsuite/g++.dg/parse/new-placement1.C     (working copy)
@@ -0,0 +1,3 @@
+// PR c++/59682
+
+int* p = new() int;  // { dg-error "expected expression" }

Reply via email to