PR c++/87996 - size of array is negative error when SIZE_MAX/2 < sizeof(array) <...
[gcc.git] / gcc / testsuite / g++.dg / init / new43.C
index aa40b42946974ec11ef258354c3c193e4ace226d..e2ad67d83073e66153f0dd97bd07cf2190f1be7d 100644 (file)
@@ -30,36 +30,36 @@ void test_literal ()
     B b;
 
     // Verify integer literal.
-    p = new char [-1];           // { dg-error "size of array is negative" }
-    p = new char [2][-3];        // { dg-error "size of array|narrowing conversion" }
-    p = new char [-4][5];        // { dg-error "size of array is negative" }
-    p = new char [-6][-7];       // { dg-error "size of array|narrowing conversion" }
-
-    p = new (p) char [-1];       // { dg-error "size of array is negative" }
-    p = new (p) char [2][-3];    // { dg-error "size of array|narrowing conversion" }
-    p = new (p) char [-4][5];    // { dg-error "size of array is negative" }
-    p = new (p) char [-6][-7];   // { dg-error "size of array|narrowing conversion" }
-
-    p = new (p) A [-1];          // { dg-error "size of array is negative" }
-    p = new (p) A [2][-3];       // { dg-error "size of array|narrowing conversion" }
-    p = new (p) A [-4][5];       // { dg-error "size of array is negative" }
-    p = new (p) A [-6][-7];      // { dg-error "size of array|narrowing conversion" }
-
-    p = new (p) B [-1];          // { dg-error "size of array is negative" }
-    p = new (p) B [2][-3];       // { dg-error "size of array|narrowing conversion" }
-    p = new (p) B [-4][5];       // { dg-error "size of array is negative" }
-    p = new (p) B [-6][-7];      // { dg-error "size of array|narrowing conversion" }
-
-    p = new (&b) B [-1];          // { dg-error "size of array is negative" }
-    p = new (&b) B [2][-3];       // { dg-error "size of array|narrowing conversion" }
-    p = new (&b) B [-4][5];       // { dg-error "size of array is negative" }
-    p = new (&b) B [-6][-7];      // { dg-error "size of array|narrowing conversion" }
-
-    p = new char [1 - 2];         // { dg-error "size of array is negative" }
-    p = new (p) char [2 - 3];     // { dg-error "size of array is negative" }
-    p = new A [2 < 1 ? -1 : -2];  // { dg-error "size of array is negative" }
-    p = new (p) B [2 - 3 * 2];    // { dg-error "size of array is negative" }
-    p = new (&b) B [1][2 - 3 * 2];// { dg-error "size of array|narrowing conversion" }
+    p = new char [-1];           // { dg-error "size .-1. of array is negative" }
+    p = new char [2][-3];        // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new char [-4][5];        // { dg-error "size .-4. of array is negative" }
+    p = new char [-6][-7];       // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (p) char [-1];       // { dg-error "size .-1. of array is negative" }
+    p = new (p) char [2][-3];    // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (p) char [-4][5];    // { dg-error "size .-4. of array is negative" }
+    p = new (p) char [-6][-7];   // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (p) A [-1];          // { dg-error "size .-1. of array is negative" }
+    p = new (p) A [2][-3];       // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (p) A [-4][5];       // { dg-error "size .-4. of array is negative" }
+    p = new (p) A [-6][-7];      // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (p) B [-1];          // { dg-error "size .-1. of array is negative" }
+    p = new (p) B [2][-3];       // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (p) B [-4][5];       // { dg-error "size .-4. of array is negative" }
+    p = new (p) B [-6][-7];      // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (&b) B [-1];          // { dg-error "size .-1. of array is negative" }
+    p = new (&b) B [2][-3];       // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (&b) B [-4][5];       // { dg-error "size .-4. of array is negative" }
+    p = new (&b) B [-6][-7];      // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new char [1 - 2];         // { dg-error "size .-1. of array is negative" }
+    p = new (p) char [2 - 3];     // { dg-error "size .-1. of array is negative" }
+    p = new A [2 < 1 ? -1 : -2];  // { dg-error "size .-2. of array is negative" }
+    p = new (p) B [2 - 3 * 2];    // { dg-error "size .-4. of array is negative" }
+    p = new (&b) B [1][2 - 3 * 2];// { dg-error "size .-4. of array|narrowing conversion" }
 }
 
 void test_constant_expression ()
