re PR c++/29291 (ICE on invalid use of new)
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>
Tue, 3 Oct 2006 10:08:22 +0000 (10:08 +0000)
committerVolker Reichelt <reichelt@gcc.gnu.org>
Tue, 3 Oct 2006 10:08:22 +0000 (10:08 +0000)
PR c++/29291
* init.c (build_new): Check for invalid init.

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

From-SVN: r117393

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

index 3c2ff365f9d87d18256a7c4e2d8e50af719245ed..f82e4f559ddfda9c8d38c89f4723dfd4aa39d25d 100644 (file)
@@ -1,3 +1,8 @@
+2006-10-03  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/29291
+       * init.c (build_new): Check for invalid init.
+
 2006-10-02  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/29226
index 8faa03d393ec9ab7e9f9845c16c7e92e23eabb1d..0c85c0fe8fddfd1efdc2663a45353d7b6306711c 100644 (file)
@@ -2075,7 +2075,8 @@ build_new (tree placement, tree type, tree nelts, tree init,
   tree orig_nelts;
   tree orig_init;
 
-  if (placement == error_mark_node || type == error_mark_node)
+  if (placement == error_mark_node || type == error_mark_node
+      || init == error_mark_node)
     return error_mark_node;
 
   orig_placement = placement;
index 0c1d116590e16b71d1c7cfd847c3cf89ce6f4ace..1e7bf0101f6bd2e7925a8b39f3a9e505108b8e34 100644 (file)
@@ -1,3 +1,8 @@
+2006-10-03  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/29291
+       * g++.dg/parse/new4.C: New test.
+
 2006-10-03  Uros Bizjak  <uros@kss-loka.si>
 
        * gcc-dg/pthread-init-common.h: Define _GNU_SOURCE. Add tests for
diff --git a/gcc/testsuite/g++.dg/parse/new4.C b/gcc/testsuite/g++.dg/parse/new4.C
new file mode 100644 (file)
index 0000000..34bd232
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/29291
+// { dg-do compile }
+
+template<int> void foo()
+{
+  new int(;  // { dg-error "before" }
+}