From 33c4b473aaa6bf371b5aeff0eafa10d875f4f0bb Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Wed, 16 Aug 2006 21:46:01 +0000 Subject: [PATCH] re PR c++/28593 (ICE on invalid operator new) PR c++/28593 * init.c (build_new): Return early on invalid placement. * g++.dg/parse/new3.C: New test. From-SVN: r116193 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/init.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/parse/new3.C | 4 ++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/parse/new3.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 26631e22c4a0..68c4707471d9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2006-08-16 Volker Reichelt + + PR c++/28593 + * init.c (build_new): Return early on invalid placement. + 2006-08-03 Steve Ellcey PR c++/28432 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 0cf44ec2fbc9..5f22741e48f4 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1668,7 +1668,7 @@ build_new (tree placement, tree type, tree nelts, tree init, { tree rval; - if (type == error_mark_node) + if (placement == error_mark_node || type == error_mark_node) return error_mark_node; if (processing_template_decl) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9cbefafe441c..04181f88d08c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-08-16 Volker Reichelt + + PR c++/28593 + * g++.dg/parse/new3.C: New test. + 2006-08-11 Eric Botcazou * g++.dg/opt/pr23454-2.C: New test. diff --git a/gcc/testsuite/g++.dg/parse/new3.C b/gcc/testsuite/g++.dg/parse/new3.C new file mode 100644 index 000000000000..d8faed294931 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/new3.C @@ -0,0 +1,4 @@ +// PR c++/28593 +// { dg-do compile } + +void *p = new (::X; // { dg-error "declared|type-specifier" } -- 2.47.2