aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2006-09-15 04:50:04 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2006-09-14 21:50:04 -0700
commit9bdb04a2f5df0bafb2ab16be673febd789c3a487 (patch)
tree0eff9007b485d53340be9861f85a919fdf2b9e9d /gcc
parent0b35aac25db5278bb91f6d975e1e56084749a85d (diff)
downloadgcc-9bdb04a2f5df0bafb2ab16be673febd789c3a487.zip
gcc-9bdb04a2f5df0bafb2ab16be673febd789c3a487.tar.gz
gcc-9bdb04a2f5df0bafb2ab16be673febd789c3a487.tar.bz2
re PR c++/29002 (ICE on array of ptr-to-member or struct containing ptr-to-member of unknown size)
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. From-SVN: r116962
Diffstat (limited to 'gcc')
-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 bcb6dc8..1123643 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 ad40736..8faa03d 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 f1581fa..fd06af6 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 0000000..0c5bb33
--- /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 0000000..80ffb0a
--- /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" }