diff options
author | Andrew Pinski <pinskia@physics.uc.edu> | 2004-12-14 20:13:16 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2004-12-14 12:13:16 -0800 |
commit | b01f0d133b7ad093964100495fd38e62da3adf83 (patch) | |
tree | 421eeaf4c9989236c759861ffc29a93fd5b9d13b | |
parent | ff1c708e4a2171cb6823a2b9e46f83dc500e93fb (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/init.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/array17.C | 5 |
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() {} +}; |