From: Paolo Carlini Date: Sat, 24 Nov 2012 23:45:45 +0000 (+0000) Subject: re PR c++/55446 (array new with size zero vanishes from object code) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ddffee6824dc069e4a18f572c06ccf5313e41377;p=gcc.git re PR c++/55446 (array new with size zero vanishes from object code) /cp 2012-11-24 Paolo Carlini PR c++/55446 * init.c (build_vec_init): Do not early return error_mark_mode when integer_all_onesp (maxindex). /testsuite 2012-11-24 Paolo Carlini PR c++/55446 * g++.dg/init/new41.C: New. From-SVN: r193785 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 95fb0bff864..edb45f4df10 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-11-24 Paolo Carlini + + PR c++/55446 + * init.c (build_vec_init): Do not early return error_mark_mode + when integer_all_onesp (maxindex). + 2012-11-23 Jakub Jelinek PR c++/54046 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index fea50b5b0ea..76a31c1becf 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -3283,8 +3283,7 @@ build_vec_init (tree base, tree maxindex, tree init, if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype)) maxindex = array_type_nelts (atype); - if (maxindex == NULL_TREE || maxindex == error_mark_node - || integer_all_onesp (maxindex)) + if (maxindex == NULL_TREE || maxindex == error_mark_node) return error_mark_node; if (explicit_value_init_p) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f962907f98b..eb23b003a7e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-11-24 Paolo Carlini + + PR c++/55446 + * g++.dg/init/new41.C: New. + 2012-11-24 Thomas Koenig PR fortran/55314 diff --git a/gcc/testsuite/g++.dg/init/new41.C b/gcc/testsuite/g++.dg/init/new41.C new file mode 100644 index 00000000000..0559b1dac58 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/new41.C @@ -0,0 +1,22 @@ +// PR c++/55446 +// { dg-do run } + +struct S +{ + S() { } +}; + +int n = 1; + +void* operator new[](__SIZE_TYPE__) +{ + n = -1; + return &n; +} + +int main() +{ + new S[0]; + if (n != -1) + __builtin_abort(); +}