@@ -78,36 +78,36 @@ void test_constant_expression ()
     static const int i7 = -7;
 
     // Verify constant expression.
-    p = new char [i1];           // { dg-error "size of array is negative" }
-    p = new char [2][i3];        // { dg-error "size of array|narrowing conversion" }
-    p = new char [i4][5];        // { dg-error "size of array is negative" }
-    p = new char [i6][i7];       // { dg-error "size of array|narrowing conversion" }
-
-    p = new (p) char [i1];       // { dg-error "size of array is negative" }
-    p = new (p) char [2][i3];    // { dg-error "size of array|narrowing conversion" }
-    p = new (p) char [i4][5];    // { dg-error "size of array is negative" }
-    p = new (p) char [i6][i7];   // { dg-error "size of array|narrowing conversion" }
-
-    p = new (p) A [i1];          // { dg-error "size of array is negative" }
-    p = new (p) A [2][i3];       // { dg-error "size of array|narrowing conversion" }
-    p = new (p) A [i4][5];       // { dg-error "size of array is negative" }
-    p = new (p) A [i6][i7];      // { dg-error "size of array|narrowing conversion" }
-
-    p = new (p) B [i1];          // { dg-error "size of array is negative" }
-    p = new (p) B [2][i3];       // { dg-error "size of array|narrowing conversion" }
-    p = new (p) B [i4][5];       // { dg-error "size of array is negative" }
-    p = new (p) B [i6][i7];      // { dg-error "size of array|narrowing conversion" }
-
-    p = new (&b) B [i1];          // { dg-error "size of array is negative" }
-    p = new (&b) B [2][i3];       // { dg-error "size of array|narrowing conversion" }
-    p = new (&b) B [i4][5];       // { dg-error "size of array is negative" }
-    p = new (&b) B [i6][i7];      // { dg-error "size of array|narrowing conversion" }
-
-    p = new short [i1 - 2];       // { dg-error "size of array is negative" }
-    p = new (p) bool [i2 - 3];    // { dg-error "size of array is negative" }
-    p = new A [2 < 1 ? i1 : i2];  // { dg-error "size of array is negative" }
-    p = new (p) B [2 + i3 * 2];   // { dg-error "size of array is negative" }
-    p = new (&b) B [1][i1 - 3 * 2];// { dg-error "size of array|narrowing conversion" }
+    p = new char [i1];           // { dg-error "size .-1. of array is negative" }
+    p = new char [2][i3];        // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new char [i4][5];        // { dg-error "size .-4. of array is negative" }
+    p = new char [i6][i7];       // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (p) char [i1];       // { dg-error "size .-1. of array is negative" }
+    p = new (p) char [2][i3];    // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (p) char [i4][5];    // { dg-error "size .-4. of array is negative" }
+    p = new (p) char [i6][i7];   // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (p) A [i1];          // { dg-error "size .-1. of array is negative" }
+    p = new (p) A [2][i3];       // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (p) A [i4][5];       // { dg-error "size .-4. of array is negative" }
+    p = new (p) A [i6][i7];      // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (p) B [i1];          // { dg-error "size .-1. of array is negative" }
+    p = new (p) B [2][i3];       // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (p) B [i4][5];       // { dg-error "size .-4. of array is negative" }
+    p = new (p) B [i6][i7];      // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (&b) B [i1];          // { dg-error "size .-1. of array is negative" }
+    p = new (&b) B [2][i3];       // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (&b) B [i4][5];       // { dg-error "size .-4. of array is negative" }
+    p = new (&b) B [i6][i7];      // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new short [i1 - 2];       // { dg-error "size .-3. of array is negative" }
+    p = new (p) bool [i2 - 3];    // { dg-error "size .-5. of array is negative" }
+    p = new A [2 < 1 ? i1 : i2];  // { dg-error "size .-2. of array is negative" }
+    p = new (p) B [2 + i3 * 2];   // { dg-error "size .-4. of array is negative" }
+    p = new (&b) B [1][i1 - 3 * 2];// { dg-error "size .-7. of array|narrowing conversion" }
 }
 
 void test_constexpr ()
@@ -131,34 +131,37 @@ void test_constexpr ()
 #endif
 
     // Verify constant expression.
