summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>2006-09-15 04:50:04 +0000
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>2006-09-15 04:50:04 +0000
commit5c638ac1c71ca92aa58c0790e150d2c043070ffb (patch)
tree0eff9007b485d53340be9861f85a919fdf2b9e9d
parentf9c7c7fb05517b797c605fc07cfb13286175bc8e (diff)
downloadppe42-gcc-5c638ac1c71ca92aa58c0790e150d2c043070ffb.tar.gz
ppe42-gcc-5c638ac1c71ca92aa58c0790e150d2c043070ffb.zip
2006-09-14 Andrew Pinski <pinskia@physics.uc.edu>
PR C++/29002 * init.c (build_zero_init): If we have an error mark node for the array size, return. 2006-09-14 Andrew Pinski <pinskia@physics.uc.edu> PR C++/29002 * g++.dg/init/array22.C: New test. * g++.dg/init/array23.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116962 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/init.c5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/init/array22.C6
-rw-r--r--gcc/testsuite/g++.dg/init/array23.C6
5 files changed, 29 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index bcb6dc8fe61..1123643c893 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-14 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/29002
+ * init.c (build_zero_init): If we have an error mark node for
+ the array size, return.
+
2006-09-10 Mark Mitchell <mark@codesourcery.com>
PR c++/28991
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index ad40736c60b..8faa03d393e 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -223,6 +223,11 @@ build_zero_init (tree type, tree nelts, bool static_storage_p)
nelts, integer_one_node);
else
max_index = array_type_nelts (type);
+
+ /* If we have an error_mark here, we should just return error mark
+ as we don't know the size of the array yet. */
+ if (max_index == error_mark_node)
+ return error_mark_node;
gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
/* A zero-sized array, which is accepted as an extension, will
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f1581faf757..fd06af6d758 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-14 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR C++/29002
+ * g++.dg/init/array22.C: New test.
+ * g++.dg/init/array23.C: New test.
+
2006-09-14 Arnaud Charlet <charlet@adacore.com>
* stackcheck.lst: Update list of tests requiring stack checking.
diff --git a/gcc/testsuite/g++.dg/init/array22.C b/gcc/testsuite/g++.dg/init/array22.C
new file mode 100644
index 00000000000..0c5bb33da98
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/array22.C
@@ -0,0 +1,6 @@
+// PR C++/29002
+// We ICE trying to set the "zero" initializer on the incomplete
+// array
+
+struct A {};
+int A::* x[]; // { dg-error "size" }
diff --git a/gcc/testsuite/g++.dg/init/array23.C b/gcc/testsuite/g++.dg/init/array23.C
new file mode 100644
index 00000000000..80ffb0a98cc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/array23.C
@@ -0,0 +1,6 @@
+// PR C++/29002
+// We ICE trying to set the "zero" initializer on the incomplete
+// array
+
+struct A {A();int A::* t;};
+A x[]; // { dg-error "size" }
OpenPOWER on IntegriCloud