re PR c++/55446 (array new with size zero vanishes from object code)
authorPaolo Carlini <paolo.carlini@oracle.com>
Sat, 24 Nov 2012 23:45:45 +0000 (23:45 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sat, 24 Nov 2012 23:45:45 +0000 (23:45 +0000)
/cp
2012-11-24  Paolo Carlini  <paolo.carlini@oracle.com>

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  <paolo.carlini@oracle.com>

PR c++/55446
* g++.dg/init/new41.C: New.

From-SVN: r193785

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/init/new41.C [new file with mode: 0644]

index 95fb0bff8641a35f9a8e723a040308b57012c66b..edb45f4df10dcec06cb7013d073236a8bfc1c2fa 100644 (file)
@@ -1,3 +1,9 @@
+2012-11-24  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       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  <jakub@redhat.com>
 
        PR c++/54046
index fea50b5b0eaf87aa020e6954634f85ad9266fb1e..76a31c1becf071a4f3b281957c3de8c21b4cae86 100644 (file)
@@ -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)
index f962907f98beec45e100fbdc0ba99ba144298655..eb23b003a7e2bbd2391a127547e368741cf71c52 100644 (file)
@@ -1,3 +1,8 @@
+2012-11-24  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/55446
+       * g++.dg/init/new41.C: New.
+
 2012-11-24  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        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 (file)
index 0000000..0559b1d
--- /dev/null
@@ -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();
+}