diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4b2f677a290..ef5462859d9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-12-14 Andrew Pinski + + 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 PR c++/18793 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 70703efacac..a1a404c53f9 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 b92d0a5d0ab..72443ba5246 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-12-14 Andrew Pinski + + PR c++/18965 + * g++.dg/init/array17.C: New test. + 2004-12-14 Mark Mitchell 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 00000000000..7fdb196a19b --- /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() {} +};