-    p = new char [s1];           // { dg-error "size of array is negative" }
-    p = new char [2][s3];        // { dg-error "size of array|narrowing conversion" }
-    p = new char [s4][5];        // { dg-error "size of array is negative" }
-    p = new char [s6][s7];       // { dg-error "size of array|narrowing conversion" }
-
-    p = new (p) char [s1];       // { dg-error "size of array is negative" }
-    p = new (p) char [2][s3];    // { dg-error "size of array|narrowing conversion" }
-    p = new (p) char [s4][5];    // { dg-error "size of array is negative" }
-    p = new (p) char [s6][s7];   // { dg-error "size of array|narrowing conversion" }
-
-    p = new (p) A [s1];          // { dg-error "size of array is negative" }
-    p = new (p) A [2][s3];       // { dg-error "size of array|narrowing conversion" }
-    p = new (p) A [s4][5];       // { dg-error "size of array is negative" }
-    p = new (p) A [s6][s7];      // { dg-error "size of array|narrowing conversion" }
-
-    p = new (p) B [s1];          // { dg-error "size of array is negative" }
-    p = new (p) B [2][s3];       // { dg-error "size of array|narrowing conversion" }
-    p = new (p) B [s4][5];       // { dg-error "size of array is negative" }
-    p = new (p) B [s6][s7];      // { dg-error "size of array|narrowing conversion" }
-
-    p = new (&b) B [s1];          // { dg-error "size of array is negative" }
-    p = new (&b) B [2][s3];       // { dg-error "size of array|narrowing conversion" }
-    p = new (&b) B [s4][5];       // { dg-error "size of array is negative" }
-    p = new (&b) B [s6][s7];      // { dg-error "size of array|narrowing conversion" }
-
-    p = new int [s1 + s2];           // { dg-error "size of array is negative" }
-    p = new (p) long [2 * s3];       // { dg-error "size of array is negative" }
-    p = new A [s2 < s1 ? s1 : s2];   // { dg-error "size of array is negative" }
-    p = new (p) B [s7 - s2 * 2];     // { dg-error "size of array is negative" }
-    p = new (&b) B [9][s4 - s1 * 2]; // { dg-error "size of array|narrowing conversion" }
+    p = new char [s1];           // { dg-error "size .-1. of array is negative" }
+    p = new char [2][s3];        // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new char [s4][5];        // { dg-error "size .-4. of array is negative" }
+    p = new char [s6][s7];       // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (p) char [s1];       // { dg-error "size .-1. of array is negative" }
+    p = new (p) char [2][s3];    // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (p) char [s4][5];    // { dg-error "size .-4. of array is negative" }
+    p = new (p) char [s6][s7];   // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (p) A [s1];          // { dg-error "size .-1. of array is negative" }
+    p = new (p) A [2][s3];       // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (p) A [s4][5];       // { dg-error "size .-4. of array is negative" }
+    p = new (p) A [s6][s7];      // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (p) B [s1];          // { dg-error "size .-1. of array is negative" }
+    p = new (p) B [2][s3];       // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (p) B [s4][5];       // { dg-error "size .-4. of array is negative" }
+    p = new (p) B [s6][s7];      // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new (&b) B [s1];          // { dg-error "size .-1. of array is negative" }
+    p = new (&b) B [2][s3];       // { dg-error "size .-3. of array|narrowing conversion" }
+    p = new (&b) B [s4][5];       // { dg-error "size .-4. of array is negative" }
+    p = new (&b) B [s6][s7];      // { dg-error "size .-\[67\]. of array|narrowing conversion" }
+
+    p = new int [s1 + s2];           // { dg-error "size .-3. of array is negative" }
+    p = new (p) long [2 * s3];       // { dg-error "size .-6. of array is negative" }
+    p = new A [s2 < s1 ? s1 : s2];   // { dg-error "size .-1. of array is negative" }
+    p = new (p) B [s7 - s2 * 2];     // { dg-error "size .-3. of array is negative" }
+    p = new (&b) B [9][s4 - s1 * 2]; // { dg-error "size .-2. of array|narrowing conversion" }
 }
+
+/* Prune out pedantic warnins (turned into errors via -pedantic-errors).
+  { dg-prune-output "size of array is not an integral constant-expressio" } */