re PR c/68107 (Non-VLA type whose size is half or more of the address space construct...
authorMarek Polacek <polacek@redhat.com>
Wed, 11 Nov 2015 14:47:03 +0000 (14:47 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Wed, 11 Nov 2015 14:47:03 +0000 (14:47 +0000)
PR c/68107
PR c++/68266
* c-common.c (valid_array_size_p): New function.
* c-common.h (valid_array_size_p): Declare.

* c-decl.c (grokdeclarator): Call valid_array_size_p.  Remove code
checking the size of an array.

* decl.c (grokdeclarator): Call valid_array_size_p.  Remove code
checking the size of an array.

* c-c++-common/pr68107.c: New test.
* g++.dg/init/new38.C (large_array_char): Adjust dg-error.
(large_array_char_template): Likewise.
* g++.dg/init/new44.C: Adjust dg-error.

From-SVN: r230174

gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/c-family/c-common.h
gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/pr68107.c [new file with mode: 0644]
gcc/testsuite/g++.dg/init/new38.C
gcc/testsuite/g++.dg/init/new44.C

index ed2ba46371c0f74213d39a8d03ab0571755e0b54..eb4d5bfbae20ac9cc799abf8f8bf3792401efa69 100644 (file)
@@ -1,3 +1,10 @@
+2015-11-11  Marek Polacek  <polacek@redhat.com>
+
+       PR c/68107
+       PR c++/68266
+       * c-common.c (valid_array_size_p): New function.
+       * c-common.h (valid_array_size_p): Declare.
+
 2015-11-11  Dominique d'Humieres <dominiq@lps.ens.fr>
 
        PR bootstrap/68271
index 8b424d3477b686439d01855ff792ccdc86d24ad4..6e2ce0a736cc429d762ef4fc91ffa7be60735ab0 100644 (file)
@@ -13107,4 +13107,26 @@ warn_duplicated_cond_add_or_warn (location_t loc, tree cond, vec<tree> **chain)
     (*chain)->safe_push (cond);
 }
 
+/* Check if array size calculations overflow or if the array covers more
+   than half of the address space.  Return true if the size of the array
+   is valid, false otherwise.  TYPE is the type of the array and NAME is
+   the name of the array, or NULL_TREE for unnamed arrays.  */
+
+bool
+valid_array_size_p (location_t loc, tree type, tree name)
+{
+  if (type != error_mark_node
+      && COMPLETE_TYPE_P (type)
+      && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
+      && !valid_constant_size_p (TYPE_SIZE_UNIT (type)))
+    {
+      if (name)
+       error_at (loc, "size of array %qE is too large", name);
+      else
+       error_at (loc, "size of unnamed array is too large");
+      return false;
+    }
+  return true;
+}
+
 #include "gt-c-family-c-common.h"
index c82545405e4b33b5388bf404473c52e462eeb949..bad8d05e620ebf9e19daa521c3a2ffbd20a3be7e 100644 (file)
@@ -1463,5 +1463,6 @@ extern bool check_no_cilk (tree, const char *, const char *,
                           location_t loc = UNKNOWN_LOCATION);
 extern bool reject_gcc_builtin (const_tree, location_t = UNKNOWN_LOCATION);
 extern void warn_duplicated_cond_add_or_warn (location_t, tree, vec<tree> **);
+extern bool valid_array_size_p (location_t, tree, tree);
 
 #endif /* ! GCC_C_COMMON_H */
index 8fb3786df3af71117e9bf91422ca13297170efc7..87f6a2d30e3b9a80eb9049f65d2dee74c3b4224d 100644 (file)
@@ -1,3 +1,10 @@
+2015-11-11  Marek Polacek  <polacek@redhat.com>
+
+       PR c/68107
+       PR c++/68266
+       * c-decl.c (grokdeclarator): Call valid_array_size_p.  Remove code
+       checking the size of an array.
+
 2015-11-11  Andrew MacLeod  <amacleod@redhat.com>
 
        * c-array-notation.c: Remove unused header files.
index c58dec6022c58d67640d1b9315772f27fa30be37..a636474862d6e866a3c848612001663d4716e037 100644 (file)
@@ -6000,6 +6000,9 @@ grokdeclarator (const struct c_declarator *declarator,
                    TYPE_SIZE_UNIT (type) = size_zero_node;
                    SET_TYPE_STRUCTURAL_EQUALITY (type);
                  }
+
+               if (!valid_array_size_p (loc, type, name))
+                 type = error_mark_node;
              }
 
            if (decl_context != PARM
@@ -6007,7 +6010,8 @@ grokdeclarator (const struct c_declarator *declarator,
                    || array_ptr_attrs != NULL_TREE
                    || array_parm_static))
              {
-               error_at (loc, "static or type qualifiers in non-parameter array declarator");
+               error_at (loc, "static or type qualifiers in non-parameter "
+                         "array declarator");
                array_ptr_quals = TYPE_UNQUALIFIED;
                array_ptr_attrs = NULL_TREE;
                array_parm_static = 0;
@@ -6286,22 +6290,6 @@ grokdeclarator (const struct c_declarator *declarator,
        }
     }
 
