From patchwork Tue Jun 20 15:22:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qing Zhao X-Patchwork-Id: 110585 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp3746388vqr; Tue, 20 Jun 2023 08:25:55 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4C/EojuVMvIM+klhQSOxE8YV1FF5U3PngDBokQBKsMEV21I20RyJN5YCTpQmpZeZy7hIO+ X-Received: by 2002:aa7:d5d5:0:b0:50b:f9d8:ff72 with SMTP id d21-20020aa7d5d5000000b0050bf9d8ff72mr9525816eds.31.1687274755418; Tue, 20 Jun 2023 08:25:55 -0700 (PDT) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id n18-20020aa7c692000000b00518744a06a4si1253502edq.83.2023.06.20.08.25.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 08:25:55 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=f9hwWQYg; arc=fail (signature failed); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 81F11385772C for ; Tue, 20 Jun 2023 15:24:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 81F11385772C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687274684; bh=edCDMBzlBJXkmQotyzwcuT0pHjk4LDlJEk8SkA3CmnQ=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=f9hwWQYgWGqafN8OqNsF/yH2JdvvfPvGqgfK3T8jsfDZV5Jm2a7xK4wmGTbDO5JUV XAFoRG5zyXGmUBs/pRpYg/nqIsePE4vVg2rXHSbRKllbwdRJ9Yg9w4wWz/adJwvSja lUXodC656wibFm8ckKbHrMqCSH9rDM++kmZR/p4I= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 30E653856DE6 for ; Tue, 20 Jun 2023 15:23:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 30E653856DE6 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35KBu5AI001342; Tue, 20 Jun 2023 15:23:25 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3r93e1d2hg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Jun 2023 15:23:24 +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 35KEV6om038725; Tue, 20 Jun 2023 15:23:22 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2171.outbound.protection.outlook.com [104.47.55.171]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3r9394rbke-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Jun 2023 15:23:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UqimnS11IgIXv8sWbxxBXDelMz8rKe4MHGvvZVXsHxQDvRLi5JRQ76XzNVQooDfXwr+gwvr75FRjw5qkAPUxkhOgfi1fz/6g8IYn/DbJFXq4MOtkAGBw0RY71NrjJLzeTOMo5zfXhdA5NbaWHDo+nIfUJbLrKk1CslLoE/UTV9f1zEGqq8knpg/Vlbi9eFLDPPEkdwDJGDADNb9a9sttNewz8prCqslHCV5WHaDvT/EqtdOcJ2PeJgPz6vZt5D0Wk6ZCarbisaxMLcOAEMRcLAB+T6UCvfWm92M6F8RfJahrM1caWDSKROA0u99pGfwjWJw1z0UpeMOXdeYwUAe2bg== 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=edCDMBzlBJXkmQotyzwcuT0pHjk4LDlJEk8SkA3CmnQ=; b=LSVXMNezF0CTxnxNV6VW0YtlbZoCTAE8bD54qo7KvelVUMcRDxaIiOzs00OHK5IENaeLCcSjQEZeBNFnRvn+xs5/0MRfMi+SMu8Bp63LZAfZxQriXX847BOaiCnXk7lVe6HPahYnJNTFi+uQsHV38Owqkh5xBBt9SOCEj2iIt2DwtwSQ3Z3U0EYF4jv8GJxJYBDDQFCEvN1l8nEg2bdLDwE0z1HBFziGPgAUm1qNosfWhudRmC9D0+twzzdJdVrj1y5yeBmFsOdAdbJOoq5JJTGzxV5WIjxNMB47/0gviPFTYP6ahknDxujPlxIKg52yyV8vvB8GY97AmQbA2+DCuw== 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 Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by MW4PR10MB6437.namprd10.prod.outlook.com (2603:10b6:303:218::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.37; Tue, 20 Jun 2023 15:22:53 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::8d90:607a:f94c:5323]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::8d90:607a:f94c:5323%3]) with mapi id 15.20.6521.020; Tue, 20 Jun 2023 15:22:53 +0000 To: qing.zhao@oracle.com, joseph@codesourcery.com, richard.guenther@gmail.com, jakub@redhat.com, gcc-patches@gcc.gnu.org Cc: keescook@chromium.org, siddhesh@gotplt.org, uecker@tugraz.at Subject: [V10][PATCH 1/3] Introduce IR bit TYPE_INCLUDES_FLEXARRAY for the GCC extension [PR77650] Date: Tue, 20 Jun 2023 15:22:44 +0000 Message-Id: <20230620152246.311493-2-qing.zhao@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230620152246.311493-1-qing.zhao@oracle.com> References: <20230620152246.311493-1-qing.zhao@oracle.com> X-ClientProxiedBy: SN4PR0501CA0116.namprd05.prod.outlook.com (2603:10b6:803:42::33) To CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4344:EE_|MW4PR10MB6437:EE_ X-MS-Office365-Filtering-Correlation-Id: 304ae08e-204c-496b-4595-08db71a23774 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8dvIth0jj7cFvrV4cy1jeOa3Cwn33JX9QBdojvypBeDyOsHf3DCGsIeh2+hy3gPRfs8ob6s7ba7QU1fyMtV5VwvnZ8i5JgR6uAqMng+RBuXP5ZwD5hOPpofto6nD1bVzPUxu0hb0o99DHI0698mT7AfMsLDHtCcPiR3A8NJBp+PLktzh8aLmTOtmf0hs8l/+zncTLyJHZCjlHw6DvCHU5yYnZd34QZrPMwuOO5Fr8A69aXslyfwqNOx5qbTkjBgPme1m3sqT3pNW9dYBIRhnrgIzw0B71R6QggLkyKFCG5YRUyx6eeyMtvJTUTLlfIxcmZ0ASwV6E3qAZC6Kp58XmXVFHHsol+miE5evfniflH7jGJh/mE4v2zCXqn/Oqt26/yinpx+6eYMJjhN9ml79HUOvRE5aXfmJPafiLsVwmFlF1oIGqiyD/Z8JRFib16xwPNpvGyJxJGi53EhN+KM59S7NpCw7ZTr6ZxBXHgZ8HAq3/yp59xyYzFydQeP1i1NRF0ZaHsyG840ZVmyI9C8UTh7UouySk55+sptyl/PEosC+U14rJtP+lCr7aLyww98l X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR10MB4344.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(39860400002)(346002)(366004)(376002)(396003)(136003)(451199021)(6512007)(6506007)(1076003)(26005)(2906002)(36756003)(86362001)(8676002)(8936002)(66556008)(66476007)(6486002)(66946007)(41300700001)(316002)(4326008)(2616005)(186003)(38100700002)(478600001)(6666004)(83380400001)(5660300002)(44832011); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NYTu4lulRyvcUnlhTFEYyguXuwEll8vUVg920f6Hdv/s/lD/aTbM82Kx/nlHaHkVGrB6xx2AYfDzKbhCuM2ASpXrAbmWtJfn4sTSH/AiE/89cjJLldRHNcvJon1AJ1dsi4Uei63SOeDvr21BeUWkwvp0Fi8iHNUoS0FzF9bl83fc2V5OXinNEthHE/WFGt73jntZkmJ/pJaV4Tn7tM5YQsYOdB3BBeQc6xY8MaX1Jxe9BJM68x9z7QOkpqysfIBtHXGprY6k9oeWqm4AaS6L6ZEiXLXSJdJFvkKrJwPMASXNP0oGVgoNV61G9da5G8CxYg97chrsqwn20Xrg8+/9ZyjJ/Eb+Ar/QGmq4wc8kECBPdcGI4MEiRCmR0VKBiGZnaiGcfRDLz7EDB07Y8ZHUGOu4TJWKmcj5iRFgQPhAUvghDU9YMkiAuJVmX6Z3DTooZe/tTvhjypzZDkuyznWee3lzQSEBvlqDRZr+3TVF9ZBJuIapr+YJoTTUoAbGY3maljkjXRSofQwHgboj96iLdXITjrhXGYspuwvuXZ4IZ8SMozMDfxifH8fS/FkSD2ldSadwOtCjtk2RwAUvLFNc3miX6206eaKuLKNRVmZFftTNlcWqPRI/QSwcVJ/m8EpAKSLBZ/eJjnq3XzjnQpZG00FfFBNDTpxV+gdHU5Rbq1h/vnl05IDDdUwRQZ9DmI9WEpVA/hUdmMU0TiAoTuUBic/6COugF2djXoUs9p/2pILJ1ozTgGIJIdycOigB4PCM4iraxlZARDhAFPH7EH64VHpANjScCerX2gBHx5tLBxsh1TTxMEoRUVESsb1N0+Bo4+2VPXboocEOdWnHrrK3U4BjiojshgM5Ee6ZSb2hG6+lxQuJhqwcvEuCyuSs1M1lve0EmFwRcLonzUrVBK8VsWRrjFrY9ZXonYV7cHT4iu6rlY8hfICbxBA6EVQaJmoAoYgBrh05Xw5vU9HRukf1aiL+/LM3/bAkh4IxwF7ylhD6eMOtPP3HJO7ybr7PGW5dLN9upbgt2v42vZFHnURUICVUtNY89kySlD8/ZOF+wInlTKK6rsAzzwRZvhj4hONpz3XBq4XCX+OSBSu6m6gSrB1hXpZW7iRi7WAbswEk/hj+qWjQjxG7FDSHu06QzFSVrI8E64RJ6ykYGPInAjCpQKAGpp9bprg22zMp934fbtFhrjq3c1M+fULTUrs/E7/MtGSz6+j7QTGm6NuOMeIySsDT4aJcI7z3Ufv+q1zbqseCdPTkY3MMPlOMxV68d2eO6R0YR4YgnSQuESbRYpcTpPyrFxdqkNOCFLDcGtx81EF87b50uMg0JUmnzuj9WzYdHWNagVcXOeiBpAzORBSESMgQdytSK9wQLnu/Et+pOuBvl5VepPEnAxEje5ZzTkSi0dto12c31tGpcC7rb63X2W1hl0NCzynD5RuMKS3eabwmfk8zOe+fIQtUZyw4SyKExpWFfdnl3UAep6U3LbhNBeucQjT8BPqK5AHQM3GLliUgJqdTPGQmdlEsOblFKHhSHljnOOwfVtbAkVbzNbAj9whjbkPrUJskrlFaSvdACZWpWo0JOICrcq29mzk71TvJ X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ydjpBAGnJAWtPPGSJzjg9wr4Eh+onbSikQIZs3SSEA2uzlwibi24uSMWJbaQLILG8EnOh+7raPzYJU1dgQAyW/6yRLwVieJ75e8jbAwc0NY7TUQEmvXxk7Xug9neQoF4weLIZhiRlsskJl504hShlg3jVNgy6jPb0UhmexuUHETUDhDEL0Ae6ZRKmoYgKeyAKeAuATIp7X+E485X77LZT9YDkW3iLOFPDekA2xaCsW4LrHBQMiQsLodb0X4yG/4b794rqjDx6163h/Dhuf6tX5CebufU7gMWI6Zw34Z98vWML1PHAtgY5Se1gmXH47gMZjExrMJxwpl9ymgvnjEOvi8on/B/d5rRgB7Z+RJNCmo0EjABH5Rd+x6raCLsRxwqGk4IsEVlu3jIyHGGO+B8FOoXZEHy3MPZvd7iRSg4LB4tXXxqtDUaTxRo12G3I84MPpj93xrbQDy9ae7BqFDBp816/k2E0DxOwKjTFMHBZ1Ids0bj1QbQbteeVs9KigQyICRQHqbSDdcg6c7ouvY0MBEeaczfxmqs1UnPVF/mwB9eddSS6QV9HB7jwwnOSOVknhI2p2t63rE3xCUr/fvsx04KM4IeWMscFPUiBjtAuFrH7de3+6bOiEmtZN/IXJM588JB3goOrqTES5FSM9Pv0YERd2+fRdVP9CnFsbejpI1MqSod3iAEz7pKP3091hb55YwkC0WQNt3ZzbA0tvxiNoIsZb5kLduIQapExxflW1Nix0D7rSlcFaTRJYzkFkLX3O6dAs517eoXvkxH+7QqBFMJ3EDGpL4TtPupdBp+F4bOXMJ8w7iLeJxIaQhTDibva4Q//ZPgd5+Oaebz30O/7hHuMf3X7+V8EoHcZAVEzJV4p/ckbNY8ejogtYFY8LtOYx0W2iV7FobNrEkiZYq2/f4yX2lJY51Hg2bO/FDyFiHEqYLyf8eUICg2yeMS6XeT X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 304ae08e-204c-496b-4595-08db71a23774 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2023 15:22:53.3417 (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: okW3F3Rug+O+F3CjuVq6qd48pQLOBHu7534gX51dowRH0BSw9+TlufmftzovaZwVfI+oMELYnrRBWjm9YU7ieg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR10MB6437 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-06-20_11,2023-06-16_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 suspectscore=0 adultscore=0 mlxscore=0 mlxlogscore=999 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306200139 X-Proofpoint-GUID: 7gMs7HZAmccI5ZCOwwadi8nwIdO8IahX X-Proofpoint-ORIG-GUID: 7gMs7HZAmccI5ZCOwwadi8nwIdO8IahX X-Spam-Status: No, score=-11.4 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_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Qing Zhao via Gcc-patches From: Qing Zhao Reply-To: Qing Zhao Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1769235813996135183?= X-GMAIL-MSGID: =?utf-8?q?1769235813996135183?= on a structure with a C99 flexible array member being nested in another structure GCC extension accepts the case when a struct with a flexible array member is embedded into another struct or union (possibly recursively) as the last field. This patch is to introduce the IR bit TYPE_INCLUDES_FLEXARRAY (reuse the existing IR bit TYPE_NO_NAMED_ARGS_SATDARG_P), set it correctly in C FE, stream it correctly in Middle-end, and print it during IR dumping. PR C/77650 gcc/c/ChangeLog: * c-decl.cc (finish_struct): Set TYPE_INCLUDES_FLEXARRAY for struct/union type. gcc/lto/ChangeLog: * lto-common.cc (compare_tree_sccs_1): Compare bit TYPE_NO_NAMED_ARGS_STDARG_P or TYPE_INCLUDES_FLEXARRAY properly for its corresponding type. gcc/ChangeLog: * print-tree.cc (print_node): Print new bit type_include_flexarray. * tree-core.h (struct tree_type_common): Use bit no_named_args_stdarg_p as type_include_flexarray for RECORD_TYPE or UNION_TYPE. * tree-streamer-in.cc (unpack_ts_type_common_value_fields): Stream in bit no_named_args_stdarg_p properly for its corresponding type. * tree-streamer-out.cc (pack_ts_type_common_value_fields): Stream out bit no_named_args_stdarg_p properly for its corresponding type. * tree.h (TYPE_INCLUDES_FLEXARRAY): New macro TYPE_INCLUDES_FLEXARRAY. --- gcc/c/c-decl.cc | 11 +++++++++++ gcc/lto/lto-common.cc | 5 ++++- gcc/print-tree.cc | 5 +++++ gcc/tree-core.h | 2 ++ gcc/tree-streamer-in.cc | 5 ++++- gcc/tree-streamer-out.cc | 5 ++++- gcc/tree.h | 7 ++++++- 7 files changed, 36 insertions(+), 4 deletions(-) diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 1af51c4acfc..e14f514cb6e 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -9267,6 +9267,17 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, /* Set DECL_NOT_FLEXARRAY flag for FIELD_DECL x. */ DECL_NOT_FLEXARRAY (x) = !is_flexible_array_member_p (is_last_field, x); + /* Set TYPE_INCLUDES_FLEXARRAY for the context of x, t. + when x is an array and is the last field. */ + if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE) + TYPE_INCLUDES_FLEXARRAY (t) + = is_last_field && flexible_array_member_type_p (TREE_TYPE (x)); + /* Recursively set TYPE_INCLUDES_FLEXARRAY for the context of x, t + when x is an union or record and is the last field. */ + else if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (x))) + TYPE_INCLUDES_FLEXARRAY (t) + = is_last_field && TYPE_INCLUDES_FLEXARRAY (TREE_TYPE (x)); + if (DECL_NAME (x) || RECORD_OR_UNION_TYPE_P (TREE_TYPE (x))) saw_named_field = true; diff --git a/gcc/lto/lto-common.cc b/gcc/lto/lto-common.cc index 537570204b3..f6b85bbc6f7 100644 --- a/gcc/lto/lto-common.cc +++ b/gcc/lto/lto-common.cc @@ -1275,7 +1275,10 @@ compare_tree_sccs_1 (tree t1, tree t2, tree **map) if (AGGREGATE_TYPE_P (t1)) compare_values (TYPE_TYPELESS_STORAGE); compare_values (TYPE_EMPTY_P); - compare_values (TYPE_NO_NAMED_ARGS_STDARG_P); + if (FUNC_OR_METHOD_TYPE_P (t1)) + compare_values (TYPE_NO_NAMED_ARGS_STDARG_P); + if (RECORD_OR_UNION_TYPE_P (t1)) + compare_values (TYPE_INCLUDES_FLEXARRAY); compare_values (TYPE_PACKED); compare_values (TYPE_RESTRICT); compare_values (TYPE_USER_ALIGN); diff --git a/gcc/print-tree.cc b/gcc/print-tree.cc index ccecd3dc6a7..62451b6cf4e 100644 --- a/gcc/print-tree.cc +++ b/gcc/print-tree.cc @@ -632,6 +632,11 @@ print_node (FILE *file, const char *prefix, tree node, int indent, && TYPE_CXX_ODR_P (node)) fputs (" cxx-odr-p", file); + if ((code == RECORD_TYPE + || code == UNION_TYPE) + && TYPE_INCLUDES_FLEXARRAY (node)) + fputs (" includes-flexarray", file); + /* The transparent-union flag is used for different things in different nodes. */ if ((code == UNION_TYPE || code == RECORD_TYPE) diff --git a/gcc/tree-core.h b/gcc/tree-core.h index c48a12b378f..668808a29d0 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -1713,6 +1713,8 @@ struct GTY(()) tree_type_common { unsigned typeless_storage : 1; unsigned empty_flag : 1; unsigned indivisible_p : 1; + /* TYPE_NO_NAMED_ARGS_STDARG_P for a stdarg function. + Or TYPE_INCLUDES_FLEXARRAY for RECORD_TYPE and UNION_TYPE. */ unsigned no_named_args_stdarg_p : 1; unsigned spare : 1; diff --git a/gcc/tree-streamer-in.cc b/gcc/tree-streamer-in.cc index c803800862c..be2bdbb7699 100644 --- a/gcc/tree-streamer-in.cc +++ b/gcc/tree-streamer-in.cc @@ -386,7 +386,10 @@ unpack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr) if (AGGREGATE_TYPE_P (expr)) TYPE_TYPELESS_STORAGE (expr) = (unsigned) bp_unpack_value (bp, 1); TYPE_EMPTY_P (expr) = (unsigned) bp_unpack_value (bp, 1); - TYPE_NO_NAMED_ARGS_STDARG_P (expr) = (unsigned) bp_unpack_value (bp, 1); + if (FUNC_OR_METHOD_TYPE_P (expr)) + TYPE_NO_NAMED_ARGS_STDARG_P (expr) = (unsigned) bp_unpack_value (bp, 1); + if (RECORD_OR_UNION_TYPE_P (expr)) + TYPE_INCLUDES_FLEXARRAY (expr) = (unsigned) bp_unpack_value (bp, 1); TYPE_PRECISION (expr) = bp_unpack_var_len_unsigned (bp); SET_TYPE_ALIGN (expr, bp_unpack_var_len_unsigned (bp)); #ifdef ACCEL_COMPILER diff --git a/gcc/tree-streamer-out.cc b/gcc/tree-streamer-out.cc index 5751f77273b..6d4a9d90da6 100644 --- a/gcc/tree-streamer-out.cc +++ b/gcc/tree-streamer-out.cc @@ -355,7 +355,10 @@ pack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr) if (AGGREGATE_TYPE_P (expr)) bp_pack_value (bp, TYPE_TYPELESS_STORAGE (expr), 1); bp_pack_value (bp, TYPE_EMPTY_P (expr), 1); - bp_pack_value (bp, TYPE_NO_NAMED_ARGS_STDARG_P (expr), 1); + if (FUNC_OR_METHOD_TYPE_P (expr)) + bp_pack_value (bp, TYPE_NO_NAMED_ARGS_STDARG_P (expr), 1); + if (RECORD_OR_UNION_TYPE_P (expr)) + bp_pack_value (bp, TYPE_INCLUDES_FLEXARRAY (expr), 1); bp_pack_var_len_unsigned (bp, TYPE_PRECISION (expr)); bp_pack_var_len_unsigned (bp, TYPE_ALIGN (expr)); } diff --git a/gcc/tree.h b/gcc/tree.h index 1854fe4a7d4..84e23aeba44 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -807,7 +807,12 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, (...) prototype, where arguments can be accessed with va_start and va_arg), as opposed to an unprototyped function. */ #define TYPE_NO_NAMED_ARGS_STDARG_P(NODE) \ - (TYPE_CHECK (NODE)->type_common.no_named_args_stdarg_p) + (FUNC_OR_METHOD_CHECK (NODE)->type_common.no_named_args_stdarg_p) + +/* True if this RECORD_TYPE or UNION_TYPE includes a flexible array member + as the last field recursively. */ +#define TYPE_INCLUDES_FLEXARRAY(NODE) \ + (RECORD_OR_UNION_CHECK (NODE)->type_common.no_named_args_stdarg_p) /* In an IDENTIFIER_NODE, this means that assemble_name was called with this string as an argument. */ From patchwork Tue Jun 20 15:22:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qing Zhao X-Patchwork-Id: 110579 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp3745576vqr; Tue, 20 Jun 2023 08:24:35 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7jyNm4Zhf2uGXmI/3rJ4PM6wHGTIi05/PpqV/axpP3uZ2W8A72tHEHCiCf0zTi7sFL9Dy8 X-Received: by 2002:a17:907:6e10:b0:988:8d88:1ba8 with SMTP id sd16-20020a1709076e1000b009888d881ba8mr6238063ejc.30.1687274675257; Tue, 20 Jun 2023 08:24:35 -0700 (PDT) Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id ch26-20020a170906c2da00b0098376a66e11si1199797ejb.563.2023.06.20.08.24.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 08:24:35 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=OxvHYR9V; arc=fail (signature failed); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3F05E3854E42 for ; Tue, 20 Jun 2023 15:23:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3F05E3854E42 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687274631; bh=YnnW1/ssq8tTNRRjnvPSi6rFa57pVfnl/8qHzfEPtIw=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=OxvHYR9V5VEvTwJeAaJ/LNEwRX8L6lG87v1A4GPSDqRVAmCamkVvtUVLpAwy8zk/9 pXzxH1SYrh0jTNzsDAxxnwaEhylrIRhlnXtUyLsA7uLGbCiEcgT6DyHUsMlhMa1aDI eGfXajiQAspbQwaW4T10/YWTL7hYasYKMJ8/TkJk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 46A2A3858000 for ; Tue, 20 Jun 2023 15:23:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 46A2A3858000 Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35KBepFo013014; Tue, 20 Jun 2023 15:23:01 GMT Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3r93rbn3ka-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Jun 2023 15:23:00 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 35KE4n5S005908; Tue, 20 Jun 2023 15:22:59 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2172.outbound.protection.outlook.com [104.47.59.172]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3r9394gxkj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Jun 2023 15:22:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NeF3aGKSaIqDHBvkdvwx1ysGT6ZLetXZY0GcrrUDKv2Eh0K4+VKdbpKpDf2I5qDSD6+1vVufWgD72V9p+Yp72EUsX1PfGkhTlCvFfSSIfIWZQ8f+UtQ86EfFsIU9WrhLs6uJPAYu8BA981eDfQWc0wYZ6TMkjfNZFY3qcslFfS8jF2Eej2sYdlHGPfhsNuTQy4aKAd6C5MJXc7uZH9s3heGR/ynRAEh023bGRpXlc3eFhAszeMb2SM5fAp+vkXGzrNPVI0fce0DTS0s38H1GhbLboPVUeqA5+cKkHpbpcUL5xPJHxSKllRF/RQUJhQgh37EOK8uxA50BZjf5BeZylw== 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=YnnW1/ssq8tTNRRjnvPSi6rFa57pVfnl/8qHzfEPtIw=; b=ae8hBWcSo6XDtxi+JGtUWxoQ6nFt/Opekvw22bWfqtHT1+Kt4WnX+/b0wNRfMgwY8Ei5BSiJd789r6q2Wl84Y5DE2hVdWxEjhCw98kzfZCH+BrmFpTfw68MMAKYGt1nve1HMnjkn4OKR+Z3JlW4w1E8IT4L6Ma5PN1p+WptezS4cNA1i8Ut+drJo41a22DvlUYYeJCoEmqua0QdSjEU2MyjGlWFoUA9DTAivvAkZQlmV5/Yy/C/7e5XbretpUX/ESAKJdZ2eNmMQWYNVhOMgTVXfopxa5693HjXHhFxIfkF6X4NIZVk0gdR9wP2ioTh6WGLh4ZVvP0vMPFp5q6Vcrw== 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 Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by CY8PR10MB6513.namprd10.prod.outlook.com (2603:10b6:930:5f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.36; Tue, 20 Jun 2023 15:22:56 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::8d90:607a:f94c:5323]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::8d90:607a:f94c:5323%3]) with mapi id 15.20.6521.020; Tue, 20 Jun 2023 15:22:56 +0000 To: qing.zhao@oracle.com, joseph@codesourcery.com, richard.guenther@gmail.com, jakub@redhat.com, gcc-patches@gcc.gnu.org Cc: keescook@chromium.org, siddhesh@gotplt.org, uecker@tugraz.at Subject: [V10][PATCH 2/3] Update documentation to clarify a GCC extension [PR77650] Date: Tue, 20 Jun 2023 15:22:45 +0000 Message-Id: <20230620152246.311493-3-qing.zhao@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230620152246.311493-1-qing.zhao@oracle.com> References: <20230620152246.311493-1-qing.zhao@oracle.com> X-ClientProxiedBy: SA1P222CA0070.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:2c1::26) To CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4344:EE_|CY8PR10MB6513:EE_ X-MS-Office365-Filtering-Correlation-Id: a756e411-08dc-4ba2-db43-08db71a23968 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MAp+xDS2vR0u9YeZXnIS7wRxwhitTo2NSQbjnSENAKFGH8Z+vQQm9xgNv6Cgmbin+2PK5W5aUR6v2QfodGe2ZD2jj4OyYIXDxPBKNYmpS85AupTNSy1P/EBg0qJN2ABDFzy+i6+iCQx0xLAa4B8xG7y6EWeUq5lQsV8ADuyKDeo2iH83/yxZtpVUHj1CSqRcC/ea0CwnM4u6hxhVQ5wwAVvywyXkICmbERcohyb1aNnxU5WXCn9NSkHSBIAc3LPaTExABN+D3y6PXhchHpjOnndSzQuYQ3CownMdN4kzGfsTq0SFdrGEzQrSnHhdXKniEkqhEZ+R347mLHIe8gSN5GklvL4cxDn6eRBB8Z77cFb3YxpgmEAiqtJGFPHkO8soE9NYDFaWzWXYGSZxqBTp+a192VMCGiV/4uSXXEenAoJad9DOx/uxrreHvshk8p04ocSlXUYUM2Zqmzg57y8oZLGyg2q8+wiqiOmB7BBC83EtWP1Trm8H2q03oWgEk3GWlv860k8FT9Ylb5piPGe3zMRe3l/UlYPnRq7axqa4MSg= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR10MB4344.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(396003)(346002)(366004)(136003)(39860400002)(376002)(451199021)(44832011)(86362001)(41300700001)(8676002)(8936002)(5660300002)(66476007)(66946007)(66556008)(316002)(2616005)(83380400001)(84970400001)(38100700002)(36756003)(186003)(26005)(6512007)(6486002)(6666004)(6506007)(1076003)(478600001)(4326008)(2906002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: tyvNVmxzsHNLMRc1XYfOX0HQPwWv15S6gquYPq/iuXUb9F4W2lCcoo9M+wiQz4Irb8leb1mSORacLKNscNpz3VFRnVqBazSNaHu7MB2YD1EDSWrNtdYVJMaPLdecWczD2/dHmOC8QMyH2cDfQbiPzKgOLq7j0074K3ZXtIZMu1yA+CeO649ijj7JU2mjSCyG1DH/+k/R48mnG+oC7o/0zSzqdhMrkXetPWD2j179ehjtGJ9qp+Ru9n9VNSZ2sxWa6roemYH4stdfLZUm61mWONpWNAy0xVn0hYtJVgCx08uzv2kvMl8lvhOkb6wbuUFLF6TpHjr6lhhNqZ7bhhRzPhED5O9MnblCaN78ZOMUmvZUM/p6BkcSd5GaNktYIr1Y5c7NNvSw9cJstw9LqoSEKzZ3b4kR38d7UTueuvZQNZHIfli8HtR33VgQ/wE0Kp+NPKnG/+EMPBEdXtKShGL1nYDCHYdmSYyK0zHGba9F80mU05R4dazdO9gUFdDCs4blbxKDF1eR4FUtmmmElIoHax5iuQZ3vw7dmOcHC5X/2cGgPE6wsfPrroYiKg+hgQ++6FO2ZDEd16DOJA/ZSkvz9EDPfG1fJYFUzBiLTWXCNzJj2yhDif71QwcfM1S7WlvToUbdzRIivZw6gl0akW9sJlXHMh2VpM439w+EL20tIPlAhvGj8rTaJ/5QbrxOT3VkYTa297mpi1TqRWIXKDdlPxYNv/iQNUR9zr5PhNtGS1rc4cMceBRsNy6DnuNHljc51ZIqXVmhk6qADqnrpB9pdyOK0CBx/Z0XIiClxpxgqisWwbAB4h9NBpSlOgpGBzurlQg3III/jxzAO0hcrHBtIN2ROpDUBFQu7PvODihS62gMXF4cDl8VlWY2uSHsqeT8DBLr66aAbqvBsebYo3uNYSgBP0vb0V8chCLkcmLhlu18YnT75hk71oGsNisbVImEzc7Hsth/fkM8zANimxXGG/ReLnZzL+ao4UdV1GbQmd43QZIhQpxF/Cy4ciGhmj/TxkhRbq2H1WXsIKX1w92FmZNxzCyojd/crZYe3KK5NX1kUzjh19zS+I7cXFwTHc9R0SJoy1ARKzWdI+UG83RYXC4h4wLOUjwEGZ+qCj8U0+dpNzysgeke7Pp1aWmQsen7xUJWaIEpGZ7AivJ3yuKspowaOinR8gfK/rhxZQKSPvkaHZ1oQT//O6+P+kxB7sLQ2sJORPXSuFS8UTRQe+9x/p6bOh53HEZDmO6uJkV2bXfdLVxwRwaxw6HRxtHba8xOTqhvWLOj5UxfoqsGr9o+idwfEM4lJhZ8ZsECAjBEV1xxKnqgebveJIyTqnieLQTFlz1hwHh2T2mgTn3ueDgc9rdlB1vvvLHQAOFuhq9xOWjNKgiLOZhil3vnPFrytFAQ4+LtOcSqFWzR7ssGSFY1pAAR6p3bWnVu7yErlvdeJpKZcFObKd7HjEp0EpT8tZplo4EOucz/LLk0RcAeSjdZqagw2eyltVUKe56IRO6dGZBvHhQ1rqVVshY93rhxxhOmSYmLNWVk3aFyJZjgMmzsCRfQqZ050sOPerTbRh7XXnIQM6tuFHI+T9tlyxuivq1X X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: QVCGkmGerCL/MOh36ksPIbFKtgzye/Qh9WMjC+ypNuwE3dQGFUpQV25ih7E8kkpZdcyU8MhUqgUuhxpT29yxkwehQx/fr19nPF7HY1L+s4NvqaUvQOuVKYH+8vgOOo5Ppzjnu74Fq8jyOxL4ZQpNOcp/pQ1+0yf6uXT03EPTDHMTrcMezOFuA/cS/Ym21vE0OTklcv2JEm0QI6/1bKU1KdTxk+42ZMsrqZiG7IrNJlNONwUMfb6uLzcGJyIygcr3WW0iS+oI6NVDGJezIYNrznk0+bApqPNThee8WFyYJUQAEERIN8VWvRL/qKd+LMdO6ZdTMchSBCDEPBmpUdnOPzY91MZeQoT2V8WxJMwo3bHWiyDTqECtpbErrbFmNxsgp7+5Nw+vb2on05zmhZyQwjc1cZgTSgMVaBgC9GDkuSGnqINb7hbCg2U18Z2sPTpi1vyLUyG7teC6hy41cf+r1oJCyOZG1Nwyd0ZpmyiIZ2ZdmaPWMNAimQtQM7WsJolZ2gRyukUO92zE4KXi2NyG6Bil5bZH4T+tQZSRFPgQW051WxPFVgtv5SnB/Y4ZV81/xqV66XAjFxo6WS3yGA0o8zUaADh207WsT5i4Cb+6gTol6TCHU3uj5qrhhh4CP5A+by1jBlaxVLdEBtGU0gjDXslVL6/RumnKbhRlVf08JLPO+Ronwqsk6NeLJId26Ul+5rA9mH6PBB74dWITEGLQCGeB+p13YCILvMTULCteFSukAkhNTNDgbGKsN9jm8SGF/eJgDf9QlJUE6OvXgsBnn7UvPylCuvORNJ4K3j2+YhRy8Y7eb16AwCSelIjaCe+Ty2SdD6I0mGniBP6xmbTUnyeZlcCfoTlWJsQ8SM0+8OE+jTP/TjbRviw6/9rO3ZQ8TZvkOQSzy9isxwbRtfLImvxNGCYQiGozER80OFAAusLOoqcGV81phM12V+73uAus X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a756e411-08dc-4ba2-db43-08db71a23968 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2023 15:22:56.6244 (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: iUuHaTI6gkmMDo86JZ+cZFyqAwts0f6+hn0SOMIv4BuIt4Dm3ZGVUxDP5dbSwivCdTXBmmoXo6mErDPccc1O+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6513 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-06-20_10,2023-06-16_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 spamscore=0 bulkscore=0 malwarescore=0 phishscore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306200138 X-Proofpoint-ORIG-GUID: bNMQkD4-4CuzTG6U-Q-K4z78PZ8brBjS X-Proofpoint-GUID: bNMQkD4-4CuzTG6U-Q-K4z78PZ8brBjS X-Spam-Status: No, score=-11.4 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_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Qing Zhao via Gcc-patches From: Qing Zhao Reply-To: Qing Zhao Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1769235729868932094?= X-GMAIL-MSGID: =?utf-8?q?1769235729868932094?= on a structure with a C99 flexible array member being nested in another structure. "The GCC extension accepts a structure containing an ISO C99 "flexible array member", or a union containing such a structure (possibly recursively) to be a member of a structure. There are two situations: * A structure containing a C99 flexible array member, or a union containing such a structure, is the last field of another structure, for example: struct flex { int length; char data[]; }; union union_flex { int others; struct flex f; }; struct out_flex_struct { int m; struct flex flex_data; }; struct out_flex_union { int n; union union_flex flex_data; }; In the above, both 'out_flex_struct.flex_data.data[]' and 'out_flex_union.flex_data.f.data[]' are considered as flexible arrays too. * A structure containing a C99 flexible array member, or a union containing such a structure, is not the last field of another structure, for example: struct flex { int length; char data[]; }; struct mid_flex { int m; struct flex flex_data; int n; }; In the above, accessing a member of the array 'mid_flex.flex_data.data[]' might have undefined behavior. Compilers do not handle such a case consistently, Any code relying on this case should be modified to ensure that flexible array members only end up at the ends of structures. Please use the warning option '-Wflex-array-member-not-at-end' to identify all such cases in the source code and modify them. This extension is now deprecated. " PR C/77650 gcc/c-family/ChangeLog: * c.opt: New option -Wflex-array-member-not-at-end. gcc/c/ChangeLog: * c-decl.cc (finish_struct): Issue warnings for new option. gcc/ChangeLog: * doc/extend.texi: Document GCC extension on a structure containing a flexible array member to be a member of another structure. gcc/testsuite/ChangeLog: * gcc.dg/variable-sized-type-flex-array.c: New test. --- gcc/c-family/c.opt | 5 +++ gcc/c/c-decl.cc | 9 ++++ gcc/doc/extend.texi | 44 ++++++++++++++++++- .../gcc.dg/variable-sized-type-flex-array.c | 31 +++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/variable-sized-type-flex-array.c diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index cead1995561..fce66b1d225 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -737,6 +737,11 @@ Wformat-truncation= C ObjC C++ LTO ObjC++ Joined RejectNegative UInteger Var(warn_format_trunc) Warning LangEnabledBy(C ObjC C++ LTO ObjC++,Wformat=, warn_format >= 1, 0) IntegerRange(0, 2) Warn about calls to snprintf and similar functions that truncate output. +Wflex-array-member-not-at-end +C C++ Var(warn_flex_array_member_not_at_end) Warning +Warn when a structure containing a C99 flexible array member as the last +field is not at the end of another structure. + Wif-not-aligned C ObjC C++ ObjC++ Var(warn_if_not_aligned) Init(1) Warning Warn when the field in a struct is not aligned. diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index e14f514cb6e..ecd10ebb69c 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -9278,6 +9278,15 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, TYPE_INCLUDES_FLEXARRAY (t) = is_last_field && TYPE_INCLUDES_FLEXARRAY (TREE_TYPE (x)); + if (warn_flex_array_member_not_at_end + && !is_last_field + && RECORD_OR_UNION_TYPE_P (TREE_TYPE (x)) + && TYPE_INCLUDES_FLEXARRAY (TREE_TYPE (x))) + warning_at (DECL_SOURCE_LOCATION (x), + OPT_Wflex_array_member_not_at_end, + "structure containing a flexible array member" + " is not at the end of another structure"); + if (DECL_NAME (x) || RECORD_OR_UNION_TYPE_P (TREE_TYPE (x))) saw_named_field = true; diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index cdbd4b34a35..fbb1d9708ba 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -1751,7 +1751,49 @@ Flexible array members may only appear as the last member of a A structure containing a flexible array member, or a union containing such a structure (possibly recursively), may not be a member of a structure or an element of an array. (However, these uses are -permitted by GCC as extensions.) +permitted by GCC as extensions, see details below.) +@end itemize + +The GCC extension accepts a structure containing an ISO C99 @dfn{flexible array +member}, or a union containing such a structure (possibly recursively) +to be a member of a structure. + +There are two situations: + +@itemize @bullet +@item +A structure containing a C99 flexible array member, or a union containing +such a structure, is the last field of another structure, for example: + +@smallexample +struct flex @{ int length; char data[]; @}; +union union_flex @{ int others; struct flex f; @}; + +struct out_flex_struct @{ int m; struct flex flex_data; @}; +struct out_flex_union @{ int n; union union_flex flex_data; @}; +@end smallexample + +In the above, both @code{out_flex_struct.flex_data.data[]} and +@code{out_flex_union.flex_data.f.data[]} are considered as flexible arrays too. + +@item +A structure containing a C99 flexible array member, or a union containing +such a structure, is not the last field of another structure, for example: + +@smallexample +struct flex @{ int length; char data[]; @}; + +struct mid_flex @{ int m; struct flex flex_data; int n; @}; +@end smallexample + +In the above, accessing a member of the array @code{mid_flex.flex_data.data[]} +might have undefined behavior. Compilers do not handle such a case +consistently. Any code relying on this case should be modified to ensure +that flexible array members only end up at the ends of structures. + +Please use the warning option @option{-Wflex-array-member-not-at-end} to +identify all such cases in the source code and modify them. This extension +is now deprecated. @end itemize Non-empty initialization of zero-length diff --git a/gcc/testsuite/gcc.dg/variable-sized-type-flex-array.c b/gcc/testsuite/gcc.dg/variable-sized-type-flex-array.c new file mode 100644 index 00000000000..3924937bad4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/variable-sized-type-flex-array.c @@ -0,0 +1,31 @@ +/* Test for -Wflex-array-member-not-at-end on structure/union with + C99 flexible array members being embedded into another structure. */ +/* { dg-do compile } */ +/* { dg-options "-Wflex-array-member-not-at-end" } */ + +struct flex { int n; int data[]; }; +struct out_flex_end { int m; struct flex flex_data; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ +struct out_flex_mid { struct flex flex_data; int m; }; /* { dg-warning "structure containing a flexible array member is not at the end of another structure" } */ +/* since the warning has been issued for out_flex_mid, no need to + issue warning again when it is included in another structure/union. */ +struct outer_flex_mid { struct out_flex_mid out_flex_data; int p; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ +union flex_union_mid { int a; struct outer_flex_mid b; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ + + +struct flex0 { int n; int data[0]; }; +struct out_flex_end0 { int m; struct flex0 flex_data; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ +struct out_flex_mid0 { struct flex0 flex_data; int m; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ +struct outer_flex_mid0 { struct out_flex_mid0 out_flex_data; int p; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ +union flex_union_mid0 { int a; struct outer_flex_mid0 b; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ + +struct flex1 { int n; int data[1]; }; +struct out_flex_end1 { int m; struct flex1 flex_data; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ +struct out_flex_mid1 { struct flex1 flex_data; int m; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ +struct outer_flex_mid1 { struct out_flex_mid1 out_flex_data; int p; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ +union flex_union_mid1 { int a; struct outer_flex_mid1 b; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ + +struct flexn { int n; int data[8]; }; +struct out_flex_endn { int m; struct flexn flex_data; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ +struct out_flex_midn { struct flexn flex_data; int m; }; /* { dg-bogus"structure containing a flexible array member is not at the end of another structure" } */ +struct outer_flex_midn { struct out_flex_midn out_flex_data; int p; }; /* { dg-bogus"structure containing a flexible array member is not at the end of another structure" } */ +union flex_union_midn { int a; struct outer_flex_midn b; }; /* { dg-bogus "structure containing a flexible array member is not at the end of another structure" } */ From patchwork Tue Jun 20 15:22:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qing Zhao X-Patchwork-Id: 110583 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp3746078vqr; Tue, 20 Jun 2023 08:25:25 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7Uw4yUceHFE+jgHOSiRkrM+IP32sz8+NW3A2+cNsLdaZebUi4hUQZx95aHOVK7hR7Z7S42 X-Received: by 2002:a2e:8296:0:b0:2b4:76f6:63a8 with SMTP id y22-20020a2e8296000000b002b476f663a8mr4356841ljg.12.1687274725820; Tue, 20 Jun 2023 08:25:25 -0700 (PDT) Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id l15-20020a17090615cf00b009829826728dsi1409682ejd.640.2023.06.20.08.25.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 08:25:25 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=FqLuWy3E; arc=fail (signature failed); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F40C13857707 for ; Tue, 20 Jun 2023 15:24:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F40C13857707 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687274660; bh=AWpZci9gtVmjIQ503tSnKgWycfXFmbOEv60g3xMv2Sc=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=FqLuWy3EqQlhpSV9aW0GwUwVnipzGtAoOBK3taKt9lm4o61MFjJuCe22ZbKf1OMGx bh8mqD529HFpZWJ0MpfsaFNuDQTRVfiWMMCS3ZMU/QWZCjIz7vGVgdIuwcUyQO6fxn k0IcB7aBXOjYf7SIikwT9nhFm8rVxIVu/LBzUw40= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 7AD0A3857B8E for ; Tue, 20 Jun 2023 15:23:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7AD0A3857B8E Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35KBWq8a001373; Tue, 20 Jun 2023 15:23:29 GMT Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3r93e1d2j2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Jun 2023 15:23:28 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 35KFLsVL005858; Tue, 20 Jun 2023 15:23:27 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2169.outbound.protection.outlook.com [104.47.59.169]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3r9394gxnn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 20 Jun 2023 15:23:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FzBmpAy+V91DBaDNcul0whtCLen3L0Ynqoxj82edzqIhRfH0JPixzariKP4ZsCByOEiYUPxdLXfx3gZWFQ2mrcTX4tmlrR27jDXzIsQCDoNUrisub5tHfQK9oMFSl5M38YjhfxWIrPFaMoJCWW0nNOxYDEpEmxl0kZwWHFtv7eqZKUjrD8UBC0TlLMoYD2xg7rzEJJi8uf2PUBXDPlyY4fz91ZS97LqyPSWU7IBQS6xNbIa3xX8yEI1Yreg5LF2NuO3EZImVS+deWCF71vB9MrkNxB6w9sxuiK53TlzwwjxxAqKuZJbbFMVbhv//CBEZygUmisAa8DeQrTzHsSeMMw== 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=AWpZci9gtVmjIQ503tSnKgWycfXFmbOEv60g3xMv2Sc=; b=ZBE533CDcGIgqKMHLov5jJgFogrvP/oOeFp+pCSUyk0+8lj3849yFNSJlO50LbrwU+cm6n6U8QgKl8ApvwKPbyAkCwEo5OwpWyI3H/irkGIhDjGaUHq2jibFsIFVruPfkrJ5P0Im/gLyPwXh3U9uDBOdCTF6exAb32VBpY8RPWsKU4gp+npP6pVUUde0WPskzzzBOGf7iGBDjQkmT4nwLB0Sol1bnrs5UQ6g4oLU+mWVJoIWH/ggSmho5LP2gWWIoev9IYx9pLLhePGnkLD83LIEgGYASDXW+1vGZBA9eDp7qyK4zhZFugxG3TiznIE0q8Ki2ueaZuDmzhk7oPaWNg== 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 Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by CY8PR10MB6513.namprd10.prod.outlook.com (2603:10b6:930:5f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.36; Tue, 20 Jun 2023 15:23:00 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::8d90:607a:f94c:5323]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::8d90:607a:f94c:5323%3]) with mapi id 15.20.6521.020; Tue, 20 Jun 2023 15:22:59 +0000 To: qing.zhao@oracle.com, joseph@codesourcery.com, richard.guenther@gmail.com, jakub@redhat.com, gcc-patches@gcc.gnu.org Cc: keescook@chromium.org, siddhesh@gotplt.org, uecker@tugraz.at Subject: [V10][PATCH 3/3] Use TYPE_INCLUDES_FLEXARRAY in __builtin_object_size [PR101832] Date: Tue, 20 Jun 2023 15:22:46 +0000 Message-Id: <20230620152246.311493-4-qing.zhao@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230620152246.311493-1-qing.zhao@oracle.com> References: <20230620152246.311493-1-qing.zhao@oracle.com> X-ClientProxiedBy: SA1P222CA0009.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:22c::25) To CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4344:EE_|CY8PR10MB6513:EE_ X-MS-Office365-Filtering-Correlation-Id: f30c32d9-216b-4bef-70e5-08db71a23b5d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JkYM8r8RxHp5FryIAboFz+JwY/ROU69BEs/HRN9DN9Of8RzhNYQZ04/rKMH3el5IxP7uuY2YT+EBkN1CGxBVwCOM30FOhEzHzofJo9bNUR0KYU9nkKmuOjq7GsqJ1gNQuz2AnZyOwbW8ukdKBtXGaRcxLRLbjpzK/TqULgXAev8oroWSVlvTq+rrmkQgH4qH4suy+PNgbGKqyaNYRjlUcEo7eX0fCuac7WIy2C0VII5ozhd5tK5cjmYHtZS9KFs1gc9KaECIRAhJZLPVR0MZGE+Keyo3KRsWcNovqFH3iUJsyw2vFL1onEemE6n/qePb10ur1Fp0ceUIGBrq9ybrsUVvnpxQXvgkqlteYNWMR1JsYy5qopTIk1Z9dHMoqxbgHxA9YcOjg+ibb8/HzFg9YPmb4jy4Kwx3klLLls2za0Rco6gXfisJBv+00rnplngl1/EgRBOFNv74/4MjBmtiGBMN5OlyLK6g+4c8dP687QJTM2eoq9G1ETWJywUXJBK7fumGQMlXYQxXlBkJ5T6tbB1Q94azbik4XATg81EkkNU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR10MB4344.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(396003)(346002)(366004)(136003)(39860400002)(376002)(451199021)(44832011)(86362001)(41300700001)(8676002)(8936002)(5660300002)(66476007)(66946007)(66556008)(316002)(2616005)(83380400001)(84970400001)(38100700002)(36756003)(186003)(26005)(6512007)(6486002)(6666004)(6506007)(1076003)(478600001)(4326008)(2906002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PL8CEq/w6rMH09bdBpYQJhQawW7fi/vwkbi1RQiE3aXRtI8PHQ8CBW3tVYw7sNYY4x+EVIaGtV/Dez2llTDlc7BG6fulJYSs6tV1zgRAE4YWcqsv4faI37fwRGUDah/JFkG/4W/QzXEQDUb4gaEMxmZhX9ZGOy/ysHXwkNO/hP0Crh9IjX5OBjLZqHWyHgf4uXpqYwG/aRbU4OV0Z01YFNb5nqXqUpImV2W9J3kS/b1Isz4n0AogEqP+svro5mv60xbnaXklYOHn6ZpLClqs6yKQg6qfkCu7amSkC7hvoXpSEM8RkRg/596fwm/2fc4osHIYzhJHsNMd8hxJA5N79JMGci3kiEy6yrcj+09yHBZs3sSknXtMM+b3iHWT7CKUiiX3eyaerP0hV/9hjHSSWAEi5beNfUxYf6TBk5rA0BjmCI9yGFgNOsMWsceeY+8XkcrrbwAJandcw4TXZzS6pMA3r8ENLpB6OIgo2MjouW7rTFGiHJHR/KewFLoCMWX1PojKy61dpRpw/+Tvc0pfvzSfA0C0K6S7NsUhj5A4Pzu8skq8j9qDxx4GktuBIPkZFHwiUSCFg8ZeFiQIDxgKqwVzJKzGqwFFNyiYfHC4tCb1CsRFyIoO4HwstvdHyqcZ9SOEJb6sEBqOwwBQ7RIdNhLEjpQ7PS16srznIXwVZ7SEiKID2SK56pLXyEdT0sQfqFRnhCpN4gh4beCaBWrpKDMm7YwwJROlQf1oxIIcPVc9N7wbd5vRqJClq8iVNj6gGi9DUwSAg1jsSo/B0xrMRN27Z6SUGnM9VMDXDigMQM5XFX6maIiSJv9g3iwX6IY4Y165o9qqjdxrUjs8VuLu4jiKvhWPTHO/S2eRcjvFQQ5nrQlRHJp+aSpAoowN1DBfj8w4eIA/MKS3TbwqWYI4bXbfvW0vVgGnalBU4yhAMN95eczPTm9+Dg7JQOaRW/fP6D7+t+C8HWje243ZOjWMP4yeDmreAB7NZsN/2g+1FLMF3Z7c400NUEwABShSTATETZ89LZCGTeNsra0a8mT+dXRL0Zv/IsLYZWMr+PnjmdVvHgs9YaNZejjJ7Kr0p41+LE8hxWL4jW2RG/6ocbFczThJm5AkhMvGCr4Vc/rQF8gXpMJb5doj/7X6VaiJQ2ul6jf7FeVCktFBjTPYPxLG60mpWiKFGzbC2M45Ji2MsLQmQpIh7MNnh65u4R5KI2cVs3op7SlxFN2IPvRiaDXH4+uFbGpECSF7hnmUzYoU5VXVLKsJLfT6RdgY+rxiilFdSyTkm97YI++FgTm1+aiZVDVKFSUDX1wF218P8T8J5xGx9hulf54xRhuH2zaVB6xtZujglD/uRC1aX5gBoC1zQO+kHPTX0BEYKpFxyQRrCCA/HenXk7DUmDvttpQ449c5kVCz/6JN9sYAq2fzyEl5tzcX6tPQZlt1z5pO5+3nxUuZ7JPqUgCepx6JsTtGL5e4OILltVRLaVqwppIsM5y7IBWOo8kxhTFXyTPUDwpOifuHH2YI8K6TYYj9jz3pZSejpWvsIg4TJk3sXeSFMykFSRNFDNMK9sjRANEcxtopVTH9IQ6uDpnh/baJiZRLmiPS X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Bnj/yTYCjJhkxTb5wovPiyf01iCiwszIxjaN8CHKMYkXzZEoaWGLDKEklln2SPcviRVi3jdvnlfeQtf1Dcgycc5RkJiSW/934m07mHabErZK1Jh80mD4GvsPUpeL05T4pwzAapSO7NQd6+oV+heVGgnw7OCc7ZRjSWW+CZ4TZ3Tz1ZpX+CWjEsIxqR/DhjcPBp2cIJPWMRu3gBPjQrhewXCDLOScZoCAYe7DkrtK8zHBX3qrUrLBoL287d7Vcc7C6T2xZLL3iHExJWDf0QQl85vTC6QjpgA5z23Xn/o3vSDfXkr7DbtIP3o2i9XXLYxIyHhqThVU6iOqjPY7ElKbNL6J+OvKFsXErr5JMZ/Ky4FRHqI34Vkrs9B8B0NA+HLcbbwzqZFBc9lMnLjr4bSAeS+W5ITV8d+cJ1tM4crRM7/VB/aXfkyc+M8/aIUxE6W5jCYnb8vy2/jN79OmgaV0iJjTSHorADn1MeaLaCaoPt6wLtgqddzXgzp0n7coRNjjTI9nL1oI6ZFSNLw0TY80BhLWkNb4R0odsaHs1YbAhhUx0Md64yOhBwY/6x7/EIFv+X4sFH7z9feBzJTzaqPtF/ne5zlDb18spL13FU9O4f8b3ZeK514In6q/XoP+f+dYJzlQDiRsOFQidDnm23ULbq7Fst4nTpY2XjDu4OVEoF/xK6qZFdjpMXosuDYKwUi6xEo6Cq3je+GfZMeUkBdCvvEQaerLxldIEh9ha+Y616VlMp6+HuNuwNWgJxKUaQIfg52i8/MloUf/8E8qu1vuvS9sj7hjE65+mKRul+Xg1SJTDhWCK0rGLUOMhoeD1g0HF3ZlklJh6BQ2tI9r12TtXy6jJybJTeyhCJ19au1SnM2/AzAhGWWcSMxsIWkeXbOsFhT1mdJtUpnZ2TSoIX1mqMuyrOPH6CN/JDUP6xCNxZ3xhX93PTi7NloTahbEFj6M X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f30c32d9-216b-4bef-70e5-08db71a23b5d X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2023 15:22:59.9060 (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: VnTJ7ZlqLffNpjK4oyKofm2KrfZl7h/4ymJ/vFUS5xMOtcvx/mB01X7pFmTfw/92/Oxpz3X3BhOfQanIif5/Vw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6513 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-06-20_11,2023-06-16_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=964 adultscore=0 spamscore=0 bulkscore=0 malwarescore=0 phishscore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306200139 X-Proofpoint-GUID: u-2gaWvSAi7w_Xpi073Q1m3KN73qa5sd X-Proofpoint-ORIG-GUID: u-2gaWvSAi7w_Xpi073Q1m3KN73qa5sd X-Spam-Status: No, score=-11.4 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_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Qing Zhao via Gcc-patches From: Qing Zhao Reply-To: Qing Zhao Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1769235782918466109?= X-GMAIL-MSGID: =?utf-8?q?1769235782918466109?= __builtin_object_size should treat struct with TYPE_INCLUDES_FLEXARRAY as flexible size. gcc/ChangeLog: PR tree-optimization/101832 * tree-object-size.cc (addr_object_size): Handle structure/union type when it has flexible size. gcc/testsuite/ChangeLog: PR tree-optimization/101832 * gcc.dg/builtin-object-size-pr101832.c: New test. --- .../gcc.dg/builtin-object-size-pr101832.c | 134 ++++++++++++++++++ gcc/tree-object-size.cc | 23 ++- 2 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/builtin-object-size-pr101832.c diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-pr101832.c b/gcc/testsuite/gcc.dg/builtin-object-size-pr101832.c new file mode 100644 index 00000000000..60078e11634 --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-object-size-pr101832.c @@ -0,0 +1,134 @@ +/* PR 101832: + GCC extension accepts the case when a struct with a C99 flexible array + member is embedded into another struct (possibly recursively). + __builtin_object_size will treat such struct as flexible size. + However, when a structure with non-C99 flexible array member, i.e, trailing + [0], [1], or [4], is embedded into anther struct, the stucture will not + be treated as flexible size. */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +#include "builtin-object-size-common.h" + +#define expect(p, _v) do { \ + size_t v = _v; \ + if (p == v) \ + __builtin_printf ("ok: %s == %zd\n", #p, p); \ + else {\ + __builtin_printf ("WAT: %s == %zd (expected %zd)\n", #p, p, v); \ + FAIL (); \ + } \ +} while (0); + + +struct A { + int n; + char data[]; +}; + +struct B { + int m; + struct A a; +}; + +struct C { + int q; + struct B b; +}; + +struct A0 { + int n; + char data[0]; +}; + +struct B0 { + int m; + struct A0 a; +}; + +struct C0 { + int q; + struct B0 b; +}; + +struct A1 { + int n; + char data[1]; +}; + +struct B1 { + int m; + struct A1 a; +}; + +struct C1 { + int q; + struct B1 b; +}; + +struct An { + int n; + char data[8]; +}; + +struct Bn { + int m; + struct An a; +}; + +struct Cn { + int q; + struct Bn b; +}; + +volatile void *magic1, *magic2; + +int main (int argc, char *argv[]) +{ + struct B *outer; + struct C *outest; + + /* Make sure optimization can't find some other object size. */ + outer = (void *)magic1; + outest = (void *)magic2; + + expect (__builtin_object_size (&outer->a, 1), -1); + expect (__builtin_object_size (&outest->b, 1), -1); + expect (__builtin_object_size (&outest->b.a, 1), -1); + + struct B0 *outer0; + struct C0 *outest0; + + /* Make sure optimization can't find some other object size. */ + outer0 = (void *)magic1; + outest0 = (void *)magic2; + + expect (__builtin_object_size (&outer0->a, 1), sizeof (outer0->a)); + expect (__builtin_object_size (&outest0->b, 1), sizeof (outest0->b)); + expect (__builtin_object_size (&outest0->b.a, 1), sizeof (outest0->b.a)); + + struct B1 *outer1; + struct C1 *outest1; + + /* Make sure optimization can't find some other object size. */ + outer1 = (void *)magic1; + outest1 = (void *)magic2; + + expect (__builtin_object_size (&outer1->a, 1), sizeof (outer1->a)); + expect (__builtin_object_size (&outest1->b, 1), sizeof (outest1->b)); + expect (__builtin_object_size (&outest1->b.a, 1), sizeof (outest1->b.a)); + + struct Bn *outern; + struct Cn *outestn; + + /* Make sure optimization can't find some other object size. */ + outern = (void *)magic1; + outestn = (void *)magic2; + + expect (__builtin_object_size (&outern->a, 1), sizeof (outern->a)); + expect (__builtin_object_size (&outestn->b, 1), sizeof (outestn->b)); + expect (__builtin_object_size (&outestn->b.a, 1), sizeof (outestn->b.a)); + + DONE (); + return 0; +} diff --git a/gcc/tree-object-size.cc b/gcc/tree-object-size.cc index 9a936a91983..a62af050056 100644 --- a/gcc/tree-object-size.cc +++ b/gcc/tree-object-size.cc @@ -633,11 +633,32 @@ addr_object_size (struct object_size_info *osi, const_tree ptr, v = NULL_TREE; break; case COMPONENT_REF: - if (TREE_CODE (TREE_TYPE (v)) != ARRAY_TYPE) + /* When the ref is not to an aggregate type, i.e, an array, + a record or a union, it will not have flexible size, + compute the object size directly. */ + if (!AGGREGATE_TYPE_P (TREE_TYPE (v))) { v = NULL_TREE; break; } + /* if the ref is to a record or union type, but the type + does not include a flexible array recursively, compute + the object size directly. */ + if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (v))) + { + if (!TYPE_INCLUDES_FLEXARRAY (TREE_TYPE (v))) + { + v = NULL_TREE; + break; + } + else + { + v = TREE_OPERAND (v, 0); + break; + } + } + /* Now the ref is to an array type. */ + gcc_assert (TREE_CODE (TREE_TYPE (v)) == ARRAY_TYPE); is_flexible_array_mem_ref = array_ref_flexible_size_p (v); while (v != pt_var && TREE_CODE (v) == COMPONENT_REF) if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))