From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 622F03858C50 for ; Thu, 25 Apr 2024 14:07:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 622F03858C50 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 622F03858C50 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1714054031; cv=pass; b=A04JEWkKNDfI812CcKbHIzx5a9sMTQjwp0OPPdQILbSmYL4p/tE8qXn0s48yHkHG9drYQ4CJu3JL8GyEdXKG9E+J01+3bOLOUwRnANKVIHVTdQl0H9vkDUovmaX1xKGOASESsMgqTRApSH1k4T7hflCR3KL/kSAlva8o+mitLeg= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1714054031; c=relaxed/simple; bh=7LD+iiY6BfwXG63gtaognKLeW4fst+GRIJFaUFIRkN8=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=FheqS+dbg3FzlRVhwZKudJbL1QxOQP9t+o37GPcJNEC0JGZE+6/vQ0pYslCRyMWRcXCX2R3uUKUf0P361NhfkGhDuzQeBSxzB1EI8h0I6ngbdBGAocDTIWeqVf257LxU4VDPJFOGFoJNGQ38s6USRY1x4FfMIL5JCS5COHnWPTE= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 43PE6wrg009197; Thu, 25 Apr 2024 14:07:06 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=kmqQC4Fv2jq7N+ddvIR/O85kYY3PiDVbBF+WUK69Je4=; b=jAhiQw9vR7mKIrrg4Nj8liaVEh3pXwgYa24MJTcel0m5cAdLOyGd/SqXds4y+0+qDQTs kDOxfyaoIvvZRY0+XoNShhHCfMPsJMQ06Gjl1lM/Mjsaqc6aN8hx15s36V0DyqeWepOQ iwUVjqPE5dqzIcHnNaIj5D49oFMsaaXNyUtcOYRZ8cgXCrEbQC+IEKS6Ka2HHV50qmOD Jay4RWmveYJ4h3HoWabAhYGXPxCG7o/NJn1qF/gTWyKwhHHXst9phnp5/jAvUf9QvEQy lLWHQStriB/1sGX0xDw3wECw18at2GkosS3U4UpADpXzo/mW5gMID2jo7ss2hHav3puU KA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xm5autj7a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 25 Apr 2024 14:07:06 +0000 Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 43PDNRpP035774; Thu, 25 Apr 2024 14:07:05 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2041.outbound.protection.outlook.com [104.47.66.41]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3xm45ad6kk-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 25 Apr 2024 14:07:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Yn8zEUHSF1hj1MCS4uQosCUg+PgUKi3uj9A3GDk5TE1ac1Ss/LLFOK01emJP0L/3ui0TltJn3JPU9uozkrOZBQUl+FHoJezKVWD8tdPu4BVSckMW4I6zVVZyojr3O+NiRM9aGV0EmpD2mBw/maufRBlcWogG50ZDHyFumn9rEJ1IeYwDfjC+WNKNnS1XyeJWY6np4Ruh2FVhu31djV3iUO/dwlKdpr2MdCowTey9IbCcTva2ijruGb6pN1ZChcKnU4ThAWQEvxtV34jvcx4EIFhyXFvWgLWxRLEvb2+xRkyc9RPUCrItHnvuWqwGyOG7Jc7ON3b55jdetRhW9rCPZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kmqQC4Fv2jq7N+ddvIR/O85kYY3PiDVbBF+WUK69Je4=; b=fNtEwWNvL4dn+juE3+Y1kFYTpB/VLkVzuYIxZ2mQE6Io8XnUgPD5WIgE63Bxl4cKC5qCjjfgR7zvrrPz7hsu6SFawQnklTgfZHvmm6xeTNEsIeWFTpXHV7yQ3OzlNLOhPZnMYjT2njWx24PpkL9tp8+zCZNYIwVMAM9Cm7iPn/kip3sZSERsLUMhBNXbgRaw8Mm4PcM6mtqe/FxrXU6PJk6ltmg93eMOv1XZEKXyX5Bsbe51ySr2hSOCrrSDA4FdpJ4LM9ZVY+xoPT3kRQM95VlkfQuslLix5gjatY5RdEwsaHjajMsVyhNtoIPRL2kI+Z43VWhI6AdPGK5cda0s0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kmqQC4Fv2jq7N+ddvIR/O85kYY3PiDVbBF+WUK69Je4=; b=FaB8wp/DZTR0/t+ynye7cbszvvvXzMZ2K9eLgYlgzt+YkKTyPWVGorTJaUY4A/bO8Wz8S1sN5GUnR2OxhAZT4seUa3f7NwUBifs/9nQXo+5gritqhNniaUoaGsx4qW9g5j9ebT/5DlCCTuhz07sN4NE1FolZhYYxZaic6ZJ0f0k= Received: from CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) by PH7PR10MB6083.namprd10.prod.outlook.com (2603:10b6:510:1f9::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Thu, 25 Apr 2024 14:07:01 +0000 Received: from CY8PR10MB6538.namprd10.prod.outlook.com ([fe80::2dae:7852:9563:b4bc]) by CY8PR10MB6538.namprd10.prod.outlook.com ([fe80::2dae:7852:9563:b4bc%6]) with mapi id 15.20.7472.045; Thu, 25 Apr 2024 14:06:59 +0000 From: Qing Zhao To: jason@redhat.com, richard.guenther@gmail.com, josmyers@redhat.com Cc: uecker@tugraz.at, siddhesh@gotplt.org, keescook@chromium.org, gcc-patches@gcc.gnu.org, Qing Zhao Subject: [PATCH v2 2/3] C and C++ FE changes Date: Thu, 25 Apr 2024 14:06:47 +0000 Message-Id: <20240425140648.1407274-3-qing.zhao@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20240425140648.1407274-1-qing.zhao@oracle.com> References: <20240425140648.1407274-1-qing.zhao@oracle.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: BYAPR06CA0051.namprd06.prod.outlook.com (2603:10b6:a03:14b::28) To CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY8PR10MB6538:EE_|PH7PR10MB6083:EE_ X-MS-Office365-Filtering-Correlation-Id: 5d26b118-4426-4774-b1e7-08dc6530f947 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ta0c7GsFmDZJfKdNZ7YJHc9zjVyd5RpYr2znS4aR+kKI07hJJ/nGwxrLW4JF?= =?us-ascii?Q?WoovGD+t3jSzEEDt0qS15HpCuHBxpoyorJxbdXgFVsMcXSqiE1n+AQZ8BDrB?= =?us-ascii?Q?Ju4jZShVRA9bAPi33Od9dV3cxmshuM9RjR0a9mO4L/iC5MVOKD1H5kHeKwep?= =?us-ascii?Q?UwvBxg/hUx60foY0+Dj2e1oiv4JJI2HPeg3nldCeCO5nbPqpg0TGGWmu4kiS?= =?us-ascii?Q?L5SU2FUEfbvVA93FMKKqowGbSq0hivkSTICTX7UtLTj0U+owpzQyw9ND+A81?= =?us-ascii?Q?4KtwsJ7j3/xNNKOhfXBSwH89syNtlv7UGVkW37hya6gjOjqe2/d0Bms6nKQo?= =?us-ascii?Q?G7hEkwdnyGeMF7wmCFz9KdD7tYK2wXDFct0Qb3mHvN65NcoQQNMwk9s8Kmiy?= =?us-ascii?Q?yoQRYRIO8HZBvJdX5LFE5A+iUJBDpv0dJcZqS8CGKuP+hFmFDeYSK1RnDi6L?= =?us-ascii?Q?trBTx3adDC/AhZi2fhYzHOxPaRbp7BjCEpXDjsPxS9PxKcvTOy99xkhgKD1A?= =?us-ascii?Q?s9TXErfGIAbTJZQ072ux8LUC0POYDMNIzs+mvnz6jSMPWnqTRJIMdlMWc4FY?= =?us-ascii?Q?sYjp9uGIoNQ61AYFj99dH1DdqS0+uojSLVP26FGdq/eAKJd+40TxOAZiP8vo?= =?us-ascii?Q?/7SP1NM+SFA2u0RG5pnUoX/xzEX4/z3RgzTi3ThpUt1sxB30eQMIbbLG4bO0?= =?us-ascii?Q?HnQsBe+uFz+o2WEQsrKiQTHrSG3yfl9iU3V8YRu6W/Fn50LoXV7euSpX+Ost?= =?us-ascii?Q?7NJvGsPXxgnrtzV3O/P/hhb3r7ujtN8cJ3dfqyD91LzHLQc7EJqFING1uSGV?= =?us-ascii?Q?r7osqWMY0xmBGMhhorRKUtaXQ2H0CAgT9vpfLqBGj4CwzKGouRHhXQIHvfns?= =?us-ascii?Q?cu4CBdX7cduXGuVi6d0Vj1V75rKIe9ZaU68S0Snhtirv0CG2qP5VmQTcXsCj?= =?us-ascii?Q?aRLQRTRbKKyTHY7Izhndp/OGA81OvrBsexH0/Fa7WL1Bneox9pUzdO/vkTFZ?= =?us-ascii?Q?WiSst7rx6FXbq0HePfV8j6ePb5whgDP5epSs39RnbdRptIETdx2JPVZgjBbf?= =?us-ascii?Q?In+BOk0BQe5XAkeb0mxXg/QcwzeDMcbBHM/2E2gIaKiVcdqUgxVYR+T9GCGA?= =?us-ascii?Q?iN1xrQ4jmFJEN96Aj4DN504dwCnsHOfI2f3E7sDXOQY96Nju6JKZTM7uzIYa?= =?us-ascii?Q?lhNME/FD96gCjTDSOTtDWYKvZtnztI+YDhjbCYQKx0nkG/SXWXMEPzZA4CM?= =?us-ascii?Q?=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY8PR10MB6538.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(1800799015)(376005)(366007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9Sn895HHu5Th+Ez9hRcPs1xWhPcGynBbcfeMKiJ39zopEX6P/hfRIwJs4h9H?= =?us-ascii?Q?mMdlrbu0ImDcfgbDWHtlLnpQCEFGq2mH4af2Uv+7cskErxt27JSDC7TgAmQ7?= =?us-ascii?Q?Wwj/DdV8wqAGmSCxLVE+lj8kLOE0OU9hRQlv6WcWVeDVUMpeNgMgTAJGygtw?= =?us-ascii?Q?Wdr+5h2CNUoJnrUb9U0suFf1xklD3JCsjbELo5wBFioNLwBC2Jzh5L4zu3fv?= =?us-ascii?Q?MMH+goHMtHbrgJdClXhqC0wrxXASjftFVHtJtzuoXlOgELo0gER6a2sIrdsD?= =?us-ascii?Q?LFYeFMRA66HUA3kKyP3CiG+SjhpANXir1kajFBxmzXRFkSHCSrDNywgUQ1KE?= =?us-ascii?Q?8KVUTbfO/K2EVUOkE9k+MojBnrv5XumT6aJS8Cqnb1LgUPu00esLOc/XUPdN?= =?us-ascii?Q?G1tZKmBGwsefUbzCxlOAC0SiQQxxwK3FId1oA349NiHoYXC4vasvo+wkscTy?= =?us-ascii?Q?DLTmt9Lfe+SZbkqgAILz5S7/rrf6hVbYiB6tma9SZ0PCHqfWEOP0iFWzuQOU?= =?us-ascii?Q?GZdfUSUDod7Rlo+dh8O1qigeKLUw3j1DAPBkbOqccI5XUCY41K5I1NfW8JVF?= =?us-ascii?Q?YlSOJi5saygl4wu45jZwI3+QlqBV52L13ltA4sMO1OaVEU1kLs4GiSukAhf2?= =?us-ascii?Q?3wvCrpPkTyorGsrkNlVryZvBlhGw+Fqy4OYMhj6M47giI0sRHUK6QDW7T8mF?= =?us-ascii?Q?1SWaUZFgxraZUyO+BySvthvbBOAEz8JFsz4Tc2urhKI5N8OPlmS0ERaHeur/?= =?us-ascii?Q?FPz2j2OTJxFWO8hwtFMNVIwlwUe4L3W51Y+vKzzHLlHGCIH97kjdG+I0nIRx?= =?us-ascii?Q?nZ41U0/ufahLtUn9c2ozqUi/nmq6UthT58oM1BthM2S7f5IF8IvknaGvgh+F?= =?us-ascii?Q?1zNcLKMN2dSZNLKlt22GSvpr6J0bs5SPSMN7fxSVxLvbhU9VcrW5ZUhYm0gF?= =?us-ascii?Q?XG9VRqlGkxJmxe0OWDrGhgtjlsAdem5NlZbMXQSdoAMT6PVejSvUPhaWgPCU?= =?us-ascii?Q?sc3NiQjxF+j5OE0FoV+x7gjGiI2fnMIy/VYRAxCeWjcfV0seP1M3O0zab2Kg?= =?us-ascii?Q?9XvVF716xPRh49AsBwYgEOKIrsQq0tRlEqLMvMmjQmRLrLp2ujLPZik/WPTs?= =?us-ascii?Q?NSvJjuk450lCCuRcNPkgRQImu/6SPzno4+TRTi+J/m6PSINaOkRJnCErklSG?= =?us-ascii?Q?oKPiIpXcE5t+Enh4H6tIne3Z8PCq/GAS4R1xBNnDt/Rkpokwc/wPlFv0Za4L?= =?us-ascii?Q?Shk+9knN5RPySdKqHbWh7YXp9jZZg/kt7hDVHr5XZS86jEW8BGk6HqKhSWzH?= =?us-ascii?Q?c5cV45M1n6NMsITdq0m/kMpTYDimatiXOZ9qN8Dp67I3n0uJ3rDKKs69uCl4?= =?us-ascii?Q?/X8xUw0qHc4Y4IwldipbjZKFQHgwTevHvoFudUzkprncSvUkk0/mqmyObKnr?= =?us-ascii?Q?KKuJ3M7HoWrwwBtkC8SSDRMNtmEO+U/jFZiqBjAsBXWTXyhECgXvnlcrjvKN?= =?us-ascii?Q?dPzi1wEn9d9M5aXXB429jKVWFUPQRjGA3NExKWPzfMS0G72ZuRldsDLQoaey?= =?us-ascii?Q?2wynz5+bRYLm5FPREktRUJ4gvDglqbJlH/jELxWj?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Eze4Mkvkjsle4wKqGKRpwgGG1o3UBpl3ODw6SShTpzEoSbF/4ZpqLjy/bKzTX9uM+3Bp0WGbSXsx05BiaqSt4+30mF2+osWSRLJid7Bx0KkgU/5KMtW++AdlEXrj9yQKdSKTlgx04UeGfPcjY9jWui27aXTqqKOlp41kK1spHxXJawS2/GjzGEKCbE2xAozYmwtW+pkcf6twalIqUxe79sCv/g5u+L2y0GXdw//wRPhOI5omJuHkkzAhoaoeH2FMVNOrRpm7xxo1vW3Zu/AxkVw1ARuxNpjtKAaZJykRlonfOPRNoYGe2qCcqAwG6TlYPD9xPIQr9DaVZ1gYnQMhzJopwSa/6IyHkuvOMt8cTsPxhspvdP0/MiDQWzYt7o6l4aY4f154JiBqmo5ZmSt1AWM7wjmC89vtGnltBgQKcMuZ90RCK9xxRuPxsm9hosW+YcSTNTZM5JqBzeVdoFo5FMHguC0QLQzIXeEpiCcOm55VH+kiPZWD06kotKK2Wivdp29tX/cqoBLysyySKoPViSjxATvFrRSYWsJNtns+7rD/NJYXTVyQkPhgQ7oqqLgxCKNr9GamcREkoM7HApuQN9kzcNKTCAn9Zsa/TxuJbSw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5d26b118-4426-4774-b1e7-08dc6530f947 X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB6538.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2024 14:06:59.6930 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jrLgURYMZT6JNIl5aU1PDT3muh7s0fJNdnHwSUfZVCtGW2qEeMVfDDQgZUEsBW2THF/5BhAyGcvpyX9evPo0tQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6083 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.650,FMLib:17.11.176.26 definitions=2024-04-25_13,2024-04-25_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 suspectscore=0 adultscore=0 malwarescore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2404250102 X-Proofpoint-ORIG-GUID: GgPFI8Jh-atLgbV3aT78rdcrQH9ZRiEi X-Proofpoint-GUID: GgPFI8Jh-atLgbV3aT78rdcrQH9ZRiEi X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: to support flexible array members in unions and alone in structures. Adjust testcases for flexible array member in union and alone in structure extension. gcc/c/ChangeLog: * c-decl.cc (finish_struct): Change errors to pedwarns for the cases flexible array members in union or alone in structures. gcc/cp/ChangeLog: * class.cc (diagnose_flexarrays): Change error to pdewarn for the case flexible array members alone in structures. * decl.cc (grokdeclarator): Change error to pdewarn for the case flexible array members in unions. gcc/ChangeLog: * stor-layout.cc (place_union_field): Use zero sizes for flexible array member fields. gcc/testsuite/ChangeLog: * c-c++-common/builtin-clear-padding-3.c: Adjust testcase. * g++.dg/ext/flexary12.C: Likewise. * g++.dg/ext/flexary19.C: Likewise. * g++.dg/ext/flexary2.C: Likewise. * g++.dg/ext/flexary3.C: Likewise. * g++.dg/ext/flexary36.C: Likewise. * g++.dg/ext/flexary4.C: Likewise. * g++.dg/ext/flexary5.C: Likewise. * g++.dg/ext/flexary8.C: Likewise. * g++.dg/torture/pr64280.C: Likewise. * gcc.dg/20050620-1.c: Likewise. * gcc.dg/940510-1.c: Likewise. --- gcc/c/c-decl.cc | 16 ++---- gcc/cp/class.cc | 11 ++-- gcc/cp/decl.cc | 7 ++- gcc/stor-layout.cc | 9 +++- .../c-c++-common/builtin-clear-padding-3.c | 10 ++-- gcc/testsuite/g++.dg/ext/flexary12.C | 6 +-- gcc/testsuite/g++.dg/ext/flexary19.C | 42 +++++++-------- gcc/testsuite/g++.dg/ext/flexary2.C | 2 +- gcc/testsuite/g++.dg/ext/flexary3.C | 2 +- gcc/testsuite/g++.dg/ext/flexary36.C | 2 +- gcc/testsuite/g++.dg/ext/flexary4.C | 54 +++++++++---------- gcc/testsuite/g++.dg/ext/flexary5.C | 4 +- gcc/testsuite/g++.dg/ext/flexary8.C | 8 +-- gcc/testsuite/g++.dg/torture/pr64280.C | 2 +- gcc/testsuite/gcc.dg/20050620-1.c | 2 +- gcc/testsuite/gcc.dg/940510-1.c | 4 +- 16 files changed, 91 insertions(+), 90 deletions(-) diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 345090dae38b..947f3cd589eb 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -9471,11 +9471,8 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, if (flexible_array_member_type_p (TREE_TYPE (x))) { if (TREE_CODE (t) == UNION_TYPE) - { - error_at (DECL_SOURCE_LOCATION (x), - "flexible array member in union"); - TREE_TYPE (x) = error_mark_node; - } + pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic, + "flexible array member in union is a GCC extension"); else if (!is_last_field) { error_at (DECL_SOURCE_LOCATION (x), @@ -9483,12 +9480,9 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, TREE_TYPE (x) = error_mark_node; } else if (!saw_named_field) - { - error_at (DECL_SOURCE_LOCATION (x), - "flexible array member in a struct with no named " - "members"); - TREE_TYPE (x) = error_mark_node; - } + pedwarn (DECL_SOURCE_LOCATION (x), OPT_Wpedantic, + "flexible array member in a struct with no named " + "members is a GCC extension"); } if (pedantic && TREE_CODE (t) == RECORD_TYPE diff --git a/gcc/cp/class.cc b/gcc/cp/class.cc index 5f258729940b..0c8afb72550f 100644 --- a/gcc/cp/class.cc +++ b/gcc/cp/class.cc @@ -7624,6 +7624,7 @@ diagnose_flexarrays (tree t, const flexmems_t *fmem) bool diagd = false; const char *msg = 0; + const char *msg_fam = 0; if (TYPE_DOMAIN (TREE_TYPE (fmem->array))) { @@ -7649,15 +7650,19 @@ diagnose_flexarrays (tree t, const flexmems_t *fmem) if (fmem->after[0]) msg = G_("flexible array member %qD not at end of %q#T"); else if (!fmem->first) - msg = G_("flexible array member %qD in an otherwise empty %q#T"); + msg_fam = G_("flexible array member %qD in an otherwise" + " empty %q#T is a GCC extension"); - if (msg) + if (msg || msg_fam) { location_t loc = DECL_SOURCE_LOCATION (fmem->array); diagd = true; auto_diagnostic_group d; - error_at (loc, msg, fmem->array, t); + if (msg) + error_at (loc, msg, fmem->array, t); + else + pedwarn (loc, OPT_Wpedantic, msg_fam, fmem->array, t); /* In the unlikely event that the member following the flexible array member is declared in a different class, or the member diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 65ab64885ff8..9a91c6f80da1 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -14566,10 +14566,9 @@ grokdeclarator (const cp_declarator *declarator, if (ctype && (TREE_CODE (ctype) == UNION_TYPE || TREE_CODE (ctype) == QUAL_UNION_TYPE)) - { - error_at (id_loc, "flexible array member in union"); - type = error_mark_node; - } + pedwarn (id_loc, OPT_Wpedantic, + "flexible array member in union is a GCC extension"); + else { /* Array is a flexible member. */ diff --git a/gcc/stor-layout.cc b/gcc/stor-layout.cc index e34be19689c0..10c0809914cd 100644 --- a/gcc/stor-layout.cc +++ b/gcc/stor-layout.cc @@ -1245,13 +1245,18 @@ place_union_field (record_layout_info rli, tree field) && TYPE_TYPELESS_STORAGE (TREE_TYPE (field))) TYPE_TYPELESS_STORAGE (rli->t) = 1; + /* We might see a flexible array member field (with no DECL_SIZE_UNIT), use + zero size for such field. */ + tree field_size_unit = DECL_SIZE_UNIT (field) + ? DECL_SIZE_UNIT (field) + : build_int_cst (sizetype, 0); /* We assume the union's size will be a multiple of a byte so we don't bother with BITPOS. */ if (TREE_CODE (rli->t) == UNION_TYPE) - rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field)); + rli->offset = size_binop (MAX_EXPR, rli->offset, field_size_unit); else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE) rli->offset = fold_build3 (COND_EXPR, sizetype, DECL_QUALIFIER (field), - DECL_SIZE_UNIT (field), rli->offset); + field_size_unit, rli->offset); } /* A bitfield of SIZE with a required access alignment of ALIGN is allocated diff --git a/gcc/testsuite/c-c++-common/builtin-clear-padding-3.c b/gcc/testsuite/c-c++-common/builtin-clear-padding-3.c index d16cc6aad05f..a4f49f26db14 100644 --- a/gcc/testsuite/c-c++-common/builtin-clear-padding-3.c +++ b/gcc/testsuite/c-c++-common/builtin-clear-padding-3.c @@ -2,14 +2,12 @@ /* { dg-do compile } */ /* { dg-options "" } */ -union U { int a; char b[] __attribute__((aligned (2 * sizeof (int)))); }; /* { dg-error "flexible array member in union" } */ +union U { int a; char b[] __attribute__((aligned (2 * sizeof (int)))); }; struct V { int a; union U b; }; -struct W { int a; union U b; int c; }; void -foo (union U *u, struct V *v, struct W *w) +foo (union U *u, struct V *v) { - __builtin_clear_padding (u); - __builtin_clear_padding (v); - __builtin_clear_padding (w); + __builtin_clear_padding (u); /* { dg-error "flexible array member" "does not have well defined padding bits" } */ + __builtin_clear_padding (v); /* { dg-error "flexible array member" "does not have well defined padding bits" } */ } diff --git a/gcc/testsuite/g++.dg/ext/flexary12.C b/gcc/testsuite/g++.dg/ext/flexary12.C index b0964948731d..6ba4b6417135 100644 --- a/gcc/testsuite/g++.dg/ext/flexary12.C +++ b/gcc/testsuite/g++.dg/ext/flexary12.C @@ -6,7 +6,7 @@ // { dg-options "-Wno-pedantic" } struct A { - int a []; // { dg-error "flexible array member .A::a. in an otherwise empty .struct A." } + int a []; }; void f1 () @@ -40,7 +40,7 @@ void f2 () } struct D { - int a []; // { dg-error "flexible array member .D::a. in an otherwise empty .struct D." } + int a []; D (); }; @@ -52,7 +52,7 @@ D::D (): // { dg-error "initializer for flexible array member" } template struct C { - T a []; // { dg-error "flexible array member" } + T a []; }; void f3 () diff --git a/gcc/testsuite/g++.dg/ext/flexary19.C b/gcc/testsuite/g++.dg/ext/flexary19.C index abfbc43028af..9a06f9ca758f 100644 --- a/gcc/testsuite/g++.dg/ext/flexary19.C +++ b/gcc/testsuite/g++.dg/ext/flexary19.C @@ -12,7 +12,7 @@ struct S1 // The following declares a named data member of an unnamed struct // (i.e., it is not an anonymous struct). struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } s; }; @@ -21,7 +21,7 @@ struct S2 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } s[1]; }; @@ -30,7 +30,7 @@ struct S3 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } s[]; }; @@ -39,7 +39,7 @@ struct S4 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } s[2]; }; @@ -48,7 +48,7 @@ struct S5 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } s[1][2]; }; @@ -57,7 +57,7 @@ struct S6 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } s[][2]; }; @@ -66,7 +66,7 @@ struct S7 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } *s; }; @@ -75,7 +75,7 @@ struct S8 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } **s; }; @@ -84,7 +84,7 @@ struct S9 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } *s[1]; }; @@ -93,7 +93,7 @@ struct S10 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } *s[]; }; @@ -102,7 +102,7 @@ struct S11 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } **s[1]; }; @@ -111,7 +111,7 @@ struct S12 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } **s[]; }; @@ -120,7 +120,7 @@ struct S13 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } **s[2]; }; @@ -129,7 +129,7 @@ struct S14 int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } &s; }; @@ -138,7 +138,7 @@ struct S15 int i; typedef struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } T15; }; @@ -159,8 +159,8 @@ struct S17 { int i; - union { // anonymous union - int a[]; // { dg-error "flexible array member in union" } + union { // { dg-warning "invalid use" } + int a[]; // { dg-warning "flexible array member in union" } }; }; @@ -209,7 +209,7 @@ struct S22 struct S22S { static int i; - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } s; }; @@ -218,7 +218,7 @@ struct S23 struct { // { dg-warning "10:ISO C\\+\\+ prohibits anonymous struct" } static int i; // { dg-error "static data member" } - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } }; }; @@ -227,7 +227,7 @@ struct S24 static int i; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } s; }; @@ -252,7 +252,7 @@ struct S26 }; struct { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; // { dg-warning "in an otherwise empty" } } s; }; diff --git a/gcc/testsuite/g++.dg/ext/flexary2.C b/gcc/testsuite/g++.dg/ext/flexary2.C index c0253777a1e9..7095a3b0fb2d 100644 --- a/gcc/testsuite/g++.dg/ext/flexary2.C +++ b/gcc/testsuite/g++.dg/ext/flexary2.C @@ -13,7 +13,7 @@ struct A { struct B { B() {} - A a[]; // { dg-error "extension|flexible array .* in an otherwise empty" } + A a[]; }; struct C { diff --git a/gcc/testsuite/g++.dg/ext/flexary3.C b/gcc/testsuite/g++.dg/ext/flexary3.C index 8344b42dd163..7785c9b190a4 100644 --- a/gcc/testsuite/g++.dg/ext/flexary3.C +++ b/gcc/testsuite/g++.dg/ext/flexary3.C @@ -11,7 +11,7 @@ // { dg-options "" } struct s { - char c[]; // { dg-error "flexible array member .* in an otherwise empty" } + char c[]; }; int main() diff --git a/gcc/testsuite/g++.dg/ext/flexary36.C b/gcc/testsuite/g++.dg/ext/flexary36.C index 5bb827cfd0e0..87d6fb092100 100644 --- a/gcc/testsuite/g++.dg/ext/flexary36.C +++ b/gcc/testsuite/g++.dg/ext/flexary36.C @@ -25,7 +25,7 @@ struct { union { - int a[]; // { dg-error "flexible array member in union" } + int a[]; int b; } du = { 1 }; diff --git a/gcc/testsuite/g++.dg/ext/flexary4.C b/gcc/testsuite/g++.dg/ext/flexary4.C index bd28cf55de2b..a87b7e71edb6 100644 --- a/gcc/testsuite/g++.dg/ext/flexary4.C +++ b/gcc/testsuite/g++.dg/ext/flexary4.C @@ -11,79 +11,79 @@ #include "flexary.h" struct Sx { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; }; // Verify that non-data members or static data members either before // or after a flexible array member in an otherwise empty struct don't // suppress the diagnostic. struct Sx2 { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; typedef int I; }; struct Sx3 { typedef int I; - int a[]; // { dg-error "in an otherwise empty" } + int a[]; }; struct Sx4 { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; enum E { e }; }; struct Sx5 { enum E { e }; - int a[]; // { dg-error "in an otherwise empty" } + int a[]; }; struct Sx6 { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; static int i; }; struct Sx7 { static int i; - int a[]; // { dg-error "in an otherwise empty" } + int a[]; }; struct Sx8 { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; Sx8 () { } }; struct Sx9 { Sx9 () { } - int a[]; // { dg-error "in an otherwise empty" } + int a[]; }; struct Sx10 { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; virtual ~Sx10 () { } }; struct Sx11 { virtual ~Sx11 () { } - int a[]; // { dg-error "in an otherwise empty" } + int a[]; }; struct Sx12 { - int a[]; // { dg-error "in an otherwise empty" } + int a[]; virtual void foo () = 0; }; struct Sx13 { virtual void foo () = 0; - int a[]; // { dg-error "in an otherwise empty" } + int a[]; }; struct Sx14 { - int a[][1]; // { dg-error "in an otherwise empty" } + int a[][1]; }; struct Sx15 { typedef int A[]; - A a; // { dg-error "in an otherwise empty" } + A a; }; // Verify also that a zero-size array doesn't suppress the diagnostic. @@ -91,7 +91,7 @@ struct Sx16 { // a_0 below is diagnosed with -Wpedantic only and emits // warning: ISO C++ forbids zero-size arrays int a_0 [0]; - int a_x []; // { dg-error "in an otherwise empty" } + int a_x []; }; struct Sx17 { @@ -123,7 +123,7 @@ struct Sx19 { // so doesn't contribute its member to that of the enclosing struct. struct Sx20 { struct S { int i; }; - int a_x []; // { dg-error "in an otherwise empty" } + int a_x []; }; struct Sx21 { @@ -148,12 +148,12 @@ struct Sx24 { struct Sx25 { struct S { }; - S a_x []; // { dg-error "flexible array member" } + S a_x []; }; struct Sx26 { struct { } - a_x []; // { dg-error "flexible array member" } + a_x []; }; struct Sx27 { @@ -193,13 +193,13 @@ struct Sx32 { ASSERT_AT_END (Sx32, a); struct Sx33 { - int a []; // { dg-error "otherwise empty" } + int a []; friend int foo (); }; struct Sx34 { friend int foo (); - int a []; // { dg-error "otherwise empty" } + int a []; }; // Verify that intervening non-field declarations of members other @@ -277,7 +277,7 @@ ASSERT_AT_END (Sx44, a); struct S_S_S_x { struct A { struct B { - int a[]; // { dg-error "flexible array member" } + int a[]; } b; } a; }; @@ -300,7 +300,7 @@ struct NotAnon1 { // The following is not an anonymous struct -- the type is unnamed // but the object has a name. struct { - int bad[]; // { dg-error "otherwise empty" } + int bad[]; } name; }; @@ -328,7 +328,7 @@ ASSERT_AT_END (Anon3, good); struct Anon4 { struct { - int in_empty_struct[]; // { dg-error "in an otherwise empty" } + int in_empty_struct[]; }; }; @@ -366,7 +366,7 @@ struct Six { ASSERT_AT_END (Six, a); class Cx { - int a[]; // { dg-error "flexible array member" } + int a[]; }; class Cix { @@ -390,7 +390,7 @@ struct S0i { struct S_a0_ax { int a0[0]; - int ax[]; // { dg-error "flexible array member" } + int ax[]; }; struct S_a0_i_ax { @@ -417,7 +417,7 @@ struct Si_ax_a0 { struct S_u0_ax { union { } u[0]; - int ax[]; // { dg-error "flexible array member" } + int ax[]; }; struct S_a1_s2 { diff --git a/gcc/testsuite/g++.dg/ext/flexary5.C b/gcc/testsuite/g++.dg/ext/flexary5.C index d5ec13204966..3fb88c0e8a2c 100644 --- a/gcc/testsuite/g++.dg/ext/flexary5.C +++ b/gcc/testsuite/g++.dg/ext/flexary5.C @@ -13,7 +13,7 @@ struct S_no_diag: T { template struct STx_1: T { - char a[]; // { dg-error "flexible array member" } + char a[]; }; template @@ -37,7 +37,7 @@ struct E1: E<0>, E<1> { }; struct E2: E<2>, E<3> { }; struct D1: E1, E2 { - char a[]; // { dg-error "flexible array member" } + char a[]; }; struct NE { size_t i; }; diff --git a/gcc/testsuite/g++.dg/ext/flexary8.C b/gcc/testsuite/g++.dg/ext/flexary8.C index 7a1811deaff2..a0477f0fa410 100644 --- a/gcc/testsuite/g++.dg/ext/flexary8.C +++ b/gcc/testsuite/g++.dg/ext/flexary8.C @@ -4,26 +4,26 @@ union U_i_ax { int i; - int a[]; // { dg-error "flexible array member in union" } + int a[]; }; struct SU1 { union { - int a[]; // { dg-error "flexible array member in union" } + int a[]; }; }; struct SU2 { int n; union { - int a[]; // { dg-error "flexible array member in union" } + int a[]; }; }; struct SU3 { union { int n; - int a[]; // { dg-error "flexible array member in union" } + int a[]; }; }; diff --git a/gcc/testsuite/g++.dg/torture/pr64280.C b/gcc/testsuite/g++.dg/torture/pr64280.C index 5c569e864b4c..1ea70c4e766e 100644 --- a/gcc/testsuite/g++.dg/torture/pr64280.C +++ b/gcc/testsuite/g++.dg/torture/pr64280.C @@ -15,7 +15,7 @@ public: typedef int jmp_buf[]; struct C { - jmp_buf cond_; // { dg-error "flexible array member" } + jmp_buf cond_; }; class F { diff --git a/gcc/testsuite/gcc.dg/20050620-1.c b/gcc/testsuite/gcc.dg/20050620-1.c index befdd9636500..0a9e1d478454 100644 --- a/gcc/testsuite/gcc.dg/20050620-1.c +++ b/gcc/testsuite/gcc.dg/20050620-1.c @@ -5,7 +5,7 @@ void foo (void) { - struct { int i[]; } u; /* { dg-error "flexible array member" } */ + struct { int i[]; } u; } void diff --git a/gcc/testsuite/gcc.dg/940510-1.c b/gcc/testsuite/gcc.dg/940510-1.c index 46183831d096..9bcd7881f715 100644 --- a/gcc/testsuite/gcc.dg/940510-1.c +++ b/gcc/testsuite/gcc.dg/940510-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ /* { dg-options "-std=c89 -pedantic" } */ struct { int a[]; } x = { 0 }; /* { dg-warning "ISO C90 does not support flexible array members" } */ -/* { dg-error "flexible array member in a struct with no named members" "" { target *-*-* } .-1 } */ - +/* { dg-warning "flexible array member in a struct with no named members is a GCC extension" "" { target *-*-* } .-1 } */ +/* { dg-warning "initialization of a flexible array member" "" { target *-*-* } .-2 } */ -- 2.31.1