From patchwork Thu Nov 17 03:43:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Guillermo E. Martinez" X-Patchwork-Id: 60733 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 039043954C5B for ; Thu, 17 Nov 2022 03:43:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 039043954C5B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1668656636; bh=tPaQpdz3rBTCbQ4/pkBJ3JEsmWkRo6vf1AH5RW9cfiA=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Help:List-Subscribe:From: Reply-To:From; b=DWB39LYV4U8jWWDjH3MJV7bgwiVDBzJhaG0tKVXwrxaAd5sQbnQNoUNzEug2wFKOS xGWG1fmJS+QgZu6vuNEQuXjVZCDADdswUeQ6SmRdpWjR3RObaiu+Nb5mStFzvj/qTA 36VdscJIoNSeAjzh9k7slG4f4S6+8xvS459zfPMs= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id BA9123887F76 for ; Thu, 17 Nov 2022 03:43:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BA9123887F76 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 2AH1ps9x010256 for ; Thu, 17 Nov 2022 03:43:48 GMT Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3kv8ykq9qk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 17 Nov 2022 03:43:46 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 2AH3Dobd012513 for ; Thu, 17 Nov 2022 03:43:44 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2170.outbound.protection.outlook.com [104.47.56.170]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3kt1xes4qa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 17 Nov 2022 03:43:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hv9as9liSAccn8MsfgSyYyROIqmtUpad6pko5tT2NH4mXF6+ItqThhaWwl2eJBvnVRH7Jo7B4jkFNHMawbcUogpabyOrmclTqrZbSVTHFVqZaS4/dHjsS29gaPzDXgyLgwZbsH5n9kB2WV8sxa+BjpjcrRsvGOBCtlqLY9RIASEvqT0X69jTi57HrBh+voWq88l2rhCa2iNozZ83vbkubPJ0wVVBLE1+1bzPlzn+f1R3LsAlgLX4evrFG9qLJtXDJoOLjHNKjABPqjN4i05pd9cMLV9pq4g6F/Wi3fa2oZ8p7GHiHJ1r9EjJq1uN/qA+QNBXbIwBlXsM2Neu3N8iMA== 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=tPaQpdz3rBTCbQ4/pkBJ3JEsmWkRo6vf1AH5RW9cfiA=; b=YQ4e/0snbL2xBkre7cFGrM88ZxHLRoJLWkxIo4XweNSJmNU85oJcnKwabfjgDaUXyeTtW08ViYY7yNL2o0/JPbGko6f/bG1qDeTytC5L1zY6ILjfoFj7r03wikIGeY/utwCT/Rj7pgF6YqsfbimWxokXK0SFBGAcUqOqY4AGr3CaTy8cbOQtO3IsfeFXlm18PopX5AHit41xO428+EYr/hnaaS6CKrr0Xfo/RusbJHz85jiiuRJRrrmhI9m56En1G2esEF53yuZFV4q5WC9qUzs40PTZRDIOgGxd7tj4QI2QfCMFVdd6XzOgLqgZU3M3wB4hgHGFRdTi4413v/4uug== 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 MWHPR10MB1407.namprd10.prod.outlook.com (2603:10b6:300:23::20) by CH0PR10MB4843.namprd10.prod.outlook.com (2603:10b6:610:cb::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.20; Thu, 17 Nov 2022 03:43:41 +0000 Received: from MWHPR10MB1407.namprd10.prod.outlook.com ([fe80::1800:88c1:fae8:13b4]) by MWHPR10MB1407.namprd10.prod.outlook.com ([fe80::1800:88c1:fae8:13b4%10]) with mapi id 15.20.5813.020; Thu, 17 Nov 2022 03:43:40 +0000 To: libabigail@sourceware.org Cc: "Guillermo E. Martinez" Subject: [PATCH 4/5] ctf-front-end: Fix representation for multidimensional array type Date: Wed, 16 Nov 2022 21:43:04 -0600 Message-Id: <20221117034305.184864-5-guillermo.e.martinez@oracle.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221117034305.184864-1-guillermo.e.martinez@oracle.com> References: <20221117034305.184864-1-guillermo.e.martinez@oracle.com> X-ClientProxiedBy: SN6PR01CA0012.prod.exchangelabs.com (2603:10b6:805:b6::25) To MWHPR10MB1407.namprd10.prod.outlook.com (2603:10b6:300:23::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR10MB1407:EE_|CH0PR10MB4843:EE_ X-MS-Office365-Filtering-Correlation-Id: 07fe90e3-8174-4931-383e-08dac84de9d8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 27zryDtlu8Lqon4tW8G/RViQDK4iiH6V00B4267jBBDcxlDlDYksavalEWpy9JzDyS0/K80FrjEW6iTIDmFgilH501ELfeXpMBitKTz8Bkl3fBoqWgnuS8hmtim69kG9dR9oVslW2Xbzm2Jqp2E3YfLj13KwfTxYuani8WB/jfuvKCCKahB/OlLNo7ZwQ1QPqR5Ap2fbFX3Ykb+pcUbPZUQ4qQna1TQqNIG+wIgAs3xRMyqa+hpdoFQMIYQSGlBFQQkJSFkv9uHLRFJ76TdyTNXvsx5maua+GoHjxurQXj7vOmR1gnpjfiI7iRR+7GUGpQW4sfSnnz+eIFnMmS++m06AkU/ZhEeIRW260ZAlCbOVbreMJptt9oTk5rkHXkC8qm+HF73SA1DerbrB7ENnplc9lruoXwOkNLluPBUXxFvGVrn0g1RmsEpFF2IyLHRS6Kbdb7xyUTkphwiAjePpGZYyloPjFJWHWe9ZKUnrKX/SgAwmjjYY1sPOIcge5a7w8lNUzwrEUHCtAwhbQtCrji/4U10cvzQJFVemeOOzHDKfX0hkIPty/68yhTJNwLcgIiKhG/e5N9JgEEG9S3k5tdkTtbOf3aStYES3XCYgF4XW8YyM03eU5OFP8bgMEtitwVI9DVEUXNgkWLY1ChtXCOXX6vKe3fuquSwVgxoDHD8O0vWXwRlaq5WQ4+TXxawZ3Jj1Ddbb5d8kOZtJPmnOOg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR10MB1407.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(136003)(346002)(39860400002)(376002)(396003)(366004)(451199015)(86362001)(36756003)(103116003)(41300700001)(2616005)(66946007)(66476007)(66556008)(4326008)(8676002)(30864003)(1076003)(186003)(8936002)(5660300002)(107886003)(6666004)(478600001)(6486002)(316002)(6512007)(6506007)(6916009)(38100700002)(83380400001)(2906002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: y4uwfnpgWfu6cohuvKGW5BZPeFHwtMNF5u8DEZwRBln5V7fbcAiX/EOHi2/X07nfFxTuRZ+xKdwFYowRK8lSSeFIXfUaHdk/XL064h7hBNggmvNG4GCN4DYwRWMmKQr3KPnDLVE3TJJqDyIV1t9vOhHrRJngQbVUcrxU3PEJth1dfY3yE+Qr0WZ5ATJVUVDTE1Cb+Dxl7qMG017zheSQmun6wGKX9/CCeJ9T+L+ardd7kWk4mwg1XkfIwh9DW1ZkyK6qrHQnn4HPPcxQyqjMASESeujkudWo8izHRt1M9PSeOxJ2g2+/VtQSlCj++ltZO7YQyHK49Sq6XA5EcmaFlKfuqlFFWxQf/fGlgm+TOeYiMgvUq1YlyaTGySV84IWt3ZzR1MVToBCTg89cYVX0UvS7mQqnJf0JqprJh+NV9M+mGQHrUet/yyFJIDNDFfyXF1Mk/l7Ok0brP0Bevl/wJda4/lhYQq+rbpWOT1QJtw5Py+qLDNTEwrc3vSm4UYtfnDqA9px0kWH2zh99g71MnloBcTjxCgZpWHPuN7z1q5+8r9X9JG82mlldtb1kFHjOR6fXgerwZLrREfuZrjPykfp58fc56czJHlknQZXjPy2qlwPLhSSeeCmz/i3v2+0674PLJtvZIwnxBZ5N9pqM9gUxNJMYv/2jqQjTGM6bVAAZcwMqjciWxTTC6jmoiwxAOsxQ+SAiAH7Vz1S8TsU5PTLjqtZeNfOLqp45YeLwuHpM5k+0SSSJi0dtEfRDuqbl9P0WNAd51VjOCLIDg2SBbHLaDtyuSvtdAN6xhmagOnlyU18kKIuUm76sXvGcWLZ+Zp038PVdBfiz7RdX5z8ABOPZKq9iz8lzBgHREofks8OKSOriqkzbrGgTk4oB3TGIQGQ3lBOeppqSv2rl0GbO50wc7MithJIQ+XGWy4IYl7QVaj8OsB7PX9OW90IDbOtUk61ZS6RgCiyv4EdyVcxstdc2xAm4npiV+Wvys7ehixpmxsRhHJf15M7m3oNjSmqVp3RTmO9xfObM9E0TRXOgeuYVE3IFeIrgk2qKXdCybZLVrAOvs2c9SFR5+hCodgipnE8F+/goPdOZMKnzlEkpwTpB01kPydsOdKwP6zlP4qBWbJQZDsyGzXbWVEOylOtV9txu+KXYUdmGCV/5mRiTX01DRQSkynMLeCgh9fRIHsRm4nz8FMibfTDf4QO5Azowzq0cl2MXmMp6q8cDNwLZKJ61NPCnJ9S2d6cHdmgRX8FSoe58Ug7YawdCJIo7wmHtta+SK5qjkAAfM83ln2xZmTgCJAwzMy7sJ+3C6o16kPZsm7JgvIG1CFK0ePa2yxWbGKq8Q2CL90I4tvgTOPMS8l1o7bGegiGSCk2H/XnX2iecqU700cprkwKitTqGyFUpH4S/yN1QF2cB1zcywBmsRB6so6Pdugx2VLTQ6lGhK+XNz/3AAsb2Fy9y3p9KybwfynrP8x/f3m86zlM4ZujrW2a0uFVP18FMrBZmCiVEU58AsuWDiUFwCi9veOPHNRCx7hIDLCbca4qx/O7lSO/NIxgHdHCCTLkAXQRY9v5H0qK0QQvhxcEt0wVsmY9HLU8J0o5kM8O4/D5KxC4gLC5cVm6XBuCdWosJG+l4XSQcyQwQDAcfQVhEQQwXsPiWCbU5mNc8HGgUVshkQBSP3PWEV19JH0MQguBuTtedtgqTBfg= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Bv7fqYuQmMQCerYC/y/NcSYXW35QZ3bs83L6cWCzEpPftLSvL5oFRGfibgCQSF+Az+WDnQKdcO4DSaRfYeX/1Ud0A1DC2GmV8YZ7cszbtXGv11kAC589Ahps2OrUbHKje+kHRTw+92eB4J5beGA5BFD12/4By3SmCYHOAgdY250ZmgtSWBSERG7TBLMHXDGYvPTuLFYAtRJtrQQbdcsOpoLn7tUUgMSfvxf5x6HG/FiycNxEkefiOpIJtPWNUDe39yd0QSGabsdhTNejUenih0cD9EcHrx2hXRi76lQhkscYi4vY8HWc7wMqFpw5Veii5oUf7dpOdzSXwYgYHUCPVBiIdYIM6QHrNKxe7fgYiNUPHUyTS99Z16j+XfmO1wg9MXt0OQRz+j5EzLrRseP9SM05tL2RApU46D14jpsz58Y9j5bpxBg/9v50BOGTUbiEpRUNv27y7xlme5tNCEu8c49SrD0I2x30lY9MgolAPz9nb1CDsID1uepuU9m4M/P24pmnM9rgccyp0Ecxvjh3SluVpUXF4EWOmVNZ221sa+kE7cdcVfL7dYpO3ORDGsjQarmJCcvq2qlPcvDmx0AWhWKLqMcEb7ZezGicWLng6YPcWClttCZDvJM6IvkynYrf+9H3Q1Les7SjjlekJ0OMm4Pxd1jfFID9OW1iYNwnltrEBJvDWpdF89OdcZ1XLuPFLMhQwgx1IuEcF5wycTE2wwT4DPiVmOBVM4bopumGEpWxFCVgTwRxf+SK31BDkPCh+p0KHLDm1UQW9b+PwR91KQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 07fe90e3-8174-4931-383e-08dac84de9d8 X-MS-Exchange-CrossTenant-AuthSource: MWHPR10MB1407.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Nov 2022 03:43:40.4050 (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: 8xGoth2OkPAzAuTl+zKRnvB2HkJop8nx2D/3/GsXkTZ46WvckUErn4gKzpqxaYmUoJQdNcl9pP4AQS8hKRP4GxF65o73kAHMVH91YxxZEpU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB4843 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-11-16_03,2022-11-16_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2211170024 X-Proofpoint-GUID: NBbM847K0WQOnx175Q7YLKkrXLuSLB4W X-Proofpoint-ORIG-GUID: NBbM847K0WQOnx175Q7YLKkrXLuSLB4W X-Spam-Status: No, score=-12.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_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 X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-Patchwork-Original-From: "Guillermo E. Martinez via Libabigail" From: "Guillermo E. Martinez" Reply-To: "Guillermo E. Martinez" Errors-To: libabigail-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libabigail" To build an IR for multidimensional array the CTF front-end iterates over the element types recursively, so a definition as follows: char a[2][3][4][5]; Produces: 'char[2][3][4] a[5]' instead of 'char a[2][3][4][5]', it considers always multidimensional arrays as unidimensional creating a `array-type-def' node for each dimension: ... Instead of: ... * src/abg-ctf-reader.cc (+build_array_ctf_range): New definition. * tests/data/Makefile.am: Add new testcase. * tests/data/test-read-ctf/test-array-mdimension.abi: New testcase. * tests/data/test-read-ctf/test-array-mdimension.c: Likewise. * tests/data/test-read-ctf/test-array-mdimension.o: Likewise. * tests/data/test-read-ctf/test9.o.abi: Adjust. * tests/test-read-ctf.cc: Update testsuite. Signed-off-by: Guillermo E. Martinez Signed-off-by: Guillermo E. Martinez Signed-off-by: Dodji Seketeli --- src/abg-ctf-reader.cc | 119 ++++++++++++------ tests/data/Makefile.am | 3 + .../test-read-ctf/test-array-mdimension.abi | 16 +++ .../test-read-ctf/test-array-mdimension.c | 2 + .../test-read-ctf/test-array-mdimension.o | Bin 0 -> 1360 bytes tests/data/test-read-ctf/test9.o.abi | 36 +++--- tests/test-read-ctf.cc | 27 ++-- 7 files changed, 135 insertions(+), 68 deletions(-) create mode 100644 tests/data/test-read-ctf/test-array-mdimension.abi create mode 100644 tests/data/test-read-ctf/test-array-mdimension.c create mode 100644 tests/data/test-read-ctf/test-array-mdimension.o index 331bfc70..9f5a7466 100644 diff --git a/src/abg-ctf-reader.cc b/src/abg-ctf-reader.cc index 7c267bb1..ba4eed16 100644 --- a/src/abg-ctf-reader.cc +++ b/src/abg-ctf-reader.cc @@ -1171,6 +1171,58 @@ process_ctf_union_type(reader *rdr, return result; } +/// Build and return an array subrange. +/// +/// @param rdr the read context. +/// +/// @param ctf_dictionary the CTF dictionary where @ref index +/// will be found. +/// +/// @param index the CTF type ID for the array index. +/// +/// @param nelems the elements number of the array. +/// +/// @return a shared pointer to subrange built. +static array_type_def::subrange_sptr +build_array_ctf_range(reader *rdr, ctf_dict_t *dic, + ctf_id_t index, uint64_t nelems) +{ + bool is_infinite = false; + corpus_sptr corp = rdr->corpus(); + translation_unit_sptr tunit = rdr->cur_transl_unit(); + array_type_def::subrange_sptr subrange; + array_type_def::subrange_type::bound_value lower_bound; + array_type_def::subrange_type::bound_value upper_bound; + + type_base_sptr index_type = rdr->lookup_type(corp, tunit, + dic, index); + if (!index_type) + return nullptr; + + lower_bound.set_unsigned(0); /* CTF supports C only. */ + upper_bound.set_unsigned(nelems > 0 ? nelems - 1 : 0U); + + /* for VLAs number of array elements is 0 */ + if (upper_bound.get_unsigned_value() == 0) + is_infinite = true; + + subrange.reset(new array_type_def::subrange_type(rdr->env(), + "", + lower_bound, + upper_bound, + index_type, + location(), + translation_unit::LANG_C)); + if (!subrange) + return nullptr; + + subrange->is_infinite(is_infinite); + add_decl_to_scope(subrange, tunit->get_global_scope()); + canonicalize(subrange); + + return subrange; +} + /// Build and return an array type libabigail IR. /// /// @param rdr the read context. @@ -1189,64 +1241,51 @@ process_ctf_array_type(reader *rdr, translation_unit_sptr tunit = rdr->cur_transl_unit(); array_type_def_sptr result; ctf_arinfo_t ctf_ainfo; - bool is_infinite = false; /* First, get the information about the CTF array. */ if (static_cast(ctf_array_info(ctf_dictionary, - ctf_type, - &ctf_ainfo)) == CTF_ERR) + ctf_type, + &ctf_ainfo)) == CTF_ERR) return result; ctf_id_t ctf_element_type = ctf_ainfo.ctr_contents; ctf_id_t ctf_index_type = ctf_ainfo.ctr_index; uint64_t nelems = ctf_ainfo.ctr_nelems; + array_type_def::subrange_sptr subrange; + array_type_def::subranges_type subranges; + + int type_array_kind = ctf_type_kind(ctf_dictionary, ctf_element_type); + while (type_array_kind == CTF_K_ARRAY) + { + if (static_cast(ctf_array_info(ctf_dictionary, + ctf_element_type, + &ctf_ainfo)) == CTF_ERR) + return result; + + subrange = build_array_ctf_range(rdr, ctf_dictionary, + ctf_ainfo.ctr_index, + ctf_ainfo.ctr_nelems); + subranges.push_back(subrange); + ctf_element_type = ctf_ainfo.ctr_contents; + type_array_kind = ctf_type_kind(ctf_dictionary, ctf_element_type); + } + + std::reverse(subranges.begin(), subranges.end()); /* Make sure the element type is generated. */ type_base_sptr element_type = rdr->lookup_type(corp, tunit, - ctf_dictionary, - ctf_element_type); + ctf_dictionary, + ctf_element_type); if (!element_type) return result; - /* Ditto for the index type. */ - type_base_sptr index_type = rdr->lookup_type(corp, tunit, - ctf_dictionary, - ctf_index_type); - if (!index_type) - return result; - result = dynamic_pointer_cast(rdr->lookup_type(ctf_dictionary, - ctf_type)); + ctf_type)); if (result) return result; - /* The number of elements of the array determines the IR subranges - type to build. */ - array_type_def::subranges_type subranges; - array_type_def::subrange_sptr subrange; - array_type_def::subrange_type::bound_value lower_bound; - array_type_def::subrange_type::bound_value upper_bound; - - lower_bound.set_unsigned(0); /* CTF supports C only. */ - upper_bound.set_unsigned(nelems > 0 ? nelems - 1 : 0U); - - /* for VLAs number of array elements is 0 */ - if (upper_bound.get_unsigned_value() == 0) - is_infinite = true; - - subrange.reset(new array_type_def::subrange_type(rdr->env(), - "", - lower_bound, - upper_bound, - index_type, - location(), - translation_unit::LANG_C)); - if (!subrange) - return result; - - subrange->is_infinite(is_infinite); - add_decl_to_scope(subrange, tunit->get_global_scope()); - canonicalize(subrange); + subrange = build_array_ctf_range(rdr, ctf_dictionary, + ctf_index_type, nelems); subranges.push_back(subrange); /* Finally build the IR for the array type and return it. */ diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 8d4a2b8f..d04ecf3f 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -713,6 +713,9 @@ test-read-ctf/test-bitfield-enum.o \ test-read-ctf/test-const-array.abi \ test-read-ctf/test-const-array.c \ test-read-ctf/test-const-array.o \ +test-read-ctf/test-array-mdimension.abi \ +test-read-ctf/test-array-mdimension.c \ +test-read-ctf/test-array-mdimension.o \ \ test-annotate/test0.abi \ test-annotate/test1.abi \ diff --git a/tests/data/test-read-ctf/test-array-mdimension.abi b/tests/data/test-read-ctf/test-array-mdimension.abi new file mode 100644 index 00000000..177284d2 --- /dev/null +++ b/tests/data/test-read-ctf/test-array-mdimension.abi @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-array-mdimension.c b/tests/data/test-read-ctf/test-array-mdimension.c new file mode 100644 index 00000000..317fc589 --- /dev/null +++ b/tests/data/test-read-ctf/test-array-mdimension.c @@ -0,0 +1,2 @@ +/* gcc -gctf -c test-array-mdimension.c -o test-array-mdimension.o */ +char a[2][3][4][5]; diff --git a/tests/data/test-read-ctf/test-array-mdimension.o b/tests/data/test-read-ctf/test-array-mdimension.o new file mode 100644 index 0000000000000000000000000000000000000000..5b392d89439a1e39111c350ba2ee8baf7cdb4a14 GIT binary patch literal 1360 zcmbVM&2G~`5T3Ll{9P!g0vB_l6?pBWT<8H=s-OrVZX7wRoh7mGPqf~u@rhUH8^ELR z2)qH$051SD_N=`u;lfDcnf>Pbc6Y{3KD~JJa&IyLYZG`5CeM+!_aC%?gd2jdm`27QKp$WA$*H=~IBeZtUYq)jO6?Jfo4(1F9D03E*17)7=Y zr#ldrB3p-F!v*0KAzMogMP03ei>k?2m0AXQWk5o-u1giAZQ4e)mRX^qMrToxr!vh~ zGB3hPT}DPVriqr)$Sw`FlFKkNANrNlTDD=i%u9uP*OkZs&d<(HgQN4e?~a4{iHJoU zEaJstK98RTM{2uKn#e{L$Njwnz9$Os&XccBFF22Wz3ZJ(Yu2bfg&)7{+QxgB9KblW ztu0Vj;f~8o0MWFikts%_`?$85QCkCoW&t8?8W1=KeAFd11fr^q64*xA7@2+K^{ToM z8(m}DrnRU4cYJ_K>XpBtVV`8k{!IM2J;X9$<3xIX(ucpEzWxz1=)3)wewZ)s6mYcR z2`2uYR7>cA_S7qSOPC{vu$ah>874k - + + - - + + + - - - + + - - - - + - + - + - + - + - + - - + + - - + + diff --git a/tests/test-read-ctf.cc b/tests/test-read-ctf.cc index 61a5682c..a2193303 100644 --- a/tests/test-read-ctf.cc +++ b/tests/test-read-ctf.cc @@ -362,15 +362,24 @@ static InOutSpec in_out_specs[] = "data/test-read-ctf/test-bitfield-enum.abi", "output/test-read-ctf/test-bitfield-enum.abi", "--ctf", - }, - { - "data/test-read-ctf/test-const-array.o", - "", - "", - SEQUENCE_TYPE_ID_STYLE, - "data/test-read-ctf/test-const-array.abi", - "output/test-read-ctf/test-const-array.abi", - "--ctf", + }, + { + "data/test-read-ctf/test-const-array.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test-const-array.abi", + "output/test-read-ctf/test-const-array.abi", + "--ctf", + }, + { + "data/test-read-ctf/test-array-mdimension.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test-array-mdimension.abi", + "output/test-read-ctf/test-array-mdimension.abi", + "--ctf", }, // This should be the last entry. {NULL, NULL, NULL, SEQUENCE_TYPE_ID_STYLE, NULL, NULL}