From e78bede6f774bc0d294adafe5e3367c4da10647e Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Wed, 11 Nov 2015 14:47:03 +0000 Subject: [PATCH] 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 --- gcc/c-family/ChangeLog | 7 + gcc/c-family/c-common.c | 22 +++ gcc/c-family/c-common.h | 1 + gcc/c/ChangeLog | 7 + gcc/c/c-decl.c | 22 +-- gcc/cp/ChangeLog | 7 + gcc/cp/decl.c | 16 +- gcc/testsuite/ChangeLog | 9 + gcc/testsuite/c-c++-common/pr68107.c | 37 +++++ gcc/testsuite/g++.dg/init/new38.C | 4 +- gcc/testsuite/g++.dg/init/new44.C | 238 +++++++++++++-------------- 11 files changed, 219 insertions(+), 151 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/pr68107.c diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index ed2ba46371c..eb4d5bfbae2 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,10 @@ +2015-11-11 Marek Polacek + + 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 PR bootstrap/68271 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 8b424d3477b..6e2ce0a736c 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 **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 c82545405e4..bad8d05e620 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 **); +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 8fb3786df3a..87f6a2d30e3 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,10 @@ +2015-11-11 Marek Polacek + + 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 * c-array-notation.c: Remove unused header files. diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index c58dec6022c..a636474862d 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 a170685c325..62992eef6ef 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2015-11-11 Marek Polacek + + 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 PR bootstrap/68271 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index d12466612b2..76cc1d176e5 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 6c2c07a006f..8e973115215 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2015-11-11 Marek Polacek + + 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 * 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 00000000000..f1ed465e078 --- /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 1672f229d64..37da525bf78 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 @@ -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 d6ff86a16c7..ab6e3484cc8 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" } -- 2.30.2