-  /* Did array size calculations overflow or does the array cover more
-     than half of the address-space?  */
-  if (TREE_CODE (type) == ARRAY_TYPE
-      && COMPLETE_TYPE_P (type)
-      && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
-      && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
-    {
-      if (name)
-       error_at (loc, "size of array %qE is too large", name);
-      else
-       error_at (loc, "size of unnamed array is too large");
-      /* If we proceed with the array type as it is, we'll eventually
-        crash in tree_to_[su]hwi().  */
-      type = error_mark_node;
-    }
-
   /* If this is declaring a typedef name, return a TYPE_DECL.  */
 
   if (storage_class == csc_typedef)
index a170685c32501c593dcf8beb3c77bfa01a5e14ea..62992eef6ef1d3bdb9899f3a2e49871daafcf59d 100644 (file)
@@ -1,3 +1,10 @@
+2015-11-11  Marek Polacek  <polacek@redhat.com>
+
+       PR c/68107
+       PR c++/68266
+       * decl.c (grokdeclarator): Call valid_array_size_p.  Remove code
+       checking the size of an array.
+
 2015-11-11  Dominique d'Humieres <dominiq@lps.ens.fr>
 
        PR bootstrap/68271
index d12466612b28afe1f13a5e4e54957f786b0f9366..76cc1d176e54dcc7b5dd67342bd36fa56b704725 100644 (file)
@@ -9939,6 +9939,9 @@ grokdeclarator (const cp_declarator *declarator,
        case cdk_array:
          type = create_array_type_for_decl (dname, type,
                                             declarator->u.array.bounds);
+         if (!valid_array_size_p (input_location, type, dname))
+           type = error_mark_node;
+
          if (declarator->std_attributes)
            /* [dcl.array]/1:
 
@@ -10502,19 +10505,6 @@ grokdeclarator (const cp_declarator *declarator,
         error ("non-parameter %qs cannot be a parameter pack", name);
     }
 
-  /* Did array size calculations overflow or does the array cover more
-     than half of the address-space?  */
-  if (TREE_CODE (type) == ARRAY_TYPE
-      && COMPLETE_TYPE_P (type)
-      && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
-      && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
-    {
-      error ("size of array %qs is too large", name);
-      /* If we proceed with the array type as it is, we'll eventually
-        crash in tree_to_[su]hwi().  */
-      type = error_mark_node;
-    }
-
   if ((decl_context == FIELD || decl_context == PARM)
       && !processing_template_decl
       && variably_modified_type_p (type, NULL_TREE))
index 6c2c07a006f6108443310eeb1eb7dbfe68d711b6..8e973115215e62c2503d2a5dca8073d01c995cb6 100644 (file)
@@ -1,3 +1,12 @@
+2015-11-11  Marek Polacek  <polacek@redhat.com>
+
+       PR c/68107
+       PR c++/68266
+       * c-c++-common/pr68107.c: New test.
+       * g++.dg/init/new38.C (large_array_char): Adjust dg-error.
+       (large_array_char_template): Likewise.
+       * g++.dg/init/new44.C: Adjust dg-error.
+
 2015-11-11  Nathan Sidwell  <nathan@codesourcery.com>
 
        * gfortran.dg/goacc/private-3.f95: Remove xfail.
diff --git a/gcc/testsuite/c-c++-common/pr68107.c b/gcc/testsuite/c-c++-common/pr68107.c
new file mode 100644 (file)
index 0000000..f1ed465
--- /dev/null
@@ -0,0 +1,37 @@
+/* PR c/68107 */
+/* { dg-do compile } */
+
+#define N ((__SIZE_MAX__ / sizeof (int)) / 2 + 1)
+
+typedef int (*T1)[N]; /* { dg-error "too large" } */
+typedef int (*T2)[N - 1];
+typedef int (*T3)[N][N]; /* { dg-error "too large" } */
+typedef int (*T4)[N - 1][N - 1]; /* { dg-error "too large" } */
+typedef int (**T5)[N]; /* { dg-error "too large" } */
+
+struct S {
+  int (*q1)[N]; /* { dg-error "too large" } */
+  int (*q2)[N - 1];
+  int (*q3)[N][N]; /* { dg-error "too large" } */
+  int (*q4)[N - 1][N - 1]; /* { dg-error "too large" } */
+  int (**q5)[N]; /* { dg-error "too large" } */
+};
+
+void fn1 (int (*p1)[N]); /* { dg-error "too large" } */
+void fn2 (int (*p1)[N - 1]);
+void fn3 (int (*p3)[N][N]); /* { dg-error "too large" } */
+void fn4 (int (*p4)[N - 1][N - 1]); /* { dg-error "too large" } */
+void fn5 (int (**p5)[N]); /* { dg-error "too large" } */
+
+void
+fn (void)
+{
+  int (*n1)[N]; /* { dg-error "too large" } */
+  int (*n2)[N - 1];
+  int (*n3)[N][N]; /* { dg-error "too large" } */
+  int (*n4)[N - 1][N - 1]; /* { dg-error "too large" } */
+  int (**n5)[N]; /* { dg-error "too large" } */
+
+  sizeof (int (*)[N]); /* { dg-error "too large" } */
+  sizeof (int [N]); /* { dg-error "too large" } */
+}
index 1672f229d64b0e54ebda118cafd6bc78a2ab23c8..37da525bf7811aeed197038bf7494a9688f18f1e 100644 (file)
@@ -5,7 +5,7 @@ large_array_char(int n)
 {
   new char[n]
     [1ULL << (sizeof(void *) * 4)]
-    [1ULL << (sizeof(void *) * 4)]; // { dg-error "size of array" }
+    [1ULL << (sizeof(void *) * 4)]; // { dg-error "size of unnamed array" }
 }
 
 template <typename T>
@@ -14,7 +14,7 @@ large_array_char_template(int n)
 {
   new char[n]
     [1ULL << (sizeof(void *) * 4)]
-    [1ULL << (sizeof(void *) * 4)]; // { dg-error "size of array" }
+    [1ULL << (sizeof(void *) * 4)]; // { dg-error "size of unnamed array" }
 }
 
 
index d6ff86a16c70296e2451f9393f60acf3b4ecd68d..ab6e3484cc8989b098af5d556804db849da58a37 100644 (file)
@@ -87,10 +87,10 @@ test_one_dim_short_array ()
 static void __attribute__ ((used))
 test_two_dim_char_array ()
 {
-    p = new char [1][MAX];              // { dg-error "size of array" }
-    p = new char [1][MAX - 1];          // { dg-error "size of array" }
-    p = new char [1][MAX - 2];          // { dg-error "size of array" }
-    p = new char [1][MAX - 99];         // { dg-error "size of array" }
+    p = new char [1][MAX];              // { dg-error "size of unnamed array" }
+    p = new char [1][MAX - 1];          // { dg-error "size of unnamed array" }
+    p = new char [1][MAX - 2];          // { dg-error "size of unnamed array" }
+    p = new char [1][MAX - 99];         // { dg-error "size of unnamed array" }
     p = new char [1][MAX / 2];          // { dg-error "size of array" }
     p = new char [1][MAX / 2 - 1];      // { dg-error "size of array" }
     p = new char [1][MAX / 2 - 2];      // { dg-error "size of array" }
@@ -104,18 +104,18 @@ test_two_dim_char_array ()
     p = new char [1][MAX / 2 - 7];      // okay
     p = new char [1][MAX / 2 - 8];      // okay
 
-    p = new char [2][MAX];              // { dg-error "size of array" }
-    p = new char [2][MAX - 1];          // { dg-error "size of array" }
-    p = new char [2][MAX - 2];          // { dg-error "size of array" }
+    p = new char [2][MAX];              // { dg-error "size of unnamed array" }
+    p = new char [2][MAX - 1];          // { dg-error "size of unnamed array" }
+    p = new char [2][MAX - 2];          // { dg-error "size of unnamed array" }
     p = new char [2][MAX / 2];          // { dg-error "size of array" }
     p = new char [2][MAX / 2 - 1];      // { dg-error "size of array" }
     p = new char [2][MAX / 2 - 2];      // { dg-error "size of array" }
     p = new char [2][MAX / 2 - 7];      // { dg-error "size of array" }
     p = new char [2][MAX / 2 - 8];      // { dg-error "size of array" }
 
-    p = new char [MAX][MAX];            // { dg-error "size of array" }
-    p = new char [MAX][MAX - 1];        // { dg-error "size of array" }
-    p = new char [MAX][MAX - 2];        // { dg-error "size of array" }
+    p = new char [MAX][MAX];            // { dg-error "size of unnamed array" }
+    p = new char [MAX][MAX - 1];        // { dg-error "size of unnamed array" }
+    p = new char [MAX][MAX - 2];        // { dg-error "size of unnamed array" }
     p = new char [MAX][MAX / 2];        // { dg-error "size of array" }
     p = new char [MAX][MAX / 2 - 1];    // { dg-error "size of array" }
     p = new char [MAX][MAX / 2 - 2];    // { dg-error "size of array" }
@@ -142,10 +142,10 @@ test_two_dim_char_array ()
 static __attribute__ ((used)) void
 test_three_dim_char_array ()
 {
-    p = new char [1][1][MAX];           // { dg-error "size of array" }
-    p = new char [1][1][MAX - 1];       // { dg-error "size of array" }
-    p = new char [1][1][MAX - 2];       // { dg-error "size of array" }
-    p = new char [1][1][MAX - 99];      // { dg-error "size of array" }
+    p = new char [1][1][MAX];           // { dg-error "size of unnamed array" }
+    p = new char [1][1][MAX - 1];       // { dg-error "size of unnamed array" }
+    p = new char [1][1][MAX - 2];       // { dg-error "size of unnamed array" }
+    p = new char [1][1][MAX - 99];      // { dg-error "size of unnamed array" }
     p = new char [1][1][MAX / 2];       // { dg-error "size of array" }
     p = new char [1][1][MAX / 2 - 1];   // { dg-error "size of array" }
     p = new char [1][1][MAX / 2 - 2];   // { dg-error "size of array" }
@@ -159,19 +159,19 @@ test_three_dim_char_array ()
     p = new char [1][1][MAX / 2 - 7];   // okay
     p = new char [1][1][MAX / 2 - 8];   // okay
 
-    p = new char [1][2][MAX];           // { dg-error "size of array" }
-    p = new char [1][2][MAX - 1];       // { dg-error "size of array" }
-    p = new char [1][2][MAX - 2];       // { dg-error "size of array" }
-    p = new char [1][2][MAX - 99];      // { dg-error "size of array" }
-    p = new char [1][2][MAX / 2];       // { dg-error "size of array" }
-    p = new char [1][2][MAX / 2 - 1];   // { dg-error "size of array" }
-    p = new char [1][2][MAX / 2 - 2];   // { dg-error "size of array" }
-    p = new char [1][2][MAX / 2 - 3];   // { dg-error "size of array" }
-    p = new char [1][2][MAX / 2 - 4];   // { dg-error "size of array" }
-    p = new char [1][2][MAX / 2 - 5];   // { dg-error "size of array" }
-    p = new char [1][2][MAX / 2 - 6];   // { dg-error "size of array" }
-    p = new char [1][2][MAX / 2 - 7];   // { dg-error "size of array" }
-    p = new char [1][2][MAX / 2 - 8];   // { dg-error "size of array" }
+    p = new char [1][2][MAX];           // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX - 1];       // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX - 2];       // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX - 99];      // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX / 2];       // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX / 2 - 1];   // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX / 2 - 2];   // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX / 2 - 3];   // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX / 2 - 4];   // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX / 2 - 5];   // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX / 2 - 6];   // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX / 2 - 7];   // { dg-error "size of unnamed array" }
+    p = new char [1][2][MAX / 2 - 8];   // { dg-error "size of unnamed array" }
     p = new char [1][2][MAX / 4];       // { dg-error "size of array" }
 
     // Avoid exercising data model-dependent expressions.
@@ -181,10 +181,10 @@ test_three_dim_char_array ()
     p = new char [1][2][MAX / 4 - 3];   // okay
     p = new char [1][2][MAX / 4 - 4];   // okay
 
-    p = new char [2][1][MAX];           // { dg-error "size of array" }
-    p = new char [2][1][MAX - 1];       // { dg-error "size of array" }
-    p = new char [2][1][MAX - 2];       // { dg-error "size of array" }
-    p = new char [2][1][MAX - 99];      // { dg-error "size of array" }
+    p = new char [2][1][MAX];           // { dg-error "size of unnamed array" }
+    p = new char [2][1][MAX - 1];       // { dg-error "size of unnamed array" }
+    p = new char [2][1][MAX - 2];       // { dg-error "size of unnamed array" }
+    p = new char [2][1][MAX - 99];      // { dg-error "size of unnamed array" }
     p = new char [2][1][MAX / 2];       // { dg-error "size of array" }
     p = new char [2][1][MAX / 2 - 1];   // { dg-error "size of array" }
     p = new char [2][1][MAX / 2 - 2];   // { dg-error "size of array" }
@@ -203,19 +203,19 @@ test_three_dim_char_array ()
     p = new char [2][1][MAX / 4 - 3];   // okay
     p = new char [2][1][MAX / 4 - 4];   // okay
 
-    p = new char [2][2][MAX];           // { dg-error "size of array" }
-    p = new char [2][2][MAX - 1];       // { dg-error "size of array" }
-    p = new char [2][2][MAX - 2];       // { dg-error "size of array" }
-    p = new char [2][2][MAX - 99];      // { dg-error "size of array" }
-    p = new char [2][2][MAX / 2];       // { dg-error "size of array" }
-    p = new char [2][2][MAX / 2 - 1];   // { dg-error "size of array" }
-    p = new char [2][2][MAX / 2 - 2];   // { dg-error "size of array" }
-    p = new char [2][2][MAX / 2 - 3];   // { dg-error "size of array" }
-    p = new char [2][2][MAX / 2 - 4];   // { dg-error "size of array" }
-    p = new char [2][2][MAX / 2 - 5];   // { dg-error "size of array" }
-    p = new char [2][2][MAX / 2 - 6];   // { dg-error "size of array" }
-    p = new char [2][2][MAX / 2 - 7];   // { dg-error "size of array" }
-    p = new char [2][2][MAX / 2 - 8];   // { dg-error "size of array" }
+    p = new char [2][2][MAX];           // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX - 1];       // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX - 2];       // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX - 99];      // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX / 2];       // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX / 2 - 1];   // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX / 2 - 2];   // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX / 2 - 3];   // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX / 2 - 4];   // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX / 2 - 5];   // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX / 2 - 6];   // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX / 2 - 7];   // { dg-error "size of unnamed array" }
+    p = new char [2][2][MAX / 2 - 8];   // { dg-error "size of unnamed array" }
     p = new char [2][2][MAX / 4];       // { dg-error "size of array" }
     p = new char [2][2][MAX / 4 - 1];   // { dg-error "size of array" }
     p = new char [2][2][MAX / 4 - 2];   // { dg-error "size of array" }
@@ -227,19 +227,19 @@ test_three_dim_char_array ()
     p = new char [2][2][MAX / 8 - 2];
     p = new char [2][2][MAX / 8 - 3];
 
-    p = new char [2][MAX][2];           // { dg-error "size of array" }
-    p = new char [2][MAX - 1][2];       // { dg-error "size of array" }
-    p = new char [2][MAX - 2][2];       // { dg-error "size of array" }
-    p = new char [2][MAX - 99][2];      // { dg-error "size of array" }
-    p = new char [2][MAX / 2][2];       // { dg-error "size of array" }
-    p = new char [2][MAX / 2 - 1][2];   // { dg-error "size of array" }
-    p = new char [2][MAX / 2 - 2][2];   // { dg-error "size of array" }
-    p = new char [2][MAX / 2 - 3][2];   // { dg-error "size of array" }
-    p = new char [2][MAX / 2 - 4][2];   // { dg-error "size of array" }
-    p = new char [2][MAX / 2 - 5][2];   // { dg-error "size of array" }
-    p = new char [2][MAX / 2 - 6][2];   // { dg-error "size of array" }
-    p = new char [2][MAX / 2 - 7][2];   // { dg-error "size of array" }
-    p = new char [2][MAX / 2 - 8][2];   // { dg-error "size of array" }
+    p = new char [2][MAX][2];           // { dg-error "size of unnamed array" }
+    p = new char [2][MAX - 1][2];       // { dg-error "size of unnamed array" }
+    p = new char [2][MAX - 2][2];       // { dg-error "size of unnamed array" }
+    p = new char [2][MAX - 99][2];      // { dg-error "size of unnamed array" }
+    p = new char [2][MAX / 2][2];       // { dg-error "size of unnamed array" }
+    p = new char [2][MAX / 2 - 1][2];   // { dg-error "size of unnamed array" }
+    p = new char [2][MAX / 2 - 2][2];   // { dg-error "size of unnamed array" }
+    p = new char [2][MAX / 2 - 3][2];   // { dg-error "size of unnamed array" }
+    p = new char [2][MAX / 2 - 4][2];   // { dg-error "size of unnamed array" }
+    p = new char [2][MAX / 2 - 5][2];   // { dg-error "size of unnamed array" }
+    p = new char [2][MAX / 2 - 6][2];   // { dg-error "size of unnamed array" }
+    p = new char [2][MAX / 2 - 7][2];   // { dg-error "size of unnamed array" }
+    p = new char [2][MAX / 2 - 8][2];   // { dg-error "size of unnamed array" }
     p = new char [2][MAX / 4][2];       // { dg-error "size of array" }
     p = new char [2][MAX / 4 - 1][2];   // { dg-error "size of array" }
     p = new char [2][MAX / 4 - 2][2];   // { dg-error "size of array" }
@@ -275,11 +275,11 @@ test_three_dim_char_array ()
     p = new char [MAX / 8 - 2][2][2];
     p = new char [MAX / 8 - 3][2][2];
 
-    p = new char [MAX][MAX][MAX];         // { dg-error "size of array" }
-    p = new char [MAX][MAX][MAX / 2];     // { dg-error "size of array" }
-    p = new char [MAX][MAX / 2][MAX];     // { dg-error "size of array" }
-    p = new char [MAX][MAX / 2][MAX / 2]; // { dg-error "size of array" }
-    p = new char [MAX / 2][MAX / 2][MAX / 2]; // { dg-error "size of array" }
+    p = new char [MAX][MAX][MAX];         // { dg-error "size of unnamed array" }
+    p = new char [MAX][MAX][MAX / 2];     // { dg-error "size of unnamed array" }
+    p = new char [MAX][MAX / 2][MAX];     // { dg-error "size of unnamed array" }
+    p = new char [MAX][MAX / 2][MAX / 2]; // { dg-error "size of unnamed array" }
+    p = new char [MAX / 2][MAX / 2][MAX / 2]; // { dg-error "size of unnamed array" }
 }
 
 // Exercise new expression with N-dimensional arrays where N is
@@ -342,10 +342,10 @@ test_one_dim_byte_array (void *p)
 static void __attribute__ ((used))
 test_placement_two_dim_byte_struct_array (void *p)
 {
-    p = new (p) B [1][MAX];             // { dg-error "size of array" }
-    p = new (p) B [1][MAX - 1];         // { dg-error "size of array" }
-    p = new (p) B [1][MAX - 2];         // { dg-error "size of array" }
-    p = new (p) B [1][MAX - 99];        // { dg-error "size of array" }
+    p = new (p) B [1][MAX];             // { dg-error "size of unnamed array" }
+    p = new (p) B [1][MAX - 1];         // { dg-error "size of unnamed array" }
+    p = new (p) B [1][MAX - 2];         // { dg-error "size of unnamed array" }
+    p = new (p) B [1][MAX - 99];        // { dg-error "size of unnamed array" }
     p = new (p) B [1][MAX / 2];         // { dg-error "size of array" }
     p = new (p) B [1][MAX / 2 - 1];     // { dg-error "size of array" }
     p = new (p) B [1][MAX / 2 - 2];     // { dg-error "size of array" }
@@ -359,18 +359,18 @@ test_placement_two_dim_byte_struct_array (void *p)
     p = new (p) B [1][MAX / 2 - 7];      // okay
     p = new (p) B [1][MAX / 2 - 8];      // okay
 
-    p = new (p) B [2][MAX];             // { dg-error "size of array" }
-    p = new (p) B [2][MAX - 1];         // { dg-error "size of array" }
-    p = new (p) B [2][MAX - 2];         // { dg-error "size of array" }
+    p = new (p) B [2][MAX];             // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX - 1];         // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX - 2];         // { dg-error "size of unnamed array" }
     p = new (p) B [2][MAX / 2];         // { dg-error "size of array" }
     p = new (p) B [2][MAX / 2 - 1];     // { dg-error "size of array" }
     p = new (p) B [2][MAX / 2 - 2];     // { dg-error "size of array" }
     p = new (p) B [2][MAX / 2 - 7];     // { dg-error "size of array" }
     p = new (p) B [2][MAX / 2 - 8];     // { dg-error "size of array" }
 
-    p = new (p) B [MAX][MAX];           // { dg-error "size of array" }
-    p = new (p) B [MAX][MAX - 1];       // { dg-error "size of array" }
-    p = new (p) B [MAX][MAX - 2];       // { dg-error "size of array" }
+    p = new (p) B [MAX][MAX];           // { dg-error "size of unnamed array" }
+    p = new (p) B [MAX][MAX - 1];       // { dg-error "size of unnamed array" }
+    p = new (p) B [MAX][MAX - 2];       // { dg-error "size of unnamed array" }
     p = new (p) B [MAX][MAX / 2];       // { dg-error "size of array" }
     p = new (p) B [MAX][MAX / 2 - 1];   // { dg-error "size of array" }
     p = new (p) B [MAX][MAX / 2 - 2];   // { dg-error "size of array" }
@@ -397,10 +397,10 @@ test_placement_two_dim_byte_struct_array (void *p)
 static __attribute__ ((used)) void
 test_placement_three_dim_byte_struct_array (void *p)
 {
-    p = new (p) B [1][1][MAX];          // { dg-error "size of array" }
-    p = new (p) B [1][1][MAX - 1];      // { dg-error "size of array" }
-    p = new (p) B [1][1][MAX - 2];      // { dg-error "size of array" }
-    p = new (p) B [1][1][MAX - 99];     // { dg-error "size of array" }
+    p = new (p) B [1][1][MAX];          // { dg-error "size of unnamed array" }
+    p = new (p) B [1][1][MAX - 1];      // { dg-error "size of unnamed array" }
+    p = new (p) B [1][1][MAX - 2];      // { dg-error "size of unnamed array" }
+    p = new (p) B [1][1][MAX - 99];     // { dg-error "size of unnamed array" }
     p = new (p) B [1][1][MAX / 2];      // { dg-error "size of array" }
     p = new (p) B [1][1][MAX / 2 - 1];  // { dg-error "size of array" }
     p = new (p) B [1][1][MAX / 2 - 2];  // { dg-error "size of array" }
@@ -414,19 +414,19 @@ test_placement_three_dim_byte_struct_array (void *p)
     p = new (p) B [1][1][MAX / 2 - 7];   // okay
     p = new (p) B [1][1][MAX / 2 - 8];   // okay
 
-    p = new (p) B [1][2][MAX];          // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX - 1];      // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX - 2];      // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX - 99];     // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX / 2];      // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX / 2 - 1];  // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX / 2 - 2];  // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX / 2 - 3];  // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX / 2 - 4];  // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX / 2 - 5];  // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX / 2 - 6];  // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX / 2 - 7];  // { dg-error "size of array" }
-    p = new (p) B [1][2][MAX / 2 - 8];  // { dg-error "size of array" }
+    p = new (p) B [1][2][MAX];          // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX - 1];      // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX - 2];      // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX - 99];     // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX / 2];      // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX / 2 - 1];  // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX / 2 - 2];  // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX / 2 - 3];  // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX / 2 - 4];  // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX / 2 - 5];  // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX / 2 - 6];  // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX / 2 - 7];  // { dg-error "size of unnamed array" }
+    p = new (p) B [1][2][MAX / 2 - 8];  // { dg-error "size of unnamed array" }
     p = new (p) B [1][2][MAX / 4];      // { dg-error "size of array" }
 
     // Avoid exercising data model-dependent expressions.
@@ -436,10 +436,10 @@ test_placement_three_dim_byte_struct_array (void *p)
     p = new (p) B [1][2][MAX / 4 - 3];   // okay
     p = new (p) B [1][2][MAX / 4 - 4];   // okay
 
-    p = new (p) B [2][1][MAX];          // { dg-error "size of array" }
-    p = new (p) B [2][1][MAX - 1];      // { dg-error "size of array" }
-    p = new (p) B [2][1][MAX - 2];      // { dg-error "size of array" }
-    p = new (p) B [2][1][MAX - 99];     // { dg-error "size of array" }
+    p = new (p) B [2][1][MAX];          // { dg-error "size of unnamed array" }
+    p = new (p) B [2][1][MAX - 1];      // { dg-error "size of unnamed array" }
+    p = new (p) B [2][1][MAX - 2];      // { dg-error "size of unnamed array" }
+    p = new (p) B [2][1][MAX - 99];     // { dg-error "size of unnamed array" }
     p = new (p) B [2][1][MAX / 2];      // { dg-error "size of array" }
     p = new (p) B [2][1][MAX / 2 - 1];  // { dg-error "size of array" }
     p = new (p) B [2][1][MAX / 2 - 2];  // { dg-error "size of array" }
@@ -458,19 +458,19 @@ test_placement_three_dim_byte_struct_array (void *p)
     p = new (p) B [2][1][MAX / 4 - 3];   // okay
     p = new (p) B [2][1][MAX / 4 - 4];   // okay
 
-    p = new (p) B [2][2][MAX];          // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX - 1];      // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX - 2];      // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX - 99];     // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX / 2];      // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX / 2 - 1];  // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX / 2 - 2];  // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX / 2 - 3];  // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX / 2 - 4];  // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX / 2 - 5];  // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX / 2 - 6];  // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX / 2 - 7];  // { dg-error "size of array" }
-    p = new (p) B [2][2][MAX / 2 - 8];  // { dg-error "size of array" }
+    p = new (p) B [2][2][MAX];          // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX - 1];      // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX - 2];      // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX - 99];     // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX / 2];      // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX / 2 - 1];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX / 2 - 2];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX / 2 - 3];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX / 2 - 4];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX / 2 - 5];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX / 2 - 6];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX / 2 - 7];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][2][MAX / 2 - 8];  // { dg-error "size of unnamed array" }
     p = new (p) B [2][2][MAX / 4];      // { dg-error "size of array" }
     p = new (p) B [2][2][MAX / 4 - 1];  // { dg-error "size of array" }
     p = new (p) B [2][2][MAX / 4 - 2];  // { dg-error "size of array" }
@@ -482,19 +482,19 @@ test_placement_three_dim_byte_struct_array (void *p)
     p = new (p) B [2][2][MAX / 8 - 2];
     p = new (p) B [2][2][MAX / 8 - 3];
 
-    p = new (p) B [2][MAX][2];          // { dg-error "size of array" }
-    p = new (p) B [2][MAX - 1][2];      // { dg-error "size of array" }
-    p = new (p) B [2][MAX - 2][2];      // { dg-error "size of array" }
-    p = new (p) B [2][MAX - 99][2];     // { dg-error "size of array" }
-    p = new (p) B [2][MAX / 2][2];      // { dg-error "size of array" }
-    p = new (p) B [2][MAX / 2 - 1][2];  // { dg-error "size of array" }
-    p = new (p) B [2][MAX / 2 - 2][2];  // { dg-error "size of array" }
-    p = new (p) B [2][MAX / 2 - 3][2];  // { dg-error "size of array" }
-    p = new (p) B [2][MAX / 2 - 4][2];  // { dg-error "size of array" }
-    p = new (p) B [2][MAX / 2 - 5][2];  // { dg-error "size of array" }
-    p = new (p) B [2][MAX / 2 - 6][2];  // { dg-error "size of array" }
-    p = new (p) B [2][MAX / 2 - 7][2];  // { dg-error "size of array" }
-    p = new (p) B [2][MAX / 2 - 8][2];  // { dg-error "size of array" }
+    p = new (p) B [2][MAX][2];          // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX - 1][2];      // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX - 2][2];      // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX - 99][2];     // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX / 2][2];      // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX / 2 - 1][2];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX / 2 - 2][2];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX / 2 - 3][2];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX / 2 - 4][2];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX / 2 - 5][2];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX / 2 - 6][2];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX / 2 - 7][2];  // { dg-error "size of unnamed array" }
+    p = new (p) B [2][MAX / 2 - 8][2];  // { dg-error "size of unnamed array" }
     p = new (p) B [2][MAX / 4][2];      // { dg-error "size of array" }
     p = new (p) B [2][MAX / 4 - 1][2];  // { dg-error "size of array" }
     p = new (p) B [2][MAX / 4 - 2][2];  // { dg-error "size of array" }