From patchwork Wed Jan 30 00:15:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Sebor X-Patchwork-Id: 1033056 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-494934-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="ODbhihsB"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tP79RqED"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43q3nb0dx8z9s6w for ; Wed, 30 Jan 2019 11:16:32 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=NOIuRtrPSqhha8jJHMb3vwevdPN18usMnrUVaGrZiY5gPoRt1b aU9lm+UqGcT5VJrCxXSNUWqyzRWt8JVDYuJai7q1RzogPupquj5FBpbFh+zSdLBR PF4RmN3ggDcpw8quq12hZlOdiiQ/lfM2diD9VFYwG9Qbs64fS0fQtVFu8= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to :from:subject:message-id:date:mime-version:content-type; s= default; bh=x8t72a6YsHRuc1zVxqsYGNZT/YE=; b=ODbhihsB65Hs0vPVUVn9 pB3syoudKDZMdUtpYRmGih18BaR6MtoDAst2stXwoxZFyWnKtY8Ide68ZFQPMMzY Of5tA1Z5bsQ8LwGYyaO0XoS81GxX6dqoaVMWXB8hfc3jIu+IuHXC8hBitocm4wVN /qdv1p7ropezBjpZyQ5kLC8= Received: (qmail 29421 invoked by alias); 30 Jan 2019 00:16:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 28839 invoked by uid 89); 30 Jan 2019 00:15:47 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-11.9 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS, TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=issuing, excessive X-HELO: mail-qk1-f179.google.com Received: from mail-qk1-f179.google.com (HELO mail-qk1-f179.google.com) (209.85.222.179) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 30 Jan 2019 00:15:20 +0000 Received: by mail-qk1-f179.google.com with SMTP id o8so12676379qkk.11 for ; Tue, 29 Jan 2019 16:15:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=cBoYCxuZusEpaLJIzNEiGg2QxD6O0z+IsToM7iZ72Ak=; b=tP79RqEDkPNiuabVW+XzI9wa8R/ZONaA2GIAz+MPJgth0F1NNH7CVT0CVv1UIol1eV k0ibGRsM4oYb5SXKXsfFVCRIFOKec/PtH6c0LJzIjoZXHiYFtZLpIruC8NDaPVQ0yUYp DIMbI8wm0x/Bs1fe1TK8YdFTY/BtBXvr9tyH9MftLePH+eQN7Hf+q0igoX7fYWszeXKR y7VSozgZEmbNjeSc9tG0rZ6TonEr8fB4PhRkTc68/Rj6e1eTMk6seCLRt/IiRRXEPhYO FSyuDkG8+HtIyhGkTD/hqEgxW3wFri3CM2gWxeh2DH8/hxfKsk8+547xEqskOQk4vKfD u/jQ== Received: from [192.168.0.106] (75-166-110-80.hlrn.qwest.net. [75.166.110.80]) by smtp.gmail.com with ESMTPSA id f143sm40119454qka.73.2019.01.29.16.15.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 29 Jan 2019 16:15:16 -0800 (PST) To: "gcc-patches@gcc.gnu.org" , Jason Merrill From: Martin Sebor Subject: [PATCH] print correct array sizes in errors (PR 87996) Message-ID: <0b3c92dc-6d35-d4cb-b2df-536432523bab@gmail.com> Date: Tue, 29 Jan 2019 17:15:14 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.1 MIME-Version: 1.0 X-IsSubscribed: yes PR c++/87996 is a P2 regression reported in December about C++ error messages for declarations of arrays larger than PTRDIFF_MAX saying the sizes of the arrays are negative. GCC 7 says they're negative. The attached patch corrects that by issuing messages that, besides reflecting the correct sign, also mention the invalid size of the array when it's available, similarly to what Clang does, and the maximum object size GCC allows using a format already in use in other GCC messages. This is helpful when the array bounds involve non-trivial expressions (such as template arguments). Tested on x86_64-linux. Martin PR c++/87996 - [8/9 Regression] size of array is negative error when SIZE_MAX/2 < sizeof(array) <= SIZE_MAX gcc/ChangeLog: PR c++/87996 * builtins.c (max_object_size): Move from here... * builtins.h (max_object_size): ...and here... * tree.c (max_object_size): ...to here... * tree.h (max_object_size): ...and here. gcc/c-family/ChangeLog: PR c++/87996 * c-common.c (invalid_array_size_error): New function. (valid_array_size_p): Call it. Handle size as well as type. * c-common.h (valid_constant_size_p): New function. (enum cst_size_error): New type. gcc/cp/ChangeLog: PR c++/87996 * decl.c (compute_array_index_type_loc): Preserve signed sizes for diagnostics. Call valid_array_size_p instead of error. * init.c (build_new_1): Compute size for diagnostic. Call invalid_array_size_error (build_new): Call valid_array_size_p instead of error. gcc/testsuite/ChangeLog: PR c++/87996 * c-c++-common/array-5.c: New test. * c-c++-common/pr68107.c: Adjust text of diagnostics. * g++.dg/init/new38.C: Same. * g++.dg/init/new43.C: Same. * g++.dg/init/new44.C: Same. * g++.dg/init/new46.C: Same. * g++.dg/other/large-size-array.C: Same. * g++.dg/other/new-size-type.C: Same. * g++.dg/template/array30.C: Same. * g++.dg/template/array32.C: New test. * g++.dg/template/dependent-name3.C: Adjust. * gcc.dg/large-size-array-3.c: Same. * gcc.dg/large-size-array-5.c: Same. * gcc.dg/large-size-array.c: Same. * g++.old-deja/g++.brendan/array1.C: Same. * g++.old-deja/g++.mike/p6149.C: Same. Index: gcc/builtins.c =================================================================== --- gcc/builtins.c (revision 268372) +++ gcc/builtins.c (working copy) @@ -11210,12 +11210,3 @@ target_char_cst_p (tree t, char *p) *p = (char)tree_to_uhwi (t); return true; } - -/* Return the maximum object size. */ - -tree -max_object_size (void) -{ - /* To do: Make this a configurable parameter. */ - return TYPE_MAX_VALUE (ptrdiff_type_node); -} Index: gcc/builtins.h =================================================================== --- gcc/builtins.h (revision 268372) +++ gcc/builtins.h (working copy) @@ -150,6 +150,5 @@ extern internal_fn replacement_internal_fn (gcall extern void warn_string_no_nul (location_t, const char *, tree, tree); extern tree unterminated_array (tree, tree * = NULL, bool * = NULL); -extern tree max_object_size (); #endif /* GCC_BUILTINS_H */ Index: gcc/c-family/c-common.c =================================================================== --- gcc/c-family/c-common.c (revision 268372) +++ gcc/c-family/c-common.c (working copy) @@ -8231,29 +8231,82 @@ reject_gcc_builtin (const_tree expr, location_t lo return false; } +/* Issue an ERROR for an invalid SIZE of array NAME which is null + for unnamed arrays. */ + +void +invalid_array_size_error (location_t loc, cst_size_error error, + const_tree size, const_tree name) +{ + tree maxsize = max_object_size (); + switch (error) + { + case cst_size_negative: + if (name) + error_at (loc, "size %qE of array %qE is negative", + size, name); + else + error_at (loc, "size %qE of array is negative", + size); + break; + case cst_size_too_big: + if (name) + error_at (loc, "size %qE of array %qE exceeds maximum " + "object size %qE", size, name, maxsize); + else + error_at (loc, "size %qE of array exceeds maximum " + "object size %qE", size, maxsize); + break; + case cst_size_overflow: + if (name) + error_at (loc, "size of array %qE exceeds maximum " + "object size %qE", name, maxsize); + else + error_at (loc, "size of array exceeds maximum " + "object size %qE", maxsize); + break; + default: + gcc_unreachable (); + } +} + /* 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. */ + is valid, false otherwise. T is either the type of the array or its + size, and NAME is the name of the array, or null for unnamed arrays. */ bool -valid_array_size_p (location_t loc, tree type, tree name, bool complain) +valid_array_size_p (location_t loc, const_tree t, tree name, bool complain) { - 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 (t == error_mark_node) + return true; + + const_tree size; + if (TYPE_P (t)) { - if (complain) - { - 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; + if (!COMPLETE_TYPE_P (t)) + return true; + size = TYPE_SIZE_UNIT (t); } - return true; + else + size = t; + + if (TREE_CODE (size) != INTEGER_CST) + return true; + + cst_size_error error; + if (valid_constant_size_p (size, &error)) + return true; + + if (!complain) + return false; + + if (TREE_CODE (TREE_TYPE (size)) == ENUMERAL_TYPE) + /* Show the value of the enumerator rather than its name. */ + size = convert (ssizetype, const_cast (size)); + + invalid_array_size_error (loc, error, size, name); + return false; } /* Read SOURCE_DATE_EPOCH from environment to have a deterministic Index: gcc/c-family/c-common.h =================================================================== --- gcc/c-family/c-common.h (revision 268372) +++ gcc/c-family/c-common.h (working copy) @@ -1270,7 +1270,9 @@ extern tree find_inv_trees (tree *, int *, void *) extern tree replace_inv_trees (tree *, int *, void *); extern bool reject_gcc_builtin (const_tree, location_t = UNKNOWN_LOCATION); -extern bool valid_array_size_p (location_t, tree, tree, bool = true); +extern bool valid_array_size_p (location_t, const_tree, tree, bool = true); +extern void invalid_array_size_error (location_t, cst_size_error, + const_tree, const_tree); /* In c-warn.c. */ extern void constant_expression_warning (tree); Index: gcc/cp/decl.c =================================================================== --- gcc/cp/decl.c (revision 268372) +++ gcc/cp/decl.c (working copy) @@ -9645,6 +9645,7 @@ compute_array_index_type_loc (location_t name_loc, { tree itype; tree osize = size; + tree diagsize = NULL_TREE; if (error_operand_p (size)) return error_mark_node; @@ -9662,6 +9663,10 @@ compute_array_index_type_loc (location_t name_loc, else { size = instantiate_non_dependent_expr_sfinae (size, complain); + /* Save the origiginal value to determine if an excessive size + after conversion to size_t is due the value being negative. + If so, use the size to improve diagnostics. */ + tree orig_size = size; size = build_converted_constant_expr (size_type_node, size, complain); /* Pedantically a constant expression is required here and so __builtin_is_constant_evaluated () should fold to true if it @@ -9669,7 +9674,28 @@ compute_array_index_type_loc (location_t name_loc, size = maybe_constant_value (size, NULL_TREE, /*manifestly_const_eval=*/true); - if (!TREE_CONSTANT (size)) + + /* Try to convert the original SIZE to a ssizetype. */ + if (orig_size != error_mark_node + && !TYPE_UNSIGNED (TREE_TYPE (orig_size))) + { + if (TREE_CODE (size) == INTEGER_CST + && tree_int_cst_sign_bit (size)) + diagsize = build_converted_constant_expr (ssizetype, size, + tsubst_flags_t ()); + else if (size == error_mark_node + && TREE_CODE (orig_size) == INTEGER_CST + && tree_int_cst_sign_bit (orig_size)) + diagsize = build_converted_constant_expr (ssizetype, orig_size, + tsubst_flags_t ()); + } + + if (TREE_CONSTANT (size)) + { + if (!diagsize && TREE_CODE (size) == INTEGER_CST) + diagsize = size; + } + else size = osize; } @@ -9732,15 +9758,12 @@ compute_array_index_type_loc (location_t name_loc, if (TREE_CODE (size) == INTEGER_CST) { /* An array must have a positive number of elements. */ - if (!valid_constant_size_p (size)) + if (!diagsize) + diagsize = size; + if (!valid_array_size_p (loc, diagsize, name, (complain & tf_error))) { if (!(complain & tf_error)) return error_mark_node; - - if (name) - error_at (loc, "size of array %qD is negative", name); - else - error_at (loc, "size of array is negative"); size = integer_one_node; } /* As an extension we allow zero-sized arrays. */ Index: gcc/cp/init.c =================================================================== --- gcc/cp/init.c (revision 268372) +++ gcc/cp/init.c (working copy) @@ -3086,7 +3086,21 @@ build_new_1 (vec **placement, tree ty if (overflow || wi::gtu_p (inner_size, max_size)) { if (complain & tf_error) - error ("size of array is too large"); + { + cst_size_error error; + if (overflow) + error = cst_size_overflow; + else + { + error = cst_size_too_big; + size = size_binop (MULT_EXPR, size, + wide_int_to_tree (sizetype, + inner_nelts_count)); + size = cp_fully_fold (size); + } + invalid_array_size_error (input_location, error, size, + /*name=*/NULL_TREE); + } return error_mark_node; } @@ -3105,7 +3119,11 @@ build_new_1 (vec **placement, tree ty isn't explicitly stated but it's enforced anyway -- see grokdeclarator in cp/decl.c). */ if (complain & tf_error) - error ("size of array is too large"); + { + size = cp_fully_fold (size); + invalid_array_size_error (input_location, cst_size_too_big, + size, NULL_TREE); + } return error_mark_node; } } @@ -3747,12 +3765,9 @@ build_new (vec **placement, tree type less than zero. ... If the expression is a constant expression, the program is ill-fomed. */ if (TREE_CODE (cst_nelts) == INTEGER_CST - && tree_int_cst_sgn (cst_nelts) == -1) - { - if (complain & tf_error) - error ("size of array is negative"); - return error_mark_node; - } + && !valid_array_size_p (input_location, cst_nelts, NULL_TREE, + complain & tf_error)) + return error_mark_node; nelts = mark_rvalue_use (nelts); nelts = cp_save_expr (cp_convert (sizetype, nelts, complain)); Index: gcc/tree.c =================================================================== --- gcc/tree.c (revision 268372) +++ gcc/tree.c (working copy) @@ -7496,10 +7496,12 @@ compare_tree_int (const_tree t, unsigned HOST_WIDE /* Return true if SIZE represents a constant size that is in bounds of what the middle-end and the backend accepts (covering not more than - half of the address-space). */ + half of the address-space). + When PERR is non-null, set *PERR on failure to the description of + why SIZE is not valid. */ bool -valid_constant_size_p (const_tree size) +valid_constant_size_p (const_tree size, cst_size_error *perr /* = NULL */) { if (POLY_INT_CST_P (size)) { @@ -7510,10 +7512,33 @@ bool return false; return true; } - if (! tree_fits_uhwi_p (size) - || TREE_OVERFLOW (size) - || tree_int_cst_sign_bit (size) != 0) - return false; + + cst_size_error error; + if (!perr) + perr = &error; + + if (TREE_OVERFLOW (size)) + { + *perr = cst_size_overflow; + return false; + } + + tree type = TREE_TYPE (size); + if (TYPE_UNSIGNED (type)) + { + if (!tree_fits_uhwi_p (size) + || tree_int_cst_sign_bit (size)) + { + *perr = cst_size_too_big; + return false; + } + } + else if (tree_int_cst_sign_bit (size)) + { + *perr = cst_size_negative; + return false; + } + return true; } @@ -14999,6 +15024,15 @@ const builtin_structptr_type builtin_structptr_typ { const_fexcept_t_ptr_type_node, const_ptr_type_node, "fexcept_t" } }; +/* Return the maximum object size. */ + +tree +max_object_size (void) +{ + /* To do: Make this a configurable parameter. */ + return TYPE_MAX_VALUE (ptrdiff_type_node); +} + #if CHECKING_P namespace selftest { Index: gcc/tree.h =================================================================== --- gcc/tree.h (revision 268372) +++ gcc/tree.h (working copy) @@ -4347,8 +4347,19 @@ extern int tree_int_cst_sign_bit (const_tree); extern unsigned int tree_int_cst_min_precision (tree, signop); extern tree strip_array_types (tree); extern tree excess_precision_type (tree); -extern bool valid_constant_size_p (const_tree); +/* Desription of the reason why the argument of valid_constant_size_p + is not a valid size. */ +enum cst_size_error { + cst_size_ok, + cst_size_negative, + cst_size_too_big, + cst_size_overflow +}; + +extern bool valid_constant_size_p (const_tree, cst_size_error * = NULL); +extern tree max_object_size (); + /* Return true if T holds a value that can be represented as a poly_int64 without loss of precision. Store the value in *VALUE if so. */ Index: gcc/testsuite/c-c++-common/array-5.c =================================================================== --- gcc/testsuite/c-c++-common/array-5.c (nonexistent) +++ gcc/testsuite/c-c++-common/array-5.c (working copy) @@ -0,0 +1,60 @@ +/* PR c++/87996 - "size of array is negative" error when SIZE_MAX/2 < sizeof(array) <= SIZE_MAX + { dg-do compile } + { dg-options "-ftrack-macro-expansion=0" } */ + +#define INT16_MAX __INT16_MAX__ +#define UINT16_MAX ((INT16_MAX << 1) + 1) + +#define DIFF_MAX __PTRDIFF_MAX__ +#define SIZE_MAX __SIZE_MAX__ + +typedef __INT16_TYPE__ int16_t; +typedef __INT32_TYPE__ int32_t; +typedef __SIZE_TYPE__ size_t; + +/* Verify errors for types. */ + +typedef char i8a1_d_m1_t[DIFF_MAX - 1]; +/* The following should also be diagnosed because the difference between + &i8a1_dx[0] and &i8a1_dx[sizeof i8a1_dx] cannot be represented. +typedef char i8a1_d_t[DIFF_MAX]; +*/ + +typedef char i8a1_d_p1_t[(size_t)DIFF_MAX + 1]; /* { dg-error "size .\[0-9\]+. of array .i8a1_d_p1_t. exceeds maximum object size .\[0-9\]+.|is too large" } */ + +typedef char i8a1_s_t[SIZE_MAX]; /* { dg-error "size .\[0-9\]+. of array .i8a1_s_t. exceeds maximum object size .\[0-9\]+.|is too large" } */ + +typedef int16_t i16a_s_d2_t[SIZE_MAX / 2]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d2_t. exceeds maximum object size .\[0-9\]+." } */ +typedef int16_t i16a_s_d3_t[SIZE_MAX / 3]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d3_t. exceeds maximum object size .\[0-9\]+." } */ +typedef int16_t i16a_s_d4_m1_t[SIZE_MAX / 4 - 1]; +typedef int16_t i16a_s_d4_p1_t[SIZE_MAX / 4 + 1]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d4_p1_t. exceeds maximum object size .\[0-9\]+." } */ + +/* The internal computation overflows the message doesn't show the object + size (but GCC should compute the result and print it anyway). */ +typedef int32_t i32a_s_d2_t[SIZE_MAX / 2]; /* { dg-error "size of array .i32a_s_d2_t. exceeds maximum object size .\[0-9\]+." } */ +typedef int32_t i32a_s_d3_t[SIZE_MAX / 3]; /* { dg-error "size of array .i32a_s_d3_t. exceeds maximum object size .\[0-9\]+." } */ +typedef int32_t i32a_s_d4_t[SIZE_MAX / 4]; /* { dg-error "size .\[0-9\]+. of array .i32a_s_d4_t. exceeds maximum object size .\[0-9\]+." } */ + + +/* Verify errors for objects. */ + +char i8a1_d_m1[DIFF_MAX - 1]; +/* The following should also be diagnosed because the difference between + &i8a1_dx[0] and &i8a1_dx[sizeof i8a1_dx] cannot be represented. +char i8a1_d[DIFF_MAX]; +*/ + +char i8a_d_p1[(size_t)DIFF_MAX + 1]; /* { dg-error "size .\[0-9\]+. of array .i8a_d_p1. exceeds maximum object size .\[0-9\]+.|is too large" } */ + +char i8a_s[SIZE_MAX]; /* { dg-error "size .\[0-9\]+. of array .i8a_s. exceeds maximum object size .\[0-9\]+.|is too large" } */ + +int16_t i16a_s_d2[SIZE_MAX / 2]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d2. exceeds maximum object size .\[0-9\]+." } */ +int16_t i16a_s_d3[SIZE_MAX / 3]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d3. exceeds maximum object size .\[0-9\]+." } */ +int16_t i16a_sz_d4_m1[SIZE_MAX / 4 - 1]; +int16_t i16a_sz_d4_p1[SIZE_MAX / 4 + 1]; /* { dg-error "size .\[0-9\]+. of array .i16a_sz_d4_p1. exceeds maximum object size .\[0-9\]+." } */ + +/* The internal computation overflows the message doesn't show the object + size (but GCC should compute the result and print it anyway). */ +int32_t i32a_s_d2[SIZE_MAX / 2]; /* { dg-error "size of array .i32a_s_d2. exceeds maximum object size .\[0-9\]+." } */ +int32_t i32a_s_d3[SIZE_MAX / 3]; /* { dg-error "size of array .i32a_s_d3. exceeds maximum object size .\[0-9\]+." } */ +int32_t i32a_s_d4[SIZE_MAX / 4]; /* { dg-error "size .\[0-9\]+. of array .i32a_s_d4. exceeds maximum object size .\[0-9\]+." } */ Index: gcc/testsuite/c-c++-common/pr68107.c =================================================================== --- gcc/testsuite/c-c++-common/pr68107.c (revision 268372) +++ gcc/testsuite/c-c++-common/pr68107.c (working copy) @@ -3,35 +3,35 @@ #define N ((__SIZE_MAX__ / sizeof (int)) / 2 + 1) -typedef int (*T1)[N]; /* { dg-error "too large" } */ +typedef int (*T1)[N]; /* { dg-error "exceeds maximum object size" } */ 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" } */ +typedef int (*T3)[N][N]; /* { dg-error "exceeds maximum object size" } */ +typedef int (*T4)[N - 1][N - 1]; /* { dg-error "exceeds maximum object size" } */ +typedef int (**T5)[N]; /* { dg-error "exceeds maximum object size" } */ struct S { - int (*q1)[N]; /* { dg-error "too large" } */ + int (*q1)[N]; /* { dg-error "exceeds maximum object size" } */ 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" } */ + int (*q3)[N][N]; /* { dg-error "exceeds maximum object size" } */ + int (*q4)[N - 1][N - 1]; /* { dg-error "exceeds maximum object size" } */ + int (**q5)[N]; /* { dg-error "exceeds maximum object size" } */ }; -void fn1 (int (*p1)[N]); /* { dg-error "too large" } */ +void fn1 (int (*p1)[N]); /* { dg-error "exceeds maximum object size" } */ 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 fn3 (int (*p3)[N][N]); /* { dg-error "exceeds maximum object size" } */ +void fn4 (int (*p4)[N - 1][N - 1]); /* { dg-error "exceeds maximum object size" } */ +void fn5 (int (**p5)[N]); /* { dg-error "exceeds maximum object size" } */ void fn (void) { - int (*n1)[N]; /* { dg-error "too large" } */ + int (*n1)[N]; /* { dg-error "exceeds maximum object size" } */ 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" } */ + int (*n3)[N][N]; /* { dg-error "exceeds maximum object size" } */ + int (*n4)[N - 1][N - 1]; /* { dg-error "exceeds maximum object size" } */ + int (**n5)[N]; /* { dg-error "exceeds maximum object size" } */ - sizeof (int (*)[N]); /* { dg-error "too large" } */ - sizeof (int [N]); /* { dg-error "too large" } */ + sizeof (int (*)[N]); /* { dg-error "exceeds maximum object size" } */ + sizeof (int [N]); /* { dg-error "exceeds maximum object size" } */ } Index: gcc/testsuite/g++.dg/init/new38.C =================================================================== --- gcc/testsuite/g++.dg/init/new38.C (revision 268372) +++ gcc/testsuite/g++.dg/init/new38.C (working copy) @@ -5,7 +5,7 @@ large_array_char(int n) { new char[n] [1ULL << (sizeof(void *) * 4)] - [1ULL << (sizeof(void *) * 4)]; // { dg-error "size of unnamed array" } + [1ULL << (sizeof(void *) * 4)]; // { dg-error "size of 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 unnamed array" } + [1ULL << (sizeof(void *) * 4)]; // { dg-error "size of array" } } @@ -22,7 +22,7 @@ template void large_array_template1(int n) { - new T[n] // { dg-error "size of unnamed array is too large" } + new T[n] // { dg-error "size of array exceeds maximum object size" } [(1ULL << (sizeof(void *) * 4)) / sizeof(T)] [1ULL << (sizeof(void *) * 4)]; } @@ -31,7 +31,7 @@ template void large_array_template2(int n) { - new T[n] // { dg-error "size of unnamed array is too large" } + new T[n] // { dg-error "size of array exceeds maximum object size" } [(1ULL << (sizeof(void *) * 4)) / sizeof(T)] [1ULL << (sizeof(void *) * 4)]; } @@ -40,7 +40,7 @@ template void large_array_template3(int n) { - new T[n] // { dg-error "size of unnamed array is too large" } + new T[n] // { dg-error "size of array exceeds maximum object size" } [(1ULL << (sizeof(void *) * 4)) / sizeof(T)] [1ULL << (sizeof(void *) * 4)]; } Index: gcc/testsuite/g++.dg/init/new43.C =================================================================== --- gcc/testsuite/g++.dg/init/new43.C (revision 268372) +++ gcc/testsuite/g++.dg/init/new43.C (working copy) @@ -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 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 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) 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 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) 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 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 (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 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 (&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 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 - 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 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 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) 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 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) 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 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 (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 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 (&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 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 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 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 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) 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 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) 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 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 (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 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 (&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 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 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" } */ Index: gcc/testsuite/g++.dg/init/new44.C =================================================================== --- gcc/testsuite/g++.dg/init/new44.C (revision 268372) +++ gcc/testsuite/g++.dg/init/new44.C (working copy) @@ -37,13 +37,13 @@ void *p; static void __attribute__ ((used)) test_one_dim_char_array () { - p = new char [MAX]; // { dg-error "size of array" } - p = new char [MAX - 1]; // { dg-error "size of array" } - p = new char [MAX - 2]; // { dg-error "size of array" } - p = new char [MAX - 99]; // { dg-error "size of array" } - p = new char [MAX / 2]; // { dg-error "size of array" } - p = new char [MAX / 2 - 1]; // { dg-error "size of array" } - p = new char [MAX / 2 - 2]; // { dg-error "size of array" } + p = new char [MAX]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX - 99]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid testing the expressions below since whether or not they // are accepted depends on the precision of size_t (which also @@ -63,20 +63,20 @@ test_one_dim_char_array () static void __attribute__ ((used)) test_one_dim_short_array () { - p = new short [MAX]; // { dg-error "size of array" } - p = new short [MAX - 1]; // { dg-error "size of array" } - p = new short [MAX - 2]; // { dg-error "size of array" } - p = new short [MAX - 99]; // { dg-error "size of array" } - p = new short [MAX / 2]; // { dg-error "size of array" } - p = new short [MAX / 2 - 1]; // { dg-error "size of array" } - p = new short [MAX / 2 - 2]; // { dg-error "size of array" } - p = new short [MAX / 2 - 3]; // { dg-error "size of array" } - p = new short [MAX / 2 - 4]; // { dg-error "size of array" } - p = new short [MAX / 2 - 5]; // { dg-error "size of array" } - p = new short [MAX / 2 - 6]; // { dg-error "size of array" } - p = new short [MAX / 2 - 7]; // { dg-error "size of array" } - p = new short [MAX / 2 - 8]; // { dg-error "size of array" } - p = new short [MAX / 4]; // { dg-error "size of array" } + p = new short [MAX]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX - 99]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 2 - 3]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 2 - 4]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 2 - 5]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 2 - 6]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. of array" } + p = new short [MAX / 4]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new short [MAX / 4 - 1]; @@ -88,13 +88,13 @@ test_one_dim_short_array () static void __attribute__ ((used)) test_two_dim_char_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" } + p = new char [1][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [1][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [1][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new char [1][MAX / 2 - 3]; @@ -105,28 +105,28 @@ 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 (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 [2][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. 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" } - p = new char [MAX][MAX / 2 - 7]; // { dg-error "size of array" } - p = new char [MAX][MAX / 2 - 8]; // { dg-error "size of array" } - p = new char [MAX][2]; // { dg-error "size of array" } - p = new char [MAX][1]; // { dg-error "size of array" } - p = new char [MAX / 2][1]; // { dg-error "size of array" } - p = new char [MAX / 2 - 1][1]; // { dg-error "size of array" } - p = new char [MAX / 2 - 2][1]; // { dg-error "size of array" } + p = new char [MAX][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [MAX][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [MAX][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [MAX][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX][1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2][1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 1][1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 2][1]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new char [MAX / 2 - 3][1]; @@ -143,13 +143,13 @@ test_two_dim_char_array () static __attribute__ ((used)) void test_three_dim_char_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" } + p = new char [1][1][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][1][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][1][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][1][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][1][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [1][1][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [1][1][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new char [1][1][MAX / 2 - 3]; @@ -160,20 +160,20 @@ 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 (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" } + p = new char [1][2][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 2 - 3]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 2 - 4]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 2 - 5]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 2 - 6]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [1][2][MAX / 4]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new char [1][2][MAX / 4 - 1]; @@ -182,20 +182,20 @@ 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 (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" } - p = new char [2][1][MAX / 2 - 3]; // { dg-error "size of array" } - p = new char [2][1][MAX / 2 - 4]; // { dg-error "size of array" } - p = new char [2][1][MAX / 2 - 5]; // { dg-error "size of array" } - p = new char [2][1][MAX / 2 - 6]; // { dg-error "size of array" } - p = new char [2][1][MAX / 2 - 7]; // { dg-error "size of array" } - p = new char [2][1][MAX / 2 - 8]; // { dg-error "size of array" } - p = new char [2][1][MAX / 4]; // { dg-error "size of array" } + p = new char [2][1][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][1][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][1][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][1][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][1][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][1][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][1][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][1][MAX / 2 - 3]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][1][MAX / 2 - 4]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][1][MAX / 2 - 5]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][1][MAX / 2 - 6]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][1][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][1][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][1][MAX / 4]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new char [2][1][MAX / 4 - 1]; @@ -204,22 +204,22 @@ 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 (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" } + p = new char [2][2][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 2 - 3]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 2 - 4]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 2 - 5]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 2 - 6]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][2][MAX / 4]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][2][MAX / 4 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][2][MAX / 4 - 2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new char [2][2][MAX / 8]; @@ -228,22 +228,22 @@ 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 (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" } + p = new char [2][MAX][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX - 1][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX - 2][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX - 99][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2 - 1][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2 - 2][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2 - 3][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2 - 4][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2 - 5][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2 - 6][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2 - 7][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 2 - 8][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [2][MAX / 4][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][MAX / 4 - 1][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [2][MAX / 4 - 2][2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new char [2][MAX / 8][2]; @@ -252,22 +252,22 @@ test_three_dim_char_array () p = new char [2][MAX / 8 - 2][2]; p = new char [2][MAX / 8 - 3][2]; - p = new char [MAX][2][2]; // { dg-error "size of array" } - p = new char [MAX - 1][2][2]; // { dg-error "size of array" } - p = new char [MAX - 2][2][2]; // { dg-error "size of array" } - p = new char [MAX - 99][2][2]; // { dg-error "size of array" } - p = new char [MAX / 2][2][2]; // { dg-error "size of array" } - p = new char [MAX / 2 - 1][2][2]; // { dg-error "size of array" } - p = new char [MAX / 2 - 2][2][2]; // { dg-error "size of array" } - p = new char [MAX / 2 - 3][2][2]; // { dg-error "size of array" } - p = new char [MAX / 2 - 4][2][2]; // { dg-error "size of array" } - p = new char [MAX / 2 - 5][2][2]; // { dg-error "size of array" } - p = new char [MAX / 2 - 6][2][2]; // { dg-error "size of array" } - p = new char [MAX / 2 - 7][2][2]; // { dg-error "size of array" } - p = new char [MAX / 2 - 8][2][2]; // { dg-error "size of array" } - p = new char [MAX / 4][2][2]; // { dg-error "size of array" } - p = new char [MAX / 4 - 1][2][2]; // { dg-error "size of array" } - p = new char [MAX / 4 - 2][2][2]; // { dg-error "size of array" } + p = new char [MAX][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX - 1][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX - 2][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX - 99][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 1][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 2][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 3][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 4][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 5][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 6][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 7][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 2 - 8][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 4][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 4 - 1][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [MAX / 4 - 2][2][2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new char [MAX / 8][2][2]; @@ -276,9 +276,9 @@ 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 (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][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [MAX][MAX][MAX / 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new char [MAX][MAX / 2][MAX]; // { dg-error "size .\[0-9\]+. 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" } } @@ -297,9 +297,9 @@ test_N_dim_char_array () p = new char [N][N][N][N][N][N][N]; p = new char [N / 2][2][N][N][N][N][N][N]; p = new char [N - 1][N / 2][N][N][N][N][N][N]; - p = new char [N / 2][N][N][N][N][N][N][N]; // { dg-error "size of array" } - p = new char [N - 1][N][N][N][N][N][N][N]; // { dg-error "size of array" } - p = new char [N] [N][N][N][N][N][N][N]; // { dg-error "size of array" } + p = new char [N / 2][N][N][N][N][N][N][N]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [N - 1][N][N][N][N][N][N][N]; // { dg-error "size .\[0-9\]+. of array" } + p = new char [N] [N][N][N][N][N][N][N]; // { dg-error "size .\[0-9\]+. of array" } } typedef struct Byte { @@ -316,17 +316,17 @@ void* operator new[] (size_t, B*); static void __attribute__ ((used)) test_one_dim_byte_array (void *p) { - p = new (p) B [MAX]; // { dg-error "size of array" } - p = new (p) B [MAX - 1]; // { dg-error "size of array" } - p = new (p) B [MAX - 2]; // { dg-error "size of array" } - p = new (p) B [MAX - 99]; // { dg-error "size of array" } - p = new (p) B [MAX / 2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 1]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 2]; // { dg-error "size of array" } + p = new (p) B [MAX]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX - 99]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid testing the expressions below since whether or not they // are accepted depends on the precision of size_t (which determines - // the size of the cookie). + // the size .\[0-9\]+. of the cookie). // p = new (p) B [MAX / 2 - 3]; // p = new (p) B [MAX / 2 - 4]; // p = new (p) B [MAX / 2 - 5]; @@ -343,13 +343,13 @@ 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 (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" } + p = new (p) B [1][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [1][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [1][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new (p) B [1][MAX / 2 - 3]; @@ -360,28 +360,28 @@ 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 (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 [2][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. 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" } - p = new (p) B [MAX][MAX / 2 - 7]; // { dg-error "size of array" } - p = new (p) B [MAX][MAX / 2 - 8]; // { dg-error "size of array" } - p = new (p) B [MAX][2]; // { dg-error "size of array" } - p = new (p) B [MAX][1]; // { dg-error "size of array" } - p = new (p) B [MAX / 2][1]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 1][1]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 2][1]; // { dg-error "size of array" } + p = new (p) B [MAX][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [MAX][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [MAX][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [MAX][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX][1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2][1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 1][1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 2][1]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new (p) B [MAX / 2 - 3][1]; @@ -398,13 +398,13 @@ 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 (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" } + p = new (p) B [1][1][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][1][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][1][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][1][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][1][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [1][1][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [1][1][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new (p) B [1][1][MAX / 2 - 3]; @@ -415,20 +415,20 @@ test_placement_three_dim_byte_struct_array (void * 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 (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" } + p = new (p) B [1][2][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 2 - 3]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 2 - 4]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 2 - 5]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 2 - 6]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [1][2][MAX / 4]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new (p) B [1][2][MAX / 4 - 1]; @@ -437,20 +437,20 @@ test_placement_three_dim_byte_struct_array (void * 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 (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" } - p = new (p) B [2][1][MAX / 2 - 3]; // { dg-error "size of array" } - p = new (p) B [2][1][MAX / 2 - 4]; // { dg-error "size of array" } - p = new (p) B [2][1][MAX / 2 - 5]; // { dg-error "size of array" } - p = new (p) B [2][1][MAX / 2 - 6]; // { dg-error "size of array" } - p = new (p) B [2][1][MAX / 2 - 7]; // { dg-error "size of array" } - p = new (p) B [2][1][MAX / 2 - 8]; // { dg-error "size of array" } - p = new (p) B [2][1][MAX / 4]; // { dg-error "size of array" } + p = new (p) B [2][1][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][1][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][1][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][1][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][1][MAX / 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][1][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][1][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][1][MAX / 2 - 3]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][1][MAX / 2 - 4]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][1][MAX / 2 - 5]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][1][MAX / 2 - 6]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][1][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][1][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][1][MAX / 4]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new (p) B [2][1][MAX / 4 - 1]; @@ -459,22 +459,22 @@ test_placement_three_dim_byte_struct_array (void * 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 (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" } + p = new (p) B [2][2][MAX]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX - 99]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 2 - 1]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 2 - 2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 2 - 3]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 2 - 4]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 2 - 5]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 2 - 6]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 2 - 7]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 2 - 8]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][2][MAX / 4]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][2][MAX / 4 - 1]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][2][MAX / 4 - 2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new (p) B [2][2][MAX / 8]; @@ -483,22 +483,22 @@ test_placement_three_dim_byte_struct_array (void * 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 (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" } + p = new (p) B [2][MAX][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX - 1][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX - 2][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX - 99][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2 - 1][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2 - 2][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2 - 3][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2 - 4][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2 - 5][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2 - 6][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2 - 7][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 2 - 8][2]; // { dg-error "size .\[0-9\]+. of (unnamed )?array" } + p = new (p) B [2][MAX / 4][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][MAX / 4 - 1][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [2][MAX / 4 - 2][2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new (p) B [2][MAX / 8][2]; @@ -507,22 +507,22 @@ test_placement_three_dim_byte_struct_array (void * p = new (p) B [2][MAX / 8 - 2][2]; p = new (p) B [2][MAX / 8 - 3][2]; - p = new (p) B [MAX][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX - 1][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX - 2][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX - 99][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 1][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 2][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 3][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 4][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 5][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 6][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 7][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 2 - 8][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 4][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 4 - 1][2][2]; // { dg-error "size of array" } - p = new (p) B [MAX / 4 - 2][2][2]; // { dg-error "size of array" } + p = new (p) B [MAX][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX - 1][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX - 2][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX - 99][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 1][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 2][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 3][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 4][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 5][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 6][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 7][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 2 - 8][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 4][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 4 - 1][2][2]; // { dg-error "size .\[0-9\]+. of array" } + p = new (p) B [MAX / 4 - 2][2][2]; // { dg-error "size .\[0-9\]+. of array" } // Avoid exercising data model-dependent expressions. // p = new (p) B [MAX / 8][2][2]; Index: gcc/testsuite/g++.dg/init/new46.C =================================================================== --- gcc/testsuite/g++.dg/init/new46.C (revision 268372) +++ gcc/testsuite/g++.dg/init/new46.C (working copy) @@ -37,7 +37,7 @@ char* fn2_2_x () { template char* fn2_2 () { - return new char [M][N]; // { dg-error "size of array is too large" } + return new char [M][N]; // { dg-error "size .\[0-9\]+. of array exceeds maximum object size" } } // Not instantiated (must not be diagnosed). @@ -50,7 +50,7 @@ T* fn3_x () { template T* fn3 () { const size_t a = sizeof (T); - return new T [a]; // { dg-error "size of array is too large" } + return new T [a]; // { dg-error "size .\[0-9\]+. of array exceeds maximum object size" } } Index: gcc/testsuite/g++.dg/other/large-size-array.C =================================================================== --- gcc/testsuite/g++.dg/other/large-size-array.C (revision 268372) +++ gcc/testsuite/g++.dg/other/large-size-array.C (working copy) @@ -20,7 +20,7 @@ sub (int *a) int main (void) { - int a[DIM][DIM]; /* { dg-error "size of array 'a' is too large" } */ + int a[DIM][DIM]; /* { dg-error "exceeds maximum object size" } */ return sub (&a[0][0]); /* { dg-error "declared" } */ } Index: gcc/testsuite/g++.dg/other/new-size-type.C =================================================================== --- gcc/testsuite/g++.dg/other/new-size-type.C (revision 268372) +++ gcc/testsuite/g++.dg/other/new-size-type.C (working copy) @@ -5,5 +5,5 @@ const char* foo() { - return new char[~static_cast(0)];// { dg-error "size of array" } + return new char[~static_cast(0)];// { dg-error "exceeds maximum object size" } } Index: gcc/testsuite/g++.dg/template/array30.C =================================================================== --- gcc/testsuite/g++.dg/template/array30.C (revision 268372) +++ gcc/testsuite/g++.dg/template/array30.C (working copy) @@ -1,7 +1,7 @@ template struct A { - int ar[I][I][I][I][I][I][I][I][I][I]; // { dg-error "too large" } + int ar[I][I][I][I][I][I][I][I][I][I]; // { dg-error "exceeds maximum object size" } }; A<66000> a; Index: gcc/testsuite/g++.dg/template/array32.C =================================================================== --- gcc/testsuite/g++.dg/template/array32.C (nonexistent) +++ gcc/testsuite/g++.dg/template/array32.C (working copy) @@ -0,0 +1,27 @@ +/* PR c++/87996 - "size of array is negative" error when SIZE_MAX/2 < sizeof(array) <= SIZE_MAX + { dg-do compile } + { dg-options "-ftrack-macro-expansion=0" } */ + +#define SIZE_MAX __SIZE_MAX__ + +typedef __SIZE_TYPE__ size_t; + +template struct Aszmax_d2 { + char a[N]; +}; +Aszmax_d2 aszmax_d2; + +template struct Aszmax_d2_p1 { + char a[N]; // { dg-error "exceeds maximum object size" } +}; +Aszmax_d2_p1 aszmax_d2_p1; + +template struct Aszmax { + char a[N]; // { dg-error "exceeds maximum object size" } +}; +Aszmax aszmax; + +template struct Aszmax_d2_szmax_d2 { + char a[M][N]; // { dg-error "exceeds maximum object size" } +}; +Aszmax_d2_szmax_d2 aszmaxd2_szmaxd2; Index: gcc/testsuite/g++.dg/template/dependent-name3.C =================================================================== --- gcc/testsuite/g++.dg/template/dependent-name3.C (revision 268372) +++ gcc/testsuite/g++.dg/template/dependent-name3.C (working copy) @@ -11,7 +11,7 @@ template struct A template struct B { int x[A::zero]; // { dg-error "zero" } - int y[A::minus_one]; // { dg-error "size of array|narrowing conversion" } + int y[A::minus_one]; // { dg-error "size .-1. of array is negative|narrowing conversion|not an integral constant-expression" } }; B<0> b; Index: gcc/testsuite/g++.dg/ubsan/pr81530.C =================================================================== --- gcc/testsuite/g++.dg/ubsan/pr81530.C (revision 268372) +++ gcc/testsuite/g++.dg/ubsan/pr81530.C (working copy) @@ -2,4 +2,4 @@ /* { dg-do compile } */ /* { dg-options "-fsanitize=undefined" } */ -int a[(long) 4e20]; /* { dg-error "7:size of array .a. is (too large|negative)" } */ +int a[(long) 4e20]; /* { dg-error "7:size of array .a." } */ Index: gcc/testsuite/g++.old-deja/g++.brendan/array1.C =================================================================== --- gcc/testsuite/g++.old-deja/g++.brendan/array1.C (revision 268372) +++ gcc/testsuite/g++.old-deja/g++.brendan/array1.C (working copy) @@ -2,5 +2,5 @@ // GROUPS passed array-bindings extern "C" int printf (const char *, ...); -char array[~(~((__SIZE_TYPE__)0ul)>>1)|~(((__SIZE_TYPE__)0ul)>>3)]; // { dg-error "39:size of array .array. is negative" } overflow in array dimension.* +char array[~(~((__SIZE_TYPE__)0ul)>>1)|~(((__SIZE_TYPE__)0ul)>>3)]; // { dg-error "39:exceeds maximum object size" } overflow in array dimension.* int main () { printf ("PASS\n"); return 0; } Index: gcc/testsuite/g++.old-deja/g++.mike/p6149.C =================================================================== --- gcc/testsuite/g++.old-deja/g++.mike/p6149.C (revision 268372) +++ gcc/testsuite/g++.old-deja/g++.mike/p6149.C (working copy) @@ -1,4 +1,4 @@ // { dg-do assemble } // prms-id: 6149 -int a[3 - sizeof(double)]; // { dg-error "9:size of array .a. is negative" } +int a[3 - sizeof(double)]; // { dg-error "9:size .\[0-9\]+. of array .a. exceeds maximum object size" } Index: gcc/testsuite/gcc.dg/large-size-array-3.c =================================================================== --- gcc/testsuite/gcc.dg/large-size-array-3.c (revision 268372) +++ gcc/testsuite/gcc.dg/large-size-array-3.c (working copy) @@ -16,6 +16,6 @@ sub (int *a) int main (void) { - int a[DIM][DIM]; /* { dg-error "size of array 'a' is too large" } */ + int a[DIM][DIM]; /* { dg-error "exceeds maximum object size|size of array 'a' is too large" } */ return sub (&a[0][0]); } Index: gcc/testsuite/gcc.dg/large-size-array-5.c =================================================================== --- gcc/testsuite/gcc.dg/large-size-array-5.c (revision 268372) +++ gcc/testsuite/gcc.dg/large-size-array-5.c (working copy) @@ -3,7 +3,7 @@ typedef __SIZE_TYPE__ size_t; -extern char a[((size_t)-1 >> 1) + 1]; /* { dg-error "too large" } */ +extern char a[((size_t)-1 >> 1) + 1]; /* { dg-error "is too large" } */ extern char b[((size_t)-1 >> 1)]; -extern int c[(((size_t)-1 >> 1) + 1) / sizeof(int)]; /* { dg-error "too large" } */ +extern int c[(((size_t)-1 >> 1) + 1) / sizeof(int)]; /* { dg-error "exceeds maximum object size" } */ extern int d[((size_t)-1 >> 1) / sizeof(int)]; Index: gcc/testsuite/gcc.dg/large-size-array.c =================================================================== --- gcc/testsuite/gcc.dg/large-size-array.c (revision 268372) +++ gcc/testsuite/gcc.dg/large-size-array.c (working copy) @@ -16,6 +16,6 @@ sub (int *a) int main (void) { - int a[DIM][DIM]; /* { dg-error "size of array 'a' is too large" } */ + int a[DIM][DIM]; /* { dg-error "exceeds maximum object size" } */ return sub (&a[0][0]); }