From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 69C043858D20 for ; Fri, 3 Feb 2023 13:17:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 69C043858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com 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 313CqcSE020581; Fri, 3 Feb 2023 13:17:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=corp-2022-7-12; bh=pPNLMSeBpi4/rXEvmPYOJ3jKWUn60MyM9yElCUmjuNI=; b=cPTzpIjesAA6uwO94bVLDwj3s6jkVXbvTrIIJ8Bwwbzpa7KoLgCvsPDdzSywzfo1SZyt OJaWh0uOQW+8KSF2Rq0l42g4kYdzOFEaTzPjR3+nwkZXH8YyfiD3YPPz1FavWa8UMSCf fuUZewpMBqkYeEToqZHCHfrGE5O9KSejLHI+eWtHlaBkkZuqEEqSHRHrwROvqx8OLUII YAURImOgmzARwiQ78M+3i1ydlL1V7hlOpAqK9+TcSUGvyd2MdvMb24SP/QXtNm9vE+kg fV9NotSkbxMFB+g06IwnOgNe1OMxp90Pw/9TDSC5hXS8zUiQGMxLDrV9HhekWrm14hZT /Q== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3nfmbg5mec-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 03 Feb 2023 13:17:43 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 313BuHQw034287; Fri, 3 Feb 2023 13:17:42 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2173.outbound.protection.outlook.com [104.47.59.173]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3nct5h45he-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 03 Feb 2023 13:17:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CUdBglaO83Rp7++kjewRhxmiRTlLyaBhOf7ucKTVvVHC5iX+Z7v0frz0Uw+b919jMk2ZqneLaf51TZlKaC58rjZfKvLK6bmW0F3c2vNURBzmBGwQbg8dzOP8ha4uPqFr+2XtTHXDI4+XmqGnNdNcO8rAHTzmGrNCyVAKqnygx1mynSyV3tOZ7d4mQ4SCIQ9Pz7Uq1ZcFiKAYpIJ8ZvJqMeMtz+X88ApgHmGirbcnnRzqIXFYN00LHoIW1m9oWyMeoOBvZuqyHqo6/1Gyv/N0HK9ofiQZ7CQ2rgjzdhIMkCenG1HsasIMVcUDaRdwRPFhZwssJerPQNFg/EsWwlUtmg== 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=pPNLMSeBpi4/rXEvmPYOJ3jKWUn60MyM9yElCUmjuNI=; b=hG0SPQl1MA65sVy6gpDB5+NclD/wmQ4qHZlAP3GjaTf/IVvI66gY9J5MlhqzYNi7VC1Oxu4TMFEuwzpAtwwkXLWhH7sBp1HOjffZ49xISgVQvVx50pZ/A2h9jzQILzR/R2F8pdNAgGy1D3hDjHtWepRav6gM98RhmajuWUwjoYgi21oQ1nyTYznEyP5cQNEI2YtN5zPp3rdvW71eueHFwG9hpEWKB+ROywFB01xPEEl3aVoA/tMfuvCd4KJmAPPFSUNO85znjGh6jrGxPHRmRYgHG8mfXnHV08ZIHbsl5LyuVEOsXDWxw80i8xB4SeevOwJzphpNjsEwXKf//B2p5w== 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=pPNLMSeBpi4/rXEvmPYOJ3jKWUn60MyM9yElCUmjuNI=; b=wnIWrvuuAJkXRYdD5i5Kq0dNzzAgVDGl52PHA/Nmdf1x3bA5V42T+iLFozT6Sfe5JFQTRYJtvY3mwl7h4zXI+X/PBBCqUWUsxiPyASYCRr1T/m3dz1PoBjICn1OM3k0nquv8NQMvzj/jO0Bi+GsGO8snuM1vePDzlXTBmqRdGGw= Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by MN2PR10MB4158.namprd10.prod.outlook.com (2603:10b6:208:198::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.9; Fri, 3 Feb 2023 13:17:40 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::c96c:cb50:dea2:2cd2]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::c96c:cb50:dea2:2cd2%5]) with mapi id 15.20.6086.007; Fri, 3 Feb 2023 13:17:40 +0000 From: Qing Zhao To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , "siddhesh@gotplt.org" , "keescook@chromium.org" Subject: Re: [PATCH 1/2] Handle component_ref to a structre/union field including flexible array member [PR101832] Thread-Topic: [PATCH 1/2] Handle component_ref to a structre/union field including flexible array member [PR101832] Thread-Index: AQHZNX31Ed6QQ1+7j0WzPTRpR3Dia665+UIAgAAsBICAASqFgIAAYHEAgAAAkICAAAwiAIABIE0AgABbkIA= Date: Fri, 3 Feb 2023 13:17:40 +0000 Message-ID: References: <20230131141140.3610133-1-qing.zhao@oracle.com> <20230131141140.3610133-2-qing.zhao@oracle.com> <812910BC-870E-4432-870D-538024F1A510@oracle.com> <3B30CFBF-5004-41A4-940D-1F23C010403B@oracle.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3696.120.41.1.1) x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH2PR10MB4344:EE_|MN2PR10MB4158:EE_ x-ms-office365-filtering-correlation-id: e98f84a6-9b7b-4975-41a1-08db05e906cb x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: gFiN/4/851tyhuUQsQGO6cSD5y48v+XNKWM3aWhYbyv619NwuGGB+J1Eo8VAPS75XyBQym5e889Oq6handzRx79TnBK3vSmYwssG7KEXobkZjb4y+ITpVsg5Co2RGDIVaYNFM3b3svNziTEV5ouyHrCHUM+FO0mmPyeL4/GZbawJQ5rWaFjJs1TOoFmk+0fxudv93P8B/nCMQlD2VpHITJ27aXGmWKGYMXmMAdxRi91KpI3H88ZlUn0ExYCxIJig3SCKRQlywuYbci9sykqA9Mczv0q+qYq7h9ZvtmeZ3SapYKI0V/0vwuSGdGVwL0JRnzuiLAlZ5xcCsTvq2OjupvYB+zX3l3NcohTpD9wA1vfjrvkJfvui3s27BQxASXluiG/edfyEgr10iWpUoGZTxDKsIW4hePkKx5wkNux5d1MQGOLiVB7Io59y6nPq9UChVPDOz/Bi4dCHCCym+8t542sVvlPyhnqW8je11HvlO1i/HKRBMHeVMjmmK/JcX3Z49lXqW/24FK3Mq3A418v1fIXoiB/zRf1zDvNEaileGsh7xbqp/Dexo4HVQ5iif0ELrjxT6uSp1AN67oc6ugLA1av0oUFjBpcbudaSWPe2hk4VsFn/oR5rrODijEE55MY3XTFWgJ5fzMz+qzdfYg4Ch3Fi4lTlOfA08rgDIZIoLBTQYUT48c4MlKXQd3Tpy/GPwbZttkCPNfllVJuy6YfENL17j5vzCDAUTLOtKX3cIB0= 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:(13230025)(136003)(396003)(366004)(376002)(39860400002)(346002)(451199018)(5660300002)(8936002)(6916009)(54906003)(2906002)(91956017)(71200400001)(41300700001)(316002)(6486002)(6512007)(66446008)(66556008)(66476007)(478600001)(6506007)(53546011)(26005)(186003)(64756008)(2616005)(8676002)(76116006)(66946007)(4326008)(83380400001)(38100700002)(44832011)(33656002)(38070700005)(86362001)(36756003)(122000001)(45980500001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?bMEMvbHw/pRJbe7+GTFK9sE62OZMkRkHqzpm5xbR5XtIxztY2OfsU7aK+u64?= =?us-ascii?Q?JbCNLMW58JvPgD6U0drARlEMLua0eBWiEsyHl2IbcVCXsAtSkqxB8D4B1VV9?= =?us-ascii?Q?/mW7NR505gjCzHbm7KOGiL5CgLFGSAltmxntkMYc+i9Y59rFzpArnrGSoj7I?= =?us-ascii?Q?d1QRfdl+pXgXNTAaefALq6nQ0cxgI5wspGAQD6VvJUaCR0YigyX6uzSvAsfT?= =?us-ascii?Q?JBKZtjM8sGuL8Rjf65/virbTcLfPIFzZ9zsEykWKL2Qq43ND2LTFjh+U+2YT?= =?us-ascii?Q?w4osX/Larutk8M0dbcKJhUGsyvhJlp/B85I3GEDhw2OCz23WKzyscKV7mqeO?= =?us-ascii?Q?Q68mZj3uzohDwEOXGLaejL4JM9aRfSPHhYjoS1jgFQKncCPOx59dwsn8wdXZ?= =?us-ascii?Q?YxZeGZ3ZUcUPYRtDKrj1036ZnWq7TdWpdyqE4SavOHaTlz8e929mYpdf8QAh?= =?us-ascii?Q?hOgTvlGN/6nBfWtIfeLc9RV5SOP08deE8jEp4bfxEqJg2VJ/NCQ4n6i0bXJS?= =?us-ascii?Q?QhZUMaKBuagv+5lOEqrAkXvRCpPFvz0TzG6DmP0Rrhi8aj9I87JNX5MfIOWg?= =?us-ascii?Q?/HX6oHTFnRclS9Sachphx/FyRc+RVkDNueKR2XkWUJr6sM86yBgc4leeH/5P?= =?us-ascii?Q?qahQqj14PZ8jPTflK3wTO43xQfWAN1npVf3oFztJHsivPI3G/0DSXxhY5HDB?= =?us-ascii?Q?3RGoa0QdBeVNzSkwpuvE8+4LZmzP/7y/s8O1P6FllDklCuUi/qoQQs49ucQV?= =?us-ascii?Q?Zz8HayQEfZ97QmQb3PSKBHaZRld7Iz11Mi68u2NOwNmRVeIdycC6V7tIryPX?= =?us-ascii?Q?DMglgJB1j1uN7G9GN5y/rAxXLy+yCU7J7QXi52+K1IR1WMHUhnFFMyB0MzGW?= =?us-ascii?Q?uoR8NGuoUicebxaNowr/0aSF8E7YHxVzfvEBRXR8UeA3VrqsTACIFRnuv+7h?= =?us-ascii?Q?PBtn3u0IFWdugh9eCgGcQyXhVF8xpaozBOhXxooQq4FZ3I+kSj3TaYO1r0Yr?= =?us-ascii?Q?kGxLutNHdrBwRz6naNFQEbpR6/sVCh8EZfVslmlDNg69aWAPonMZ7WMTNyKY?= =?us-ascii?Q?nSgzJmm+7fJbmClKyGnXAb6A1OwOoVHY0MiK6YWau0gKsZgH3f6Iqe070ops?= =?us-ascii?Q?44Xe5+S8Oqu604Mlr5lz8j87oQkhl6HyjF0kkTki9aaTi7sedJctPtxVJX9e?= =?us-ascii?Q?X6hk+N+YWhZqJXiWqvG7Ju0wzVFZQIJWf14f+zI86B8wcj08LpEmqk8sM61l?= =?us-ascii?Q?9k3hNEzzm6Z1h3psyn+0IfO5bnvqXjt1NvuR7q/WS4ZIjwY0u2c+ZQ+h6kbQ?= =?us-ascii?Q?aBzEXzDHki8JFsZnljzJj/vi/gI+xzdwZYH1IP6vAHvdUWLleR56JIlhJIOK?= =?us-ascii?Q?5WE2N2UwFT78WgVJ5AQPMLa+OOqQLOkC/MvvQYC4fILkf+ut0eu6hCIfSYO8?= =?us-ascii?Q?YvR0M5P0yxNLF5Coa1MqhRNFtpULn0xZYUKK3AJbp4kTAFJBLYk4Y8a2twdH?= =?us-ascii?Q?cuy9JtlWWZODqHTkVGVD5I6vaAMCMqVb1UUEMcxjiOKSjJtLFcgN1BLHesPw?= =?us-ascii?Q?xSqWtSuc6PF/llDi9n9BucL2iyDNKosO3E4dH2SqouJuIcW4FEtrSOab5TW5?= =?us-ascii?Q?Og=3D=3D?= Content-Type: text/plain; charset="us-ascii" Content-ID: <8F28A8ABF7E62149AC021550F9097521@namprd10.prod.outlook.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: sPacRIIkG5HD8CfcqMMXFkmS+mFfgmwEk2UBghy1Kn5OUv+El93zoznOgJUQiNnQgFe9B1+nDhqTGaoWvklgEup2YB1E2Cfs/INQSxqruz5UmCtsxNxZ62/71AMLxARhm4oF72OBTMCyA2GukElQ6Bt09owxP0iiNcLxZIewBQ3sD+YpX3/nAUrbd9CH8pMko5DnWsITTwxwCSddzVCs79LkyrrJerOp42BmRYpbnTm+Hpg0LBXCb0i02BuH6wPXTMftQ70JFLxeLroHnlxnyoqoTrdSRUrC7zTANj6RPOoC8AhnS0+T5GJa+z9FU4RgtEfVOQkd2UOJXmSpuJjLkfzRh5FYfu9mGX80EG35u19tCDgbiAH40vIp71HbA2A3ZDhl5ama+vFyIPN2e6qiErEf4W3+gmzLSAD2AZGgxjnxArYFAz7QRE9xYBJDRCXuQrB/EvEFwctmExNq/eL7Y530Ow2sv5pmCVYdj2IckZHkQS4LCW6kTdsn4jdi9pbN4xOeBiOCTnMHRSS/zULrmSld8uCpVpKELqAMHE+9yynkMlzB9+Xv7N34911D8+oWMuK5rF7dBzoRLJaptF+HTbtfCax+40SOafDGSYou4Jz8YA4YYgIV4jXzkSzBJdD4Fd5/HbyAoqhS2rb0prcB/VTowknbBAUOU6LXe0R7648uiKRrj48rksPKuPaBlGEGDXH6C5Sb2mbP7jixSCzC74RjCwaUpKS94e0GZ/fT872hdYd2AsDjQyier4L9jWSH21BP78SfCc48v4uYK0TE3X6eDEBhwwFO4NaHepKnIvOlJoQAF0sg/sR9e4XG+gk34RruHN9ab4fIhV33p3yTIg== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e98f84a6-9b7b-4975-41a1-08db05e906cb X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Feb 2023 13:17:40.2559 (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: B55HL+JUlIlWvjBaERGR1Wty5Z/Z+wAa+fbIKlzkmqi0Y1hbUyyx3N4Nqah/ixAaEXxDLrm3nVdpXOmMcFXnug== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR10MB4158 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.122.1 definitions=2023-02-03_13,2023-02-03_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 suspectscore=0 adultscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302030122 X-Proofpoint-ORIG-GUID: hnTtf-RFBRAlcOD0J9yQRaMH-y_Zp9Ss X-Proofpoint-GUID: hnTtf-RFBRAlcOD0J9yQRaMH-y_Zp9Ss X-Spam-Status: No, score=-5.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: > On Feb 3, 2023, at 2:49 AM, Richard Biener wrote: >=20 > On Thu, 2 Feb 2023, Qing Zhao wrote: >=20 >>=20 >>=20 >>> On Feb 2, 2023, at 8:54 AM, Richard Biener wrote: >>>=20 >>> On Thu, 2 Feb 2023, Qing Zhao wrote: >>>=20 >>>>=20 >>>>=20 >=20 > [...] >=20 >>>>>>>> + return flexible_size_type_p (TREE_TYPE (last)); >>>>>>>=20 >>>>>>> For types with many members this can become quite slow (IIRC we had >>>>>>> bugs about similar walks of all fields in types), and this function >>>>>>> looks like it's invoked multiple times on the same type per TU. >>>>>>>=20 >>>>>>> In principle the property is fixed at the time we lay out a record >>>>>>> type, so we might want to compute it at that time and record the >>>>>>> result. >>>>>>=20 >>>>>> You mean in FE?=20 >>>>>=20 >>>>> Yes, either in the frontend or in the middle-ends layout_type. >>>>>=20 >>>>>> Yes, that?s better and cleaner. >>>>>>=20 >>>>>> I will add one more field in the TYPE structure to record this infor= mation and check this field during middle end. >>>>>>=20 >>>>>> I had the same thought in the beginning, but not sure whether adding= a=20 >>>>>> new field in IR is necessary or not, other places in middle end migh= t=20 >>>>>> not use this new field. >>>>>=20 >>>>> It might be interesting to search for other code walking all fields o= f >>>>> a type to determine this or similar info. >>>>=20 >>>> There is one which is defined in tree.cc but only is referenced in c/c= -decl.cc: >>>>=20 >>>> /* Determine whether TYPE is a structure with a flexible array member, >>>> or a union containing such a structure (possibly recursively). */ >>>> flexible_array_type_p >>>>=20 >>>> However, this routine is a little different than the one I tried to ad= d: >>>>=20 >>>> In the current routine ?flexible_array_type_p?, only one level nestin= g in the structure is accepted, multiple nesting in structure is not permit= ted. >>>>=20 >>>> So, my question is: shall we accept multiple nesting in structure? i.= e. >>>=20 >>> If we don't reject the testcase with an error, then yes. >>=20 >> Gcc currently accepts the multiple nesting in structure without error. = =20 >> So, we will continue to accept such extension as long as the flex array= =20 >> is at the end of the structure. At the same time, for the case the flex= =20 >> array is in the middle of the structure, issue additional warnings now=20 >> to discourage such usage, and deprecate this case in a future release. >>=20 >> Does this sound reasonable?=20 >=20 > Please don't mix several issues - I think the flex array in the > middle of a structure is separate and we shouldn't report that > as flexible_array_type_p or flexible_size_type_p since the size > of the containing structure is not variable. Agreed on this. My major question here is (for documentation change, sorry for mixing this = thread with the documentation change): do we need to document this case tog= ether with the case in which struct with flex array is embedded into anothe= r structure? (As a GCC extension?) >=20 > For diagnostic purposes the intended use case is to treat > a pointer to a structure that appears to have a fixed size > but has (recursive) a member with a flexible array at the end > as having variable size. Just the same as array_at_struct_end_p > treats this for the case of accesses involving such a type. Yes.=20 >=20 > For the middle position case that's not the case. Yes.=20 Thanks. Qing >=20 > Richard. >=20 >> Qing >>>=20 >>>> struct A { >>>> int n; >>>> char data[];/* Content following header */ >>>> }; >>>>=20 >>>> struct B { >>>> int m; >>>> struct A a; >>>> }; >>>>=20 >>>> struct C { >>>> int q; >>>> struct B b; >>>> }; >>>>=20 >>>> Qing >>>>>=20 >>>>>> thanks. >>>>>>=20 >>>>>> Qing >>>>>>=20 >>>>>>>=20 >>>>>>>> + return false; >>>>>>>> + case UNION_TYPE: >>>>>>>> + for (x =3D TYPE_FIELDS (type); x !=3D NULL_TREE; x =3D DECL= _CHAIN (x)) >>>>>>>> + { >>>>>>>> + if (TREE_CODE (x) =3D=3D FIELD_DECL >>>>>>>> + && flexible_array_type_p (TREE_TYPE (x))) >>>>>>>> + return true; >>>>>>>> + } >>>>>>>> + return false; >>>>>>>> + default: >>>>>>>> + return false; >>>>>>>> + } >>>>>>>> +} >>>>>>>> + >>>>>>>> /* Compute __builtin_object_size for PTR, which is a ADDR_EXPR. >>>>>>>> OBJECT_SIZE_TYPE is the second argument from __builtin_object_size= . >>>>>>>> If unknown, return size_unknown (object_size_type). */ >>>>>>>> @@ -633,45 +669,68 @@ addr_object_size (struct object_size_info *o= si, const_tree ptr, >>>>>>>> v =3D NULL_TREE; >>>>>>>> break; >>>>>>>> case COMPONENT_REF: >>>>>>>> - if (TREE_CODE (TREE_TYPE (v)) !=3D ARRAY_TYPE) >>>>>>>> + /* When the ref is not to an array, a record or a union, it >>>>>>>> + will not have flexible size, compute the object size >>>>>>>> + directly. */ >>>>>>>> + if ((TREE_CODE (TREE_TYPE (v)) !=3D ARRAY_TYPE) >>>>>>>> + && (TREE_CODE (TREE_TYPE (v)) !=3D RECORD_TYPE) >>>>>>>> + && (TREE_CODE (TREE_TYPE (v)) !=3D UNION_TYPE)) >>>>>>>> { >>>>>>>> v =3D NULL_TREE; >>>>>>>> break; >>>>>>>> } >>>>>>>> - is_flexible_array_mem_ref =3D array_ref_flexible_size_p (v)= ; >>>>>>>> - while (v !=3D pt_var && TREE_CODE (v) =3D=3D COMPONENT_REF) >>>>>>>> - if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> - !=3D UNION_TYPE >>>>>>>> - && TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> - !=3D QUAL_UNION_TYPE) >>>>>>>> - break; >>>>>>>> - else >>>>>>>> - v =3D TREE_OPERAND (v, 0); >>>>>>>> - if (TREE_CODE (v) =3D=3D COMPONENT_REF >>>>>>>> - && TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> - =3D=3D RECORD_TYPE) >>>>>>>> + /* if the record or union does not have flexible size >>>>>>>> + compute the object size directly. */ >>>>>>>> + if (TREE_CODE (TREE_TYPE (v)) =3D=3D RECORD_TYPE >>>>>>>> + || TREE_CODE (TREE_TYPE (v)) =3D=3D UNION_TYPE) >>>>>>>> { >>>>>>>> - /* compute object size only if v is not a >>>>>>>> - flexible array member. */ >>>>>>>> - if (!is_flexible_array_mem_ref) >>>>>>>> + if (!flexible_size_type_p (TREE_TYPE (v))) >>>>>>>> { >>>>>>>> v =3D NULL_TREE; >>>>>>>> break; >>>>>>>> } >>>>>>>> - v =3D TREE_OPERAND (v, 0); >>>>>>>> + else >>>>>>>> + v =3D TREE_OPERAND (v, 0); >>>>>>>> } >>>>>>>> - while (v !=3D pt_var && TREE_CODE (v) =3D=3D COMPONENT_REF) >>>>>>>> - if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> - !=3D UNION_TYPE >>>>>>>> - && TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> - !=3D QUAL_UNION_TYPE) >>>>>>>> - break; >>>>>>>> - else >>>>>>>> - v =3D TREE_OPERAND (v, 0); >>>>>>>> - if (v !=3D pt_var) >>>>>>>> - v =3D NULL_TREE; >>>>>>>> else >>>>>>>> - v =3D pt_var; >>>>>>>> + { >>>>>>>> + /* Now the ref is to an array type. */ >>>>>>>> + is_flexible_array_mem_ref >>>>>>>> + =3D array_ref_flexible_size_p (v); >>>>>>>> + while (v !=3D pt_var && TREE_CODE (v) =3D=3D COMPONENT_REF) >>>>>>>> + if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> + !=3D UNION_TYPE >>>>>>>> + && TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> + !=3D QUAL_UNION_TYPE) >>>>>>>> + break; >>>>>>>> + else >>>>>>>> + v =3D TREE_OPERAND (v, 0); >>>>>>>> + if (TREE_CODE (v) =3D=3D COMPONENT_REF >>>>>>>> + && TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> + =3D=3D RECORD_TYPE) >>>>>>>> + { >>>>>>>> + /* compute object size only if v is not a >>>>>>>> + flexible array member. */ >>>>>>>> + if (!is_flexible_array_mem_ref) >>>>>>>> + { >>>>>>>> + v =3D NULL_TREE; >>>>>>>> + break; >>>>>>>> + } >>>>>>>> + v =3D TREE_OPERAND (v, 0); >>>>>>>> + } >>>>>>>> + while (v !=3D pt_var && TREE_CODE (v) =3D=3D COMPONENT_REF) >>>>>>>> + if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> + !=3D UNION_TYPE >>>>>>>> + && TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0))) >>>>>>>> + !=3D QUAL_UNION_TYPE) >>>>>>>> + break; >>>>>>>> + else >>>>>>>> + v =3D TREE_OPERAND (v, 0); >>>>>>>> + if (v !=3D pt_var) >>>>>>>> + v =3D NULL_TREE; >>>>>>>> + else >>>>>>>> + v =3D pt_var; >>>>>>>> + } >>>>>>>> break; >>>>>>>> default: >>>>>>>> v =3D pt_var; >>>>>>>>=20 >>>>>>>=20 >>>>>>> --=20 >>>>>>> Richard Biener >>>>>>> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nue= rnberg, >>>>>>> Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moer= man; >>>>>>> HRB 36809 (AG Nuernberg) >>>>>>=20 >>>>>>=20 >>>>>=20 >>>>> --=20 >>>>> Richard Biener >>>>> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuern= berg, >>>>> Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerma= n; >>>>> HRB 36809 (AG Nuernberg) >>>>=20 >>>>=20 >>>=20 >>> --=20 >>> Richard Biener >>> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernbe= rg, >>> Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman; >>> HRB 36809 (AG Nuernberg) >>=20 >>=20 >=20 > --=20 > Richard Biener > SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg= , > Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman; > HRB 36809 (AG Nuernberg)