aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2004-12-14 20:13:16 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2004-12-14 12:13:16 -0800
commitb01f0d133b7ad093964100495fd38e62da3adf83 (patch)
tree421eeaf4c9989236c759861ffc29a93fd5b9d13b
parentff1c708e4a2171cb6823a2b9e46f83dc500e93fb (diff)
downloadgcc-b01f0d133b7ad093964100495fd38e62da3adf83.zip
gcc-b01f0d133b7ad093964100495fd38e62da3adf83.tar.gz
gcc-b01f0d133b7ad093964100495fd38e62da3adf83.tar.bz2
re PR middle-end/18965 (ICE in gimplify_init_ctor_eval)
2004-12-14 Andrew Pinski <pinskia@physics.uc.edu> PR c++/18965 * init.c (build_zero_init): If the max_index is 0, there is no need to create a RANGE_EXPR. 2004-12-14 Andrew Pinski <pinskia@physics.uc.edu> PR c++/18965 * g++.dg/init/array17.C: New test. From-SVN: r92158
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/init.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/init/array17.C5
4 files changed, 23 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4b2f677..ef54628 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2004-12-14 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/18965
+ * init.c (build_zero_init): If the max_index is 0, there is no
+ need to create a RANGE_EXPR.
+
2004-12-14 Mark Mitchell <mark@codesourcery.com>
PR c++/18793
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 70703ef..a1a404c 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -231,8 +231,13 @@ build_zero_init (tree type, tree nelts, bool static_storage_p)
tree elt_init = build_zero_init (TREE_TYPE (type),
/*nelts=*/NULL_TREE,
static_storage_p);
- tree range = build2 (RANGE_EXPR,
- sizetype, size_zero_node, max_index);
+ tree range;
+
+ /* If this is a one element array, we just use a regular init. */
+ if (tree_int_cst_equal (size_zero_node, max_index))
+ range = size_zero_node;
+ else
+ range = build2 (RANGE_EXPR, sizetype, size_zero_node, max_index);
inits = tree_cons (range, elt_init, inits);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b92d0a5..72443ba 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-14 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/18965
+ * g++.dg/init/array17.C: New test.
+
2004-12-14 Mark Mitchell <mark@codesourcery.com>
PR c++/18793
diff --git a/gcc/testsuite/g++.dg/init/array17.C b/gcc/testsuite/g++.dg/init/array17.C
new file mode 100644
index 0000000..7fdb196
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/array17.C
@@ -0,0 +1,5 @@
+class StringMap {
+ const char empty_str[1];
+public:
+ StringMap() : empty_str() {}
+};