aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2015-11-11 14:47:03 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2015-11-11 14:47:03 +0000
commite78bede6f774bc0d294adafe5e3367c4da10647e (patch)
tree48b3e7d70614879dd48b43b013beb7831d9ad8ba
parenta5b50aa1fb086c90dd0119f8cb9e0a88ea9cce58 (diff)
downloadgcc-e78bede6f774bc0d294adafe5e3367c4da10647e.zip
gcc-e78bede6f774bc0d294adafe5e3367c4da10647e.tar.gz
gcc-e78bede6f774bc0d294adafe5e3367c4da10647e.tar.bz2
re PR c/68107 (Non-VLA type whose size is half or more of the address space constructed via a pointer)
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
-rw-r--r--gcc/c-family/ChangeLog7
-rw-r--r--gcc/c-family/c-common.c22
-rw-r--r--gcc/c-family/c-common.h1
-rw-r--r--gcc/c/ChangeLog7
-rw-r--r--gcc/c/c-decl.c22
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/decl.c16
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/c-c++-common/pr68107.c37
-rw-r--r--gcc/testsuite/g++.dg/init/new38.C4
-rw-r--r--gcc/testsuite/g++.dg/init/new44.C238
11 files changed, 219 insertions, 151 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index ed2ba46..eb4d5bf 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -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
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 8b424d3..6e2ce0a 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -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"
diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h
index c825454..bad8d05 100644
--- a/gcc/c-family/c-common.h
+++ b/gcc/c-family/c-common.h
@@ -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 */
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 8fb3786..87f6a2d 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -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.
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index c58dec6..a636474 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -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)
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a170685..62992ee 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index d124666..76cc1d1 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -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))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6c2c07a..8e97311 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..f1ed465
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr68107.c
@@ -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" } */
+}
diff --git a/gcc/testsuite/g++.dg/init/new38.C b/gcc/testsuite/g++.dg/init/new38.C
index 1672f22..37da525 100644
--- a/gcc/testsuite/g++.dg/init/new38.C
+++ b/gcc/testsuite/g++.dg/init/new38.C
@@ -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" }
}
diff --git a/gcc/testsuite/g++.dg/init/new44.C b/gcc/testsuite/g++.dg/init/new44.C
index d6ff86a..ab6e348 100644
--- a/gcc/testsuite/g++.dg/init/new44.C
+++ b/gcc/testsuite/g++.dg/init/new44.C
@@ -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" }