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 8F0613858D39 for ; Fri, 8 Oct 2021 17:49:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8F0613858D39 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 198H1S6P001320 for ; Fri, 8 Oct 2021 17:49:20 GMT Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by mx0b-00069f02.pphosted.com with ESMTP id 3bj1ecs8ad-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 08 Oct 2021 17:49:19 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 198HkBRZ006288 for ; Fri, 8 Oct 2021 17:49:18 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2176.outbound.protection.outlook.com [104.47.57.176]) by aserp3030.oracle.com with ESMTP id 3bev7y9t5m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 08 Oct 2021 17:49:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XmfKUChQqBLHU/jti/NPK/8IimqnoruTWcpCRwoj6hUKNHCvCI8jxDGAQh6FNlOZrPjfkS54hHDZhQBYQ+sG1RD6Kph/obnaDjoWJnX0+k/pe2uPQ1vFGifsGc/6RPrLWlTP7Is0VKP9Mz4cIAuUevqmKpvk6ed1ky+DNojR5LvnTpe9IME4hyGMcg/WYSVdxRKSQ+ok13XbkLxwsrsP7k7vFA6CXt23j/MKFkWIS5Et+ObGRimMeXc0X20tSD3fpnFN0BXHUBJp3ECgaguFG/8lFkLpGD9EEn7Nnvy/kMi/Hslz5NcKC4ZjSBR7q6D10pnsXe65fcGgSSxcuqFagw== 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=RlwOFcpKxzQPkjqFRTUSg7HyJ0hAM04vfVxuFxpdRMI=; b=NsEE3UiBz3/Tk+cAjCkSiOmLDI406Arqdptf6dGZsbVuw+SBU68O/u7t8ySMi+gUjhplKO0j4XO9d2lT+N5OK9BvBuL0msRPRgJ3/ibz56jwgBH9N0SKuYPI14zg+ja49gSP6J48ycUCu0Mp4zB9zSyPHu2Jd9q3g7Dmq7XquclwduwkdXeliF99u1oPL+rWLCVPwSiRP55cYvTY8Dfw7fMITFsaIIXk6qdBupaDHnheMEHfTbYfh8ylweCvKwX+TPZiCv/Pe7LE3zV+upRNzRXeC6Jsg3Ggqqv7WG/mZQb/5OH9+ZWqVrJmKxHuYAmcQyrXpOK6vc/5E+OfP7woZA== 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 SA2PR10MB4458.namprd10.prod.outlook.com (2603:10b6:806:f8::24) by SN6PR10MB2541.namprd10.prod.outlook.com (2603:10b6:805:44::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.22; Fri, 8 Oct 2021 17:49:16 +0000 Received: from SA2PR10MB4458.namprd10.prod.outlook.com ([fe80::1493:70de:28e4:3d3e]) by SA2PR10MB4458.namprd10.prod.outlook.com ([fe80::1493:70de:28e4:3d3e%5]) with mapi id 15.20.4566.022; Fri, 8 Oct 2021 17:49:16 +0000 Message-ID: <883ae628-cbbe-946f-a5f0-32ed2e951975@oracle.com> Date: Fri, 8 Oct 2021 10:49:13 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.1.0 Subject: Re: [PATCH] Remove lambda iterators in various HIR classes Content-Language: en-US To: gcc-rust@gcc.gnu.org References: <20211008174507.10534-1-david.faust@oracle.com> From: David Faust In-Reply-To: <20211008174507.10534-1-david.faust@oracle.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SJ0PR05CA0187.namprd05.prod.outlook.com (2603:10b6:a03:330::12) To SA2PR10MB4458.namprd10.prod.outlook.com (2603:10b6:806:f8::24) MIME-Version: 1.0 Received: from [IPV6:2606:b400:2001:93:8000::ccc] (2606:b400:8004:44::27) by SJ0PR05CA0187.namprd05.prod.outlook.com (2603:10b6:a03:330::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.9 via Frontend Transport; Fri, 8 Oct 2021 17:49:16 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f833df84-28d0-4016-62a8-08d98a83f2a8 X-MS-TrafficTypeDiagnostic: SN6PR10MB2541: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2276; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Ywfx6rGMsnaIPnstvEXmZKePiWEKKyiGWfe/KiWjdS5EaXQx1L7lhBs1zD8ujpaKC7WyajcDjbxVNYIn5lah/PYmhiFg2JmKDSTIaGlcz3Cx2Yw2Vahnxc/OJq6P8niS0wbr6Vlnw0qgGcTI/wcPjMfAyXZqL+eHRt6Ai3WbiJaNiwH4x4AKv55qGsSUyo6WBO42VgGA5k9nCkFukPFbcbLxYTtae19VBYNFqayqlRCnwgDQgIvzivNa67CuzwcoKvaJzwa/XAW/UMdBWGmpjviJFRzJZO7HQB++uzBBCaSCGTgFK3h/w0cvvtiV528idus7wu6ax1oSXdEUZFZbLrUxEV3uE5p2SjnnY3AakhlhMFv+Gp/eU3BEryqXyb1Iia3SdvNBvtruiY2mkMx44W0D2VJJNIn0zwyFMHdrqzoz35po6k/T1XmLJGrM3zAUl3DpthVreMS02GauSTM4FN7hyVjvGs2lkk3HjDPAaBJ5pnBXNN+ePfJ9PxwQTT/0AU6plx7YuduEzC86WNpvUR3qQMS+BOpWBiGJ4mqoZhTT+gE91Iv8ynFTl9uEkdHvvjW2GeV3JAUL7fhl/gwju3Cmsy61QvTV5m/9wPdl7en3DwPswreaOrtYP5XveJrHA5wanaLQxtmHeTOdCpB1paQgT0xiF1WkaUoQS1Zkl7P75xtV5uwZ9LJVJcGAE7bXMphIaLELykJ14WtACAiRizN6mvly6dHAwsNdrUNm3Uc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA2PR10MB4458.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(38100700002)(6916009)(6666004)(508600001)(44832011)(8936002)(66476007)(31686004)(66946007)(83380400001)(66556008)(6486002)(186003)(53546011)(5660300002)(8676002)(30864003)(2616005)(316002)(31696002)(2906002)(86362001)(36756003)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UmJ3bnVpMEJhTmZFSEZwZ2JkOUYrWGFybkpDS2EwS2pPTlJQOU5MUnJqWU9D?= =?utf-8?B?NkxLWDAyRDBZMXlCMlpKcVFrY3BaQXAySVZCTkM3VnVTNkxIcm5RaU43am5P?= =?utf-8?B?aHNKY2N2SDlTOUw0OHdBdDZZUUNLVjhFZ2JsNHoyU1U3L1N6OW5pa0dCc0lw?= =?utf-8?B?WVAraUJDdDNhakROVEdrY1M3QjJSdm9lWFR4ZHAvZENvRi9TSFVabHFpZGx3?= =?utf-8?B?TlZpUk1vNTJPM2k4MkRKT1FYM05mcTFKSnZYK1dpSEZZYmpKUVN0UnhvOWUv?= =?utf-8?B?S3ZPTUxWdUdMb0ZpTW9hazUwVFhJUTRsWU12dU1YWUNXaHZnczFma25jUTNE?= =?utf-8?B?eHUrNE5KZkI2LzVZT1hhb3Mzck1ibDlSTnJObktXTVBFWTVjcFlXcHhDSlNp?= =?utf-8?B?ZkZ1SkRndThlQUwrOFJpbnZ2UDJXa3ZuRVJBUGhzUnVkYnViTFN3aWJSVWxV?= =?utf-8?B?REpHNmlQN0tSSFl2aVhIaTF1a3BVK3o2UjdQZXc5d3FzRnZxMHR0N3hYQXN3?= =?utf-8?B?b1MyNy85S0lTWklsSUxWRmFMZ2t4Vzd3WHJVMWZpV3l6TVlsWHhTdkh1bklH?= =?utf-8?B?dmphMHA0Nkh1eElLR1UwT0dIaFJhYUVHRlVJeXhabFdhNmU1eGE5dlY1M1Av?= =?utf-8?B?RVdud3doaGZld3g2VGJqZ09VdjhHOG42NHR6TzZDVnh2N1NlMitnREdickZL?= =?utf-8?B?Mkh4WThsMGdqTW5tUTU1S3ExcG40Q0FxZytTdnlnUUZwbXFRckJQRFV1UUl0?= =?utf-8?B?TjRDaGFUK3J0aUt0TXkxVGh2NGdBU25uQ2xoVXBxZUdBM0d2TW03WmF5NEt0?= =?utf-8?B?c2FYTkNKaUI3QlMrcER2bFk3eTRYbWxNMWhpRTFJKzF2dWpGR0h3cWYxa3Bl?= =?utf-8?B?amtYa25BSTFQamo3NGNITG95UEpsZU5BNlFmRGQ3aXdJcG90WlltekNZMmo5?= =?utf-8?B?aktvUi9TN1lPclFEanQ2aFM1OTJjU1ErRTlOUmhwU3FjT0ZROU0yc0crVEVa?= =?utf-8?B?VTlMcmxSd0ZFUjB1UnZrMGNPUVFadTdCYVNYYmcrRWoyVHZ6Tlc3MVNMRDVz?= =?utf-8?B?dzZKRHpnWlhGQUJwYmhlMkNiVVVlUElUUXZtWTZOWXdOMFJ2M3FsVXBvNVZD?= =?utf-8?B?K1NpTUhZb3g1NldiVE9Ja0xMSmJXQTBneEJCUFo4dnl4THpCVXdjaDAvK2lD?= =?utf-8?B?MlpOUE90ZWJvaVBoRFFNSHVIV0R0QWl4elZIekNkbVhWOUFFZXpRNDY5WTdX?= =?utf-8?B?VW1WY1BsWVNaa2RYMlprWXZyREpSMlZEQlZiU0ZTWmp4Ynk1ZVNDcklqUVU3?= =?utf-8?B?U2lVcFc4S0tiWVNuWGVHVGhzb3BhQXMrZk4xUFRoYVYwR2VvNk9uZ2pkb2dE?= =?utf-8?B?WXAyMW1NZUN0ZTZkMS9lU3I4NkozS2lZNC92TGZiSkRqNmU0MEw5ZjBHTzJD?= =?utf-8?B?anNkSUU4QmJ1NVBLZ3VSVk54TzNjVFRmNWhwNWFkcDlzU0F2eEV0M09iZnN6?= =?utf-8?B?RHFmOFhQbTJlbjg2VlVkMEhONFRVSWtoTFptOVNha3BlditBcWtOQ3QzZEFD?= =?utf-8?B?OC9tVW94NDNUTlYzODlBTjZ3ajdXbWxUc2trcXVrTkhGdllUdnpVYitMTVNF?= =?utf-8?B?Nk0zenpxZVMrTHJ0R3lnTnFFaG8xS2ZDWXlGanFkY1VNU0dsek1FRWRXUFg0?= =?utf-8?B?RHdONkppbTJCSk5ac1lSZ0Z1d2ZuNTV2c1g2ZzFNWFJKdzFLVUxRS2xGeEd4?= =?utf-8?B?Qmh1SVhPbHdFdnpKenFFWjJ6Z1BDdURWcDlnSGF4RkQ4T2FLWTlWQ3JNWHU0?= =?utf-8?B?cjhPRWh0b2NPWC9tbkdrZz09?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f833df84-28d0-4016-62a8-08d98a83f2a8 X-MS-Exchange-CrossTenant-AuthSource: SA2PR10MB4458.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2021 17:49:16.7111 (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: 373NHeh8m4OBaJmgTTZCX5aRzqoG/+Iu+52G0dGn64K4gPqra9havHqr23n3ANKZ3wsvoszRiWUge38cOTGRMQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR10MB2541 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10131 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 mlxlogscore=971 adultscore=0 bulkscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2109230001 definitions=main-2110080099 X-Proofpoint-GUID: 4H38xuMsZmGFrHA9gtkCk__BBbGlN4bc X-Proofpoint-ORIG-GUID: 4H38xuMsZmGFrHA9gtkCk__BBbGlN4bc X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, MSGID_FROM_MTA_HEADER, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-rust@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: gcc-rust mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Oct 2021 17:49:23 -0000 On 10/8/21 10:45, David Faust via Gcc-rust wrote: > This patch removes the lambda iterators used in various HIR objects. > These iterators make interacting with the IR for static analysis more > difficult. Instead, get_X () helpers are added for accessing elements, > and uses of the iterators replaced with for loops. > > The following objects are adjusted in this patch: > - HIR::TupleExpr > - HIR::StructExprField > - HIR::StructStruct > - HIR::TupleStruct > > Fixes: #704, #705, #706, #707 This also adjusts HIR::ArrayElemsValues, fixing #703. Must have lost those lines in the patch prep, sorry. > --- > gcc/rust/backend/rust-compile-expr.h | 20 ++++----- > gcc/rust/hir/tree/rust-hir-expr.h | 32 +------------ > gcc/rust/hir/tree/rust-hir-item.h | 18 +------- > gcc/rust/lint/rust-lint-marklive.h | 24 +++++----- > gcc/rust/lint/rust-lint-scan-deadcode.h | 20 ++++----- > gcc/rust/typecheck/rust-hir-type-check-expr.h | 9 ++-- > gcc/rust/typecheck/rust-hir-type-check-stmt.h | 44 +++++++++--------- > .../typecheck/rust-hir-type-check-toplevel.h | 45 ++++++++++--------- > gcc/rust/typecheck/rust-hir-type-check.cc | 33 +++++++------- > gcc/rust/typecheck/rust-tycheck-dump.h | 10 ++--- > 10 files changed, 107 insertions(+), 148 deletions(-) > > diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h > index eb245dce5be..7c4046680e9 100644 > --- a/gcc/rust/backend/rust-compile-expr.h > +++ b/gcc/rust/backend/rust-compile-expr.h > @@ -412,11 +412,11 @@ public: > > void visit (HIR::ArrayElemsValues &elems) override > { > - elems.iterate ([&] (HIR::Expr *e) mutable -> bool { > - Bexpression *translated_expr = CompileExpr::Compile (e, ctx); > - constructor.push_back (translated_expr); > - return true; > - }); > + for (auto &elem : elems.get_values ()) > + { > + Bexpression *translated_expr = CompileExpr::Compile (elem.get (), ctx); > + constructor.push_back (translated_expr); > + } > } > > void visit (HIR::ArrayElemsCopied &elems) override > @@ -646,11 +646,11 @@ public: > // this assumes all fields are in order from type resolution and if a base > // struct was specified those fields are filed via accesors > std::vector vals; > - struct_expr.iterate ([&] (HIR::StructExprField *field) mutable -> bool { > - Bexpression *expr = CompileStructExprField::Compile (field, ctx); > - vals.push_back (expr); > - return true; > - }); > + for (auto &field : struct_expr.get_fields ()) > + { > + Bexpression *expr = CompileStructExprField::Compile (field.get (), ctx); > + vals.push_back (expr); > + } > > translated > = ctx->get_backend ()->constructor_expression (type, vals, > diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h > index 05bc1f9f055..d9958a153be 100644 > --- a/gcc/rust/hir/tree/rust-hir-expr.h > +++ b/gcc/rust/hir/tree/rust-hir-expr.h > @@ -796,14 +796,7 @@ public: > > size_t get_num_elements () const { return values.size (); } > > - void iterate (std::function cb) > - { > - for (auto it = values.begin (); it != values.end (); it++) > - { > - if (!cb ((*it).get ())) > - return; > - } > - } > + std::vector>& get_values () { return values; } > > protected: > ArrayElemsValues *clone_array_elems_impl () const override > @@ -1070,15 +1063,6 @@ public: > > bool is_unit () const { return tuple_elems.size () == 0; } > > - void iterate (std::function cb) > - { > - for (auto &tuple_elem : tuple_elems) > - { > - if (!cb (tuple_elem.get ())) > - return; > - } > - } > - > protected: > /* Use covariance to implement clone function as returning this object rather > * than base */ > @@ -1491,15 +1475,6 @@ public: > > void accept_vis (HIRVisitor &vis) override; > > - void iterate (std::function cb) > - { > - for (auto &field : fields) > - { > - if (!cb (field.get ())) > - return; > - } > - } > - > std::vector > &get_fields () > { > return fields; > @@ -1510,11 +1485,6 @@ public: > return fields; > }; > > - std::vector > get_fields_as_owner () > - { > - return std::move (fields); > - }; > - > void set_fields_as_owner ( > std::vector > new_fields) > { > diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h > index 8cd7a01b2e8..f5119c3dc77 100644 > --- a/gcc/rust/hir/tree/rust-hir-item.h > +++ b/gcc/rust/hir/tree/rust-hir-item.h > @@ -1492,14 +1492,7 @@ public: > > void accept_vis (HIRVisitor &vis) override; > > - void iterate (std::function cb) > - { > - for (auto &field : fields) > - { > - if (!cb (field)) > - return; > - } > - } > + std::vector& get_fields() { return fields; } > > protected: > /* Use covariance to implement clone function as returning this object > @@ -1610,15 +1603,6 @@ public: > std::vector &get_fields () { return fields; } > const std::vector &get_fields () const { return fields; } > > - void iterate (std::function cb) > - { > - for (auto &field : fields) > - { > - if (!cb (field)) > - return; > - } > - } > - > protected: > /* Use covariance to implement clone function as returning this object > * rather than base */ > diff --git a/gcc/rust/lint/rust-lint-marklive.h b/gcc/rust/lint/rust-lint-marklive.h > index 062bb96bc0f..cd72ef0243d 100644 > --- a/gcc/rust/lint/rust-lint-marklive.h > +++ b/gcc/rust/lint/rust-lint-marklive.h > @@ -81,18 +81,18 @@ public: > > void visit (HIR::ArrayElemsValues &expr) override > { > - expr.iterate ([&] (HIR::Expr *expr) mutable -> bool { > - expr->accept_vis (*this); > - return true; > - }); > + for (auto &elem : expr.get_values ()) > + { > + elem->accept_vis (*this); > + } > } > > void visit (HIR::TupleExpr &expr) override > { > - expr.iterate ([&] (HIR::Expr *expr) mutable -> bool { > - expr->accept_vis (*this); > - return true; > - }); > + for (auto &elem : expr.get_tuple_elems ()) > + { > + elem->accept_vis (*this); > + } > } > > void visit (HIR::BlockExpr &expr) override > @@ -236,10 +236,10 @@ public: > > void visit (HIR::StructExprStructFields &stct) override > { > - stct.iterate ([&] (HIR::StructExprField *field) -> bool { > - field->accept_vis (*this); > - return true; > - }); > + for (auto &field : stct.get_fields ()) > + { > + field->accept_vis (*this); > + } > > stct.get_struct_name ().accept_vis (*this); > if (stct.has_struct_base ()) > diff --git a/gcc/rust/lint/rust-lint-scan-deadcode.h b/gcc/rust/lint/rust-lint-scan-deadcode.h > index 464852a9f8f..152858a9e13 100644 > --- a/gcc/rust/lint/rust-lint-scan-deadcode.h > +++ b/gcc/rust/lint/rust-lint-scan-deadcode.h > @@ -88,16 +88,16 @@ public: > else > { > // only warn the unused fields when in unwarned struct. > - stct.iterate ([&] (HIR::StructField &field) -> bool { > - HirId field_hir_id = field.get_mappings ().get_hirid (); > - if (should_warn (field_hir_id)) > - { > - rust_warning_at (field.get_locus (), 0, > - "field is never read: %<%s%>", > - field.get_field_name ().c_str ()); > - } > - return true; > - }); > + for (auto &field : stct.get_fields ()) > + { > + HirId field_hir_id = field.get_mappings ().get_hirid (); > + if (should_warn (field_hir_id)) > + { > + rust_warning_at (field.get_locus (), 0, > + "field is never read: %<%s%>", > + field.get_field_name ().c_str ()); > + } > + } > } > } > > diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h > index 28b985108cf..d9eeb4e3759 100644 > --- a/gcc/rust/typecheck/rust-hir-type-check-expr.h > +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.h > @@ -880,10 +880,11 @@ public: > void visit (HIR::ArrayElemsValues &elems) override > { > std::vector types; > - elems.iterate ([&] (HIR::Expr *e) mutable -> bool { > - types.push_back (TypeCheckExpr::Resolve (e, false)); > - return true; > - }); > + > + for (auto &elem : elems.get_values ()) > + { > + types.push_back (TypeCheckExpr::Resolve (elem.get (), false)); > + } > > infered_array_elems > = TyTy::TyVar::get_implicit_infer_var (root_array_expr_locus).get_tyty (); > diff --git a/gcc/rust/typecheck/rust-hir-type-check-stmt.h b/gcc/rust/typecheck/rust-hir-type-check-stmt.h > index 5f4721b955b..3f8d17e5307 100644 > --- a/gcc/rust/typecheck/rust-hir-type-check-stmt.h > +++ b/gcc/rust/typecheck/rust-hir-type-check-stmt.h > @@ -144,17 +144,18 @@ public: > std::vector fields; > > size_t idx = 0; > - struct_decl.iterate ([&] (HIR::TupleField &field) mutable -> bool { > - TyTy::BaseType *field_type > - = TypeCheckType::Resolve (field.get_field_type ().get ()); > - TyTy::StructFieldType *ty_field > - = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), > - std::to_string (idx), field_type); > - fields.push_back (ty_field); > - context->insert_type (field.get_mappings (), ty_field->get_field_type ()); > - idx++; > - return true; > - }); > + for (auto &field : struct_decl.get_fields ()) > + { > + TyTy::BaseType *field_type > + = TypeCheckType::Resolve (field.get_field_type ().get ()); > + TyTy::StructFieldType *ty_field > + = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), > + std::to_string (idx), field_type); > + fields.push_back (ty_field); > + context->insert_type (field.get_mappings (), > + ty_field->get_field_type ()); > + idx++; > + } > > TyTy::BaseType *type > = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), > @@ -196,16 +197,17 @@ public: > } > > std::vector fields; > - struct_decl.iterate ([&] (HIR::StructField &field) mutable -> bool { > - TyTy::BaseType *field_type > - = TypeCheckType::Resolve (field.get_field_type ().get ()); > - TyTy::StructFieldType *ty_field > - = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), > - field.get_field_name (), field_type); > - fields.push_back (ty_field); > - context->insert_type (field.get_mappings (), ty_field->get_field_type ()); > - return true; > - }); > + for (auto &field : struct_decl.get_fields ()) > + { > + TyTy::BaseType *field_type > + = TypeCheckType::Resolve (field.get_field_type ().get ()); > + TyTy::StructFieldType *ty_field > + = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), > + field.get_field_name (), field_type); > + fields.push_back (ty_field); > + context->insert_type (field.get_mappings (), > + ty_field->get_field_type ()); > + } > > TyTy::BaseType *type > = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), > diff --git a/gcc/rust/typecheck/rust-hir-type-check-toplevel.h b/gcc/rust/typecheck/rust-hir-type-check-toplevel.h > index 9fac813c46d..131149fabeb 100644 > --- a/gcc/rust/typecheck/rust-hir-type-check-toplevel.h > +++ b/gcc/rust/typecheck/rust-hir-type-check-toplevel.h > @@ -79,17 +79,18 @@ public: > std::vector fields; > > size_t idx = 0; > - struct_decl.iterate ([&] (HIR::TupleField &field) mutable -> bool { > - TyTy::BaseType *field_type > - = TypeCheckType::Resolve (field.get_field_type ().get ()); > - TyTy::StructFieldType *ty_field > - = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), > - std::to_string (idx), field_type); > - fields.push_back (ty_field); > - context->insert_type (field.get_mappings (), ty_field->get_field_type ()); > - idx++; > - return true; > - }); > + for (auto &field : struct_decl.get_fields ()) > + { > + TyTy::BaseType *field_type > + = TypeCheckType::Resolve (field.get_field_type ().get ()); > + TyTy::StructFieldType *ty_field > + = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), > + std::to_string (idx), field_type); > + fields.push_back (ty_field); > + context->insert_type (field.get_mappings (), > + ty_field->get_field_type ()); > + idx++; > + } > > TyTy::BaseType *type > = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), > @@ -136,16 +137,18 @@ public: > } > > std::vector fields; > - struct_decl.iterate ([&] (HIR::StructField &field) mutable -> bool { > - TyTy::BaseType *field_type > - = TypeCheckType::Resolve (field.get_field_type ().get ()); > - TyTy::StructFieldType *ty_field > - = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), > - field.get_field_name (), field_type); > - fields.push_back (ty_field); > - context->insert_type (field.get_mappings (), ty_field->get_field_type ()); > - return true; > - }); > + > + for (auto &field : struct_decl.get_fields ()) > + { > + TyTy::BaseType *field_type > + = TypeCheckType::Resolve (field.get_field_type ().get ()); > + TyTy::StructFieldType *ty_field > + = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), > + field.get_field_name (), field_type); > + fields.push_back (ty_field); > + context->insert_type (field.get_mappings (), > + ty_field->get_field_type ()); > + } > > TyTy::BaseType *type > = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), > diff --git a/gcc/rust/typecheck/rust-hir-type-check.cc b/gcc/rust/typecheck/rust-hir-type-check.cc > index 0cd6883958d..a30f4c43a36 100644 > --- a/gcc/rust/typecheck/rust-hir-type-check.cc > +++ b/gcc/rust/typecheck/rust-hir-type-check.cc > @@ -153,20 +153,21 @@ TypeCheckStructExpr::visit (HIR::StructExprStructFields &struct_expr) > > std::vector infered_fields; > bool ok = true; > - struct_expr.iterate ([&] (HIR::StructExprField *field) mutable -> bool { > - resolved_field_value_expr = nullptr; > - field->accept_vis (*this); > - if (resolved_field_value_expr == nullptr) > - { > - rust_fatal_error (field->get_locus (), > - "failed to resolve type for field"); > - ok = false; > - return false; > - } > > - context->insert_type (field->get_mappings (), resolved_field_value_expr); > - return true; > - }); > + for (auto &field : struct_expr.get_fields ()) > + { > + resolved_field_value_expr = nullptr; > + field->accept_vis (*this); > + if (resolved_field_value_expr == nullptr) > + { > + rust_fatal_error (field->get_locus (), > + "failed to resolve type for field"); > + ok = false; > + break; > + } > + > + context->insert_type (field->get_mappings (), resolved_field_value_expr); > + } > > // something failed setting up the fields > if (!ok) > @@ -266,10 +267,8 @@ TypeCheckStructExpr::visit (HIR::StructExprStructFields &struct_expr) > // correctly. The GIMPLE backend uses a simple algorithm that assumes each > // assigned field in the constructor is in the same order as the field in > // the type > - std::vector > expr_fields > - = struct_expr.get_fields_as_owner (); > - for (auto &f : expr_fields) > - f.release (); > + for (auto &field : struct_expr.get_fields ()) > + field.release (); > > std::vector > ordered_fields; > for (size_t i = 0; i < adtFieldIndexToField.size (); i++) > diff --git a/gcc/rust/typecheck/rust-tycheck-dump.h b/gcc/rust/typecheck/rust-tycheck-dump.h > index cc2e3c01110..6856d0538b8 100644 > --- a/gcc/rust/typecheck/rust-tycheck-dump.h > +++ b/gcc/rust/typecheck/rust-tycheck-dump.h > @@ -162,11 +162,11 @@ public: > > void visit (HIR::ArrayElemsValues &elems) override > { > - elems.iterate ([&] (HIR::Expr *e) mutable -> bool { > - e->accept_vis (*this); > - dump += ","; > - return true; > - }); > + for (auto &elem : elems.get_values ()) > + { > + elem->accept_vis (*this); > + dump += ","; > + } > } > > void visit (HIR::GroupedExpr &expr) override >