From patchwork Wed May 1 15:19:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qing Zhao X-Patchwork-Id: 1930255 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=AXo9sWvY; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=EDqFEi0t; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VV13349Gdz1ymc for ; Thu, 2 May 2024 01:20:15 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BE767385842D for ; Wed, 1 May 2024 15:20:13 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 6C73D3858C5F for ; Wed, 1 May 2024 15:19:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6C73D3858C5F 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 6C73D3858C5F 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=1714576778; cv=pass; b=bytX3rfly1dsYGcPNDw3IBQR2zMwrBensPPyrnIftdUrKG2NLQcG2DceC4/hWAZ+UJ5ypTxMJ0Ah5E7UOU60XnwlFuMpYqEc6vjvVH0ZcHeBd4FHKA6tjvkV+YSBJBqzIdQwaMMIo7T9MZRkvaIW9XhXBymLtDZGEwzSuSEdMaU= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1714576778; c=relaxed/simple; bh=6oUW2R+bJUBL/Zjg9LLO8CH/1RsLDlvHN9ogaFrF2bA=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=DZENqCFiZUOUy0O3/8iIyWNEt4JqjdMQPg4v1IsvThdT9+sBZojdVseilXueufUyP8u9FSpP7jMHqWL8XDUaplEn59mmjKvxkzH76t1nPsIv3/FT8EkpeaFS8am/ztM9lcEpqymPh82QEx+KlI4VHNDqAOci15JqUPyzWLrO3UY= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 441ARxAU032762; Wed, 1 May 2024 15:19:35 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=RfWS0bbbQXuQoMO30xR0U6tJET3SZVol5UI7GNAjA1M=; b=AXo9sWvY5M5JZyGMfwfLzjdqM3eNwu988+TWdgybFuaSBuovvAu4VKU8eoSagS5TvYev sutek/kj647EA+ZzbQPdrdiFUjYY6hKFQtUBt2+u7II4iL/e8vOUFA2cBpa8Ok6y5rou adA91xpRiqzDLUFgWxaVeDotBH07zAXjIohoDq5IGD8XNPOAKD8HSmLq4RdV4TFq8QmU /00tQ/rg5L2N0eLBL0HYuCcABiuY5Z5Gy8RF3nSIsHxrZO9wi1CUvxytaJDJdd4lEaho m1GMnEWoQahCGjX1s172UY+tOBkRmHTXBQZ7YhYn5CnFNKuLegt+AwKxBPR1IQ2XTkt2 Yg== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xrqseyb2d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 01 May 2024 15:19:35 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 441DfjUx005034; Wed, 1 May 2024 15:19:34 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2168.outbound.protection.outlook.com [104.47.57.168]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3xrqt8xadx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 01 May 2024 15:19:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cZ3GkNMi5vq1BWFiMmtreG44egnM+XnndTGDyBQiJBXRQnwlMbfrCXPpnOTs5i4hlgNdDoG4urpNndqafss/8PPXXAPW8Y+yf1G+wGnrp9FgTQZ/YwGiYt2PenDIBw80W0KSGVnV0gbHj8MNyTnVusOKV9wj8rI7uh4rS0m7Sev++VxCZga5bUsixyotIopvA5Z1OQTBXX/2Tr5E2oX8XAbMvtSTFMDDRV6rNokCfYhC/d6MMlVV8fqWPS3SMzoMu7vCzOZB+5YhjvAAzHI+oA5a3y4qpPDwx41oGrCI1fhO2jBoKrYiLY+gScIX+2A0qGwBC7RgUFI2QPYtDrJuiw== 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=RfWS0bbbQXuQoMO30xR0U6tJET3SZVol5UI7GNAjA1M=; b=Tz9HwL53v7dhBPzzet3WsWA0+rFN3mYn4hVTg2/8oJjVonOVCXXHtfUOQplgW0XtIWcBQWQGjWXQH6hGRl2n7j+tIdIkQx+w1N6EYg2EDv9zH/dNk3/Ip/j/T+S0/d9Y33Dmd3GIcikXt0/IR4LKp4d2bzI4c7oION+Q9oMu0FukuaXbPLf5pJuwZ2vFunuwgcSD54OE0Sbm/Ug8RBhuhK6Vree9MIjlxI0D7qS+I3c6PkA5aEtsWK63CV6y7CuFgPXHqW8xuwhEDI5s1OdCDhIucziffVZTGQ9P2GwVD4NewfOVlvQ1rN7SG1M6yKlNh9fi5Dj/RVIeeNB8zpF2qw== 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=RfWS0bbbQXuQoMO30xR0U6tJET3SZVol5UI7GNAjA1M=; b=EDqFEi0tFEYiUxffU5Go9wuBMiXGvtWC8YIWSDmnO2iokXMYHfjaHHhv3C5njmEJKIKb8ihZdoYtzSMrxN9xOB5dzr7teAabwYMW8hWx3gU5IPxm90jFvo2So3SAH1bDobydZ9cjB/9ug7ENOx9lEknx9wyWpaUoDMb11RxpZqU= Received: from CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) by SA2PR10MB4794.namprd10.prod.outlook.com (2603:10b6:806:113::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.28; Wed, 1 May 2024 15:19:29 +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.7519.035; Wed, 1 May 2024 15:19:29 +0000 From: Qing Zhao To: jason@redhat.com, josmyers@redhat.com, richard.guenther@gmail.com, siddhesh@gotplt.org Cc: uecker@tugraz.at, keescook@chromium.org, gcc-patches@gcc.gnu.org, Qing Zhao Subject: [PATCH v4 1/4] Allow flexible array members in unions and alone in structures [PR53548] Date: Wed, 1 May 2024 15:19:20 +0000 Message-Id: <20240501151923.2895074-2-qing.zhao@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20240501151923.2895074-1-qing.zhao@oracle.com> References: <20240501151923.2895074-1-qing.zhao@oracle.com> X-ClientProxiedBy: BL1PR13CA0109.namprd13.prod.outlook.com (2603:10b6:208:2b9::24) To CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY8PR10MB6538:EE_|SA2PR10MB4794:EE_ X-MS-Office365-Filtering-Correlation-Id: 23838dda-f613-45a0-99a8-08dc69f218bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|1800799015|366007|376005; X-Microsoft-Antispam-Message-Info: Lm7tpgnUhyF414XPZUzYcFLJqZE04nEc8ahKllvfaJJwlYkU6TTJToAtrduYZ9MTO1HlzgrHbzcpinkJDL9/Ku3dD9Zpm/AGMoWtBGpq9anc/z/OulDNbzXeBogyCHxdeQHyKCLOqqcHyBfRued6OwVuETZ1K9xcdRuyMyifqz4onAhgcb6iJLHnGCB46hHMRkoyNJtqAAhQSxD1S/3eNPCeRP5Fd+v5IAMFOiCdeIJ05fB9X1VnNU5IfOc0m4KP2QpPIIL1M9GqUOJCvH/TN9u5aPDWzh/IhcCVwRDRDS62xXmmDaurXyL3R9AaaUuMcUOQWjy9JPkbM8bnh/0XR/aFqqkJJZFTlIONt+Cy6H0ZWjE+wync+Oes8ms8ZlQ6U12vC1+nX56kMk1iIAWc/NOONaAtqCVr456q2fPz4aw57fyxSq1Q1MBQj39vSSK+VocUYZqAlnvLZQa3lRp8wj6v8ifr7cWM1jj26hbHlFZ64Q8vznTEhvjySMLZcQDOs5zsCN39cYo5FKH0MqVEifKoWPB4vWsESS+CMBHW5vgF61LG7nwsjydPP4oN2wfPsN/eScMMad6oFK6aBZq7vwZR1VO8X1rHJ5WBJqEH7y+dMKjnPB0Dxi0uxsWDUg/n1lAW295jlV6Yvfz3fX8i6iV8SNxDN4JOHTIZiD2FF3SdKHS3CSq9Z7feMxSb2Prfy7cYcsOebNamegM7FA8oBQGsOG14v71sn89zqza9Kp7B9mG97GtCS1meXzbwJ8CnPLBlI72NLolv+6vmONHfCdumXnU7XfGrAnzHtsZdFqEqoOAp6CAMuf5T4M642Bw1JbFMM4jldMY1wenoQHWEhHq29LvOWTjqrKP7ScH7+nHoyQ3VpDDuOW+9XURNdaOKjj0O9fPBr27XzRPMiqJrEVZ8Ilk+lIKlu42QonBwHvInVA8FDQm3vKZUgWbkz/jtuhIh3VzesvAJOLGakACIAIwRLunaT/62o8gIbri/1mO9rUXlFeZCHj5qD7j20snOeBFlVqSviJ5lNw8p3zmEJA2iAY6c5vfyxC0/RWEXIEc82kP6HebkFyrBIfgHHMp1gTUHYDERLvIQBcXjwsipGTY3j24oGFc6ZJQRg8Ng8o52jW+NuK6pzKDSO1APjiQuUd0+xgmgbxFcIJmnQ3JD/N/5/VQL+cZR/zUGgN0nFAbnJB+fZ4RandeRPIdy05BMA5Ei4aJoCI5R+tdch6uCdjRE1JNb4l3YUr5/r69OtzjuJ2nyhY+sVjglWaT9sWQWRjqfsPdRVQqO2b9Vk4Jng9SmJgmXxcGmdOEXn9kaxbw= 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)(366007)(376005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xU2eQ3DthnIc+AFB3p6+HlIEVsiXw9mgwu9ok809uxkbL/ymDn9M+ok9aH7OKD931x9OqMCOaGSbqosl3iQsANoOlMa12PC4/a4wIIMn5e0/83M+3UwFtrTuIift8zkqY7MA6QDA81uye/fjODRyxstsYSzhf/AuPxpnDczSaWcKkTVqFGdAK8AAkX10qESCX9pdtKqLv9XHtf1oVLmVa5tPvueOIdcE3UEdf6VOrAaQF118NkitBm8HPallpt/Jl02a84z06X8WA4D41MnYJPjKh1R8ZMqTzjyZodJIxuv2utHgb8OURiBknr9QX/+oeFWwctj9SdU3ohrexSQy2NoTJcMs2MNfG/QxKCwwgb00wfc9rS+tmirhdnyFCvh1N0ybxCevtI35SrnJRYDyD7FzRgIp+xBfunBuItHu1nfgtjl4rZFk6BCgA7CDbCEDbkmEAbDzfDra2S43e0PkNDVNvhQU7ZpJJj3Ar97AzZAV0LLEGvqThS6trU6CVKOL7PNDMuMO36eWwx/RVkAhsiXouWpEUhNhyRfg0Qivn5Gb3UR37/k7bC6zmzSR+A7ZPxw47c+x6fMx/FL5uQHQvTAb3XIdlbpTVlDOgqEaaXQB+sHY8wQfZ7FLKjtwy9fVC3WqCk1BgzYHa98QMQJ69JALb1R4mIOWZsD8xgAv5GembFlijn5TdNonNIr0FBnbHpcDYMU3afWBc08tQA/gj7X4BiZU/IFKniQU23mWMbkOLlSRNlMLYJIuxfddf1J2zT7jsDPlP9hCrfPb6AJ+LMCJIUEZEi3/yMdlu9jlIkGdgzbdcZSAXB3qT57lZJyVVNwbrKQ0sE3FDgjDsCGcwrVJ6EIRp3jRfBEe7gidF6A3p9yFMze4170ggXvqetz2x5oIugCOdr4LdHzvONeZmDupfQXaem8AT2S3LY3m8CkH9sjWL6SHt+8U46RHfde/7k+Yz/kqsrg0qhzDj2xM9Ci6ZNJjU7iKcROAL7k3YVgub8gRxuBernUcxBSZZ3WGhxMzpFU+QRN7/XgzTXtLgcUsaMyxuLLhp/vuSVXxlnAUO9GAmJx6cjK6rV91f+qMpLxvDOaJM7+ocgUTNZa5mEHajxcySiyS0eK+qTIFPHSdOsEYiYgHtVnlemfrCe4HmLgcN6uF9cIKFAPPOinrmCSmat9XtsCz5DdlAd5gKeMwqo9OepvIdI6dkuL2/EFKL9oL+KdBZcdYmvL0iqu606QkdRkESx2NdgfCG+0AlvSiYf/+KB98z495fZyWTkOutClnlsm8yeuiyFBkuMNeI8KJoAejLbsgxGJLpsM9qSwotrceOzynjwlHfH09KZq/RoPK5N7tKUR2dSb+8bGhYOUjcRZGLpf4Wqvx+85QMMKGO+8IgIKf1qEqr8enChJjl8lNqcTSQNVHcxiKuKd+ef50CB/ghxX44TCP1IsPYj/+co0IOJJinOMnznPTNQfq7MQ4RzY7dcEuZoHHHIMCOEYvzQE9iw+StE9JuTzuE+2BHRsSiojk9//+PNw3KTK1c/fRLTLtRQfqxccSeTPgQVSyV4nxaxux4tMB3XV9L1CC8ozbXXV9oAacTTkNUWWm X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Z+j0ul4qcgQEqmXwjFPQLCRJZc/beWxaW35trq2sxAvx5aDZriXImJiVeao90IrJYRZ7yI1tkZhAVBQZBgnriTZmh4dIkq8pLnLmO7afXEYwL7vH1UgIwngd9QBq3nPJj69TuOGOGUYFQkfiKXzrK9avRFU1aOX10TLB+uPjcFwTI5Fm5jh+uC9g94/nAJ4WeQxUuobSAUcSRBSi/StpjF9EwXyzXFzyMH1XVgG8uqVgglbcHCQW4QhCnxuBn8mKzkePPPjjAK1QXXswTcc2xayUsDosComrFOwEgFZL+4Tf0a/EBsTwXqNg3fieaLtPrsqQC7jlapOLWQHPO4+3voRoNkVZgTUJEiMhDrHNYkLxGABaG8N0qqrZPD0ZUC+MYnTGF2LsQr8d0g/g/MNfVNiC+ZmQjMe2cPJWmJh3xDEhybrybLiKwSu96+H6bAKFr8/cfXXaEmeOGY21kAqMtjPYKecOZIDNwKhTRVW6hxVWROius5/ZZobDSFWdic98HJak7nZpwXmlxmAhorpvnbaBZg7rlvk6rhFrGFxH0cwZUAlmGjDbb84gd8FGThHTR5sZ+hb1s5eb8QY9WJ/Zpyv3D9agN/MiiQXDaYFxV8s= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23838dda-f613-45a0-99a8-08dc69f218bb X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB6538.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 May 2024 15:19:29.8652 (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: qBwPSslPjWkEZICDCNhDCCgTGsl5grpzgstki/k9FMpCKIZGtkSQVVVmaKNb2ylZzzoOKCOEcg4Tl2mVQDucGQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4794 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-05-01_15,2024-04-30_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 adultscore=0 phishscore=0 mlxscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2405010108 X-Proofpoint-ORIG-GUID: JHF8eivJGC_vwljxITLuBuyvXsjIynkf X-Proofpoint-GUID: JHF8eivJGC_vwljxITLuBuyvXsjIynkf X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org The request for GCC to accept that the C99 flexible array member can be in a union or alone in a structure has been made a long time ago around 2012 for supporting several practical cases including glibc. A GCC PR has been opened for such request at that time: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53548 However, this PR was closed as WONTFIX around 2015 due to the following reason: "there is an existing extension that makes the requested functionality possible" i.e GCC fully supported that the zero-length array can be in a union or alone in a structure for a long time. (though I didn't see any official documentation on such extension) It's reasonable to close PR53548 at that time since zero-length array extension can be used for such purpose. However, since GCC13, in order to improve the C/C++ security, we introduced -fstrict-flex-arrays=n to gradually eliminate the "fake flexible array" usages from C/C++ source code. As a result, zero-length arrays eventually will be replaced by C99 flexiable array member completely. Therefore, GCC needs to explicitly allow such extensions directly for C99 flexible arrays, since flexable array member in unions or alone in structs are common code patterns in active use by the Linux kernel (and other projects). For example, these do not error by default with GCC: union one { int a; int b[0]; }; union two { int a; struct { struct { } __empty; int b[]; }; }; But these do: union three { int a; int b[]; }; struct four { int b[]; } Clang has supported such extensions since March, 2024 https://github.com/llvm/llvm-project/pull/84428 GCC should also support such extensions. This will allow for a seamless transition for code bases away from zero-length arrays without losing existing code patterns. gcc/ChangeLog: * doc/extend.texi: Add documentation for Flexible Array Members in Unions and Flexible Array Members alone in Structures. --- gcc/doc/extend.texi | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 7b54a241a7bf..94a77d7ef39c 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -42,6 +42,8 @@ extensions, accepted by GCC in C90 mode and in C++. * Named Address Spaces::Named address spaces. * Zero Length:: Zero-length arrays. * Empty Structures:: Structures with no members. +* Flexible Array Members in Unions:: Unions with Flexible Array Members. +* Flexible Array Members alone in Structures:: Structures with only Flexible Array Members. * Variable Length:: Arrays whose length is computed at run time. * Variadic Macros:: Macros with a variable number of arguments. * Escaped Newlines:: Slightly looser rules for escaped newlines. @@ -1873,6 +1875,38 @@ The structure has size zero. In C++, empty structures are part of the language. G++ treats empty structures as if they had a single member of type @code{char}. +@node Flexible Array Members in Unions +@section Unions with Flexible Array Members +@cindex unions with flexible array members +@cindex unions with FAMs + +GCC permits a C99 flexible array member (FAM) to be in a union: + +@smallexample +union with_fam @{ + int a; + int b[]; +@}; +@end smallexample + +If every member of a union is a flexible array member, the size of +such a union is zero. + +@node Flexible Array Members alone in Structures +@section Structures with only Flexible Array Members +@cindex structures with only flexible array members +@cindex structures with only FAMs + +GCC permits a C99 flexible array member (FAM) to be alone in a structure: + +@smallexample +struct only_fam @{ + int b[]; +@}; +@end smallexample + +The size of such a structure is zero. + @node Variable Length @section Arrays of Variable Length @cindex variable-length arrays From patchwork Wed May 1 15:19:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qing Zhao X-Patchwork-Id: 1930257 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=GrAMG7Jn; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=ft+3K87v; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VV14H0ppTz1ymc for ; Thu, 2 May 2024 01:21:19 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8DD2A385E83E for ; Wed, 1 May 2024 15:21:16 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 7962E3858288 for ; Wed, 1 May 2024 15:19:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7962E3858288 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 7962E3858288 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=1714576781; cv=pass; b=Udvyde+pNug9xz4uyimx+QtoEmCHSlO/61ZgggeuXRsckqUPn7pPB1/SRZ91ayAN21aZDT/PQM2BXJNyK/YfQ6N1HiqFCnnAyHVYurfOUAEEAeu2ffQj4Ez/bM8FAO6eH6FAMPfpvWqkuQQn470OxnNE/09iSh5APZ6AG+EeF80= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1714576781; c=relaxed/simple; bh=DqxCyKccp0YyLzT3sv3UM0AomxH0pQktKP7vzQtsyq8=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=JgoxGmOwIXFMQtMVNRvl+Vg9UfypC45wKzkdZwRcJzLTBm/dACn6PthnTvw7trO3mvLeB66hvsue6CxHDSQthBLSjJZS3TCF1k23CtnMuWHdTUG/0YND0dNdbWciYn06JCl+32FGcalMH/eLoTAOq9pykl/udWpVuNZ4RbVVZJE= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 441ARtRX024912; Wed, 1 May 2024 15:19:36 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=qKNVvJv4rLUXxsQu6apiHKSSIRAlkAYXF2/bd2nxOXY=; b=GrAMG7JnMAhab95h3IcHGVaTLOVplrIj7cAFwE/OhhxWQsE8pi0B99fdjIflkbSTI2pm p+ZeLA+s3+CfGNVWF07jey1hMZ1u2YYNGzenD53BDBxduWvA+FrED/QjQcJVTL+zovV8 CBU1QA7rfB8wbfZG/S2idF9ymQd4d/cBX6R8KMOZhK4crasoZTEyc4UM/6Pf/qq/Qzh5 isOZB460ktermPzu/VoyK/TViA17EFDoEJQrSQP++zZBRN3AbefHVGacADX+EF8Vn9NZ s+ZmK8VecaER/iuA2pFDMu7jtFz7Sz05iTKhmtLXn8n6f8FIhzMsZ0o16peatOmuTmAe Tg== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xrr54fds7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 01 May 2024 15:19:35 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 441DfjV0005034; Wed, 1 May 2024 15:19:34 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2168.outbound.protection.outlook.com [104.47.57.168]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3xrqt8xadx-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 01 May 2024 15:19:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P4OLNdRKWCX6YMeQasekfjpDE6ythX29nXawocgRabjOypXNh9SpiOmnve8A4JEhSa/Pbjo68Jn41frrv+yHDzZecmOWvQh2su3f8WOw4bauTLL72JNAvEOtblfKuy49QFkZiV4umG+EbE3QedjZBNzP5JmnRzkSdF9olrjZqPjp+wCyBEyZUFS8HpDZMiEKz4QzEsiRov/jCw2UfT8pEJrPeDg5/FihZBqiuo3NReA93TYXqmR7NdP2Ntg1Egv1z+UstO6uv0vpI6MkhjR28rRuG/XkzzT68Mj2lR/qB2Q70NNJVzA9BQDkO73bxRC3Z3gfocff1/c5hIbjZUMVtg== 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=qKNVvJv4rLUXxsQu6apiHKSSIRAlkAYXF2/bd2nxOXY=; b=NQuIJ7lO82gIdl/naAkV1thgRcj2W6EOap1omjcUtYeh4Ukq8BQEhCt2Z5wWw6qrwa3hBopI1ACadLnQ+AZd4KP4os7q/xeGH5JQQHfBTaBQUY7HqBMkR5p844qPLI1F/viMOlI0ABgulGcHFRl9bpfsRouUH+ahCIflImlnYpAEygFbMG0lbXSFzWPDIj9LmGc063QtoEtJRtJlk53fnKKV3jPkoLPf5/iBPC9D1Vu0VvjTSoCX3pKkm09Y6Ecf4QIP741VA48L9G9tewAoJUQFf8Loe+jsm8RJuBaYpYplL4bpKwz9ktRkfNKRgUtwdTwvD2/LBslFLFI2hA0Vsw== 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=qKNVvJv4rLUXxsQu6apiHKSSIRAlkAYXF2/bd2nxOXY=; b=ft+3K87vamnOMg8x57IX9bcj4YuL1Hnh+cNpG81m6vXjAGOCMpWJ7sRCInXhoThTvMfPdA0mRWY9uz3HYb2O5brRApGE2IMBVO0EM6LJBvaCTX3YhP3HRMY8+rEBHJYL5lzwg4MMjGYvaiQwO9SBvFmjajOb6+ef3gZn5M1AfO4= Received: from CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) by SA2PR10MB4794.namprd10.prod.outlook.com (2603:10b6:806:113::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.28; Wed, 1 May 2024 15:19:32 +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.7519.035; Wed, 1 May 2024 15:19:32 +0000 From: Qing Zhao To: jason@redhat.com, josmyers@redhat.com, richard.guenther@gmail.com, siddhesh@gotplt.org Cc: uecker@tugraz.at, keescook@chromium.org, gcc-patches@gcc.gnu.org, Qing Zhao Subject: [PATCH v4 2/4] C and C++ FE changes Date: Wed, 1 May 2024 15:19:21 +0000 Message-Id: <20240501151923.2895074-3-qing.zhao@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20240501151923.2895074-1-qing.zhao@oracle.com> References: <20240501151923.2895074-1-qing.zhao@oracle.com> X-ClientProxiedBy: BL1PR13CA0134.namprd13.prod.outlook.com (2603:10b6:208:2bb::19) To CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY8PR10MB6538:EE_|SA2PR10MB4794:EE_ X-MS-Office365-Filtering-Correlation-Id: 6b89a9e4-31e9-4cf3-7a99-08dc69f21a17 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|1800799015|366007|376005; X-Microsoft-Antispam-Message-Info: atpwuk7wEU9nP7HQiyD8HwtbAu2QMuX/Ei+R053NTlo+jnnqo6x35/MvKtbj3xUnPOO1R3fn8gZf69gHHRI0HKiFt6HtrIpSeXZnpSyM9+vkrObcQCdIr0JOaTwJdqNZDnLJijRlXJ9SXFS2ENNzA6D2boe6nIZNbYOPJreT1bCBfTkBnzpISvLS6WknXTv26YkYxuXObYB24bzOCJQiVPoYUzTDu21LvoVLZgEIQ5fu5qoKACuIu+rraqhLxARgdUHJ+nC920E/dY8/6z0invvcoOGPGcgpdUOaTh8jn0gufdvnqGwnvZ628mEedvFd9cHrW4dOEP6bUjzSFHJytCtU8Fi9ugb9Z9ch9/2R+oGi3hc2oDgYYtms8p3l/KSIYiMzlfkhrdgINSOcmvv7b/II/eQCLhpwXF751yb1UbzC/GH7u5qnLXhn0ZyVsgOuRrgFpnrIGYUNIkAPJG+CF2UYjjzHpfVhsdKhRjf4Og+I5fYKA2dXw01s/Vq+iTe5x/SP+O+/D0OfbMWDBXSxGfAvxWKCzWOW7VrrC5LzbgbGuqAlM+xmy1+ZzWrdR85cfhycwuJW8dRCsb7OkRaUW1W3E5YYFSD8lEnAeIhfwKa48ffQeM5uboN+r6lbwOQs1ZB13YBGqALdSg3vy1NG1iz1GUE1E3JYLW0VNb28pU1ZVIyMy1S0X0ity0ggIwnX8bMjfbnCC6MsdRDD/5rimhgm0LiqPaUQ7Q5TbNqzjeKpmiQib8ZDhtx7EIM9DEENDGKtvI01u9y8GHPsq9iUw+pXvZOmPwg6gGMrVCUmsvJSS04ZfqSBXZMQlCFGUEDnb+BiGmkIttnNn7N5pT045afEibENrUIQwS3bwSJk+eUDeIE0+p1Oyn/AhA/WxztplPRYSJZ6ov4jHHhF5Ca2ojreg7s+Ql7zpxmlAdQoFRbxiWAc7s20+wZ5yQr0n/nvuF0ps9K9IzTst5bX3by/VeDJxAYzvPrP0u+OtsBrM8E/2g0Pm/AIf7v2nygRzdQH69od54Z17k0Q+hbD96TPdtUUK6HBmFC+bj4Ls9uU9KVpfaDYkxZWezttBa3L5NrNXIFinG1NijPUr2MFDAAuCfZL3njKpUnmf6js5Hy8Mio6NiRkEs5HE0U7lt/T+cK1f8RYuLNnWsF3CvmoRl1vV8uhomGWopfYMf6alAVLCkxddWfS2ckSbT548GRYGJ4rJrD3kjHTmJgdmlD9dNnUhGaoNJ1K8bbZiMjJfmRW32g= 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)(366007)(376005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NQPSGmU60z8fCUGoSnfM5Ni3DTtN0Wg73wd6Y+P2kGOlaFZX7xRmg0xCsP+GiWdlnukbHb+WO5dixobWDUEAA76hLe9dwyfXLRqslm0rlidYRVEEWfQDrrMcWne/j7JCD1x9oFgHfRoyYdc4mWmoymNgCz4l1APeArjYiTSrUGLoafrKnAWzbDhyW/TDjnbQ6DtjVE7NUtIe6LXWrJFuwxe/jN6lNZMa4Z7WQ70G7sTfqFtC65DQkB+NzUrliIR6sfsyOvLfLukAYKIF6S6rlMSwAboiDklg7QlLn9pXfunxywQ1tKK/jOKpnBxroU42g8NQge8jiv3AoovvzGn4xnhXoC6Cnw+czPusDVonJC4CNsk1mO60ijzzO/kdvkTyBYFRCxPyYjZr9GPKDKrgAArX1hVcyHPJWxu6rH1WdqniuMTprJhy9DM9x+QVo3Lqyo3C9EGIFxWQbTGExQw+pvh1/ixX3VVHJeY+f7gWE5J9lQ0FvrswOGoiLZ3hPr0RExVfji7YDM234vqXGR2Q9wbYAYiOZjeHnzBE3TJbBRGy/KgtCUxkh+S3RCqKaliBkGleN5EGtmH4Xj+8ZYtqqhIGo6H4mTEynyxWphiWqcP4glNmhbN/xmY6/9lDjCAtGVv7YkMb7Kd5ZKVJT8uYeWRM+efGHR7kAx4OE7QRTNknUux5pUAKmHHkUXdm3mRpEZJEAq9ytLouaNTFRBtIq6F0Gk5YeNWIHn5Eyn2d8BqdU1LfcwK+W1li3pMPXiZNmjuEqWHNw46S6bZnQ2ZQGbPry4oOW+mJGIqc52eGc8JwDayG8TBzNh2OCVsioWXjJad4lYNljTrXI/PmHKIM+BHWqNMhArNJ4K3i3Jk+QFVx4Mh7l+AMgkvLC6ip+lncc7pu1w3xrCjjyRSGlZ4C9GOh8IzfwWJMQLTbrOBsgMS0PLhBhXO1UpesjoNkZ2yPG2N+F2qFLFlxWBR9EUgxWbvEORspul0xgGa5SOjP1jt+nCm56DHWrDGyMYoXbqDMZBCN4FTMOjSnGMfkLnKZlx+E7yDrNuXW5lyc0GfjwXIvgEEjc7CSiy6li2gXJIWNb+HO3HRCFtIJ0zrSGgqAItuvxT/2/o/ht4UXHrTuAP2YFYC95773ZhjGTyDGwdaA2h7tJef2UBv9R/EuHq+mcxCePc28E3xJonj9SuK2vxoPXyGQbZ2LsngttKfA1NvWOtxNoZAi8sXNzQGYC/cqDgnxiGOoxXFMzxFddsqKF6VIx6RV0ISJSLJyDIc7k2+Zdd1rJX63U1gK0aSJbE1iGgbWqiwHuD6IFcYFqhETnWEGk71T4vGOUe3kpUfJbUepPAclbrOG1Gq5qU9fInvCyqOkGpXFmMqRsD6m20unYYModmBC5+SCUZdkDBOHF8YAj+qfywJEhfjhVX2MRrr6Kt3BrVR5k1IstAlc2115+2O4UH116Kvaag0+2VjsdrvseH4alzFdzRn4/znZ52cR7Tim73OGFiTgyu2lezZ44SbHCOsUKH6QPOfDz4EY1TIS68vHHQMxUjFeejt+gP03kRXCNiD9HraZjSaJgw4FdWQAiX6MAVbzF/KGUFGLE18M X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: jwHFHFmFgt+zLx7YjqFin/5XC/UpbQENcfbd6y4J1n6vHCmXWU1ex1nhAOXgYoqidas10S5GDGely+Wicg1TezvWqPDMsGdWrDzN0Uhe3UprsPr5gQR8/VrvIEyWrkgkqbVYWRCcukfmvUM4R5AxW8Z4URVA8OqwGMTTGlGvgw8jpJ5wgi/nb/4wemBzHCeZlw7atFo+F1hVUDYkENbdiSEiFOoplT3D0Cr5PyGFXHZRxg++jdKLrWHP6zPEuiIEv5fbiWMvvSBygeHeurronakyCUzODNcoUiOoLbIkSSjvl2RazOfDiMU7gBLdLa7ishoA2W5d1qQ2Zvz2yAlod4C1ProJjcuWPqpGT1hm86vo2ybiaWBN6hSVJGLkkIjoGbwftWtjqzvFnpOg3WLQg8OIuDUpim/Wt55jFJYw5Qfeysyf7AB+zmsBDDX+t0QX53MB7H77T3I+C3QRP2ZNBoZOJr5kRN84SCuMtH/CdtqtwEDmB1eWKbuAfdgThXFUVcwErdfhs3J3iH2N8hJHnngvedQGpkkf8mQSSTc7S9PCmYWmPxjHPSp5Fns6oEYD7Q1iCKQVlDUuUuqDSrix6HqFxOmWJz60tzAkgiIW8Vw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b89a9e4-31e9-4cf3-7a99-08dc69f21a17 X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB6538.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 May 2024 15:19:32.2257 (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: oT/aVFTfR50ITCTSQgpirWewReepUAsCqfjvyWY6aS5OBRyqePLqgk+z3SX3FPFHcddIHHTzdp3o7hXVxuX5jg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4794 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-05-01_15,2024-04-30_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 adultscore=0 phishscore=0 mlxscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2405010108 X-Proofpoint-ORIG-GUID: m9ha9dqmy9Fdi3NIJy3oqvbmh8pIrzc_ X-Proofpoint-GUID: m9ha9dqmy9Fdi3NIJy3oqvbmh8pIrzc_ X-Spam-Status: No, score=-11.6 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org 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 } */ From patchwork Wed May 1 15:19:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qing Zhao X-Patchwork-Id: 1930254 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=DO61K2iD; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=h8Eer8uE; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VV12y4sTbz1ydT for ; Thu, 2 May 2024 01:20:10 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B91BA3858429 for ; Wed, 1 May 2024 15:20:08 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id A8A67385ED7A for ; Wed, 1 May 2024 15:19:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A8A67385ED7A 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 A8A67385ED7A 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=1714576780; cv=pass; b=I4dkKlr7ZZq4KEtJ2Tsb/11vqmzsiAFdP2jBlv8Z0PVzoB7GbdBN9dgCvy7rcn99PVL0BgKo+PZ+nJRtNB0Rl8bBSyNKr2SiCtYFQW/1EhjsFtmoy5uNXszbRyIV4eDEMYhvG429U7rtp0rBvTEjhMF3XtcASedNT5n3KPqcYxM= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1714576780; c=relaxed/simple; bh=3n0wAyTGloE80TgxiCRQuCUuS6BtO+OZ24FVOGjSbDU=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=XLf8RgHnkRqJ5tPOMpwCHLiuT6I81uB1pxaPAjH3uMxYwrRotAZdRbZSWAmdIqz0nw/9mxCoHU0zlZooNFYzRS34RLOXdEJSSn/YV8NINa59mpu+Sq4zRriclbUFAUNhY5Mg5PXPlmQux+jW/v9a3Lh+/7HGg/rdVisJjyALQbM= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 441ARlg2024850; Wed, 1 May 2024 15:19:38 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=WrbDp6hZ5loKo2HutobE8RtDbCKPwtrDDXEQCCnzNx8=; b=DO61K2iDWlaPiiByYpE9WjEfZ3VBMhFrtHTMhUyEp2OQu/tz0tnJhE1TF2NtBnqqVm5R GfTNwhobVsx03+9zKyBvxJqHK94Li5ajPGTwdu7vgrOPWEByogDcLrYwXm30GzVEF2Yr zRE6GAM3r/ByqKHIlODhbdTVs1/F4loE6y7KJTf8dfnehljsoWrq0dnbINH2sOOvl6ab 1L6nVKqP0JTYnEA/NBeogAPWfnhfSnpnTic2zTa2grJZoXN+a88m01xZ8feZvepdiNAf AVB0PI80u2zE1TfHy60YF7hnhCqHImObal3eib7jBEH8QphnJM1F+b4g0+QzP4/ll5a1 QA== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xrr54fds9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 01 May 2024 15:19:37 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 441FGlKn034625; Wed, 1 May 2024 15:19:36 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2168.outbound.protection.outlook.com [104.47.57.168]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3xu4c0q6fk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 01 May 2024 15:19:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Vp/sCUxQ2ZgIR0PJfh40x14gt+pZvlaWmAhGGfVmc5N/WthHfFnxT2vSISLL+o0eZnTnDwIv352LMSwTLbKIVwMhpFn8oOOUElmtZN1zbGcrzvtF9yrCWSo2EG35fHGbE6JNeItE/oktPU27DXbDHQ3xc7QZYsGh8OeD32Ds8zW7jQcuERRj4ctmf6vaZmK6gCP1KwCv81augoXEmoM0vn/kaqCdKUZuHCqUMYOdEwHmhL8ASHOeDCfiGLJP9kfBA6FQhXd4/ebxzTadaekxe/KK1IdfKVLOq6amCFqsEcNsCAKebrpv/tsd1L7i8JkWyGZ2jKIWPd5GjDys7SMNGg== 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=WrbDp6hZ5loKo2HutobE8RtDbCKPwtrDDXEQCCnzNx8=; b=DwNJIAdx6LuMpAEAIonitku9ZXLzAf+jriAwB5uy4YcTbkWgQLGxl87Iy4uQ7VTHROvNyFR3LNADdgA0uU1mQCGj+b9pf9UMeiblaU9ToZizNaWS7EdKEeDEj/fvIe8DHmgMF1K67zzukKGDDCE2D/Ue6WUBTksutl+HaYal1Npf7I89EBrtRLGCMmtqp/XEHzhmoib3eaj36yj5HJRn38CvpSIqSV1z6y4y5eKJQ/8ZDDYlqjKhOK04BpPUBCxwPCFdJv7ZxEqZN6ArB6CHsVUw4xLprtBWSXsXpjExmGo5vxYYNTsH9iRugHr21ecsNr59TwrW3T42SldyOIV/kQ== 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=WrbDp6hZ5loKo2HutobE8RtDbCKPwtrDDXEQCCnzNx8=; b=h8Eer8uELes1Fi96cDOnp60i8OdYvv5etAAEAQw0XNZw6rxsZzW34iJOgnaqKsYejmhDBnubkm0Do/HzjjrczTizlUkJ16M0B7VpsE8T2oEiHXW8E7YVUv0OB+TCBWjwiMRmGBlSmt3NU5Wieu0xTFVMyz5VwpnYijd3d6nBuTE= Received: from CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) by SA2PR10MB4794.namprd10.prod.outlook.com (2603:10b6:806:113::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.28; Wed, 1 May 2024 15:19:35 +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.7519.035; Wed, 1 May 2024 15:19:35 +0000 From: Qing Zhao To: jason@redhat.com, josmyers@redhat.com, richard.guenther@gmail.com, siddhesh@gotplt.org Cc: uecker@tugraz.at, keescook@chromium.org, gcc-patches@gcc.gnu.org, Qing Zhao Subject: [PATCH v4 3/4] Add testing cases for flexible array members in unions and alone in structures. Date: Wed, 1 May 2024 15:19:22 +0000 Message-Id: <20240501151923.2895074-4-qing.zhao@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20240501151923.2895074-1-qing.zhao@oracle.com> References: <20240501151923.2895074-1-qing.zhao@oracle.com> X-ClientProxiedBy: BL1PR13CA0267.namprd13.prod.outlook.com (2603:10b6:208:2ba::32) To CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY8PR10MB6538:EE_|SA2PR10MB4794:EE_ X-MS-Office365-Filtering-Correlation-Id: b91ab0ea-947f-413b-67bd-08dc69f21bc1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|1800799015|366007|376005; X-Microsoft-Antispam-Message-Info: FIkRcaNw37rV19zIYlnal1cJB0gYs5dbi3GWHabVkWBpxQJ89xIfxPbCn+AxVDyDnoJAgHiotmFEXl6HZuv5zpv7ra0QMGjbtYgFQr+ZmJFmQvNP3IHA+o0xJSMc9fHK5+f4MVesk3U4UEetUE/ebvG6Wh6Z3MI9FOq4TnsSu9nuWOxd9tf2c806mPa6SiVtb2OhONpvuM68nBBVH6j0jpZlE5u/Ejz6miv/q21oOg4eJyt/Ky8j2MY1sNrdcOeDI3ferzzUN7ukQvD4agLXeO+SRyNt8Iw+/jnpbd58HwG3ng13JrqMRAbxVohpesJHbFOA+fvL/9eZbofAnIkH7Y6JDf6sZQedvDuevxvmWI0KeJuRmNsuXcRw2lkPPDHBQcdveRj9XieBeKXVO58C5F2ObNAY7gnjerDuBuEIudELoMMf8Yjzt9cbZQVlwbivz3KZuhWWhjkKAxBbYykZ/EUdjKJy3vvhEGHk0LRyiKoJwvehuviu8m9aN2ud+7wKrMXoW90a/a5meWsXXZBxXMPypp4Uol42WV66//1dXLoVrca/6rW71bVyH7fjgWUqh3/YMeUG6QUmyWZbkJ4byHfXZr5tp9gVpapwfPdAEgj4TX1pCWeHxgACDY/vMCOcnRNe8yznxZGh+fxUC4r4vwa3zUsTDryVtsCuygDxMVrgB7fVCoa4fSNQizGcWr9AkcZm7aD6F96A0ZgzCItbLYdQGeyWO9U9GjS1KZW7IbD7yUeEJmZtNS/woQo+y7bikUd227/ZSfhs2xOodAR9+lHvro8dDf0cAFVDeXdlk/PPxK0RCP+PpS3dHkD9upMUvVEbysyrGL0RpVfy2N3n6p2mW4GAJvoGJ8xSqSaUZu26N9XIdkguhMqdlK03vMLluTHMvB7S/aYbFZKg9TVYoGo8Iq1NLdHXY20OXDYkD30ti6Ng/m7Mc5sU80bl7XAGiErrMqJcofffhBRTPhWJRbY1GBa16GFUFuEcg+2Uk2VmJbbKHEpoScxXwHwx6WYj+HttcqTI3ojGhXsMy8IphSIVU3mQNrf0xPmR3ZfnqwZvtKYt/mLOBljSiZk9ETGPsjLvnlPyUgSd3v46FcL8fPPAKh5/1Oucws/QfOtfMwXm/quDaEtwYv3P1oSxpwLaldWT6aG4LknIFVDhjtWy4yRBZ2PkeB0pLBMcuWFzKo3Tq28VDNMUH64ipqPriDvASjdXqq7Is6hcHI1STLzOd3ew8ATqMhzf3HK4ugNvvw/2jhOMUHNcm+uw81aFnLc+08BZyMNtM1P+OQdOhIFK+w== 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)(366007)(376005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dwtFPlnwiTacsp0u9QvoYRueQStvEUrXfra/W+PWVpUuSgohjdfcOB44po2VH5wv2O+jbzzINxj+AGoDA0ecgCO7iFpVxAC//rdZQkI1g0fcxXYU5Pgz+ht+s4BgKFNfo49D+AvPdLDn2ur2TSbsxoGWOsbbK8RnqnCphq43gKN+iODKYQMYx0JQuTOncqrb6sueHvVj7wFPTFkVYcWGfF7ejJ+nreHdUpLSDyfZfv7ShhepoOGsQR0Bxkj1mTGwb1mgTd3m1UAc5CywfAxLbZP4SWbk6I70B5xI2UFH0wqZOWi6cHblolxxHKmuSiu95dmJlsEEySL5zisYqpqbfUncVDQsenGccI0LdNAOQYCYrHzG4y1dDSObfMnLn6oYbfX3CS70pu4Da3/JKPJzIzDOdnFStcKm9da0X7b+r1VZ+U64KKcSeI8Z2nZIFUTjEfgLR30JS7dG7Q9ap6+C8UHoQ8esyh+eMgzVZs4/WEsqIwgejOHeYubCvsT3fu6Rq9qH7JZecLQtvrQFEBSz9uhfM6lh51FcrpD5AaGLnLEDZlmULyhCk1DxHxvxAgCqEG4zPXcoVKpgKXIOUqWV4oVzfopXjrvtl1OoJ5CIdataGi/wiN/kKSQIT7YfmEEsbWEY0vprkfe7HX6gq1qKExxUfZpt6Bu8h8WFSPHs2g+s2GK1H7n0MmjP89sonGYmgUwr8GI9frGTmFE6gxIQ8EYngxTZqULOnNmmEOP8KuSJf22fq7UDOMLDsdf4+VoT+0+KYkuVLl26ma+zwMlnHQL+Vs7OwsE5zikVM70cc8/7uV7RNzXhhgtolr1X4z3cKGYt23JHcx6TpIaoehEYoUU5s1zxYwWQXk4MSJFeeVLfqujT10tQyDEuprmrRckx4LoIm4LLF1zu+7UTkH0QCD/LK4QUhPCYe2nlIgvWlxwet7ReF7EjZYhyLiwIuudqbVYZJsKg/sJFqu033tYNz0sCUPtXkPQsIwzFYoBosY16XJeQ77bWMwWKiDguYwwKYYsR3BAwozk6nTDGwD3mZlgbTWOLrweW0d76o/NPSgNgNF41bksyd1r4XFB24omSnCr44dgcXHQBVHFULlevaUaxurPUiXhNurxi5kYqh2LLipHQx12JewQp6ohh1zELaUh7UkIyR5aCoqL568X6EkR7gP3PSdCU71LBA5/T65X9XxmqYj7tQBSeXqRAv+nEvkbeaKFiMskTNGflc8KIjjdAahzsIJbBNFkoQX3/l42iafJruLiOPrlidMfPMVnySPRWnQDmwbIqSL/z+ZYma7n2QkZyNj+L66Q1inketh2ZeQjfmkY4tUE0g8OGcZu+matG9HfdjjdQW5GBy84AZI4rS5x1e7jlcYjKr3AJgHRnfoEy6+FIvZKZTrQTcvwpliatbFJKcvDoTMthjyZ4YWdOFfNZrfY0J6DScF70A5WQUi0on7Nh6Fan3zOi3zcdafOtos2asxBktDIa09ggw0GT/NYe/hSwQ/s0y6YVG5eLf9ekI5p5fmEXfC8qb/X6UfpHiEzU4NkAuh3jPFhWMhlBrSPzi7mHjHX0grp0S32diEmKZF85vkDxj/9cBENE X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: BC/H9mwdeGdr8nGLJpCX/lzyRBS9kuoSpvjGcpj2h0Fcg1IOSJzR7BhpKdjRKGDtQz8EpdocY8K/nrAuL0GP+BJeYqfU1IKnUagAroZyMgXmtAjcyK3vTLO5BC+TEGfyv4nu9mxn8gQiHYCiWZcd11Efve2RH+BZwN/o0pgyUym/ZFdWTy9M2byr/7ZEzuQZ6dLfCBv3w8YnzcwmcZYObEVK1m8YJiguHTtYYCLK6vCSYCOcJhEL+BkS0Sw56YTct3LNw+BT/CQqnJ5MI2zuIFnUxYrUVbzOPqm9qSLRLJhb8Tov6uoykzmPMhEhNsMeYGJUdKR8ofKfjSf8wtZitP0XgtU80z9WsboudQ9dcegAAB1RxsAmVWJ1AOUiMGMJ948y7StYGK0FC0T/1kVyNyyTbkbMi+B4/DcOzyDfhPahmHf55o3+Akwiu+VWUZD22W3stlP3maW9E2qk3EOqvp0qC4COBG0DMxSmBpbn5ou0mEKTPvUiHsP7oBofMKR0J77eu+bILXl+FTJ3rFOReYfBP8NTJSfkAkBDoWDc/JF+al8ntLnVmHgzA4/S55PcfdXq+zWJ1cDxnz/b8l4LSx/kSo0nwvWzMx++gsJWo6I= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b91ab0ea-947f-413b-67bd-08dc69f21bc1 X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB6538.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 May 2024 15:19:34.9740 (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: oWee7K/tklH26T9pkt9rAYF08SzuHwDcHB6XcwteLD3Oz+OrE0AGOIaoVuS5MQZMTJaV834wUsTdotXGOEHtnw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4794 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-05-01_15,2024-04-30_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 mlxlogscore=929 suspectscore=0 mlxscore=0 spamscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2405010108 X-Proofpoint-ORIG-GUID: 1m8mMivbhvOxxaZDjn_WAJy8zZu-n3px X-Proofpoint-GUID: 1m8mMivbhvOxxaZDjn_WAJy8zZu-n3px X-Spam-Status: No, score=-11.6 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org gcc/testsuite/ChangeLog: * c-c++-common/fam-in-union-alone-in-struct-1.c: New testcase. * c-c++-common/fam-in-union-alone-in-struct-2.c: New testcase. * c-c++-common/fam-in-union-alone-in-struct-3.c: New testcase. --- .../fam-in-union-alone-in-struct-1.c | 52 +++++++++++++++++++ .../fam-in-union-alone-in-struct-2.c | 51 ++++++++++++++++++ .../fam-in-union-alone-in-struct-3.c | 36 +++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-1.c create mode 100644 gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-2.c create mode 100644 gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-3.c diff --git a/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-1.c b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-1.c new file mode 100644 index 000000000000..7d4721aa95ac --- /dev/null +++ b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-1.c @@ -0,0 +1,52 @@ +/* testing the correct usage of flexible array members in unions + and alone in structures. */ +/* { dg-do run} */ +/* { dg-options "-Wpedantic" } */ + +union with_fam_1 { + int a; + int b[]; /* { dg-warning "flexible array member in union is a GCC extension" } */ +}; + +union with_fam_2 { + char a; + int b[]; /* { dg-warning "flexible array member in union is a GCC extension" } */ +}; + +union with_fam_3 { + char a[]; /* { dg-warning "flexible array member in union is a GCC extension" } */ + /* { dg-warning "in an otherwise empty" "" { target c++ } .-1 } */ + int b[]; /* { dg-warning "flexible array member in union is a GCC extension" } */ +}; + +struct only_fam { + int b[]; + /* { dg-warning "in a struct with no named members" "" { target c } .-1 } */ + /* { dg-warning "in an otherwise empty" "" { target c++ } .-2 } */ + /* { dg-warning "forbids flexible array member" "" { target c++ } .-3 } */ +}; + +struct only_fam_2 { + unsigned int : 2; + unsigned int : 3; + int b[]; + /* { dg-warning "in a struct with no named members" "" { target c } .-1 } */ + /* { dg-warning "in an otherwise empty" "" { target c++ } .-2 } */ + /* { dg-warning "forbids flexible array member" "" { target c++ } .-3 } */ +}; + +int main () +{ + if (sizeof (union with_fam_1) != sizeof (int)) + __builtin_abort (); + if (sizeof (union with_fam_2) != __alignof__ (int)) + __builtin_abort (); + if (sizeof (union with_fam_3) != 0) + __builtin_abort (); + if (sizeof (struct only_fam) != 0) + __builtin_abort (); + if (sizeof (struct only_fam_2) != sizeof (int)) + __builtin_abort (); + return 0; +} + diff --git a/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-2.c b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-2.c new file mode 100644 index 000000000000..3743f9e7dac5 --- /dev/null +++ b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-2.c @@ -0,0 +1,51 @@ +/* testing the correct usage of flexible array members in unions + and alone in structures: initialization */ +/* { dg-do run} */ +/* { dg-options "-O2" } */ + +union with_fam_1 { + int a; + int b[]; +} with_fam_1_v = {.b = {1, 2, 3, 4}}; + +union with_fam_2 { + int a; + char b[]; +} with_fam_2_v = {.a = 0x1f2f3f4f}; + +union with_fam_3 { + char a[]; + int b[]; +} with_fam_3_v = {.b = {0x1f2f3f4f, 0x5f6f7f7f}}; + +struct only_fam { + int b[]; +} only_fam_v = {{7, 11}}; + +struct only_fam_2 { + unsigned int : 2; + unsigned int : 3; + int b[]; +} only_fam_2_v = {{7, 11}}; + +int main () +{ + if (with_fam_1_v.b[3] != 4 + || with_fam_1_v.b[0] != 1) + __builtin_abort (); + if (with_fam_2_v.b[3] != 0x1f + || with_fam_2_v.b[0] != 0x4f) + __builtin_abort (); + if (with_fam_3_v.a[0] != 0x4f + || with_fam_3_v.a[7] != 0x5f) + __builtin_abort (); + if (only_fam_v.b[0] != 7 + || only_fam_v.b[1] != 11) + __builtin_abort (); + if (only_fam_2_v.b[0] != 7 + || only_fam_2_v.b[1] != 11) + __builtin_abort (); + + return 0; +} + diff --git a/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-3.c b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-3.c new file mode 100644 index 000000000000..dd36fa01306d --- /dev/null +++ b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-3.c @@ -0,0 +1,36 @@ +/* testing the correct usage of flexible array members in unions + and alone in structures. */ +/* { dg-do compile } */ +/* { dg-options "-pedantic-errors" } */ + +union with_fam_1 { + int a; + int b[]; /* { dg-error "flexible array member in union is a GCC extension" } */ +}; + +union with_fam_2 { + char a; + int b[]; /* { dg-error "flexible array member in union is a GCC extension" } */ +}; + +union with_fam_3 { + char a[]; /* { dg-error "flexible array member in union is a GCC extension" } */ + /* { dg-error "in an otherwise empty" "" { target c++ } .-1 } */ + int b[]; /* { dg-error "flexible array member in union is a GCC extension" } */ +}; + +struct only_fam { + int b[]; + /* { dg-error "in a struct with no named members" "" { target c } .-1 } */ + /* { dg-error "in an otherwise empty" "" { target c++ } .-2 } */ + /* { dg-error "forbids flexible array member" "" { target c++ } .-3 } */ +}; + +struct only_fam_2 { + unsigned int : 2; + unsigned int : 3; + int b[]; + /* { dg-error "in a struct with no named members" "" { target c } .-1 } */ + /* { dg-error "in an otherwise empty" "" { target c++ } .-2 } */ + /* { dg-error "forbids flexible array member" "" { target c++ } .-3 } */ +}; From patchwork Wed May 1 15:19:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qing Zhao X-Patchwork-Id: 1930256 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=R9Tvn20c; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=jew6QtPh; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VV1484pqDz1ymc for ; Thu, 2 May 2024 01:21:12 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E6BB33858C78 for ; Wed, 1 May 2024 15:21:10 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 4DB1F3858429 for ; Wed, 1 May 2024 15:19:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4DB1F3858429 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 4DB1F3858429 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=1714576785; cv=pass; b=Hd3u+Q81tUa2WXJwfEpgp34Of/kuvqsxi4EEbLeG3NlCqSYrVZicVQm71RNeUQE2v/rdq3OG2Vv48y/UAlHhniB/KmMjPdVyoq1p82KfsfCZamcazXhh1HVMu3cs79hiN+8odChzgy/2n2iYWH+kS7Ad2Y8pMP4CIyQgX3YyZCE= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1714576785; c=relaxed/simple; bh=TD1voB6vhRbU2sETMgRNJLbd74eDScWPshhveuNkMQM=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=kapzpDqzMfzCiR7xGr8pYlBKyWMbH81YW5/yRW6eZ7P0ajb0TO4ibcJf8HsO4ZyCz/k41MLJVQ+yhBPS1QJWYLOsRxsnkFqXUdxk7hizHa0vgev4H4Ic8MxNcK1x6cfgoH1wiJZnoTJUgor1GvEH+XuIomNo4N+qoNoSP9UkBL8= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 441ARlTW024843; Wed, 1 May 2024 15:19:40 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=nk9otAPwnd5zx4lo7eUAkvQ4+YyuRIdjoAOZdaJYWQA=; b=R9Tvn20cA2kxl3vuu0JQTT4EgAgxgNrn+4uClNlYsRZujRyFZApYtAErZE1+zP7X8Wgy r22OX/FRWtzUgWktgwOgJsep2iUiRbdQj0ym8tOJ6bHr+tVLEilfsI/fQ0ilqLhXBxnK pKwiWTRU9XaPBdOfbWyo7VHxfgJ6PSfi+34W/GQXu/4UtYMYfup6HnYNCACKLg9J3wbY 0Z1YYEq1OJDHI4wHTNtsVkwFdZVqvKqpWQlTUiCAPG/BOcaLEOt8JYJ6hM28LUWkY36m ISSR3kZ7OIvf39AzMSigMUw9K+dXBcPAdSjPhYyq1mgFCE/YDQ/yfvZnxgOJZXT0MUQ7 yQ== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xrr54fdsc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 01 May 2024 15:19:40 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 441F3MS3005048; Wed, 1 May 2024 15:19:39 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3xrqt8xafx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 01 May 2024 15:19:39 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lc94gKVHMic4yFlT1hpu9gASg+U+rcKvdoljdQsMoxZ+yFPAvSiIZheoRhNzk2zAtEt6B2Rty9PC1MohWibIPDf7aePi4g8UXyiXov5t2I7in0M5J0fNDPmpX4AND55p4IRIJNvfvr1xddn5xBB4Tpx/8q/LwRU9iY0vru1EYiswiyE5TcQpD1ELbkmGFgKvEa18oGJBkM7MwRAK9i/1/0cbM5znY+oNzJBrIEYy6J5AiNDGc4FmUUTewCNRr2iGn3M0ukOKUJTX2AoIkiFp4001q9ariStiQFk0X1SlpSGdVGXE/TGFdVUoSJm7/qB4vae6ICQVFRV48JnwOOrZHg== 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=nk9otAPwnd5zx4lo7eUAkvQ4+YyuRIdjoAOZdaJYWQA=; b=NqKQCKnEZYH3w5RQyNdsv+cZOVnf7emJPSvi0gfMFF4EPEkRhq5OnX0WUvgllfag5J+fpV7CG7LHvUv40PN6VsFqbZQi3u8GViZzUsiE+eZ1Zfixieyza+oi2qn8Se2dmRnUVe3gihDGM1539eo1XxQoukAUU8OsjrSOj5QYgeWaKLYjxCDIcyQHSr3sVmAwd62tsYMnu+r961w/ATtT8o15o1papMX6gR9TV/dyd8hze2fduuh8VCvB9iH52U9FkXutwmL6RROrIXVv9W+iHU+oMynC22u7vytaGn8hJmlVewX64YFP00ZGkm3ePevUjxFgrwrBYjQyriVY54zBBg== 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=nk9otAPwnd5zx4lo7eUAkvQ4+YyuRIdjoAOZdaJYWQA=; b=jew6QtPhl1eil91QKPs9im9Iup0xblFQpqAzxNtMbxeVN3QkZ1YkpXeYNLubr0mN5pW+5VkqhyQR2A9H4b6MK5CieKWCkJagnq/08lk8FQYIJLki4LVWq+idzhocUn9HSRe9Pf6PnMz92kD281dufOyA1iLF0r9XU8PtKHk85U4= Received: from CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) by SA2PR10MB4794.namprd10.prod.outlook.com (2603:10b6:806:113::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.28; Wed, 1 May 2024 15:19:37 +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.7519.035; Wed, 1 May 2024 15:19:37 +0000 From: Qing Zhao To: jason@redhat.com, josmyers@redhat.com, richard.guenther@gmail.com, siddhesh@gotplt.org Cc: uecker@tugraz.at, keescook@chromium.org, gcc-patches@gcc.gnu.org, Qing Zhao Subject: [PATCH v4 4/4] Update the C/C++ FE routines Date: Wed, 1 May 2024 15:19:23 +0000 Message-Id: <20240501151923.2895074-5-qing.zhao@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20240501151923.2895074-1-qing.zhao@oracle.com> References: <20240501151923.2895074-1-qing.zhao@oracle.com> X-ClientProxiedBy: BL1PR13CA0262.namprd13.prod.outlook.com (2603:10b6:208:2ba::27) To CY8PR10MB6538.namprd10.prod.outlook.com (2603:10b6:930:5a::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY8PR10MB6538:EE_|SA2PR10MB4794:EE_ X-MS-Office365-Filtering-Correlation-Id: eeeba625-6fc6-41b4-31c0-08dc69f21d15 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|1800799015|366007|376005; X-Microsoft-Antispam-Message-Info: 2Nu0JM8p7ekXUqurnLkcL3iTljiocV9BGwIr7AeVzpxiIoufWS8iYHf0KY3JrSFULgpGvpwYHN5hVOZksT3ScL8nsh503nKaMc0Ei5d3S4lzMW41UoSAJ3cCcKnSAntTcUogWv/CmWoHAkT9zWSNrgC360wljkJi6wt+7CPPKIdiS2r0+VZ/w9EqM6QBbe2+/eYANbTye2/kkvYO2zldD7Z2tLk0QziVSxyLVu6jzCHZBs6zKlPB0PiBKMtKreKBZwVkg15qXOyG7KZ9sb8pxZt+GYsTDPs3uwymoldcGOkf/sedIbKLPg/M/fnm/V/PeOVIgsoNaxaglq5zh0fVHzCRLSvh+1yhau69Sw+/f+xNY3NEkOv2qX2RD9YxFIdKPXrNVFLUCuhT1isiODpt8vjccw98bEjwnTIdFKQy7IrLvclfCt1BY9P3DZg7EMDombt0kD2u9/HilxKgP0xjVRKGdCNd8WSt0RQL91o/wl/XGQKI5L6yk8DvNpVUKo598XeYguMa6bGoPzLe9qgtzgpwCVD6yZJ3ig0A4Yzwbzd8fdFcTOH9N8ItZqUC9i8iwgWuY6AThXqoCPxdZPYLG6R3aci8llEtfQuzb7lwr0i6YnCK/qK6flsZdCIcprI6kQDUVBq+GQnxoiPg+Fz/nKtdHYbOcgcIsVQSFZyDCBx0y/Q8uNNB4Wp6xXvz6lumoVB/iJJBM6M8zvI/FE6+3bfqFkInxcKoqFDzkg+StxY3NfLtNqMwwVeanNkDS6gcHkLF5no3rnzq5PWfNRemMY7hKRMo0FkD01B6yp6p2Im0XCPcO0ZvWV0Zw2b4ifVczbIiUj3Q0kz9Dx8/bzoK9zWxeIgNQguOr0cJe6ef+qpL/H2hL0t4/IChI4ViNAsrYHZFvvCuIN4pI1E8yAcPl9VEzLNMnDSQ8R2P3pG7OgGti3Bgsg7SJUZ7V1Dy9MSK+fiNfpEHM76HwWV3yyNkZ422845fQ+Eg8QMA0kPrYIxwpPzTIAi1PEOGDv+1MF+nAoVVbSfzwVmCFAB/oU/D5fzjpQYhsidt0z05Xxg+hJffXSE1Hp7jqJ7nwIHYXGZi6R5sWPwR05bAM391XzTeMtIFWrV1/8tRRHlNbGvS32psoWteCPNiN7PtQ9v7y9BuZNm1hA+G5RY6umP/GO8heI4XyQUaRnIZa7WRL3PhmMj+jXLrYcYkzddgTaY2yk4aEg5pfVGYKcBfA8G+mMUvzFx3+T4CeUeSgfLjGaQtb9UqHMbuWdj4NR3ZnBXQtgTL9//UPnvqgLxJfMXx5XdRtw== 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)(366007)(376005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pWMOUouuKLEc+z2Eu2qVJCC0EJj7qRMtYRslILw3H4HWztzyhWLgR+csI8DQDp6tWFGGIHkeCf/0DW2ux2cxJQDQsvPgZL0iaSRt0igKCQ3mcvgAfosE05so/3rD4de8WgDPIFHBLHL8Xe/kErBiJTGda5Gvl2cLZStu8Yb0y9M7BnXSKXtgRVZ7nDeHEJtpETO8kTq5lj8/iPz1l0NOnWFDjPb+XX+2kEMolGw5E1ReGxP5KftisoqQHf1j0D7jC6SL+r/3BkG9bIuHx7kI1r+G9d8LECYylol6hCPuopUMPJVRBkAgBwA2F+3AVkBIOFmTDVnMOHWDPUunZlx9ejlG5fYxNi8gP8zTekYFGCbjqYhZtdAo+GCH43TrektavDsxPVbf+GERcwi/SV0vmyjjiCVBSsIiFok7tidy9l2lXnD297cpnL04+SHstx4hFLYN5lRiF522p/KwsBw9Xcm0aKFTWuyV9rRvDU/t76V7tV2YrlnlF+UgVz6jglk5k6ZJ6wLJxMLi6EyQ3GAAJskZxXAI7HZImNo84p0xPyZ1Oukaelr6rZKo3aQgkobpTK6O+LvHj0CL3nQvGrnSkNXJckJ5r0VzFCUfqlfioQca0aymd+aiYal44e2wPIkyX/QHbpUS0NouUD3f1NOFPHbT/Rn1swG/fBru2zfjNiJ5OnOa+Q0rr9My0OCNPokRVBC7Pj5SdbeNQ0gr5gPiR1tvi5wa/TR/2VlO8TefzQsz3MaN8WgLhwtYUpdJx4JEeHhg6eFkj34YH0oaBm47J9ntIPsxqHdpUCvmmdZBIz/wd9MknMxeU2V6Ka5Hnr1sOHW+X2W+yJ+yzl7qgSdN0xmA6/RpxN+4mnzB35xzlxezvqnq8aBeo7lFd8yQ+5nhgudihdgmyt2eO+92X0Y3fCHQ2dwVHmpusyzOIsbp+XgNXgJN7Jr+ggdBxoIvBgJh+va8EqxqrYXX81pyDJBH4KO/SzSyk3NIP0BH9JAOw8yl4QGHEJs9KBrLmP8YhHluGrKfeVhvIWFKBnujs+fqnRBt0YvAsLTj8+xHf0RUuTMmNaF1JjFbvEf2fNRVuFYfVwTMNVEy3J8s/pRHAoE4nMNk19mT/Vky7p88SmziEP+qh4/p951cTMnFW520hipFPuZJqP4OPJhn5UajGO8i5GeFIDreeJW0/Ar2/lMkmAmsa2BBV6JHOU5vIViVKD4Dvjme4iaClAZW8wgX/OdhmngMUtcFO/cewoEPJluxrK1OJ91E5imBGFTAF29oC6VSfwu1VXrfZMQkCpEFHReZhbov1k8jVXDlzhgw36bkNMAIkf6sniLFindYbsJPFBf3H5PmDRBDZW4gpGEAnYgGz91nDt/fgW6Vd8x3swofV76MfhEUN6TOVDV6ikgzPj7trQUQPchOoxQek9AsiFj+lQ2E2a8PIAD1P4kjtZITB7RKmEaX8AR7ovpk6MgJnoO9RPnMhWy1dnSR35jNWWOhLgG+XDF4X2BgOQpxDBp87aQ1DS3T6c2xRKnzcqjM3D14O1HTwp3Ho/XaHsQgK/lWvdN2KwDs25hFsTT0Y8y43iC3kANeTs4+CaGpNGHkns6C X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: /PGcR2zcoFpm05vFqgFB0uH+z5o6XUFdU9Su5SRwg/eM14/lXft6wYuNkYhkazoBNzQTMhJYQAKZ+bdPTR0YcMEuNJx/PSEmU4F1Qw8NYU04sCopo8qmH/yS8jQ6yF7Up7vTX6wT3sFKWaqf/he9YRrZzwZQr+NPdA3A4kuYeVVRpyar7jyzAlRFl09afQFOuCwe929vatnz0FGmYONFLlTQWxAOQSplhquPPWrC6GFu7J7/mH6YdWdyicm7fzU2LWCJyCTKuGGUCy+GAub3kQicJKh1+a2ux8QeObwAkcUb6RY3/0rpPXtmzeJeL9x7QEmWpUuwQolnzxCBhlO5XO/LeBO+dno2/tmbw3LzwOVYwfuv3FhDbaHIpsFglw7uRpk3zT5/8IzJgyZgfkwIvzYailPAd/pCw5CsT7elw6YlzBeZqVZhKEdXoEO6yW0Mx/AVn8lU/xGx9bo/2R0VonbHoowHf8q/f90BBZGSMFMiZdwUmgoLBBa5WZ9C9oovt7Sx9Z/HM/zd/bYvkA4JlSh3mtJThRIjrkXuyzWSGh/br9tCB6v+VEJ4ILuwxDg3ExQd8mxZOtF03IK/RT6YLVb155myZIQ/m4mOzZWTUqA= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: eeeba625-6fc6-41b4-31c0-08dc69f21d15 X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB6538.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 May 2024 15:19:37.1940 (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: wF3ojP4Vhv+oEZlrc5sdJFSWvaS1/I72Yg+psozuwcMFcNscJ+1ywR+0T8jfzDDmnj2xImJYzBgJuSPyLBQPCQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR10MB4794 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-05-01_15,2024-04-30_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 adultscore=0 phishscore=0 mlxscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2405010108 X-Proofpoint-ORIG-GUID: zBALXcwK0lK6HIjMBdkb2MkrVOW3Sn9H X-Proofpoint-GUID: zBALXcwK0lK6HIjMBdkb2MkrVOW3Sn9H X-Spam-Status: No, score=-11.6 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org "add_flexible_array_elts_to_size" and "layout_var_decl" to handle the cases when the DECL is union. Add testing cases to test the _bos for flexible array members in unions or alone in structures. gcc/c/ChangeLog: * c-decl.cc (add_flexible_array_elts_to_size): Handle the cases when the DECL is union. gcc/cp/ChangeLog: * decl.cc (layout_var_decl): Handle the cases when the DECL is union with a flexible array member initializer. gcc/testsuite/ChangeLog: * c-c++-common/fam-in-union-alone-in-struct-bos-1.c: New test. * c-c++-common/fam-in-union-alone-in-struct-bos.c: New test. --- gcc/c/c-decl.cc | 30 +++++++-- gcc/cp/decl.cc | 32 +++++++-- .../fam-in-union-alone-in-struct-bos-1.c | 66 +++++++++++++++++++ .../fam-in-union-alone-in-struct-bos.c | 45 +++++++++++++ 4 files changed, 159 insertions(+), 14 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-bos-1.c create mode 100644 gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-bos.c diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 947f3cd589eb..9ba92690daf5 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -5337,9 +5337,9 @@ zero_length_array_type_p (const_tree type) } /* INIT is a constructor that forms DECL's initializer. If the final - element initializes a flexible array field, add the size of that - initializer to DECL's size. */ - + element initializes a flexible array field, adjust the size of the + DECL with the initializer based on whether the DECL is a union or + a structure. */ static void add_flexible_array_elts_to_size (tree decl, tree init) { @@ -5353,10 +5353,26 @@ add_flexible_array_elts_to_size (tree decl, tree init) if (flexible_array_member_type_p (type)) { complete_array_type (&type, elt, false); - DECL_SIZE (decl) - = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type)); - DECL_SIZE_UNIT (decl) - = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), TYPE_SIZE_UNIT (type)); + /* For a structure, add the size of the initializer to the DECL's + size. */ + if (TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE) + { + DECL_SIZE (decl) + = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type)); + DECL_SIZE_UNIT (decl) + = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), + TYPE_SIZE_UNIT (type)); + } + /* For a union, the DECL's size is the maximum of the current size + and the size of the initializer. */ + else + { + DECL_SIZE (decl) + = size_binop (MAX_EXPR, DECL_SIZE (decl), TYPE_SIZE (type)); + DECL_SIZE_UNIT (decl) + = size_binop (MAX_EXPR, DECL_SIZE_UNIT (decl), + TYPE_SIZE_UNIT (type)); + } } } diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 9a91c6f80da1..78e21b05296c 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -6555,8 +6555,9 @@ layout_var_decl (tree decl) } } - /* If the final element initializes a flexible array field, add the size of - that initializer to DECL's size. */ + /* If the final element initializes a flexible array field, adjust + the size of the DECL with the initializer based on whether the + DECL is a union or a structure. */ if (type != error_mark_node && DECL_INITIAL (decl) && TREE_CODE (DECL_INITIAL (decl)) == CONSTRUCTOR @@ -6577,11 +6578,28 @@ layout_var_decl (tree decl) && TREE_CODE (vtype) == ARRAY_TYPE && COMPLETE_TYPE_P (vtype)) { - DECL_SIZE (decl) - = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (vtype)); - DECL_SIZE_UNIT (decl) - = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), - TYPE_SIZE_UNIT (vtype)); + /* For a structure, add the size of the initializer to the DECL's + size. */ + if (TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE) + { + DECL_SIZE (decl) + = size_binop (PLUS_EXPR, DECL_SIZE (decl), + TYPE_SIZE (vtype)); + DECL_SIZE_UNIT (decl) + = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), + TYPE_SIZE_UNIT (vtype)); + } + /* For a union, the DECL's size is the maximum of the current size + and the size of the initializer. */ + else + { + DECL_SIZE (decl) + = size_binop (MAX_EXPR, DECL_SIZE (decl), + TYPE_SIZE (vtype)); + DECL_SIZE_UNIT (decl) + = size_binop (MAX_EXPR, DECL_SIZE_UNIT (decl), + TYPE_SIZE_UNIT (vtype)); + } } } } diff --git a/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-bos-1.c b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-bos-1.c new file mode 100644 index 000000000000..aae9cf39c8c7 --- /dev/null +++ b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-bos-1.c @@ -0,0 +1,66 @@ +/* testing flexible array members in unions and alone in structures: + __bos/__bdos */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +union with_fam_1 { + char a; + int b[]; +} *with_fam_1_v; + +union with_fam_2 { + int a; + char b[]; +} *with_fam_2_v; + +union with_fam_3 { + char a[]; + int b[]; +} *with_fam_3_v; + +struct only_fam { + int b[]; +} *only_fam_v; + +struct only_fam_2 { + unsigned int : 2; + unsigned int : 3; + int b[]; +} *only_fam_2_v; + +void __attribute__((__noinline__)) +setup (int n1, int n2, int n3, int n4, int n5) +{ + with_fam_1_v = (union with_fam_1 *) __builtin_malloc (n1 * sizeof (int)); + with_fam_2_v = (union with_fam_2 *) __builtin_malloc (n2 * sizeof (char)); + with_fam_3_v = (union with_fam_3 *) __builtin_malloc (n3 * sizeof (int)); + only_fam_v = (struct only_fam *) __builtin_malloc (n4 * sizeof (int)); + only_fam_2_v = (struct only_fam_2 *) __builtin_malloc (n5 * sizeof (int)); + return; +} + +void __attribute__((__noinline__)) stuff( + union with_fam_1 *with_fam_1_v, + union with_fam_2 *with_fam_2_v, + union with_fam_3 *with_fam_3_v, + struct only_fam *only_fam_v, + struct only_fam_2 *only_fam_2_v) +{ + if (__builtin_object_size(with_fam_1_v->b, 1) != -1) + __builtin_abort (); + if (__builtin_object_size(with_fam_2_v->b, 1) != -1) + __builtin_abort (); + if (__builtin_object_size(with_fam_3_v->b, 1) != -1) + __builtin_abort (); + if (__builtin_object_size(only_fam_v->b, 1) != -1) + __builtin_abort (); + if (__builtin_object_size(only_fam_2_v->b, 1) != -1) + __builtin_abort (); +} + +int main (int argc, char *argv[]) +{ + setup (2, 3, 4, 5, 6); + stuff (with_fam_1_v, with_fam_2_v, with_fam_3_v, only_fam_v, only_fam_2_v); + return 0; +} diff --git a/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-bos.c b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-bos.c new file mode 100644 index 000000000000..21badc57982b --- /dev/null +++ b/gcc/testsuite/c-c++-common/fam-in-union-alone-in-struct-bos.c @@ -0,0 +1,45 @@ +/* testing flexible array members in unions and alone in structures: + __bos/__bdos */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +union with_fam_1 { + char a; + int b[]; +} with_fam_1_v = {.b = {1, 2, 3, 4, 5}}; + +union with_fam_2 { + int a; + char b[]; +} with_fam_2_v = {.a = 0x1f2f3f4f}; + +union with_fam_3 { + char a[]; + int b[]; +} with_fam_3_v = {.b = {0x1f2f3f4f, 0x5f6f7f7f}}; + +struct only_fam { + int b[]; +} only_fam_v = {{7, 11}}; + +struct only_fam_2 { + unsigned int : 2; + unsigned int : 3; + int b[]; +} only_fam_2_v = {{7, 11}}; + +int main () +{ + if (__builtin_object_size(with_fam_1_v.b, 1) != 20) + __builtin_abort (); + if (__builtin_object_size(with_fam_2_v.b, 1) != 4) + __builtin_abort (); + if (__builtin_object_size(with_fam_3_v.b, 1) != 8) + __builtin_abort (); + if (__builtin_object_size(only_fam_v.b, 1) != 8) + __builtin_abort (); + if (__builtin_object_size(only_fam_2_v.b, 1) != 8) + __builtin_abort (); + + return 0; +}