From patchwork Wed Feb 7 11:43:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197897 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2200013dyb; Wed, 7 Feb 2024 04:46:00 -0800 (PST) X-Google-Smtp-Source: AGHT+IFlyFg/VTbQDatVRMPZCPNo0JQJtasCatz8o/HG67ed/b3dMjwDTMLnCyP0KIo2y0+YD74O X-Received: by 2002:a05:620a:2043:b0:783:df48:1b04 with SMTP id d3-20020a05620a204300b00783df481b04mr4486475qka.17.1707309959940; Wed, 07 Feb 2024 04:45:59 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707309959; cv=pass; d=google.com; s=arc-20160816; b=j7PBwomwQpUdu1WkppCbx16UL6tFxpLAmb5brBAjN9wt19uX+VovZ3Ly8ubEMp13Td HEuLDO+v1gyZFuZB2KSUjbQ+6gRV465dQQ/iO4xMqNRZzmdkfX9D4dah9V75WcPJvYMr xdSHy2gNeBUtqn7aJL2JSGI38lNEwgnaSD98IswQ395ovr6X15/q3GGs89B5WjN0UQsM U3tN2fD0OFMRym0AVezTRgcnjGdLOAJRMpgzYnb7ZJTx6GdUl7+nVHFH5BJ0Ymq+MUSd De+k0iyICNx+W0MgMerhn9E2escfzmQlOPMbOYM07B1kQ6XZaViwDI+7UXZOtN4dLm2W DqKg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=/fNGjZZmxhwFlkSqq00nmBtJDdnKifsuatlSnq1lGh4=; fh=cW5rutfYu7dKvMIx0ieX0wQ585sohBUenEXAcIjgtgc=; b=F6mO/e1KM1cpLJnBTjixXVMgpgOWnWSijS4DUADFSYXrwEAXYQu14EXKBUu7Vv6G/g ClrlEvJADS7U9F0flfk8pbsx+IrJio367B5bVqTvrCiTDuvtBppX63p4K3YE01AvH8ob BZf/zgw/2Iorn1NQ9gG3nWazZySBjhiyJIMsuD7fbQsEAnH9hEkVqGzFr9EOyQJE0OkU tpShEJjlht2Ph7bIKUjxS3UUqvQg5dF/cxM6eYHZZRZXWkUUI+ccV4ru2AqH3wuzg3d7 ebDJvsQu3aGXxeo8Dssn/rimS8LLsYVDoS4WecNHCssNjkolDbyeUPnaoqJmxGFdXQ4+ kbfw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=PnK+QKD+; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCXzM9JgCE0qShpzk2hhxosgGV33TY9VAm1PAWB9bs2jgbCMcKhJ9fy5xgadkVJoPsLl+p5kvHilwnBzjB7aGAjVZVKjTA== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id w18-20020a05620a149200b00785620d3199si974688qkj.433.2024.02.07.04.45.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:45:59 -0800 (PST) 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=@embecosm.com header.s=google header.b=PnK+QKD+; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7B0F838582B8 for ; Wed, 7 Feb 2024 12:45:59 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by sourceware.org (Postfix) with ESMTPS id 2D9E63858408 for ; Wed, 7 Feb 2024 12:44:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2D9E63858408 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2D9E63858408 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::336 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309844; cv=none; b=bcFibKaHswTsGIB/9tOQopa7zwIjx1WLuU+3qi8G0yHWI0vz3u2p2RkV+Rapp/RbYT6pmtxCcgMhEZNU3iD0sOzaul+JyFnUHUj8y5OMlseUwlne+D5dg3nB8JqP5iNAVu38fqTDJ2XU688e/H63T180nyLFRyb3cmhgEy98Lgk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309844; c=relaxed/simple; bh=OYaHbYEg1Xa7OWC+Elpa6YqFmUg5IG9jOXaRSUIDdC0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=lryukG97viVVN7iMwedNKdLvSx3+4w6aQ5SVjQOTr7Aso0Zcpny/IXRsMSdKLQ/goVml/NAzu8iC4MBN5NmBwMq0ze3EhHeo6tWzC+dbxqP0jKdbrnfuqZShKyazDwlXJRnepIFXxZRgGIG1aQgEkkrt5F+F2BAYVUCY9ykIcrU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-40fe3141e1cso5519375e9.0 for ; Wed, 07 Feb 2024 04:44:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309840; x=1707914640; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:message-id:date :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=/fNGjZZmxhwFlkSqq00nmBtJDdnKifsuatlSnq1lGh4=; b=PnK+QKD+wLSFDhiNVLnUOT7petn1fV1ucdAEdS4CG4IXgMgGWAnjTfLh36dMPygIpn aDhUa/SOcsUQK4X9iJjlpI9CuwS0GtvOdj5pBV3GPViWPBV6un8WfrKTxJ2tS/CI5FlY 5Sg10SEXuTeNY+oQtcLttksrpH28Uma3+b376ucWvNQhbXJIgezLjzEKlMaOvTvn8afk Itq9AH0hlQmx5C3s9YGx91UkKejAv5a7p+f9M8p90yVcxrAAZlU+vBtdmBGM6uZW2LIK 9xdXONHpZ75w7ouf/Zi5ybRmRvTLTxc5mKzzc5ULkxSg66KJoRYm1wayee103LI0s+lG H3Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309840; x=1707914640; h=content-transfer-encoding:mime-version:reply-to:message-id:date :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=/fNGjZZmxhwFlkSqq00nmBtJDdnKifsuatlSnq1lGh4=; b=J2Yycln9bxWxO5wrwAtBrLcy1cXpLKOHgL+pz9CIsKxkDzSOpuBM53GFv1WRaK5zri ibt5sL02Fch6o6vcsoPzZwABo5hwo7oxx5XMs3qE19x2QlEz745pFGdRAPZHrnF+w+DS AAcnz8e7p8xMPxo8nraxFwoe6Ge7igQGHhDRdxpiOAX/hbOTlzZnDx//Crk2PVr1xMr1 vVUY6QMJbUbWgkAHbPByBDefDWUoT0pp3BcePyZAjDsHqZylt2k//lW8OZzm+JZKdAWv J7+ZK9hXdFxJugMndZD/nfQB2v6LzqaYEAwxrnOrNx/+5irYTLbl2AyaAWbmlJQwYEW0 eZHQ== X-Gm-Message-State: AOJu0YycQf/hHQG7j8bdlmA2HGcB/UxM6t0EVs9d1L+nK3VluFmlhycz qU4kHP8s8oeIhcAkflzihymiIwRqj8UUdNFFi9JEXIY5SwZ+1hraccs+IpmsZB3UWNG3+Ac1FhZ JDg== X-Received: by 2002:a05:600c:35c3:b0:40e:f589:50bf with SMTP id r3-20020a05600c35c300b0040ef58950bfmr4103428wmq.15.1707309839990; Wed, 07 Feb 2024 04:43:59 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCVMMfN11E1OM2TeNOCJj5ic8cyC2a0jxzptRfsbr9FBuSPbXGMD8Kzp6M87ReeqwAs1s0pJ2kHk4Jn8EM4SdMHdRMWyjEDu Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.43.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:43:59 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Kushal Pal Subject: [COMMITTED 01/25] gccrs: Parse normal functions with `self` parameter correctly Date: Wed, 7 Feb 2024 12:43:47 +0100 Message-ID: <20240207114419.1100894-2-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 MIME-Version: 1.0 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, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244248760034260 X-GMAIL-MSGID: 1790244248760034260 From: Kushal Pal Fixes #2812 gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_function): Skip token if its a COMMA. gcc/testsuite/ChangeLog: * rust/compile/issue-2812.rs: New test. Signed-off-by: Kushal Pal --- gcc/rust/parse/rust-parse-impl.h | 4 ++-- gcc/testsuite/rust/compile/issue-2812.rs | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/rust/compile/issue-2812.rs diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index c622ed7bc97..89e3731a898 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -2946,8 +2946,8 @@ Parser::parse_function (AST::Visibility vis, && initial_param.error () != ParseSelfError::NOT_SELF) return nullptr; - if (initial_param.has_value ()) - skip_token (COMMA); + if (initial_param.has_value () && lexer.peek_token ()->get_id () == COMMA) + skip_token (); // parse function parameters (only if next token isn't right paren) std::vector> function_params; diff --git a/gcc/testsuite/rust/compile/issue-2812.rs b/gcc/testsuite/rust/compile/issue-2812.rs new file mode 100644 index 00000000000..173259b1291 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2812.rs @@ -0,0 +1,4 @@ +// { dg-additional-options "-frust-compile-until=astvalidation" } +fn foo_1(&self); +fn foo_1(&mut self); +fn foo_1(self); From patchwork Wed Feb 7 11:43:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197898 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2200127dyb; Wed, 7 Feb 2024 04:46:12 -0800 (PST) X-Google-Smtp-Source: AGHT+IF3glAQ+CplI3srt/xDNEr93EFgxx+C3y2Uk+n6eM80EIPiUwrDRs+eUbzt1FssXXunWHgC X-Received: by 2002:a05:622a:1647:b0:42b:e367:89 with SMTP id y7-20020a05622a164700b0042be3670089mr18402018qtj.18.1707309972161; Wed, 07 Feb 2024 04:46:12 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707309972; cv=pass; d=google.com; s=arc-20160816; b=kxA7pHSyVkjBJFYazv4aP7XdsLBrdmxUo4QYNRCqRONCwV9pNaB6ODQRqoG5ScagoW sFmljX79tTPRo4TqoFCWFYuobjgLtrd5asRAwYgZh1fYoFvrfOKOoKQlWgGM7huBzhzF OZgwEU5Vw714ZtuVyW7qdyMJnjpOSt0Rpdz0iO8S30q6LF8nycGwyzvx21psYhVhltHj QadNSTckqq+lgpEEmBMBCm77jcq5Y9vNpes3uNf7DpoGY6wNrggZR3Wp2hbbu5LKDZLL b5CgwvKtjxbDUg8/c8btfmax5YZbv5+tRjWEjkfbieZnNNnLtmS4Uu2YxpxKriyFpz9H +a7w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=2KfXBPgU3wfbdhusy/i/FeS+LYq5pZy2m5PcIVGGcGY=; fh=lRrbeSJY6h4nqyvCxVGkxYFlCYIo83HUXgZ7VheCWPQ=; b=y60FTx3c0Z7r97k2wCuIrMMWQXErEDFQRvVEtNLFNqBXhVO7fjGVG5JcTIsAOpr6Q3 rXhphW4fepuczYB1hjJaPyGrD21a4zq+IrAARzjwIhrOqwtk11OcmFLHbYj9u6rRAWr1 vTwGaWyh4eo/VhspAPAagt+bBQ5ULKjcL7AhZ70kYhtBaEkhQr0esa96tpgmTbwTJMNW 97sQRQlK74+/WM0iF9kpw4ByX67C7hmk+li/aXvos3YU5P6lpL6/3nGUK30Eht+syfRP yytPj9m+19gyK7xzr3jLsoilpR4bni8IOwoIFAbiLO3oNrLlCSf26a/Z4IfvqomM8XXL N2bA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=JTrD6Bva; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCVAwExM/UKig3nDMENivLc7vZPp2n7MbhZekAi/JFRSJXbUQW3EIuy0rsR0tUODWViguSxXsAQStxzX0Vi8K/+DlRZF/w== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id z19-20020a05622a061300b0042c0b76723dsi1037217qta.588.2024.02.07.04.46.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:46:12 -0800 (PST) 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=@embecosm.com header.s=google header.b=JTrD6Bva; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C802A3858283 for ; Wed, 7 Feb 2024 12:46:11 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by sourceware.org (Postfix) with ESMTPS id 89CD63858C35 for ; Wed, 7 Feb 2024 12:44:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 89CD63858C35 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 89CD63858C35 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::135 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309850; cv=none; b=KxaR6uWi9cyKYmajDYFei50cLLopTa1qkhBoC8EkG/w/V66fLron9QyPPrv9TD2d2JWqE7kyoG5e9FcPPmJhEtTSpw/Gey1+HVSZDGz6D9PNqJtjQPONdM5qz6GSTr5xOLlUTxssM9og2U8xWXMthYkUvd4BSLVTSCfFFbwvOcg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309850; c=relaxed/simple; bh=q2E76l+iGVUSTBRlkwQvKj1Ozx8qxkBrTu7jua/LmqE=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=ijzWASUhxFeAb1NhALLn7yPQKklZiF5dNMHgKSSPYNf7+8SC8KE9Leld5HV5rxqy/dAl24gvNiSFuV0Lyqrvgjv83SYVEsVXBhw5SjXkdCeSXawVGW62qahVJCZwGRugy7OSWbc4MQU++VEx0C2RxAnlj5kAOjkB5pFaJFeqfsQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-511616b73ddso982562e87.0 for ; Wed, 07 Feb 2024 04:44:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309842; x=1707914642; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=2KfXBPgU3wfbdhusy/i/FeS+LYq5pZy2m5PcIVGGcGY=; b=JTrD6BvavEPdvBQU9mgNuD0sAUy70HmTyRX41sM23+kGSOW7PprzbsJ1nkWv9iY1PR quA+KvKSqIwWL9khjWkRUwBAFkcOTUtSsbRy3MiZJVkjh7hkZm3GmgoFe+SvznMrwpoU jYqRY9m95f1TvvlQnKDaP1TavrybI1fd+rc753PbGfrAbTRSZ+D8Qk2p6wOkvNdT/NNv vjBf8mQIxYj+5zp9ZKKpi+u4lELowtnG/1PJvPfK0qlslFYVi3kNl810CasDZqbHhFdN 71hXwMM2PggSWISLlDYhZPh43xpsDxj9Y2ukbooGowIrnRBDkWr0XhHfFbqiDIe90FDO G4sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309842; x=1707914642; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=2KfXBPgU3wfbdhusy/i/FeS+LYq5pZy2m5PcIVGGcGY=; b=sViZaleIwg+I5uWdxYdNSXznATFSfoTmnFGI/ex+qjaZbL2bkCT0lWITT3my1KpeYj kPY5ZUTe8SMn8bQOO8de6B8xhIlLq885r6KP7ySQ6Dh6dZOWmLjTUtlx7CmtZYefy4+/ rvFOJ2fIWu2JhmYeQSRq8WL3GglXBNJrgIFWNpkXp5XSgWHVhwc1erUXaLGaIHzE4OQl Kit207ixySwgXYaWQKjHnImInJSn47CrvSmGJdVPvuOM6FM0rbOV9SXDhuuFxZb1xmgg k1sMA1dUkCcK+FEyWCKIbKWX+iGtlHzxemSeq3oNqM55loiY0ekI2TC8b+wBzyYi6X0e tI8w== X-Gm-Message-State: AOJu0YzMbWojZkAvosw2CGe1ecVj+3bdVwm6OZKrc2jVbsV2lV/g0LKQ ryBOohSLt66d6VAAA4gsddox3UzIS6TSVHGzZLh4AgpfDVwVi6ZbXZ+4HT87oAvIyDWGtGcjw6B fhg== X-Received: by 2002:a05:6512:3494:b0:511:64c2:8c0a with SMTP id v20-20020a056512349400b0051164c28c0amr1367415lfr.20.1707309841414; Wed, 07 Feb 2024 04:44:01 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCV3cNvry0r89N91PVSeegKt5gC12pigNQ4alFLsA7ORR2xngxu4gbwSWeQc0dSi+RNDrvRIEPkbCCBsHkDvgLIeZaawQcw= Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:00 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Raiki Tamura Subject: [COMMITTED 02/25] gccrs: Implement quick-check for Unicode Date: Wed, 7 Feb 2024 12:43:48 +0100 Message-ID: <20240207114419.1100894-3-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 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, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244261222380208 X-GMAIL-MSGID: 1790244261222380208 From: Raiki Tamura gcc/rust/ChangeLog: * rust-lang.cc (run_rust_tests): Add test. * rust-system.h: Add . * util/make-rust-unicode.py: Output NFC_Quick_Check table. * util/rust-codepoint.h (struct Codepoint): Add is_supplementary method. * util/rust-unicode-data.h: Generated. * util/rust-unicode.cc (binary_search_sorted_array): Removed. (lookup_cc): Remove namespace. (is_alphabetic): Use std::binary_search (nfc_quick_check): New function. (nfc_normalize): Use nfc_quick_check. (is_nfc_qc_maybe): New function. (is_nfc_qc_no): New function. (rust_nfc_qc_test): New test. * util/rust-unicode.h (is_nfc_qc_no): New function. (is_nfc_qc_maybe): New function. (enum class): New enum class. (nfc_quick_check): New function. (rust_nfc_qc_test): New test. Signed-off-by: Raiki Tamura --- gcc/rust/rust-lang.cc | 1 + gcc/rust/rust-system.h | 1 + gcc/rust/util/make-rust-unicode.py | 39 +++++-- gcc/rust/util/rust-codepoint.h | 1 + gcc/rust/util/rust-unicode-data.h | 158 ++++++++++++++++++++++++++++- gcc/rust/util/rust-unicode.cc | 143 +++++++++++++------------- gcc/rust/util/rust-unicode.h | 19 ++++ 7 files changed, 280 insertions(+), 82 deletions(-) diff --git a/gcc/rust/rust-lang.cc b/gcc/rust/rust-lang.cc index 8b76ba28ea2..4c2ef108bce 100644 --- a/gcc/rust/rust-lang.cc +++ b/gcc/rust/rust-lang.cc @@ -438,6 +438,7 @@ run_rust_tests () { // Call tests for the rust frontend here rust_input_source_test (); + rust_nfc_qc_test (); rust_utf8_normalize_test (); rust_punycode_encode_test (); rust_cfg_parser_test (); diff --git a/gcc/rust/rust-system.h b/gcc/rust/rust-system.h index 88d6c1095e6..d8a42181700 100644 --- a/gcc/rust/rust-system.h +++ b/gcc/rust/rust-system.h @@ -44,6 +44,7 @@ #include #include #include +#include // Rust frontend requires C++11 minimum, so will have unordered_map and set #include diff --git a/gcc/rust/util/make-rust-unicode.py b/gcc/rust/util/make-rust-unicode.py index 5303440fd25..f6f04ebdf5b 100644 --- a/gcc/rust/util/make-rust-unicode.py +++ b/gcc/rust/util/make-rust-unicode.py @@ -250,6 +250,30 @@ def write_numeric() -> None: print("}};") +def write_nfc_qc(): + print( + "const std::array, {}> NFC_QC_NO_RANGES = {{{{".format( + len(nfc_qc_no_ranges) + ) + ) + print(" // clang-format off") + for r in nfc_qc_no_ranges: + print(" {{{:#06x}, {:#06x}}},".format(r[0], r[1])) + print(" // clang-format on") + print("}};") + + print( + "const std::array, {}> NFC_QC_MAYBE_RANGES = {{{{".format( + len(nfc_qc_maybe_ranges) + ) + ) + print(" // clang-format off") + for r in nfc_qc_maybe_ranges: + print(" {{{:#06x}, {:#06x}}},".format(r[0], r[1])) + print(" // clang-format on") + print("}};") + + def main() -> None: if len(sys.argv) != 4: print("too few arguments", file=sys.stderr) @@ -265,13 +289,12 @@ def main() -> None: print(COPYRIGHT) print() - print('#include "rust-system.h"') - print() - print("namespace Rust {") - print() + print('#include "rust-system.h"\n') + print("namespace Rust {\n") print("const uint32_t NUM_ALPHABETIC_RANGES = {};".format(len(alphabetic_ranges))) - print("const uint32_t NUM_NUMERIC_CODEPOINTS = {};".format(len(numeric_codepoints))) - print() + print( + "const uint32_t NUM_NUMERIC_CODEPOINTS = {};\n".format(len(numeric_codepoints)) + ) write_decomposition() print() @@ -283,8 +306,8 @@ def main() -> None: print() write_numeric() print() - - # TODO: write NFC_QC table + write_nfc_qc() + print() print("} // namespace Rust") diff --git a/gcc/rust/util/rust-codepoint.h b/gcc/rust/util/rust-codepoint.h index a75e99e7c0c..2c5fece9d3e 100644 --- a/gcc/rust/util/rust-codepoint.h +++ b/gcc/rust/util/rust-codepoint.h @@ -40,6 +40,7 @@ struct Codepoint static Codepoint eof () { return Codepoint (UINT32_MAX); } bool is_eof () const { return value == UINT32_MAX; } bool is_ascii () const { return value <= MAX_ASCII_CODEPOINT; } + bool is_supplementary_character () const { return value > 0xFFFF; } // Returns a C++ string containing string value of codepoint. std::string as_string (); diff --git a/gcc/rust/util/rust-unicode-data.h b/gcc/rust/util/rust-unicode-data.h index c42460f4541..e07752a4f63 100644 --- a/gcc/rust/util/rust-unicode-data.h +++ b/gcc/rust/util/rust-unicode-data.h @@ -20,7 +20,7 @@ namespace Rust { -const uint32_t NUM_ALPHABETIC_RANGES = 1117; +const uint32_t NUM_ALPHABETIC_RANGES = 1141; const uint32_t NUM_NUMERIC_CODEPOINTS = 1831; const std::map> DECOMPOSITION_MAP = { @@ -4167,6 +4167,7 @@ const std::array, NUM_ALPHABETIC_RANGES> {0x0bd7, 0x0bd8}, {0x0c00, 0x0c01}, {0x0c01, 0x0c04}, + {0x0c04, 0x0c05}, {0x0c05, 0x0c0d}, {0x0c0e, 0x0c11}, {0x0c12, 0x0c29}, @@ -4202,6 +4203,7 @@ const std::array, NUM_ALPHABETIC_RANGES> {0x0ce0, 0x0ce2}, {0x0ce2, 0x0ce4}, {0x0cf1, 0x0cf3}, + {0x0cf3, 0x0cf4}, {0x0d00, 0x0d02}, {0x0d02, 0x0d04}, {0x0d04, 0x0d0d}, @@ -4257,7 +4259,7 @@ const std::array, NUM_ALPHABETIC_RANGES> {0x0f49, 0x0f6d}, {0x0f71, 0x0f7f}, {0x0f7f, 0x0f80}, - {0x0f80, 0x0f82}, + {0x0f80, 0x0f84}, {0x0f88, 0x0f8d}, {0x0f8d, 0x0f98}, {0x0f99, 0x0fbd}, @@ -4758,6 +4760,7 @@ const std::array, NUM_ALPHABETIC_RANGES> {0x11071, 0x11073}, {0x11073, 0x11075}, {0x11075, 0x11076}, + {0x11080, 0x11082}, {0x11082, 0x11083}, {0x11083, 0x110b0}, {0x110b0, 0x110b3}, @@ -4794,6 +4797,8 @@ const std::array, NUM_ALPHABETIC_RANGES> {0x11234, 0x11235}, {0x11237, 0x11238}, {0x1123e, 0x1123f}, + {0x1123f, 0x11241}, + {0x11241, 0x11242}, {0x11280, 0x11287}, {0x11288, 0x11289}, {0x1128a, 0x1128e}, @@ -4948,12 +4953,22 @@ const std::array, NUM_ALPHABETIC_RANGES> {0x11ee0, 0x11ef3}, {0x11ef3, 0x11ef5}, {0x11ef5, 0x11ef7}, + {0x11f00, 0x11f02}, + {0x11f02, 0x11f03}, + {0x11f03, 0x11f04}, + {0x11f04, 0x11f11}, + {0x11f12, 0x11f34}, + {0x11f34, 0x11f36}, + {0x11f36, 0x11f3b}, + {0x11f3e, 0x11f40}, + {0x11f40, 0x11f41}, {0x11fb0, 0x11fb1}, {0x12000, 0x1239a}, {0x12400, 0x1246f}, {0x12480, 0x12544}, {0x12f90, 0x12ff1}, - {0x13000, 0x1342f}, + {0x13000, 0x13430}, + {0x13441, 0x13447}, {0x14400, 0x14647}, {0x16800, 0x16a39}, {0x16a40, 0x16a5f}, @@ -4980,7 +4995,9 @@ const std::array, NUM_ALPHABETIC_RANGES> {0x1aff5, 0x1affc}, {0x1affd, 0x1afff}, {0x1b000, 0x1b123}, + {0x1b132, 0x1b133}, {0x1b150, 0x1b153}, + {0x1b155, 0x1b156}, {0x1b164, 0x1b168}, {0x1b170, 0x1b2fc}, {0x1bc00, 0x1bc6b}, @@ -5021,16 +5038,21 @@ const std::array, NUM_ALPHABETIC_RANGES> {0x1df00, 0x1df0a}, {0x1df0a, 0x1df0b}, {0x1df0b, 0x1df1f}, + {0x1df25, 0x1df2b}, {0x1e000, 0x1e007}, {0x1e008, 0x1e019}, {0x1e01b, 0x1e022}, {0x1e023, 0x1e025}, {0x1e026, 0x1e02b}, + {0x1e030, 0x1e06e}, + {0x1e08f, 0x1e090}, {0x1e100, 0x1e12d}, {0x1e137, 0x1e13e}, {0x1e14e, 0x1e14f}, {0x1e290, 0x1e2ae}, {0x1e2c0, 0x1e2ec}, + {0x1e4d0, 0x1e4eb}, + {0x1e4eb, 0x1e4ec}, {0x1e7e0, 0x1e7e7}, {0x1e7e8, 0x1e7ec}, {0x1e7ed, 0x1e7ef}, @@ -5076,12 +5098,14 @@ const std::array, NUM_ALPHABETIC_RANGES> {0x1f150, 0x1f16a}, {0x1f170, 0x1f18a}, {0x20000, 0x2a6e0}, - {0x2a700, 0x2b739}, + {0x2a700, 0x2b73a}, {0x2b740, 0x2b81e}, {0x2b820, 0x2cea2}, {0x2ceb0, 0x2ebe1}, + {0x2ebf0, 0x2ee5e}, {0x2f800, 0x2fa1e}, {0x30000, 0x3134b}, + {0x31350, 0x323b0}, // clang-format on }}; @@ -5205,4 +5229,130 @@ const std::array NUMERIC_CODEPOINTS = {{ // clang-format on }}; +const std::array, 74> NFC_QC_NO_RANGES = {{ + // clang-format off + {0x0340, 0x0342}, + {0x0343, 0x0345}, + {0x0374, 0x0375}, + {0x037e, 0x037f}, + {0x0387, 0x0388}, + {0x0958, 0x0960}, + {0x09dc, 0x09de}, + {0x09df, 0x09e0}, + {0x0a33, 0x0a34}, + {0x0a36, 0x0a37}, + {0x0a59, 0x0a5c}, + {0x0a5e, 0x0a5f}, + {0x0b5c, 0x0b5e}, + {0x0f43, 0x0f44}, + {0x0f4d, 0x0f4e}, + {0x0f52, 0x0f53}, + {0x0f57, 0x0f58}, + {0x0f5c, 0x0f5d}, + {0x0f69, 0x0f6a}, + {0x0f73, 0x0f74}, + {0x0f75, 0x0f77}, + {0x0f78, 0x0f79}, + {0x0f81, 0x0f82}, + {0x0f93, 0x0f94}, + {0x0f9d, 0x0f9e}, + {0x0fa2, 0x0fa3}, + {0x0fa7, 0x0fa8}, + {0x0fac, 0x0fad}, + {0x0fb9, 0x0fba}, + {0x1f71, 0x1f72}, + {0x1f73, 0x1f74}, + {0x1f75, 0x1f76}, + {0x1f77, 0x1f78}, + {0x1f79, 0x1f7a}, + {0x1f7b, 0x1f7c}, + {0x1f7d, 0x1f7e}, + {0x1fbb, 0x1fbc}, + {0x1fbe, 0x1fbf}, + {0x1fc9, 0x1fca}, + {0x1fcb, 0x1fcc}, + {0x1fd3, 0x1fd4}, + {0x1fdb, 0x1fdc}, + {0x1fe3, 0x1fe4}, + {0x1feb, 0x1fec}, + {0x1fee, 0x1ff0}, + {0x1ff9, 0x1ffa}, + {0x1ffb, 0x1ffc}, + {0x1ffd, 0x1ffe}, + {0x2000, 0x2002}, + {0x2126, 0x2127}, + {0x212a, 0x212c}, + {0x2329, 0x232a}, + {0x232a, 0x232b}, + {0x2adc, 0x2add}, + {0xf900, 0xfa0e}, + {0xfa10, 0xfa11}, + {0xfa12, 0xfa13}, + {0xfa15, 0xfa1f}, + {0xfa20, 0xfa21}, + {0xfa22, 0xfa23}, + {0xfa25, 0xfa27}, + {0xfa2a, 0xfa6e}, + {0xfa70, 0xfada}, + {0xfb1d, 0xfb1e}, + {0xfb1f, 0xfb20}, + {0xfb2a, 0xfb37}, + {0xfb38, 0xfb3d}, + {0xfb3e, 0xfb3f}, + {0xfb40, 0xfb42}, + {0xfb43, 0xfb45}, + {0xfb46, 0xfb4f}, + {0x1d15e, 0x1d165}, + {0x1d1bb, 0x1d1c1}, + {0x2f800, 0x2fa1e}, + // clang-format on +}}; +const std::array, 43> NFC_QC_MAYBE_RANGES = {{ + // clang-format off + {0x0300, 0x0305}, + {0x0306, 0x030d}, + {0x030f, 0x0310}, + {0x0311, 0x0312}, + {0x0313, 0x0315}, + {0x031b, 0x031c}, + {0x0323, 0x0329}, + {0x032d, 0x032f}, + {0x0330, 0x0332}, + {0x0338, 0x0339}, + {0x0342, 0x0343}, + {0x0345, 0x0346}, + {0x0653, 0x0656}, + {0x093c, 0x093d}, + {0x09be, 0x09bf}, + {0x09d7, 0x09d8}, + {0x0b3e, 0x0b3f}, + {0x0b56, 0x0b57}, + {0x0b57, 0x0b58}, + {0x0bbe, 0x0bbf}, + {0x0bd7, 0x0bd8}, + {0x0c56, 0x0c57}, + {0x0cc2, 0x0cc3}, + {0x0cd5, 0x0cd7}, + {0x0d3e, 0x0d3f}, + {0x0d57, 0x0d58}, + {0x0dca, 0x0dcb}, + {0x0dcf, 0x0dd0}, + {0x0ddf, 0x0de0}, + {0x102e, 0x102f}, + {0x1161, 0x1176}, + {0x11a8, 0x11c3}, + {0x1b35, 0x1b36}, + {0x3099, 0x309b}, + {0x110ba, 0x110bb}, + {0x11127, 0x11128}, + {0x1133e, 0x1133f}, + {0x11357, 0x11358}, + {0x114b0, 0x114b1}, + {0x114ba, 0x114bb}, + {0x114bd, 0x114be}, + {0x115af, 0x115b0}, + {0x11930, 0x11931}, + // clang-format on +}}; + } // namespace Rust diff --git a/gcc/rust/util/rust-unicode.cc b/gcc/rust/util/rust-unicode.cc index 999ecb042ca..6bd2db550a1 100644 --- a/gcc/rust/util/rust-unicode.cc +++ b/gcc/rust/util/rust-unicode.cc @@ -39,75 +39,27 @@ const uint32_t L_COUNT = 19, V_COUNT = 21, T_COUNT = 28; const uint32_t N_COUNT = V_COUNT * T_COUNT; const uint32_t S_COUNT = L_COUNT * N_COUNT; +// Check if the codepoint is in any of the ranges (half-open intervals [a,b)). template -int64_t +bool binary_search_ranges ( - // FIXME: use binray search function from const std::array, SIZE> &ranges, uint32_t target_cp) { - if (SIZE == 0) - return -1; - - uint32_t low, high, mid; - uint32_t start, end; - low = 0; - high = SIZE - 1; - mid = (low + high) / 2; - while (high - low > 1) - { - start = ranges[mid].first; - end = ranges[mid].second; - if (start <= target_cp && target_cp < end) - { - return mid; - } - else if (end <= target_cp) - low = mid + 1; - else - high = mid - 1; - mid = (low + high) / 2; - } - - if (ranges[mid].first <= target_cp && target_cp < ranges[mid].second) - return mid; - else - return -1; -} - -template -int64_t -binary_search_sorted_array (const std::array &array, - uint32_t target) -{ - // FIXME: use binray search function from - if (SIZE == 0) - return -1; - - uint32_t low, high, mid; - low = 0; - high = SIZE; - mid = (low + high) / 2; - while (high - low > 1) - { - if (array[mid] <= target) - low = mid; - else - high = mid; - mid = (low + high) / 2; - } - - if (array[mid] == target) - return mid; + auto it = std::lower_bound (ranges.begin (), ranges.end (), target_cp, + [] (const std::pair &a, + uint32_t b) { return a.second <= b; }); + if (it == ranges.end ()) + return false; else - return -1; + return it->first <= target_cp && target_cp < it->second; } int lookup_cc (codepoint_t c) { - auto it = Rust::CCC_TABLE.find (c.value); - if (it != Rust::CCC_TABLE.end ()) + auto it = CCC_TABLE.find (c.value); + if (it != CCC_TABLE.end ()) return it->second; else // Starter. Returns zero. @@ -289,10 +241,44 @@ recomp (string_t s) return buf; } +// see https://unicode.org/reports/tr15/#Detecting_Normalization_Forms +QuickCheckResult +nfc_quick_check (const string_t &s) +{ + int last_canonical_class = 0; + QuickCheckResult res = QuickCheckResult::YES; + + for (unsigned long i = 0; i < s.size (); i++) + { + codepoint_t c = s[i]; + + if (c.is_supplementary_character ()) + i++; + + int canonical_class = lookup_cc (c); + if (last_canonical_class > canonical_class && canonical_class != 0) + return QuickCheckResult::NO; + + if (is_nfc_qc_no (c.value)) + return QuickCheckResult::NO; + + if (is_nfc_qc_maybe (c.value)) + res = QuickCheckResult::MAYBE; + + last_canonical_class = canonical_class; + } + return res; +} + string_t -nfc_normalize (string_t s) +nfc_normalize (const string_t &s) { - // TODO: Quick Check + if (nfc_quick_check (s) == QuickCheckResult::YES) + return s; + + // TODO: optimize normalization. + // i.e. only normalize a limited area around MAYBE character, instead of + // performing complete normlization of the entire string // decompose string_t d = decomp_cano (s); @@ -312,21 +298,26 @@ Utf8String::nfc_normalize () const bool is_alphabetic (uint32_t codepoint) { - int64_t res = binary_search_ranges (ALPHABETIC_RANGES, codepoint); - if (res < 0) - return false; - else - return true; + return binary_search_ranges (ALPHABETIC_RANGES, codepoint); } bool is_numeric (uint32_t codepoint) { - int64_t res = binary_search_sorted_array (NUMERIC_CODEPOINTS, codepoint); - if (res < 0) - return false; - else - return true; + return std::binary_search (NUMERIC_CODEPOINTS.begin (), + NUMERIC_CODEPOINTS.end (), codepoint); +} + +bool +is_nfc_qc_maybe (uint32_t codepoint) +{ + return binary_search_ranges (NFC_QC_MAYBE_RANGES, codepoint); +} + +bool +is_nfc_qc_no (uint32_t codepoint) +{ + return binary_search_ranges (NFC_QC_NO_RANGES, codepoint); } bool @@ -344,6 +335,18 @@ is_ascii_only (const std::string &str) namespace selftest { +void +rust_nfc_qc_test () +{ + ASSERT_EQ (Rust::nfc_quick_check ({0x1e0a /* NFC_QC_YES */}), + Rust::QuickCheckResult::YES); + ASSERT_EQ (Rust::nfc_quick_check ( + {0x1e0a /* NFC_QC_YES */, 0x0323 /* NFC_QC_MAYBE */}), + Rust::QuickCheckResult::MAYBE); + ASSERT_EQ (Rust::nfc_quick_check ({0x0340 /* NFC_QC_NO */}), + Rust::QuickCheckResult::NO); +} + void assert_normalize (const std::vector origin, const std::vector expected) diff --git a/gcc/rust/util/rust-unicode.h b/gcc/rust/util/rust-unicode.h index 2538436797f..aa7bd8a5632 100644 --- a/gcc/rust/util/rust-unicode.h +++ b/gcc/rust/util/rust-unicode.h @@ -68,12 +68,31 @@ is_ascii_only (const std::string &str); bool is_numeric (uint32_t codepoint); +bool +is_nfc_qc_no (uint32_t codepoint); + +bool +is_nfc_qc_maybe (uint32_t codepoint); + +enum class QuickCheckResult +{ + YES, + NO, + MAYBE +}; + +QuickCheckResult +nfc_quick_check (const std::vector &s); + } // namespace Rust #if CHECKING_P namespace selftest { +void +rust_nfc_qc_test (); + void rust_utf8_normalize_test (); From patchwork Wed Feb 7 11:43:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197901 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2201148dyb; Wed, 7 Feb 2024 04:48:03 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWNCGlK/5ko53kx+NQ1GKRoY9SAfjoLpbPDHkGezobPEURIt7psKQ2jTE0NCyVtn1uKKGlZoMtIEt5abXBDHz7l9K4Bzg== X-Google-Smtp-Source: AGHT+IEaRlR0DgIOlN2iTWmItD7vCHF10UTCseJ0ePS/eklI+2iYPWbIwKzZQooX843bX1WIwmrF X-Received: by 2002:a05:690c:996:b0:602:cab9:13c8 with SMTP id ce22-20020a05690c099600b00602cab913c8mr4865674ywb.28.1707310082837; Wed, 07 Feb 2024 04:48:02 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310082; cv=pass; d=google.com; s=arc-20160816; b=oJ9+eLNayciZPInAQRAmgZLReniEswpD2hntttPPrLu+MivMNqsewq1qsNccyrDGgh Ftmtzc3uYEXPJ5IdIPPL3szMTnBnqJNH9+ZnzjkjLkPxxPtIW0EY+NI5iZZltHCwDUog FKXoZJGulg4adNWZEHjYKIdPs2UqqN27sk4iwVbANTOSz3o/rsX2MSPG+r+nnWpjSTkP oVEVcsuVfJemvxcIC3DrETJqAoie6E6oi+NXF4AO5ZiYgj3vfyCmGSerDJ453SeNYZ1H 75nCzDJ+vfmZ5CYNTVDpLVts0KKkNfSrm/HUm/WagmMoq4kwrWzhqQTl5qtJ4UGSx+bu Qy1w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=Pmbia0Ja5DofaWXsNu8NNxlCcgcjAjU2zGNjFNjhQ/A=; fh=vvHQco3Fyild5+OAeysTFDapb3Mdg86Ar42uYOp8zAY=; b=Wv+orpb9vUgpigNP/kk+rvPFZNxes6oARBu5akozcA7Eo/jKuvGshXJ9BeNouf0I3P SZuHfxh8zhKEOwY4UcLgNm4Cgtcnof6vkTt5Jpks0ic9a54E0FPVIxz4hL5HWXgTFzE9 A0KzHDvLCFw0IVF+c/u3MUnZkd2LCyMpDyyccQZFOBn2CPqFYHT9UynRupGG42/Ni9yE 9PM9mrJd70ApLXNA9rffmRVyzX9hPm2SF+PTWxa6dJDT/CrmBV6+lHkddDxkJ1dKHbpq 82+pc9W4vm4Nj80q9BVTcli0dZWY4sawrKvrETH1vbsMtoUSYVcERBIVacd4Uao45aMv fDSw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=gUprqfDh; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCXxjCNwUzJwvkhPFjapoBtzyNH/QZQPS7e1napIScLM4nd0WCNfjsnoZQGLSU4zv4w3BCVyQWJD4DprWa2X8NY+XfzeVw== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id v9-20020a05622a144900b0042beca41f7asi1040325qtx.397.2024.02.07.04.48.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:48:02 -0800 (PST) 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=@embecosm.com header.s=google header.b=gUprqfDh; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3AB353857C42 for ; Wed, 7 Feb 2024 12:48:02 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) by sourceware.org (Postfix) with ESMTPS id B94C0385841D for ; Wed, 7 Feb 2024 12:44:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B94C0385841D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B94C0385841D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::331 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309850; cv=none; b=aX8pIR79K8ISv9g2Hy/8hF+QrhNF4zAIejxHV5q7he9u7j2Rcct4ecIHZOpleNNM/eI4lZCsSyp3Vt6dOoB0iR3hN8Fnajvre494MC/2WjsrsP/6ASBJICd0mpVLLKGqok+e9LCCZq05ob9vA0hviF+aRlATBXbO8g77xaBvZiI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309850; c=relaxed/simple; bh=uHg4IP/dvxwMcUZUo9C7ifmZgCEXCtKnf8B0yDv6EUE=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=hROCqbsBGVVIDRwhejs0nk7LU+K27PZfS0gXkYYsz3nHtAUiSYAImyTXrhoaDmTasskJZGQ+cXLgWyzZKYnxgFpS/gguKd8I1VjJk/Xv7JlIYmOim3fWhYlodLzx4mwugkpKcDUs/Q8Gs2KhijQOW9Vav6Fp1z9fgP3mtvmGapE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-4101da33362so1750205e9.3 for ; Wed, 07 Feb 2024 04:44:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309842; x=1707914642; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=Pmbia0Ja5DofaWXsNu8NNxlCcgcjAjU2zGNjFNjhQ/A=; b=gUprqfDhgLlTbCTW2JyDuemKtjYz080WwXzzAPl55Ft7XhclfIKlggosOgiPKfFjDc L6sihNH7rU5y8G+C1/9n0WQQkuKJCbqyEc5PyNa540u1eFsDDLfcivHnSRfr+R6KeKnV wL/HXqtHlSnQwx9LN88IWIHfry3nxZD4fbX1/GY9ssca5wJyqhunhEyRdb89P8px6VF4 b0m+6qCjZusSFPVgvVFqtOZOblFQTQohwJP86DmpgmgfaCClx3lLkCubOjrxgSefDOJU lupwpHCdog9OpKtbsdetwwxO5gxhUq4Xgq9HqRB+mDerhSgt2DiwPO9uKwGJLd8mjXBL hqdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309842; x=1707914642; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Pmbia0Ja5DofaWXsNu8NNxlCcgcjAjU2zGNjFNjhQ/A=; b=ijCUdW2lzT94TucRrYQJtpETwIAgd7KQ9EL+APMcO2ll18iH2y16WsVtfohyR4oQgS L6UA6aXsVu57vHNQ67ZnvJEsKV9JibPX/tyttayjmbPDiEHquxsed7Qg4sBt0UIEpOYQ ESdOsxxn/CJQENMaKA9NT8Xz8LpE/+TqmCq5pTfgY6Vf5n3I1XVA5sSpsUGBQSiBHxVX BukgMIyAlBq67H0F4ZLx0QUFBnZ74Sp885taVAF5kzJ55c1fHOGDw0RuTgZx/g6VZuGO wNTSRov8rRYrKAOMB07qgiAMEuiYWamcwQV4Ary8rX0QCKDnGvf425u4dZZncasorv8E YdOA== X-Gm-Message-State: AOJu0YzVVL7cof0PNidqqMV6jQj0An1LSGpYc+2CYFZVD9Gpb8dEij5R JePIb1c973MHjQghwaQSaUEbvT/kn2H8aJBgE+6WbMy04MxNG0UJSdfhDGYNC2xOHiiyZyojf/M oLw== X-Received: by 2002:a05:600c:1d89:b0:40f:ecd4:7ef0 with SMTP id p9-20020a05600c1d8900b0040fecd47ef0mr3452099wms.24.1707309841934; Wed, 07 Feb 2024 04:44:01 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCW9EcW5i8PKTF23gFoDq0P5DOP05bEG8i3O56rfHhH8YaByXdAp+jR3qsIlSomThfQxq45bk/0LYC4s2CavZSXugDw= Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:01 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Jakub Dupak Subject: [COMMITTED 03/25] gccrs: Typecheck: lifetime interning and resolution tool Date: Wed, 7 Feb 2024 12:43:49 +0100 Message-ID: <20240207114419.1100894-4-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 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, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244377587253724 X-GMAIL-MSGID: 1790244377587253724 From: Jakub Dupak gcc/rust/ChangeLog: * typecheck/rust-hir-type-check.h (class Lifetime): add interned lifetime class * typecheck/rust-typecheck-context.cc (TypeCheckContext::TypeCheckContext): add resolution tool (TypeCheckContext::intern_lifetime): add method to intern lifetime from tyctx (TypeCheckContext::lookup_lifetime): add method to lookup lifetime from tyctx (TypeCheckContext::intern_and_insert_lifetime): add a helper method Signed-off-by: Jakub Dupak --- gcc/rust/typecheck/rust-hir-type-check.h | 225 +++++++++++++++++++ gcc/rust/typecheck/rust-typecheck-context.cc | 55 ++++- 2 files changed, 279 insertions(+), 1 deletion(-) diff --git a/gcc/rust/typecheck/rust-hir-type-check.h b/gcc/rust/typecheck/rust-hir-type-check.h index 7dd4dda5b93..0d74ae11a2c 100644 --- a/gcc/rust/typecheck/rust-hir-type-check.h +++ b/gcc/rust/typecheck/rust-hir-type-check.h @@ -24,6 +24,8 @@ #include "rust-hir-trait-reference.h" #include "rust-autoderef.h" +#include + namespace Rust { namespace Resolver { @@ -79,6 +81,49 @@ private: Item item; }; +/** + * Interned lifetime representation in TyTy + * + * On the HIR->TyTy boundary HIR::Lifetime is interned into this struct. + */ +class Lifetime +{ + uint32_t interner_index; + +public: + explicit constexpr Lifetime (uint32_t interner_index) + : interner_index (interner_index) + {} + + Lifetime () = default; + + WARN_UNUSED_RESULT bool is_static () const { return interner_index == 0; } + + WARN_UNUSED_RESULT static constexpr Lifetime static_lifetime () + { + return Lifetime (0); + } + + WARN_UNUSED_RESULT static constexpr Lifetime anonymous_lifetime () + { + return Lifetime (1); + } + + static constexpr uint32_t FIRST_NAMED_LIFETIME = 2; + + friend bool operator== (const Lifetime &lhs, const Lifetime &rhs) + { + return lhs.interner_index == rhs.interner_index; + } + + friend bool operator!= (const Lifetime &lhs, const Lifetime &rhs) + { + return !(lhs == rhs); + } + + WARN_UNUSED_RESULT Lifetime next () { return Lifetime (interner_index++); } +}; + class TypeCheckContext { public: @@ -173,6 +218,12 @@ public: void trait_query_completed (DefId id); bool trait_query_in_progress (DefId id) const; + Lifetime intern_lifetime (const HIR::Lifetime &name); + WARN_UNUSED_RESULT tl::optional + lookup_lifetime (const HIR::Lifetime &lifetime) const; + + void intern_and_insert_lifetime (const HIR::Lifetime &lifetime); + private: TypeCheckContext (); @@ -211,6 +262,180 @@ private: // query context lookups std::set querys_in_progress; std::set trait_queries_in_progress; + + /** Used to resolve (interned) lifetime names to their bounding scope. */ + class LifetimeResolver + { + /** + * The level of nested scopes, where the lifetime was declared. + * + * Index 0 is used for `impl` blocks and is skipped if not explicitly + * requested. + * Index 1 for the top-level of declarations of items. + * Index >1 is used for late-bound lifetimes. + */ + using ScopeIndex = size_t; + + static constexpr ScopeIndex IMPL_SCOPE = 0; + static constexpr ScopeIndex ITEM_SCOPE = 1; + + /** + * A reference to a lifetime binder. + * + * This is used to resolve lifetimes to their scope. + */ + struct LifetimeBinderRef + { + uint32_t scope; //> Depth of the scope where the lifetime was declared. + uint32_t index; //> Index of the lifetime in the scope. + }; + + /** + * A stack of the number of lifetimes declared in each scope. + * + * Used to pop the correct number of lifetimes when leaving a scope. + */ + std::stack binder_size_stack; + + /** + * Merged stack of all lifetimes declared in all scopes. + * + * Use `binder_size_stack` to determine the number of lifetimes in each + * scope. + */ + std::vector> lifetime_lookup; + + /** + * Whether the current scope is a function body. + * + * In function header, lifetimes are resolved as early-bound, in the body as + * named. This is because the header can be also used in call position. + */ + bool is_body = false; + + /** Return the number of the current scope. */ + WARN_UNUSED_RESULT uint32_t get_current_scope () const + { + return binder_size_stack.size () - 1; + } + + public: + /** Add new declaration of a lifetime. */ + void insert_mapping (Lifetime placeholder) + { + lifetime_lookup.push_back ( + {placeholder, {get_current_scope (), binder_size_stack.top ()++}}); + } + + /** Only to be used by the guard. */ + void push_binder () { binder_size_stack.push (0); } + /** Only to be used by the guard. */ + void pop_binder () { binder_size_stack.pop (); } + + /** + * Switch from resolving a function header to a function body. + */ + void switch_to_fn_body () { this->is_body = true; } + + size_t get_num_bound_regions () const { return binder_size_stack.top (); } + }; + + // lifetime resolving + std::unordered_map lifetime_name_interner; + Lifetime next_lifetime_index = Lifetime (Lifetime::FIRST_NAMED_LIFETIME); + + /** + * Stack of lifetime resolvers. + * + * Due to the contruction of the type checker, it is possible to start + * resolution of a new type in the middle of resolving another type. This + * stack isolates the conexts in such cases. + */ + std::stack lifetime_resolver_stack; + +public: + WARN_UNUSED_RESULT LifetimeResolver &get_lifetime_resolver () + { + rust_assert (!lifetime_resolver_stack.empty ()); + return lifetime_resolver_stack.top (); + } + + WARN_UNUSED_RESULT const LifetimeResolver &get_lifetime_resolver () const + { + rust_assert (!lifetime_resolver_stack.empty ()); + return lifetime_resolver_stack.top (); + } + + /** + * A guard that pushes a new lifetime resolver on the stack and pops it + * when it goes out of scope. + */ + class LifetimeResolverGuard + { + public: + /** The kind of scope that is being pushed. */ + enum ScopeKind + { + IMPL_BLOCK_RESOLVER, //> A new `impl` block scope. + RESOLVER, //> A new scope for a function body. + BINDER, //> A new scope for late-bound lifetimes. + }; + + private: + TypeCheckContext &ctx; + ScopeKind kind; + + public: + LifetimeResolverGuard (TypeCheckContext &ctx, ScopeKind kind) + : ctx (ctx), kind (kind) + { + if (kind == IMPL_BLOCK_RESOLVER) + { + ctx.lifetime_resolver_stack.push (LifetimeResolver ()); + } + + if (kind == RESOLVER) + { + ctx.lifetime_resolver_stack.push (LifetimeResolver ()); + // Skip the `impl` block scope. + ctx.lifetime_resolver_stack.top ().push_binder (); + } + rust_assert (!ctx.lifetime_resolver_stack.empty ()); + ctx.lifetime_resolver_stack.top ().push_binder (); + } + + ~LifetimeResolverGuard () + { + rust_assert (!ctx.lifetime_resolver_stack.empty ()); + ctx.lifetime_resolver_stack.top ().pop_binder (); + if (kind == RESOLVER) + { + ctx.lifetime_resolver_stack.pop (); + } + } + }; + + /** Start new late bound lifetime scope. */ + WARN_UNUSED_RESULT LifetimeResolverGuard push_lifetime_binder () + { + return LifetimeResolverGuard (*this, LifetimeResolverGuard::BINDER); + } + + /** Start new function body scope. */ + WARN_UNUSED_RESULT LifetimeResolverGuard + push_clean_lifetime_resolver (bool is_impl_block = false) + { + return LifetimeResolverGuard (*this, + is_impl_block + ? LifetimeResolverGuard::IMPL_BLOCK_RESOLVER + : LifetimeResolverGuard::RESOLVER); + } + + /** Switch from resolving a function header to a function body. */ + void switch_to_fn_body () + { + this->lifetime_resolver_stack.top ().switch_to_fn_body (); + } }; class TypeResolution diff --git a/gcc/rust/typecheck/rust-typecheck-context.cc b/gcc/rust/typecheck/rust-typecheck-context.cc index 46954683875..c6840c8b1a9 100644 --- a/gcc/rust/typecheck/rust-typecheck-context.cc +++ b/gcc/rust/typecheck/rust-typecheck-context.cc @@ -31,7 +31,7 @@ TypeCheckContext::get () return instance; } -TypeCheckContext::TypeCheckContext () {} +TypeCheckContext::TypeCheckContext () { lifetime_resolver_stack.emplace (); } TypeCheckContext::~TypeCheckContext () {} @@ -496,6 +496,59 @@ TypeCheckContext::trait_query_in_progress (DefId id) const != trait_queries_in_progress.end (); } +Lifetime +TypeCheckContext::intern_lifetime (const HIR::Lifetime &lifetime) +{ + if (lifetime.get_lifetime_type () == AST::Lifetime::NAMED) + { + auto maybe_interned = lookup_lifetime (lifetime); + if (maybe_interned) + return *maybe_interned; + + auto interned = next_lifetime_index.next (); + lifetime_name_interner[lifetime.get_name ()] = interned; + return interned; + } + if (lifetime.get_lifetime_type () == AST::Lifetime::WILDCARD) + { + return next_lifetime_index.next (); + } + if (lifetime.get_lifetime_type () == AST::Lifetime::STATIC) + { + return Lifetime::static_lifetime (); + } + rust_unreachable (); +} + +tl::optional +TypeCheckContext::lookup_lifetime (const HIR::Lifetime &lifetime) const +{ + if (lifetime.get_lifetime_type () == AST::Lifetime::NAMED) + { + rust_assert (lifetime.get_name () != "static"); + const auto name = lifetime.get_name (); + auto it = lifetime_name_interner.find (name); + if (it == lifetime_name_interner.end ()) + return tl::nullopt; + return it->second; + } + if (lifetime.get_lifetime_type () == AST::Lifetime::WILDCARD) + { + return Lifetime::anonymous_lifetime (); + } + if (lifetime.get_lifetime_type () == AST::Lifetime::STATIC) + { + return Lifetime::static_lifetime (); + } + rust_unreachable (); +} + +void +TypeCheckContext::intern_and_insert_lifetime (const HIR::Lifetime &lifetime) +{ + get_lifetime_resolver ().insert_mapping (intern_lifetime (lifetime)); +} + // TypeCheckContextItem TypeCheckContextItem::Item::Item (HIR::Function *item) : item (item) {} From patchwork Wed Feb 7 11:43:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197906 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2201860dyb; Wed, 7 Feb 2024 04:49:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IHhqZa1457Scj9hwTgSTU4QZGDMetDSRmv2UkyT4ryESPY7MEzWdE5Lxxvlk+MbBZ0BwUVN X-Received: by 2002:a05:6102:232b:b0:46d:2956:6b11 with SMTP id b11-20020a056102232b00b0046d29566b11mr2150692vsa.16.1707310169264; Wed, 07 Feb 2024 04:49:29 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310169; cv=pass; d=google.com; s=arc-20160816; b=mJ3zoSE/ySzdaT9zQQloya3nKI65mHS4lHr0GNYyjyP0+iw4XhGKOGwDxR87YT/ooS tFrELDjCIFLKjwb56mjuUuQn0HLiokzMm9vFryTv3DoGHtFajM4eIA+8/rkC6dXCtT3P FK6/iWASCZ/EG1XLlh51K8mhna21ZPMhL9sYZYjjSQr6+XgObO8LjGwHbS8nIEgPrBdj sejIFMajGkq5sza/MiEFzAy3C/lAaj1JBisRKbMlqW1whFmJWLKlIAs2Me2d80itFgJu 3LnuR1ICATzKu079U2E5YlNhbONztubKQHVwLScPo+xXMQFNAtpwikL9TlXJPOOb2PeA m/QA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=Id2kiLpyc7d9/Q/OJCjbR3tmnFL56ICg9trRVm14N7A=; fh=6uvsgyjdA1M/BxzsMheMCtImRRzScc5cMd/kifh7Yh8=; b=CPTXJ6PM5Z1vGFOplfFF+ShC94F1hDHQMqSICltG4hMSnLsJNppwGLMWt+NQ6Epkmt qi0bYy0Il0a8wMPxEkWa+X5/YwjO/M5OCwR4nuiDKPfWAzBxkVfsuGHPtsWxRGBo5Uot KVmtb4hmGMJuxI3HVnNp8YUYFAQ7KKqfDzX4RQZntBNOFySz2eTeLBAmRg6RluhsjN8S AhsrMyTOg3wXnyPqswGpW2G0eS6RBf68GvKIf+R/mqDhZq/D53Q82KfkpCjne2Ip2C7r ax/n+FGSbWT4sg5jUOu1DD3jOaP0LjMGqXjq/PBt1pOHacXSN0i+XAH5un3pDbHRMvy0 WHAw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=TXjs2QRY; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCU7sZvJSUC4bbJ9FEweSKANOQ5ay/p4/VqH+f6hXWc/zFAQy7BXu1nF40csmZPsBKQuCs5IjfbnncldXZF0hxInw5Nh2Q== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id l5-20020ad44245000000b0068c4919b66fsi1014802qvq.147.2024.02.07.04.49.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:49:29 -0800 (PST) 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=@embecosm.com header.s=google header.b=TXjs2QRY; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8577B385841C for ; Wed, 7 Feb 2024 12:49:28 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id 77C91385841C for ; Wed, 7 Feb 2024 12:44:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 77C91385841C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 77C91385841C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309852; cv=none; b=mDISOLu1W63mt09u2R33QaoUR6ic3WSDWQfRWXK9fkIonxG+2+pKCa2z6TrHA+CcXjG5LNyJY+D6597QNJrX63v+V6Anq1KrKZoi1/cfe8s9Adju1P2OdO4fqGZYLy4M3SihubbWxuz8xpGeByv7rnyIa2ppwdy3TKTqH0tzOO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309852; c=relaxed/simple; bh=ESkRPyZkvzYIKPrm4s6pWomGdK9j5ELdxm4b9qdDz2E=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=CKkt5cqIxc+A8UDp9Wb/h1/69yLgoQNnWtygaGFsYDfwptDgX4TvZqr7F4Tx0dHM4mNhjResRJj8EyWetYtQc/e/W/g2SXk5gFsQpnFbfsSMYKIIjWU0cpc3mLvP7Ju0ZBDxeKJijDO1xL3w0G/L2qLa3Xr0MgVhybj0SoSlFuY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40fd72f7125so4883615e9.1 for ; Wed, 07 Feb 2024 04:44:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309842; x=1707914642; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=Id2kiLpyc7d9/Q/OJCjbR3tmnFL56ICg9trRVm14N7A=; b=TXjs2QRYdxfH+2cxy/eaAbpjevy88Yoqc3oa/Xusv3mRad7FB5Zp66F3SjseUU2llF mnlQ7CVC2zDmR8kO/0nxORPwfUFXmZZM8PJr8uswytS8BJL5UHC2bCt/TjTci10m/AzU GB0aiwwkU00uJm3DC0nQhlZBciaFLJ7rBuVgFPJgKWhqgqybvexYj6kaaDogaVVFw0r3 2+WVGaOeLyGgL08dCuixsfoFqgqHBSCxJjYg2OvL2guok1uLAVBzjCrON57jsXrRX9rl 2cE4TB8xDKs7m7/ZTKKx8tpvkzJohP4NHQ65f8cZZTMUijIkm5fxg/WsyC0ZuEnSxf0q OlTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309842; x=1707914642; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Id2kiLpyc7d9/Q/OJCjbR3tmnFL56ICg9trRVm14N7A=; b=Mk6P8nZGksBc/WM5iHxjNQfQpPGr/LkhF3Qh4nuz9X0i/0PAEeuwGVsNqzZ00z01j4 OMGsQ/ZP+zUVP01l7mKO0rzRGB8Sge2jNVmGapdU3YIxR9YlgAbO2mh87lSHpGpbMn5+ fSIArhGFJ4zo1PTvVukMlx66mqL1fmSOz/HdKPLxnz7azR0N1HIEX/Npy0zHkYANAgsI LhoE3k6ZiQH9IaO6LlSaZLnSPEs0BCBfDYo21hCW+wqWq9fM0/asEfNnXdss0lrx+Oxc z2ETC8F9x6AwSfLqjCSqnYUz7PhGIi8ebVJpoPhmbHprW3WmSXt1yY8bD/N4Hl9FArAd 4LEA== X-Gm-Message-State: AOJu0Yzr7YrX4KVk1DZTdH0dTCEN6TBUnp0N1gO770WWorKGC4Mg4Y6G f2Y3x1yPxNP4tZ9ZeTriXoCEQRX1kbqa8Zg4wtE6/vacNkPCXRr6vPN19o9wyqp7od1EEgKW6wA N3g== X-Received: by 2002:a05:600c:354d:b0:40f:d3da:85cf with SMTP id i13-20020a05600c354d00b0040fd3da85cfmr4496299wmq.8.1707309842578; Wed, 07 Feb 2024 04:44:02 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCW6lxmrSFsOCXGCbRqdvFoVU/v+Yplv9ZigVuI6vIsA31eSgkOzQnXVQ5zJLk+BAw17XeWuIpK8VD6HgBGHJapRCjI= Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:02 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Jakub Dupak Subject: [COMMITTED 04/25] gccrs: TyTy: Region (lifetime) representation Date: Wed, 7 Feb 2024 12:43:50 +0100 Message-ID: <20240207114419.1100894-5-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244467955367911 X-GMAIL-MSGID: 1790244467955367911 From: Jakub Dupak gcc/rust/ChangeLog: * typecheck/rust-tyty-region.h: New file. Signed-off-by: Jakub Dupak --- gcc/rust/typecheck/rust-tyty-region.h | 110 ++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 gcc/rust/typecheck/rust-tyty-region.h diff --git a/gcc/rust/typecheck/rust-tyty-region.h b/gcc/rust/typecheck/rust-tyty-region.h new file mode 100644 index 00000000000..b34a2115e7a --- /dev/null +++ b/gcc/rust/typecheck/rust-tyty-region.h @@ -0,0 +1,110 @@ +#ifndef RUST_TYTY_REGION_H +#define RUST_TYTY_REGION_H + +namespace Rust { +namespace TyTy { + +class Region +{ + enum Variant : uint8_t + { + UNRESOLVED, + STATIC, + EARLY_BOUND, + LATE_BOUND, + NAMED, + ANONYMOUS, + ERASED, + }; + + uint32_t index; + uint16_t debruijn_index; + Variant variant; + +public: + Region () : Region (UNRESOLVED) {} + Region (const Region &other) + : index (other.index), debruijn_index (other.debruijn_index), + variant (other.variant) + {} + Region (Region &&other) noexcept + : index (other.index), debruijn_index (other.debruijn_index), + variant (other.variant) + {} + Region &operator= (const Region &other) + { + if (this == &other) + return *this; + index = other.index; + debruijn_index = other.debruijn_index; + variant = other.variant; + return *this; + } + Region &operator= (Region &&other) noexcept + { + if (this == &other) + return *this; + index = other.index; + debruijn_index = other.debruijn_index; + variant = other.variant; + return *this; + } + + static Region make_static () { return Region (STATIC); } + static Region make_early_bound (uint32_t index) + { + return Region (EARLY_BOUND, index); + } + static Region make_late_bound (uint32_t index, uint16_t debruijn_index) + { + return Region (LATE_BOUND, index, debruijn_index); + } + static Region make_named (uint32_t index) { return Region (NAMED, index); } + static Region make_anonymous () { return Region (ANONYMOUS); } + static Region make_erased () { return Region (ERASED); } + + size_t get_index () const { return index; } + + bool is_static () const { return variant == STATIC; } + bool is_early_bound () const { return variant == EARLY_BOUND; } + bool is_late_bound () const { return variant == LATE_BOUND; } + bool is_named () const { return variant == NAMED; } + bool is_anonymous () const { return variant == ANONYMOUS; } + + void shift_down () { debruijn_index++; } + + WARN_UNUSED_RESULT std::string as_string () const + { + switch (variant) + { + case UNRESOLVED: + return "'unresolved"; + case STATIC: + return "'static"; + case EARLY_BOUND: + return "'early(" + std::to_string (index) + ")"; + case LATE_BOUND: + return "'late(" + std::to_string (debruijn_index) + ", " + + std::to_string (index) + ")"; + case NAMED: + return "'named(" + std::to_string (index) + ""; + case ANONYMOUS: + return "'_"; + case ERASED: + return "'erased"; + } + + rust_unreachable (); + } + +private: + explicit Region (Variant variant, uint32_t index = 0, + uint16_t debruijn_index = 0) + : index (index), debruijn_index (debruijn_index), variant (variant) + {} +}; + +} // namespace TyTy +} // namespace Rust + +#endif // RUST_TYTY_REGION_H From patchwork Wed Feb 7 11:43:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197913 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2202744dyb; Wed, 7 Feb 2024 04:51:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IFzmOtVt80aaCNvGg+9mJmVr3cMw+OKMfJ/5b8GCNufwYf8OQzq2AqeF8I4IOZTXUPkui0p X-Received: by 2002:a05:6102:2e7:b0:46d:1e16:6333 with SMTP id j7-20020a05610202e700b0046d1e166333mr2637970vsj.0.1707310275839; Wed, 07 Feb 2024 04:51:15 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310275; cv=pass; d=google.com; s=arc-20160816; b=i034fm5vRx9FiNOGc23iUtFDl74JogQ7Rm5iT2amQF7qSYuYWKoVhYXMZWovX65F5p zHkPjO/eeerMsJK6ER1ItdVLN541q9q25/Ov1HLZL8fNrrrN68XUwaKaiH7gAix6QkPJ 6jlCTCvEjhH/4jpg5pOSE8TUGMIQDEi3NwOCTFhuL8fbPL1Qk8tAVMGoDxDoPj8CkTIW PusSi7OX4SvvCedNOnOmWAvd/iPMDws1qnhMW10cQKA1900KyEecyefUHMeBnbrm1JSZ 3u1j4se3hOwoVqnGSlgF860Jhow4LWdtyBfZY2olyNUUAsrLIEWIU7Rrgs+9VQuSErY4 qicA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=X2jb9ja5+yvg+Ef65ECxi3uNTJ4M7qvNglppHSvLG+4=; fh=4XOwOkcdlkdQXiiGBE2E3IVTIaBMUtYcyDaJ3KZ3jKQ=; b=Xyv/x/Zbjo6uzKEtacLjSta6NHqMxsu2gGhnDkNQXH3HHVNuDaSFH/00wPrO02R2Xl pMoxT0ZBVCMak3P3m22p/kVjpCVd2GtQOrKXTxii+g8GysG2TSyJD61p1jTxs2o8D/Ms JPPAkg4mBvPiQWMwfU0P/oF2O2USbw8Po/OyoaNd3ZpU44h1jXc53qtno/oZjqMWSwpY 4GoWyPknFNAvkJXQWVaOIqEuVBv9df28p+maGb4r4chAfPhrOvBHfPqdCJGzoHlO9xLG uZmG/eoSjxeiSvMo1aGI+N+hVCwMYJXXmtR3nDBxYq5bW9Itqz5cRYyBtGQUqY1XVvUB n+Qw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=ATKx5zow; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCXFiBQKrNT4Z8ZzHBZ/rejeC7fsgPD9ogSBXbvbNkXt4cha/WyH37y4LqMzhZRoXzgGaK18dYV+cMvMeTUKOAicA30EQg== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id dp3-20020a05621409c300b0068c50d0e94esi1022181qvb.153.2024.02.07.04.51.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:51:15 -0800 (PST) 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=@embecosm.com header.s=google header.b=ATKx5zow; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8808D3857C41 for ; Wed, 7 Feb 2024 12:51:15 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by sourceware.org (Postfix) with ESMTPS id B1A1E3858283 for ; Wed, 7 Feb 2024 12:44:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B1A1E3858283 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B1A1E3858283 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::329 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309852; cv=none; b=YhI3zLjhK5PxFk77tVpt44wvIwiR0GvMOeaFpE3AYNOHkMsjlbL8P95rpMsET4qhk+P7ibM4UiXFT2mO59qRYenb9N2MASyUM87GjNSZ7xjxadssaSFtrdycDDWjEblilnCWaGuvsQaN0pVbLXbyEiNt0wSEFXataJNzJMUZdWw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309852; c=relaxed/simple; bh=7jGlAiOuDhlRGxSgTLSbIG0OMXR0CF5Ru8NKYIXimM0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=amhIx4rcJLsK+QPr7mNzDYLhiIXHtyIaIWqmTJ97axWC4tPu0vxR1ia1PwV8EPiC5bUirldXesurpWmfY0bS4TJsP1ZFA/bOIktHo5/m14NikDztImLqbw2jCKiq7MvrgpQ77Pc0DgqfcnXyyeWC2gOCg3LsCmzP9mSBZB/RWh8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-40efcb37373so5037185e9.2 for ; Wed, 07 Feb 2024 04:44:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309844; x=1707914644; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=X2jb9ja5+yvg+Ef65ECxi3uNTJ4M7qvNglppHSvLG+4=; b=ATKx5zowyQYZQ3MM4PUkMajP+Ci9BLEmP2IOHJmGLuu12F3h7NSsgUJU0jBvAIbY3L rE/o01t/kWtCHXg49GHFUmFiWVBXtxQIcA1ZwoOkfelN/4115+e5K2rS5jsb6fYucKsA A1m7RNwzNre8eTNGb6equTUS1Hi77t8UQOvP6brhMPltLtdYaEA8stkSxdN3TuKZPur8 kNiMvyzzceeHMc1KouHj34/31I9eOdXU5KFcZ8/YIifcc+jnWlguJGowYfBNjf0iDWUW dMMgs9NmrDXxs9IGMbyRRWxONvHCh5bEnSYf3Z2cRsfHjw8ed0vIo0ObxGK7a6I0dBwG xB7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309844; x=1707914644; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=X2jb9ja5+yvg+Ef65ECxi3uNTJ4M7qvNglppHSvLG+4=; b=wPhd/+KftObpQ/ZjKlMVHURRO3E33vaItibR098oQbQZYX5BwXNUMH7k2Pgrf4lKrI hXwUs9P5fJ8KGWXVkTBpV7bHmFdB108ZW1nxcZsfACy/JwBBnsKD3qW5N8KGoDGF/+R6 Xzu3bz7T2CLsBEmYQ+azMb3sQWwSD+mAbJf7UEA69PEV01ab2rra8sZURaY58JKGJDWp pPG9b1F7FLp3j4VU6PhmbJPLTTd/l1FOh6lmzhoPpZGr3vHDB6jwaLZwKWRAuOHzhnPL spZX4pwY8HCjBcinWM17HE1abCRNg3D7efH/pPsmb572lGqd8l1E65yx6y3Y+AsJ/UHy ifOQ== X-Gm-Message-State: AOJu0YxLYKTOPvRmXfDz29hVW8z6fO8VCM1ir4JietrAnEVZWVlafKVg PAbYfVXYVitGesUSNHyuerjPhKx0jXRhgHSTEEcdwdx5PrUpkvYv2IevlyLDj5dnHTO1D9shCLy xZQ== X-Received: by 2002:adf:eed2:0:b0:33b:45f7:636b with SMTP id a18-20020adfeed2000000b0033b45f7636bmr3517916wrp.22.1707309843734; Wed, 07 Feb 2024 04:44:03 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUtLcOjoqFqDR6yKI1hmyab8FwEGKLrLIpiherK0tYW3NOi6Y7yfFHJdfykcK/oSRLQCOMglL6vzkJqyeJlxXP0RcE= Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:02 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Jakub Dupak Subject: [COMMITTED 05/25] gccrs: HIR: Add mising getter Date: Wed, 7 Feb 2024 12:43:51 +0100 Message-ID: <20240207114419.1100894-6-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244579677876808 X-GMAIL-MSGID: 1790244579677876808 From: Jakub Dupak gcc/rust/ChangeLog: * hir/tree/rust-hir-item.h: Add missing getter Signed-off-by: Jakub Dupak --- gcc/rust/hir/tree/rust-hir-item.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h index 74450786e89..1d067fca5be 100644 --- a/gcc/rust/hir/tree/rust-hir-item.h +++ b/gcc/rust/hir/tree/rust-hir-item.h @@ -3062,6 +3062,11 @@ public: // Returns whether item has a where clause. bool has_where_clause () const { return !where_clause.is_empty (); } + WARN_UNUSED_RESULT const WhereClause &get_where_clause () const + { + return where_clause; + } + ExternalFunctionItem ( Analysis::NodeMapping mappings, Identifier item_name, std::vector> generic_params, From patchwork Wed Feb 7 11:43:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197903 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2201292dyb; Wed, 7 Feb 2024 04:48:19 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXDHKKUms+f00Sxz9kqD53AXVgJ9LTov5YnhzCi8YiLos7tQ9jT4QtYDIIJqPLKPgdpOvlSWZB/OnOas4QN5pLP+uDM7Q== X-Google-Smtp-Source: AGHT+IEta9FZ3uyD6Wr10U7qoCB8E0gRw/y4noQKJ1VGDDPChYk69PQacw+F2Pg5KHV252fJvuPD X-Received: by 2002:a37:c446:0:b0:783:f6d5:b9bd with SMTP id h6-20020a37c446000000b00783f6d5b9bdmr5233739qkm.19.1707310098820; Wed, 07 Feb 2024 04:48:18 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310098; cv=pass; d=google.com; s=arc-20160816; b=qKYjcizLqCJEPNeq/inyJS3CzADZ/FFBpN/TxdWGLs61P8tnSLuoeLiC+svPTiFkqs iRkFs+nBGVl8UcyQZElcPd2SoWnGy0KFpPIJVqKk3cLb5edZgSzOkhFFPZID2esa1vZS 4lYZxMSo4eVVWh1KEf7amE9T4yKq2Dg9vuRQGgNSShFHOj3/Td3SzBfECHNJTG+lAHAg /yausshpjeKOJ9LmBM3FMQbSoZtyd3z6xsc5u9HSs+rLgKfwBeXRoBC+n3PCi389+Sue juFbIV+9eN1FPQm8Y4BWXAWx8gd8GcYOpCFTAY17mFd8S1tFWiwgeUTERDQXsEu2VSl4 Jbvw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=cVXRINDPogzC3PmZxk9rGVNE+Qj3jpN6GvnObD9jjsw=; fh=TCJcy4J0gQ9IkrDpNQD/XA78BWOQANDc04MIBd+psjs=; b=hqj1FnGOrMOVYx3bxRuckNY6Hc5s+SfNR7NnESTQpI3vPaJte8uyQjSuD9DV7s3JP7 qAxv9i84TrgWVDe1Q8pRfBor+9uIF+2FPmZAyMLg46r3qppolzbalZfCv6EKxPYr8pX6 M8Da4zKm39KBTu6+O6cKbpW16l/XPgSFG6aPfPm9mRNLdDpxhtVdIbeEiRMvTNKNJUUp qC9ZsTVG4nEMb3OEV3qkolkDDwF/YgK10lnfXRLye8MjM0BP8DSbWw1Z6j4leeyCfbQd 2BEOYtZG0E7YPkYRSHowuRtFr6rIWhacmtxutbkjXaln6grXfq1s2aBecG/EIj2FJDbw PqHg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=UgwP3aPs; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCVY4eYFQSw1LjBbuBRj4M49cAYMrKJ2HPf1Es0+EkIVGIdOxA+M9ZtLs7XMPJmgyvM4Na7cCmOjAyq3yskVk37No9KmZw== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id e22-20020a05620a209600b007858e39c462si996262qka.636.2024.02.07.04.48.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:48:18 -0800 (PST) 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=@embecosm.com header.s=google header.b=UgwP3aPs; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2F6893857C51 for ; Wed, 7 Feb 2024 12:48:18 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by sourceware.org (Postfix) with ESMTPS id 8BCFE3858006 for ; Wed, 7 Feb 2024 12:44:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8BCFE3858006 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8BCFE3858006 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309858; cv=none; b=D26fDoIe/nJldSzGgMroTCRJG1/qx8jl+isNRjviHFgxW9XgpauzLs5axMrgyG16eKYHuXKT9YTShPPc6JeW/JxSU4ihI/xudIw592sjOQiNsl8Z0hw2MpvBU7u8bnhT9x0tSr1cFycxaL7K29Gr3bjze+EorO/s+Y86B+5TS0o= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309858; c=relaxed/simple; bh=nuEpx27OpMTZqOlDAtTl20MRTEnhAEKRLAAWnX5nzws=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Cnve/+x9tHlaK2k1sHvkSmBSSMEoTTCcqQ6ox4P5T8ToWn7w2g0Yuq2WO9bFACOGJ0Gffa9rJvNCOTTUMwxBCjYMy28H/lHgpnb45LWsDm4LfCcsO2yeX3l03ASkWE0QXoqcUtC+rR0Ounq3EhMSEUUyIRs6TcsIqmfYHDS6bbM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-40fe03cd1caso5209715e9.0 for ; Wed, 07 Feb 2024 04:44:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309845; x=1707914645; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=cVXRINDPogzC3PmZxk9rGVNE+Qj3jpN6GvnObD9jjsw=; b=UgwP3aPszUU0MBbjrN9GN/tX+klclda635f8MwzvM3VxgLtpvcoxNn4O7rD4VHXf5s Lidgm1jESLdxkdsmCHfnTzsEjLHZ/vnK9PFsYO1DgDIqqFuxxgRBch9jMmi25ByZRmQN cI0GOSYOPc7v9YPMITgv09XwJ1LLGAr4dgSUEgBv80HsCotETH4ef4T8k3TofJrh8iBg TqeTHqNd0mO62fwQaDXy8L/TpRl+a4yab1XSxBB1NerlXe43DMRPQil9Juq64vApmp9H Fh+t2JsozyHiy8WAUlEjEkodNExXUX16rDn3xHu/78Dc9lgsuHBSzGs0vttLDcm7ghZC azng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309845; x=1707914645; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=cVXRINDPogzC3PmZxk9rGVNE+Qj3jpN6GvnObD9jjsw=; b=DoQ+cVPS0gz617/+sAHedWKvm9JLEeqbdmrRJG1vbOg74G/qGx9IY0my3bOAXAzpp+ DBxhcUVGEVWvGQJB4lwUWlaMpBCgdsNd/+R6I/xc9GGC7mHks542dz+BGw4cm/lErQo3 m29N/+7CsBmRK/1DKShCO7ogry3iK+35eJqFkhD0py3yrnaA5JSp1WsjMeB2lrqLXT1A UGEtWmuMtC17+Q9Eha7mfCrEMV9KII2AYYwRQ9Yir1uIM6hupID3wN1Pt1hJgBG34Js1 RyKWPVy6MZf41K2C/f2F2gLNiJ++9DavgTsPibD90+3w8eiGUivVVTuhgGAvSGSDX45T Zp+Q== X-Gm-Message-State: AOJu0YxLdPc6fAggV2zWY5duN1EPiXL4A9ioTrPVTuSb2rhTCwvNqquO dh0y4e2CMYA8DG5kUmYzm8fqVR25Pyx0zIzmVq0AY44V5GS4GeZaUwrd2aBL6uOrPDiXmZAckPo A0g== X-Received: by 2002:a05:600c:4f8f:b0:40e:c722:2b9a with SMTP id n15-20020a05600c4f8f00b0040ec7222b9amr4452169wmq.32.1707309845124; Wed, 07 Feb 2024 04:44:05 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCW/bnP9HKN23hJ/CVjghtlv8YCGu6tFona+Jtf5VhcAbXcdTXeYBbwjkIUMMxNwRgv2A6u/JXNoxTzfPZ57SbCgksQ= Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:04 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Jakub Dupak Subject: [COMMITTED 06/25] gccrs: Typecheck: add regions (lifetimes) to TyTy Date: Wed, 7 Feb 2024 12:43:52 +0100 Message-ID: <20240207114419.1100894-7-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_FILL_THIS_FORM_SHORT, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244393894556216 X-GMAIL-MSGID: 1790244393894556216 From: Jakub Dupak gcc/rust/ChangeLog: * typecheck/rust-hir-trait-resolve.cc: add regions * typecheck/rust-hir-type-check-base.cc (TypeCheckBase::resolve_literal): add regions, resolve generic lifetimes * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): add regions * typecheck/rust-hir-type-check-implitem.cc (TypeCheckTopLevelExternItem::visit): add regions, resolve lifetimes (TypeCheckImplItem::visit): add regions, resove lifetimes * typecheck/rust-hir-type-check-implitem.h: add default value for result * typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): add regions, resove lifetimes (TypeCheckItem::resolve_impl_block_substitutions): add regions, resove lifetimes * typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::visit): add regions, resove lifetimes (TypeCheckExpr::resolve_root_path): add regions, resove lifetimes (TypeCheckExpr::resolve_segments): add regions, resove lifetimes * typecheck/rust-hir-type-check-type.cc (TypeCheckType::visit): add regions, resove lifetimes (TypeCheckType::resolve_root_path): add regions, resove lifetimes (ResolveWhereClauseItem::Resolve): add regions, resove lifetimes (ResolveWhereClauseItem::visit): add regions, resove lifetimes * typecheck/rust-hir-type-check.cc (TypeCheckContext::LifetimeResolver::resolve): add regions, resolve lifetimes (TraitItemReference::get_type_from_fn): add regions, resove lifetimes * typecheck/rust-hir-type-check.h: add regions, resove lifetimes * typecheck/rust-substitution-mapper.cc (SubstMapper::SubstMapper): add regions, resove lifetimes (SubstMapper::Resolve): add regions, resove lifetimes (SubstMapper::InferSubst): add regions, resove lifetimes (SubstMapper::visit): add regions, resove lifetimes * typecheck/rust-substitution-mapper.h: add regions, resove lifetimes * typecheck/rust-typecheck-context.cc (TypeCheckContext::TypeCheckContext): lifetime resolution (TypeCheckContext::regions_from_generic_args): lifetime resolution helper * typecheck/rust-tyty-bounds.cc (TypeBoundPredicate::TypeBoundPredicate): add regions, resove lifetimes (TypeBoundPredicate::operator=): add regions, resove lifetimes (TypeBoundPredicate::apply_generic_arguments): add regions, resove lifetimes (TypeBoundPredicateItem::get_tyty_for_receiver): add regions, resove lifetimes * typecheck/rust-tyty-subst.cc (SubstitutionArgumentMappings::get_regions): add regions, resove lifetimes (SubstitutionArgumentMappings::get_mut_regions): getter (SubstitutionArgumentMappings::error): split error and empty (SubstitutionArgumentMappings::empty): split error and empty (SubstitutionArgumentMappings::find_symbol): helper (SubstitutionRef::get_num_lifetime_params): getter (SubstitutionRef::get_num_type_params): getter (SubstitutionRef::needs_substitution): extend to regions (SubstitutionRef::get_mappings_from_generic_args): helper (SubstitutionRef::infer_substitions): add regions * typecheck/rust-tyty-subst.h (class RegionParamList): region param handler * typecheck/rust-tyty.cc (BaseType::monomorphized_clone): add regions, resove lifetimes (InferType::default_type): add regions, resove lifetimes (FnType::clone): add regions, resove lifetimes (ReferenceType::ReferenceType): add regions (ReferenceType::get_region): getter (ReferenceType::clone): add regions * typecheck/rust-tyty.h: add regions, resove Signed-off-by: Jakub Dupak --- gcc/rust/typecheck/rust-hir-trait-resolve.cc | 11 +- .../typecheck/rust-hir-type-check-base.cc | 23 ++-- .../typecheck/rust-hir-type-check-expr.cc | 24 ++-- .../typecheck/rust-hir-type-check-implitem.cc | 78 +++++++++---- .../typecheck/rust-hir-type-check-implitem.h | 2 +- .../typecheck/rust-hir-type-check-item.cc | 101 ++++++++++------- .../typecheck/rust-hir-type-check-path.cc | 16 ++- .../typecheck/rust-hir-type-check-type.cc | 106 ++++++++++++++++-- gcc/rust/typecheck/rust-hir-type-check.cc | 90 ++++++++++++--- gcc/rust/typecheck/rust-hir-type-check.h | 10 ++ .../typecheck/rust-substitution-mapper.cc | 19 ++-- gcc/rust/typecheck/rust-substitution-mapper.h | 8 +- gcc/rust/typecheck/rust-typecheck-context.cc | 27 +++++ gcc/rust/typecheck/rust-tyty-bounds.cc | 8 +- gcc/rust/typecheck/rust-tyty-subst.cc | 95 +++++++++++----- gcc/rust/typecheck/rust-tyty-subst.h | 94 +++++++++++++++- gcc/rust/typecheck/rust-tyty.cc | 29 +++-- gcc/rust/typecheck/rust-tyty.h | 21 +++- 18 files changed, 585 insertions(+), 177 deletions(-) diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc index 1d6a9fbdd37..a300cecae31 100644 --- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc +++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc @@ -520,9 +520,10 @@ AssociatedImplTrait::setup_associated_types ( } } - TyTy::SubstitutionArgumentMappings infer_arguments (std::move (subst_args), - {}, locus, - param_subst_cb); + TyTy::SubstitutionArgumentMappings infer_arguments ( + std::move (subst_args), {}, + TyTy::SubstitutionArgumentMappings::regions_from_nullable_args (args), + locus, param_subst_cb); TyTy::BaseType *impl_self_infer = (!associated_self->is_concrete ()) ? SubstMapperInternal::Resolve (associated_self, infer_arguments) @@ -613,7 +614,9 @@ AssociatedImplTrait::setup_associated_types ( } TyTy::SubstitutionArgumentMappings associated_type_args ( - std::move (associated_arguments), {}, locus); + std::move (associated_arguments), {}, + TyTy::SubstitutionArgumentMappings::regions_from_nullable_args (args), + locus); auto &impl_items = impl->get_impl_items (); for (auto &impl_item : impl_items) diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.cc b/gcc/rust/typecheck/rust-hir-type-check-base.cc index 871b8920572..b9b4f91ac9f 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-base.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-base.cc @@ -225,7 +225,8 @@ TypeCheckBase::resolve_literal (const Analysis::NodeMapping &expr_mappings, infered = new TyTy::ReferenceType (expr_mappings.get_hirid (), TyTy::TyVar (base->get_ref ()), - Mutability::Imm); + Mutability::Imm, + TyTy::Region::make_static ()); } break; @@ -271,7 +272,8 @@ TypeCheckBase::resolve_literal (const Analysis::NodeMapping &expr_mappings, infered = new TyTy::ReferenceType (expr_mappings.get_hirid (), TyTy::TyVar (array->get_ref ()), - Mutability::Imm); + Mutability::Imm, + TyTy::Region::make_static ()); } break; @@ -352,16 +354,23 @@ TypeCheckBase::parse_repr_options (const AST::AttrVec &attrs, location_t locus) void TypeCheckBase::resolve_generic_params ( - const std::vector > &generic_params, + const std::vector> &generic_params, std::vector &substitutions) { for (auto &generic_param : generic_params) { - switch (generic_param.get ()->get_kind ()) + switch (generic_param->get_kind ()) { - case HIR::GenericParam::GenericKind::LIFETIME: - // FIXME: Skipping Lifetime completely until better - // handling. + case HIR::GenericParam::GenericKind::LIFETIME: { + auto lifetime_param + = static_cast (*generic_param); + auto lifetime = lifetime_param.get_lifetime (); + rust_assert (lifetime.get_lifetime_type () + == AST::Lifetime::LifetimeType::NAMED); + context->get_lifetime_resolver ().insert_mapping ( + context->intern_lifetime (lifetime)); + } + break; case HIR::GenericParam::GenericKind::CONST: { diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc index 43d183f7a59..9f5042a4ece 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc @@ -674,8 +674,9 @@ TypeCheckExpr::visit (HIR::RangeFromToExpr &expr) const TyTy::SubstitutionParamMapping *param_ref = &adt->get_substs ().at (0); subst_mappings.push_back (TyTy::SubstitutionArg (param_ref, unified)); - TyTy::SubstitutionArgumentMappings subst (subst_mappings, {}, - expr.get_locus ()); + TyTy::SubstitutionArgumentMappings subst ( + subst_mappings, {}, adt->get_substitution_arguments ().get_regions (), + expr.get_locus ()); infered = SubstMapperInternal::Resolve (adt, subst); } @@ -721,8 +722,9 @@ TypeCheckExpr::visit (HIR::RangeFromExpr &expr) const TyTy::SubstitutionParamMapping *param_ref = &adt->get_substs ().at (0); subst_mappings.push_back (TyTy::SubstitutionArg (param_ref, from_ty)); - TyTy::SubstitutionArgumentMappings subst (subst_mappings, {}, - expr.get_locus ()); + TyTy::SubstitutionArgumentMappings subst ( + subst_mappings, {}, adt->get_substitution_arguments ().get_regions (), + expr.get_locus ()); infered = SubstMapperInternal::Resolve (adt, subst); } @@ -767,8 +769,9 @@ TypeCheckExpr::visit (HIR::RangeToExpr &expr) const TyTy::SubstitutionParamMapping *param_ref = &adt->get_substs ().at (0); subst_mappings.push_back (TyTy::SubstitutionArg (param_ref, from_ty)); - TyTy::SubstitutionArgumentMappings subst (subst_mappings, {}, - expr.get_locus ()); + TyTy::SubstitutionArgumentMappings subst ( + subst_mappings, {}, adt->get_substitution_arguments ().get_regions (), + expr.get_locus ()); infered = SubstMapperInternal::Resolve (adt, subst); } @@ -851,8 +854,9 @@ TypeCheckExpr::visit (HIR::RangeFromToInclExpr &expr) const TyTy::SubstitutionParamMapping *param_ref = &adt->get_substs ().at (0); subst_mappings.push_back (TyTy::SubstitutionArg (param_ref, unified)); - TyTy::SubstitutionArgumentMappings subst (subst_mappings, {}, - expr.get_locus ()); + TyTy::SubstitutionArgumentMappings subst ( + subst_mappings, {}, adt->get_substitution_arguments ().get_regions (), + expr.get_locus ()); infered = SubstMapperInternal::Resolve (adt, subst); } @@ -1193,7 +1197,9 @@ TypeCheckExpr::visit (HIR::MethodCallExpr &expr) if (resolved_candidate.is_impl_candidate ()) { - auto infer_arguments = TyTy::SubstitutionArgumentMappings::error (); + auto infer_arguments = TyTy::SubstitutionArgumentMappings::empty (); + infer_arguments.get_mut_regions () + = fn->get_used_arguments ().get_regions (); HIR::ImplBlock &impl = *resolved_candidate.item.impl.parent; TyTy::BaseType *impl_self_infer = TypeCheckItem::ResolveImplBlockSelfWithInference (impl, diff --git a/gcc/rust/typecheck/rust-hir-type-check-implitem.cc b/gcc/rust/typecheck/rust-hir-type-check-implitem.cc index 5fb6fa3190e..0ca59dea899 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-implitem.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-implitem.cc @@ -62,6 +62,8 @@ TypeCheckTopLevelExternItem::visit (HIR::ExternalStaticItem &item) void TypeCheckTopLevelExternItem::visit (HIR::ExternalFunctionItem &function) { + auto binder_pin = context->push_clean_lifetime_resolver (); + std::vector substitutions; if (function.has_generics ()) { @@ -70,6 +72,11 @@ TypeCheckTopLevelExternItem::visit (HIR::ExternalFunctionItem &function) switch (generic_param.get ()->get_kind ()) { case HIR::GenericParam::GenericKind::LIFETIME: + context->intern_and_insert_lifetime ( + static_cast (*generic_param) + .get_lifetime ()); + // TODO: handle bounds + break; case HIR::GenericParam::GenericKind::CONST: // FIXME: Skipping Lifetime and Const completely until better // handling. @@ -153,11 +160,13 @@ TypeCheckTopLevelExternItem::visit (HIR::ExternalFunctionItem &function) function.get_item_name ().as_string ()), function.get_locus ()}; - auto fnType = new TyTy::FnType (function.get_mappings ().get_hirid (), - function.get_mappings ().get_defid (), - function.get_item_name ().as_string (), ident, - flags, parent.get_abi (), std::move (params), - ret_type, std::move (substitutions)); + auto fnType = new TyTy::FnType ( + function.get_mappings ().get_hirid (), + function.get_mappings ().get_defid (), + function.get_item_name ().as_string (), ident, flags, parent.get_abi (), + std::move (params), ret_type, std::move (substitutions), + TyTy::SubstitutionArgumentMappings::empty ( + context->get_lifetime_resolver ().get_num_bound_regions ())); context->insert_type (function.get_mappings (), fnType); resolved = fnType; @@ -192,6 +201,8 @@ TypeCheckImplItem::Resolve ( void TypeCheckImplItem::visit (HIR::Function &function) { + auto binder_pin = context->push_lifetime_binder (); + if (function.has_generics ()) resolve_generic_params (function.get_generic_params (), substitutions); @@ -254,16 +265,36 @@ TypeCheckImplItem::visit (HIR::Function &function) self_type = self->clone (); break; - case HIR::SelfParam::IMM_REF: - self_type = new TyTy::ReferenceType ( - self_param.get_mappings ().get_hirid (), - TyTy::TyVar (self->get_ref ()), Mutability::Imm); + case HIR::SelfParam::IMM_REF: { + auto region = context->lookup_and_resolve_lifetime ( + self_param.get_lifetime ()); + if (!region.has_value ()) + { + rust_inform (self_param.get_locus (), + "failed to resolve lifetime"); + region = TyTy::Region::make_anonymous (); // FIXME + } + self_type = new TyTy::ReferenceType ( + self_param.get_mappings ().get_hirid (), + TyTy::TyVar (self->get_ref ()), Mutability::Imm, + region.value ()); + } break; - case HIR::SelfParam::MUT_REF: - self_type = new TyTy::ReferenceType ( - self_param.get_mappings ().get_hirid (), - TyTy::TyVar (self->get_ref ()), Mutability::Mut); + case HIR::SelfParam::MUT_REF: { + auto region = context->lookup_and_resolve_lifetime ( + self_param.get_lifetime ()); + if (!region.has_value ()) + { + rust_error_at (self_param.get_locus (), + "failed to resolve lifetime"); + return; + } + self_type = new TyTy::ReferenceType ( + self_param.get_mappings ().get_hirid (), + TyTy::TyVar (self->get_ref ()), Mutability::Mut, + region.value ()); + } break; default: @@ -295,15 +326,15 @@ TypeCheckImplItem::visit (HIR::Function &function) rust_assert (ok); RustIdent ident{*canonical_path, function.get_locus ()}; - auto fnType - = new TyTy::FnType (function.get_mappings ().get_hirid (), - function.get_mappings ().get_defid (), - function.get_function_name ().as_string (), ident, - function.is_method () - ? TyTy::FnType::FNTYPE_IS_METHOD_FLAG + auto fnType = new TyTy::FnType ( + function.get_mappings ().get_hirid (), + function.get_mappings ().get_defid (), + function.get_function_name ().as_string (), ident, + function.is_method () ? TyTy::FnType::FNTYPE_IS_METHOD_FLAG : TyTy::FnType::FNTYPE_DEFAULT_FLAGS, - ABI::RUST, std::move (params), ret_type, - std::move (substitutions)); + ABI::RUST, std::move (params), ret_type, std::move (substitutions), + TyTy::SubstitutionArgumentMappings::empty ( + context->get_lifetime_resolver ().get_num_bound_regions ())); context->insert_type (function.get_mappings (), fnType); result = fnType; @@ -348,6 +379,11 @@ TypeCheckImplItem::visit (HIR::ConstantItem &constant) void TypeCheckImplItem::visit (HIR::TypeAlias &alias) { + auto binder_pin = context->push_lifetime_binder (); + + if (alias.has_generics ()) + resolve_generic_params (alias.get_generic_params (), substitutions); + TyTy::BaseType *actual_type = TypeCheckType::Resolve (alias.get_type_aliased ().get ()); diff --git a/gcc/rust/typecheck/rust-hir-type-check-implitem.h b/gcc/rust/typecheck/rust-hir-type-check-implitem.h index 7db06c0a89f..067465ec77a 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-implitem.h +++ b/gcc/rust/typecheck/rust-hir-type-check-implitem.h @@ -61,7 +61,7 @@ protected: TyTy::BaseType *self; std::vector substitutions; - TyTy::BaseType *result; + TyTy::BaseType *result = nullptr; }; class TypeCheckImplItemWithTrait : public TypeCheckBase, diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.cc b/gcc/rust/typecheck/rust-hir-type-check-item.cc index 0bf4d709990..eb2698ead28 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-item.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-item.cc @@ -113,8 +113,11 @@ TypeCheckItem::ResolveImplBlockSelfWithInference ( } // create argument mappings - *infer_arguments - = TyTy::SubstitutionArgumentMappings (std::move (args), {}, locus); + *infer_arguments = TyTy::SubstitutionArgumentMappings ( + std::move (args), {}, + TyTy::SubstitutionArgumentMappings::regions_from_nullable_args ( + infer_arguments), + locus); TyTy::BaseType *infer = SubstMapperInternal::Resolve (self, *infer_arguments); @@ -139,7 +142,7 @@ TypeCheckItem::visit (HIR::TypeAlias &alias) for (auto &where_clause_item : alias.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item.get ()); + ResolveWhereClauseItem::Resolve (*where_clause_item); } infered = actual_type; } @@ -147,13 +150,15 @@ TypeCheckItem::visit (HIR::TypeAlias &alias) void TypeCheckItem::visit (HIR::TupleStruct &struct_decl) { + auto lifetime_pin = context->push_clean_lifetime_resolver (); + std::vector substitutions; if (struct_decl.has_generics ()) resolve_generic_params (struct_decl.get_generic_params (), substitutions); for (auto &where_clause_item : struct_decl.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item.get ()); + ResolveWhereClauseItem::Resolve (*where_clause_item); } std::vector fields; @@ -162,7 +167,7 @@ TypeCheckItem::visit (HIR::TupleStruct &struct_decl) { TyTy::BaseType *field_type = TypeCheckType::Resolve (field.get_field_type ().get ()); - TyTy::StructFieldType *ty_field + auto *ty_field = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), std::to_string (idx), field_type, field.get_locus ()); @@ -192,12 +197,13 @@ TypeCheckItem::visit (HIR::TupleStruct &struct_decl) TyTy::ADTType::ReprOptions repr = parse_repr_options (attrs, struct_decl.get_locus ()); - TyTy::BaseType *type - = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), - mappings->get_next_hir_id (), - struct_decl.get_identifier ().as_string (), ident, - TyTy::ADTType::ADTKind::TUPLE_STRUCT, - std::move (variants), std::move (substitutions), repr); + TyTy::BaseType *type = new TyTy::ADTType ( + struct_decl.get_mappings ().get_hirid (), mappings->get_next_hir_id (), + struct_decl.get_identifier ().as_string (), ident, + TyTy::ADTType::ADTKind::TUPLE_STRUCT, std::move (variants), + std::move (substitutions), repr, + TyTy::SubstitutionArgumentMappings::empty ( + context->get_lifetime_resolver ().get_num_bound_regions ())); context->insert_type (struct_decl.get_mappings (), type); infered = type; @@ -206,13 +212,15 @@ TypeCheckItem::visit (HIR::TupleStruct &struct_decl) void TypeCheckItem::visit (HIR::StructStruct &struct_decl) { + auto lifetime_pin = context->push_clean_lifetime_resolver (); + std::vector substitutions; if (struct_decl.has_generics ()) resolve_generic_params (struct_decl.get_generic_params (), substitutions); for (auto &where_clause_item : struct_decl.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item.get ()); + ResolveWhereClauseItem::Resolve (*where_clause_item); } std::vector fields; @@ -220,7 +228,7 @@ TypeCheckItem::visit (HIR::StructStruct &struct_decl) { TyTy::BaseType *field_type = TypeCheckType::Resolve (field.get_field_type ().get ()); - TyTy::StructFieldType *ty_field + auto *ty_field = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), field.get_field_name ().as_string (), field_type, field.get_locus ()); @@ -249,12 +257,13 @@ TypeCheckItem::visit (HIR::StructStruct &struct_decl) TyTy::ADTType::ReprOptions repr = parse_repr_options (attrs, struct_decl.get_locus ()); - TyTy::BaseType *type - = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), - mappings->get_next_hir_id (), - struct_decl.get_identifier ().as_string (), ident, - TyTy::ADTType::ADTKind::STRUCT_STRUCT, - std::move (variants), std::move (substitutions), repr); + TyTy::BaseType *type = new TyTy::ADTType ( + struct_decl.get_mappings ().get_hirid (), mappings->get_next_hir_id (), + struct_decl.get_identifier ().as_string (), ident, + TyTy::ADTType::ADTKind::STRUCT_STRUCT, std::move (variants), + std::move (substitutions), repr, + TyTy::SubstitutionArgumentMappings::empty ( + context->get_lifetime_resolver ().get_num_bound_regions ())); context->insert_type (struct_decl.get_mappings (), type); infered = type; @@ -263,6 +272,7 @@ TypeCheckItem::visit (HIR::StructStruct &struct_decl) void TypeCheckItem::visit (HIR::Enum &enum_decl) { + auto lifetime_pin = context->push_clean_lifetime_resolver (); std::vector substitutions; if (enum_decl.has_generics ()) resolve_generic_params (enum_decl.get_generic_params (), substitutions); @@ -301,13 +311,14 @@ TypeCheckItem::visit (HIR::Enum &enum_decl) void TypeCheckItem::visit (HIR::Union &union_decl) { + auto lifetime_pin = context->push_clean_lifetime_resolver (); std::vector substitutions; if (union_decl.has_generics ()) resolve_generic_params (union_decl.get_generic_params (), substitutions); for (auto &where_clause_item : union_decl.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item.get ()); + ResolveWhereClauseItem::Resolve (*where_clause_item); } std::vector fields; @@ -315,7 +326,7 @@ TypeCheckItem::visit (HIR::Union &union_decl) { TyTy::BaseType *variant_type = TypeCheckType::Resolve (variant.get_field_type ().get ()); - TyTy::StructFieldType *ty_variant + auto *ty_variant = new TyTy::StructFieldType (variant.get_mappings ().get_hirid (), variant.get_field_name ().as_string (), variant_type, variant.get_locus ()); @@ -387,6 +398,8 @@ TypeCheckItem::visit (HIR::ConstantItem &constant) void TypeCheckItem::visit (HIR::ImplBlock &impl_block) { + auto binder_pin = context->push_clean_lifetime_resolver (true); + bool failed_flag = false; std::vector substitutions = resolve_impl_block_substitutions (impl_block, failed_flag); @@ -429,13 +442,14 @@ TypeCheckItem::resolve_impl_item (HIR::ImplBlock &impl_block, void TypeCheckItem::visit (HIR::Function &function) { + auto lifetime_pin = context->push_clean_lifetime_resolver (); std::vector substitutions; if (function.has_generics ()) resolve_generic_params (function.get_generic_params (), substitutions); for (auto &where_clause_item : function.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item.get ()); + ResolveWhereClauseItem::Resolve (*where_clause_item); } TyTy::BaseType *ret_type = nullptr; @@ -463,8 +477,7 @@ TypeCheckItem::visit (HIR::Function &function) { // get the name as well required for later on auto param_tyty = TypeCheckType::Resolve (param.get_type ().get ()); - params.push_back (std::pair ( - param.get_param_name ().get (), param_tyty)); + params.emplace_back (param.get_param_name ().get (), param_tyty); context->insert_type (param.get_mappings (), param_tyty); TypeCheckPattern::Resolve (param.get_param_name ().get (), param_tyty); @@ -477,21 +490,25 @@ TypeCheckItem::visit (HIR::Function &function) rust_assert (ok); RustIdent ident{*canonical_path, function.get_locus ()}; - auto fnType = new TyTy::FnType (function.get_mappings ().get_hirid (), - function.get_mappings ().get_defid (), - function.get_function_name ().as_string (), - ident, TyTy::FnType::FNTYPE_DEFAULT_FLAGS, - ABI::RUST, std::move (params), ret_type, - std::move (substitutions)); - context->insert_type (function.get_mappings (), fnType); + auto fn_type = new TyTy::FnType ( + function.get_mappings ().get_hirid (), + function.get_mappings ().get_defid (), + function.get_function_name ().as_string (), ident, + TyTy::FnType::FNTYPE_DEFAULT_FLAGS, ABI::RUST, std::move (params), ret_type, + std::move (substitutions), + TyTy::SubstitutionArgumentMappings::empty ( + context->get_lifetime_resolver ().get_num_bound_regions ())); + + context->insert_type (function.get_mappings (), fn_type); // need to get the return type from this - TyTy::FnType *resolved_fn_type = fnType; + TyTy::FnType *resolved_fn_type = fn_type; auto expected_ret_tyty = resolved_fn_type->get_return_type (); context->push_return_type (TypeCheckContextItem (&function), expected_ret_tyty); + context->switch_to_fn_body (); auto block_expr_ty = TypeCheckExpr::Resolve (function.get_definition ().get ()); @@ -505,14 +522,14 @@ TypeCheckItem::visit (HIR::Function &function) context->pop_return_type (); - infered = fnType; + infered = fn_type; } void TypeCheckItem::visit (HIR::Module &module) { for (auto &item : module.get_items ()) - TypeCheckItem::Resolve (*item.get ()); + TypeCheckItem::Resolve (*item); } void @@ -551,7 +568,7 @@ TypeCheckItem::resolve_impl_block_substitutions (HIR::ImplBlock &impl_block, for (auto &where_clause_item : impl_block.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item.get ()); + ResolveWhereClauseItem::Resolve (*where_clause_item); } auto specified_bound = TyTy::TypeBoundPredicate::error (); @@ -559,13 +576,13 @@ TypeCheckItem::resolve_impl_block_substitutions (HIR::ImplBlock &impl_block, if (impl_block.has_trait_ref ()) { std::unique_ptr &ref = impl_block.get_trait_ref (); - trait_reference = TraitResolver::Resolve (*ref.get ()); + trait_reference = TraitResolver::Resolve (*ref); rust_assert (!trait_reference->is_error ()); // we don't error out here see: gcc/testsuite/rust/compile/traits2.rs // for example specified_bound - = get_predicate_from_bound (*ref.get (), impl_block.get_type ().get ()); + = get_predicate_from_bound (*ref, impl_block.get_type ().get ()); } TyTy::BaseType *self = TypeCheckType::Resolve (impl_block.get_type ().get ()); @@ -596,13 +613,13 @@ TypeCheckItem::validate_trait_impl_block ( if (impl_block.has_trait_ref ()) { std::unique_ptr &ref = impl_block.get_trait_ref (); - trait_reference = TraitResolver::Resolve (*ref.get ()); + trait_reference = TraitResolver::Resolve (*ref); rust_assert (!trait_reference->is_error ()); // we don't error out here see: gcc/testsuite/rust/compile/traits2.rs // for example specified_bound - = get_predicate_from_bound (*ref.get (), impl_block.get_type ().get ()); + = get_predicate_from_bound (*ref, impl_block.get_type ().get ()); } bool is_trait_impl_block = !trait_reference->is_error (); @@ -637,17 +654,17 @@ TypeCheckItem::validate_trait_impl_block ( std::string trait_item_name = trait_item_ref.get_identifier (); std::string impl_item_name = implemented_trait_item->get_identifier (); - found = trait_item_name.compare (impl_item_name) == 0; + found = trait_item_name == impl_item_name; if (found) break; } bool is_required_trait_item = !trait_item_ref.is_optional (); if (!found && is_required_trait_item) - missing_trait_items.push_back (trait_item_ref); + missing_trait_items.emplace_back (trait_item_ref); } - if (missing_trait_items.size () > 0) + if (!missing_trait_items.empty ()) { std::string missing_items_buf; rich_location r (line_table, impl_block.get_locus ()); diff --git a/gcc/rust/typecheck/rust-hir-type-check-path.cc b/gcc/rust/typecheck/rust-hir-type-check-path.cc index 7dfa9368729..ea7d8422980 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-path.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-path.cc @@ -141,8 +141,12 @@ TypeCheckExpr::visit (HIR::QualifiedPathInExpression &expr) infered = new TyTy::ErrorType (expr.get_mappings ().get_hirid ()); return; } + std::vector regions; + infered = SubstMapper::Resolve (infered, expr.get_locus (), - &item_seg.get_generic_args ()); + &item_seg.get_generic_args (), + context->regions_from_generic_args ( + item_seg.get_generic_args ())); } // continue on as a path-in-expression @@ -298,7 +302,9 @@ TypeCheckExpr::resolve_root_path (HIR::PathInExpression &expr, size_t *offset, if (seg.has_generic_args ()) { lookup = SubstMapper::Resolve (lookup, expr.get_locus (), - &seg.get_generic_args ()); + &seg.get_generic_args (), + context->regions_from_generic_args ( + seg.get_generic_args ())); if (lookup->get_kind () == TyTy::TypeKind::ERROR) return new TyTy::ErrorType (expr.get_mappings ().get_hirid ()); } @@ -471,8 +477,10 @@ TypeCheckExpr::resolve_segments (NodeId root_resolved_node_id, if (seg.has_generic_args ()) { - tyseg = SubstMapper::Resolve (tyseg, expr_locus, - &seg.get_generic_args ()); + tyseg + = SubstMapper::Resolve (tyseg, expr_locus, &seg.get_generic_args (), + context->regions_from_generic_args ( + seg.get_generic_args ())); if (tyseg->get_kind () == TyTy::TypeKind::ERROR) return; } diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.cc b/gcc/rust/typecheck/rust-hir-type-check-type.cc index 951920138cb..e7a86b9eee1 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-type.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-type.cc @@ -70,6 +70,12 @@ TypeCheckType::Resolve (HIR::Type *type) void TypeCheckType::visit (HIR::BareFunctionType &fntype) { + auto binder_pin = context->push_lifetime_binder (); + for (auto &lifetime_param : fntype.get_for_lifetimes ()) + { + context->intern_and_insert_lifetime (lifetime_param.get_lifetime ()); + } + TyTy::BaseType *return_type; if (fntype.has_return_type ()) { @@ -292,8 +298,11 @@ TypeCheckType::visit (HIR::QualifiedPathInType &path) = new TyTy::ErrorType (path.get_mappings ().get_hirid ()); return; } - translated = SubstMapper::Resolve (translated, path.get_locus (), - &generic_seg.get_generic_args ()); + translated + = SubstMapper::Resolve (translated, path.get_locus (), + &generic_seg.get_generic_args (), + context->regions_from_generic_args ( + generic_seg.get_generic_args ())); } } @@ -425,8 +434,11 @@ TypeCheckType::resolve_root_path (HIR::TypePath &path, size_t *offset, HIR::TypePathSegmentGeneric *generic_segment = static_cast (seg.get ()); + auto regions = context->regions_from_generic_args ( + generic_segment->get_generic_args ()); lookup = SubstMapper::Resolve (lookup, path.get_locus (), - &generic_segment->get_generic_args ()); + &generic_segment->get_generic_args (), + regions); if (lookup->get_kind () == TyTy::TypeKind::ERROR) return new TyTy::ErrorType (seg->get_mappings ().get_hirid ()); } @@ -434,7 +446,9 @@ TypeCheckType::resolve_root_path (HIR::TypePath &path, size_t *offset, { HIR::GenericArgs empty = HIR::GenericArgs::create_empty (path.get_locus ()); - lookup = SubstMapper::Resolve (lookup, path.get_locus (), &empty); + lookup + = SubstMapper::Resolve (lookup, path.get_locus (), &empty, + context->regions_from_generic_args (empty)); } *root_resolved_node_id = ref_node_id; @@ -532,11 +546,26 @@ TypeCheckType::resolve_segments ( if (seg->is_generic_segment ()) { - HIR::TypePathSegmentGeneric *generic_segment + auto *generic_segment = static_cast (seg.get ()); + std::vector regions; + for (auto &lifetime : + generic_segment->get_generic_args ().get_lifetime_args ()) + { + auto region = context->lookup_and_resolve_lifetime (lifetime); + if (!region.has_value ()) + { + rust_error_at (lifetime.get_locus (), + "failed to resolve lifetime"); + return new TyTy::ErrorType (expr_id); + } + regions.push_back (region.value ()); + } + tyseg = SubstMapper::Resolve (tyseg, expr_locus, - &generic_segment->get_generic_args ()); + &generic_segment->get_generic_args (), + regions); if (tyseg->get_kind () == TyTy::TypeKind::ERROR) return new TyTy::ErrorType (expr_id); } @@ -607,6 +636,12 @@ TypeCheckType::visit (HIR::TraitObjectType &type) HIR::TypeParamBound &b = *bound.get (); HIR::TraitBound &trait_bound = static_cast (b); + auto binder_pin = context->push_lifetime_binder (); + for (auto &lifetime_param : trait_bound.get_for_lifetimes ()) + { + context->intern_and_insert_lifetime (lifetime_param.get_lifetime ()); + } + TyTy::TypeBoundPredicate predicate = get_predicate_from_bound ( trait_bound.get_path (), nullptr /*this will setup a PLACEHOLDER for self*/); @@ -660,10 +695,18 @@ void TypeCheckType::visit (HIR::ReferenceType &type) { TyTy::BaseType *base = TypeCheckType::Resolve (type.get_base_type ().get ()); - translated - = new TyTy::ReferenceType (type.get_mappings ().get_hirid (), - TyTy::TyVar (base->get_ref ()), type.get_mut ()); -} + rust_assert (type.has_lifetime ()); + auto region = context->lookup_and_resolve_lifetime (type.get_lifetime ()); + if (!region.has_value ()) + { + rust_error_at (type.get_locus (), "failed to resolve lifetime"); + translated = new TyTy::ErrorType (type.get_mappings ().get_hirid ()); + return; + } + translated = new TyTy::ReferenceType (type.get_mappings ().get_hirid (), + TyTy::TyVar (base->get_ref ()), + type.get_mut (), region.value ()); +} // namespace Resolver void TypeCheckType::visit (HIR::RawPointerType &type) @@ -849,6 +892,9 @@ void ResolveWhereClauseItem::Resolve (HIR::WhereClauseItem &item) { ResolveWhereClauseItem resolver; + + auto binder_pin = resolver.context->push_lifetime_binder (); + switch (item.get_item_type ()) { case HIR::WhereClauseItem::LIFETIME: @@ -863,11 +909,34 @@ ResolveWhereClauseItem::Resolve (HIR::WhereClauseItem &item) void ResolveWhereClauseItem::visit (HIR::LifetimeWhereClauseItem &item) -{} +{ + auto lhs = context->lookup_and_resolve_lifetime (item.get_lifetime ()); + if (!lhs.has_value ()) + { + rust_error_at (UNKNOWN_LOCATION, "failed to resolve lifetime"); + } + for (auto &lifetime : item.get_lifetime_bounds ()) + { + auto rhs_i = context->lookup_and_resolve_lifetime (lifetime); + if (!rhs_i.has_value ()) + { + rust_error_at (UNKNOWN_LOCATION, "failed to resolve lifetime"); + } + } +} void ResolveWhereClauseItem::visit (HIR::TypeBoundWhereClauseItem &item) { + auto binder_pin = context->push_lifetime_binder (); + if (item.has_for_lifetimes ()) + { + for (auto &lifetime_param : item.get_for_lifetimes ()) + { + context->intern_and_insert_lifetime (lifetime_param.get_lifetime ()); + } + } + auto &binding_type_path = item.get_bound_type (); TyTy::BaseType *binding = TypeCheckType::Resolve (binding_type_path.get ()); @@ -879,7 +948,7 @@ ResolveWhereClauseItem::visit (HIR::TypeBoundWhereClauseItem &item) switch (bound->get_bound_type ()) { case HIR::TypeParamBound::BoundType::TRAITBOUND: { - HIR::TraitBound *b = static_cast (bound.get ()); + auto *b = static_cast (bound.get ()); TyTy::TypeBoundPredicate predicate = get_predicate_from_bound (b->get_path (), @@ -888,6 +957,19 @@ ResolveWhereClauseItem::visit (HIR::TypeBoundWhereClauseItem &item) specified_bounds.push_back (std::move (predicate)); } break; + case HIR::TypeParamBound::BoundType::LIFETIME: { + if (binding->is ()) + { + auto *b = static_cast (bound.get ()); + auto region = context->lookup_and_resolve_lifetime (*b); + if (!region.has_value ()) + { + rust_error_at (UNKNOWN_LOCATION, + "failed to resolve lifetime"); + } + } + } + break; default: break; diff --git a/gcc/rust/typecheck/rust-hir-type-check.cc b/gcc/rust/typecheck/rust-hir-type-check.cc index c8e223d56dd..68d9681485a 100644 --- a/gcc/rust/typecheck/rust-hir-type-check.cc +++ b/gcc/rust/typecheck/rust-hir-type-check.cc @@ -30,6 +30,39 @@ saw_errors (void); namespace Rust { namespace Resolver { +tl::optional +TypeCheckContext::LifetimeResolver::resolve (const Lifetime &placeholder) const +{ + if (placeholder.is_static ()) + return TyTy::Region::make_static (); + + if (placeholder == Lifetime::anonymous_lifetime ()) + return TyTy::Region::make_anonymous (); + + for (auto it = lifetime_lookup.rbegin (); it != lifetime_lookup.rend (); ++it) + { + if (it->first == placeholder) + { + if (it->second.scope <= ITEM_SCOPE) + { + // It is useful to have the static lifetime and named + // lifetimed disjoint so we add the +1 here. + return (is_body) + ? TyTy::Region::make_named (it->second.index + 1) + : TyTy::Region::make_early_bound (it->second.index); + } + else + { + return TyTy::Region::make_late_bound (get_current_scope () + - it->second.scope, + it->second.index); + } + } + } + + return tl::nullopt; +} + void TypeResolution::Resolve (HIR::Crate &crate) { @@ -151,6 +184,8 @@ TraitItemReference::get_type_from_constant ( TyTy::BaseType * TraitItemReference::get_type_from_fn (/*const*/ HIR::TraitItemFunc &fn) const { + auto binder_pin = context->push_clean_lifetime_resolver (); + std::vector substitutions = inherited_substitutions; @@ -161,7 +196,15 @@ TraitItemReference::get_type_from_fn (/*const*/ HIR::TraitItemFunc &fn) const { switch (generic_param.get ()->get_kind ()) { - case HIR::GenericParam::GenericKind::LIFETIME: + case HIR::GenericParam::GenericKind::LIFETIME: { + auto lifetime_param + = static_cast (*generic_param); + + context->intern_and_insert_lifetime ( + lifetime_param.get_lifetime ()); + // TODO: Handle lifetime bounds + } + break; case HIR::GenericParam::GenericKind::CONST: // FIXME: Skipping Lifetime and Const completely until better // handling. @@ -234,15 +277,27 @@ TraitItemReference::get_type_from_fn (/*const*/ HIR::TraitItemFunc &fn) const break; case HIR::SelfParam::IMM_REF: - self_type = new TyTy::ReferenceType ( - self_param.get_mappings ().get_hirid (), - TyTy::TyVar (self->get_ref ()), Mutability::Imm); - break; - - case HIR::SelfParam::MUT_REF: - self_type = new TyTy::ReferenceType ( - self_param.get_mappings ().get_hirid (), - TyTy::TyVar (self->get_ref ()), Mutability::Mut); + case HIR::SelfParam::MUT_REF: { + auto mutability + = self_param.get_self_kind () == HIR::SelfParam::IMM_REF + ? Mutability::Imm + : Mutability::Mut; + rust_assert (self_param.has_lifetime ()); + + auto maybe_region = context->lookup_and_resolve_lifetime ( + self_param.get_lifetime ()); + + if (!maybe_region.has_value ()) + { + rust_error_at (self_param.get_locus (), + "failed to resolve lifetime"); + return get_error (); + } + self_type = new TyTy::ReferenceType ( + self_param.get_mappings ().get_hirid (), + TyTy::TyVar (self->get_ref ()), mutability, + maybe_region.value ()); + } break; default: @@ -274,15 +329,14 @@ TraitItemReference::get_type_from_fn (/*const*/ HIR::TraitItemFunc &fn) const rust_assert (ok); RustIdent ident{*canonical_path, fn.get_locus ()}; - auto resolved - = new TyTy::FnType (fn.get_mappings ().get_hirid (), - fn.get_mappings ().get_defid (), - function.get_function_name ().as_string (), ident, - function.is_method () - ? TyTy::FnType::FNTYPE_IS_METHOD_FLAG + auto resolved = new TyTy::FnType ( + fn.get_mappings ().get_hirid (), fn.get_mappings ().get_defid (), + function.get_function_name ().as_string (), ident, + function.is_method () ? TyTy::FnType::FNTYPE_IS_METHOD_FLAG : TyTy::FnType::FNTYPE_DEFAULT_FLAGS, - ABI::RUST, std::move (params), ret_type, substitutions); - + ABI::RUST, std::move (params), ret_type, substitutions, + TyTy::SubstitutionArgumentMappings::empty ( + context->get_lifetime_resolver ().get_num_bound_regions ())); context->insert_type (fn.get_mappings (), resolved); return resolved; } diff --git a/gcc/rust/typecheck/rust-hir-type-check.h b/gcc/rust/typecheck/rust-hir-type-check.h index 0d74ae11a2c..3d66e29052f 100644 --- a/gcc/rust/typecheck/rust-hir-type-check.h +++ b/gcc/rust/typecheck/rust-hir-type-check.h @@ -23,6 +23,7 @@ #include "rust-tyty.h" #include "rust-hir-trait-reference.h" #include "rust-autoderef.h" +#include "rust-tyty-region.h" #include @@ -222,8 +223,14 @@ public: WARN_UNUSED_RESULT tl::optional lookup_lifetime (const HIR::Lifetime &lifetime) const; + WARN_UNUSED_RESULT tl::optional + lookup_and_resolve_lifetime (const HIR::Lifetime &lifetime) const; + void intern_and_insert_lifetime (const HIR::Lifetime &lifetime); + WARN_UNUSED_RESULT std::vector + regions_from_generic_args (const HIR::GenericArgs &args) const; + private: TypeCheckContext (); @@ -327,6 +334,9 @@ private: {placeholder, {get_current_scope (), binder_size_stack.top ()++}}); } + WARN_UNUSED_RESULT tl::optional + resolve (const Lifetime &placeholder) const; + /** Only to be used by the guard. */ void push_binder () { binder_size_stack.push (0); } /** Only to be used by the guard. */ diff --git a/gcc/rust/typecheck/rust-substitution-mapper.cc b/gcc/rust/typecheck/rust-substitution-mapper.cc index b2d58c44acc..394dfe40db4 100644 --- a/gcc/rust/typecheck/rust-substitution-mapper.cc +++ b/gcc/rust/typecheck/rust-substitution-mapper.cc @@ -23,15 +23,18 @@ namespace Rust { namespace Resolver { SubstMapper::SubstMapper (HirId ref, HIR::GenericArgs *generics, + const std::vector ®ions, location_t locus) - : resolved (new TyTy::ErrorType (ref)), generics (generics), locus (locus) + : resolved (new TyTy::ErrorType (ref)), generics (generics), + regions (regions), locus (locus) {} TyTy::BaseType * SubstMapper::Resolve (TyTy::BaseType *base, location_t locus, - HIR::GenericArgs *generics) + HIR::GenericArgs *generics, + const std::vector ®ions) { - SubstMapper mapper (base->get_ref (), generics, locus); + SubstMapper mapper (base->get_ref (), generics, regions, locus); base->accept_vis (mapper); rust_assert (mapper.resolved != nullptr); return mapper.resolved; @@ -40,7 +43,7 @@ SubstMapper::Resolve (TyTy::BaseType *base, location_t locus, TyTy::BaseType * SubstMapper::InferSubst (TyTy::BaseType *base, location_t locus) { - return SubstMapper::Resolve (base, locus, nullptr); + return SubstMapper::Resolve (base, locus, nullptr, {}); } bool @@ -62,7 +65,7 @@ SubstMapper::visit (TyTy::FnType &type) else { TyTy::SubstitutionArgumentMappings mappings - = type.get_mappings_from_generic_args (*generics); + = type.get_mappings_from_generic_args (*generics, regions); if (mappings.is_error ()) return; @@ -86,7 +89,7 @@ SubstMapper::visit (TyTy::ADTType &type) else { TyTy::SubstitutionArgumentMappings mappings - = type.get_mappings_from_generic_args (*generics); + = type.get_mappings_from_generic_args (*generics, regions); if (mappings.is_error ()) return; @@ -101,7 +104,7 @@ void SubstMapper::visit (TyTy::PlaceholderType &type) { rust_assert (type.can_resolve ()); - resolved = SubstMapper::Resolve (type.resolve (), locus, generics); + resolved = SubstMapper::Resolve (type.resolve (), locus, generics, regions); } void @@ -117,7 +120,7 @@ SubstMapper::visit (TyTy::ProjectionType &type) else { TyTy::SubstitutionArgumentMappings mappings - = type.get_mappings_from_generic_args (*generics); + = type.get_mappings_from_generic_args (*generics, regions); if (mappings.is_error ()) return; diff --git a/gcc/rust/typecheck/rust-substitution-mapper.h b/gcc/rust/typecheck/rust-substitution-mapper.h index 0a816c738dd..13487cf002d 100644 --- a/gcc/rust/typecheck/rust-substitution-mapper.h +++ b/gcc/rust/typecheck/rust-substitution-mapper.h @@ -29,7 +29,9 @@ class SubstMapper : public TyTy::TyVisitor { public: static TyTy::BaseType *Resolve (TyTy::BaseType *base, location_t locus, - HIR::GenericArgs *generics = nullptr); + HIR::GenericArgs *generics = nullptr, + const std::vector ®ions + = {}); static TyTy::BaseType *InferSubst (TyTy::BaseType *base, location_t locus); @@ -63,10 +65,12 @@ public: void visit (TyTy::ClosureType &) override { rust_unreachable (); } private: - SubstMapper (HirId ref, HIR::GenericArgs *generics, location_t locus); + SubstMapper (HirId ref, HIR::GenericArgs *generics, + const std::vector ®ions, location_t locus); TyTy::BaseType *resolved; HIR::GenericArgs *generics; + const std::vector ®ions; location_t locus; }; diff --git a/gcc/rust/typecheck/rust-typecheck-context.cc b/gcc/rust/typecheck/rust-typecheck-context.cc index c6840c8b1a9..1f4a5a35626 100644 --- a/gcc/rust/typecheck/rust-typecheck-context.cc +++ b/gcc/rust/typecheck/rust-typecheck-context.cc @@ -543,12 +543,39 @@ TypeCheckContext::lookup_lifetime (const HIR::Lifetime &lifetime) const rust_unreachable (); } +WARN_UNUSED_RESULT tl::optional +TypeCheckContext::lookup_and_resolve_lifetime ( + const HIR::Lifetime &lifetime) const +{ + auto maybe_interned = lookup_lifetime (lifetime); + if (!maybe_interned) + return tl::nullopt; + + return get_lifetime_resolver ().resolve (maybe_interned.value ()); +} void TypeCheckContext::intern_and_insert_lifetime (const HIR::Lifetime &lifetime) { get_lifetime_resolver ().insert_mapping (intern_lifetime (lifetime)); } +WARN_UNUSED_RESULT std::vector +TypeCheckContext::regions_from_generic_args (const HIR::GenericArgs &args) const +{ + std::vector regions; + for (const auto &lifetime : args.get_lifetime_args ()) + { + auto resolved = lookup_and_resolve_lifetime (lifetime); + if (!resolved) + { + rust_error_at (lifetime.get_locus (), "unresolved lifetime"); + return {}; + } + regions.push_back (*resolved); + } + return regions; +} + // TypeCheckContextItem TypeCheckContextItem::Item::Item (HIR::Function *item) : item (item) {} diff --git a/gcc/rust/typecheck/rust-tyty-bounds.cc b/gcc/rust/typecheck/rust-tyty-bounds.cc index 6a87c05dbf4..066fe4781ed 100644 --- a/gcc/rust/typecheck/rust-tyty-bounds.cc +++ b/gcc/rust/typecheck/rust-tyty-bounds.cc @@ -375,6 +375,7 @@ TypeBoundPredicate::TypeBoundPredicate (const TypeBoundPredicate &other) used_arguments = SubstitutionArgumentMappings (copied_arg_mappings, {}, + other.used_arguments.get_regions (), other.used_arguments.get_locus ()); } @@ -415,6 +416,7 @@ TypeBoundPredicate::operator= (const TypeBoundPredicate &other) used_arguments = SubstitutionArgumentMappings (copied_arg_mappings, {}, + other.used_arguments.get_regions (), other.used_arguments.get_locus ()); return *this; @@ -482,7 +484,10 @@ TypeBoundPredicate::apply_generic_arguments (HIR::GenericArgs *generic_args, } // now actually perform a substitution - used_arguments = get_mappings_from_generic_args (*generic_args); + used_arguments = get_mappings_from_generic_args ( + *generic_args, + Resolver::TypeCheckContext::get ()->regions_from_generic_args ( + *generic_args)); error_flag |= used_arguments.is_error (); auto &subst_mappings = used_arguments; @@ -590,6 +595,7 @@ TypeBoundPredicateItem::get_tyty_for_receiver (const TyTy::BaseType *receiver) } SubstitutionArgumentMappings adjusted (adjusted_mappings, {}, + gargs.get_regions (), gargs.get_locus (), gargs.get_subst_cb (), true /* trait-mode-flag */); diff --git a/gcc/rust/typecheck/rust-tyty-subst.cc b/gcc/rust/typecheck/rust-tyty-subst.cc index b71c9183110..fcb09d507a8 100644 --- a/gcc/rust/typecheck/rust-tyty-subst.cc +++ b/gcc/rust/typecheck/rust-tyty-subst.cc @@ -17,6 +17,8 @@ // . #include "rust-tyty-subst.h" + +#include #include "rust-tyty.h" #include "rust-hir-type-check.h" #include "rust-substitution-mapper.h" @@ -243,21 +245,34 @@ SubstitutionArg::as_string () const + (argument != nullptr ? ":" + argument->as_string () : ""); } +const RegionParamList & +SubstitutionArgumentMappings::get_regions () const +{ + return regions; +} + +RegionParamList & +SubstitutionArgumentMappings::get_mut_regions () +{ + return regions; +} + // SubstitutionArgumentMappings SubstitutionArgumentMappings::SubstitutionArgumentMappings ( std::vector mappings, - std::map binding_args, location_t locus, - ParamSubstCb param_subst_cb, bool trait_item_flag, bool error_flag) - : mappings (mappings), binding_args (binding_args), locus (locus), - param_subst_cb (param_subst_cb), trait_item_flag (trait_item_flag), - error_flag (error_flag) + std::map binding_args, RegionParamList regions, + location_t locus, ParamSubstCb param_subst_cb, bool trait_item_flag, + bool error_flag) + : mappings (std::move (mappings)), binding_args (binding_args), + regions (regions), locus (locus), param_subst_cb (param_subst_cb), + trait_item_flag (trait_item_flag), error_flag (error_flag) {} SubstitutionArgumentMappings::SubstitutionArgumentMappings ( const SubstitutionArgumentMappings &other) : mappings (other.mappings), binding_args (other.binding_args), - locus (other.locus), param_subst_cb (nullptr), + regions (other.regions), locus (other.locus), param_subst_cb (nullptr), trait_item_flag (other.trait_item_flag), error_flag (other.error_flag) {} @@ -267,6 +282,7 @@ SubstitutionArgumentMappings::operator= ( { mappings = other.mappings; binding_args = other.binding_args; + regions = other.regions; locus = other.locus; param_subst_cb = nullptr; trait_item_flag = other.trait_item_flag; @@ -278,15 +294,15 @@ SubstitutionArgumentMappings::operator= ( SubstitutionArgumentMappings SubstitutionArgumentMappings::error () { - return SubstitutionArgumentMappings ({}, {}, UNDEF_LOCATION, nullptr, false, - true); + return SubstitutionArgumentMappings ({}, {}, 0, UNDEF_LOCATION, nullptr, + false, true); } SubstitutionArgumentMappings -SubstitutionArgumentMappings::empty () +SubstitutionArgumentMappings::empty (size_t num_regions) { - return SubstitutionArgumentMappings ({}, {}, UNDEF_LOCATION, nullptr, false, - false); + return SubstitutionArgumentMappings ({}, {}, num_regions, UNDEF_LOCATION, + nullptr, false, false); } bool @@ -297,12 +313,12 @@ SubstitutionArgumentMappings::is_error () const bool SubstitutionArgumentMappings::get_argument_for_symbol ( - const ParamType *param_to_find, SubstitutionArg *argument) + const ParamType *param_to_find, SubstitutionArg *argument) const { - for (auto &mapping : mappings) + for (const auto &mapping : mappings) { const ParamType *p = mapping.get_param_ty (); - if (p->get_symbol ().compare (param_to_find->get_symbol ()) == 0) + if (p->get_symbol () == param_to_find->get_symbol ()) { *argument = mapping; return true; @@ -310,6 +326,18 @@ SubstitutionArgumentMappings::get_argument_for_symbol ( } return false; } +tl::optional +SubstitutionArgumentMappings::find_symbol (const ParamType ¶m_to_find) const +{ + auto it = std::find_if (mappings.begin (), mappings.end (), + [param_to_find] (const SubstitutionArg &arg) { + return arg.get_param_ty ()->get_symbol () + == param_to_find.get_symbol (); + }); + if (it == mappings.end ()) + return tl::nullopt; + return std::distance (mappings.begin (), it); +} bool SubstitutionArgumentMappings::get_argument_at (size_t index, @@ -461,6 +489,16 @@ SubstitutionRef::get_num_substitutions () const { return substitutions.size (); } +size_t +SubstitutionRef::get_num_lifetime_params () const +{ + return used_arguments.get_regions ().size (); +} +size_t +SubstitutionRef::get_num_type_params () const +{ + return get_num_substitutions (); +} std::vector & SubstitutionRef::get_substs () @@ -497,12 +535,9 @@ SubstitutionRef::override_context () bool SubstitutionRef::needs_substitution () const { - for (auto &sub : substitutions) - { - if (sub.need_substitution ()) - return true; - } - return false; + return std::any_of (substitutions.begin (), substitutions.end (), + std::mem_fn ( + &SubstitutionParamMapping::needs_substitution)); } bool @@ -547,14 +582,15 @@ SubstitutionRef::min_required_substitutions () const return n; } -SubstitutionArgumentMappings +const SubstitutionArgumentMappings & SubstitutionRef::get_used_arguments () const { return used_arguments; } SubstitutionArgumentMappings -SubstitutionRef::get_mappings_from_generic_args (HIR::GenericArgs &args) +SubstitutionRef::get_mappings_from_generic_args ( + HIR::GenericArgs &args, const std::vector ®ions) { std::map binding_arguments; if (args.get_binding_args ().size () > 0) @@ -672,9 +708,9 @@ SubstitutionRef::get_mappings_from_generic_args (HIR::GenericArgs &args) // this resolved default might already contain default parameters if (!resolved->is_concrete ()) { - SubstitutionArgumentMappings intermediate (mappings, - binding_arguments, - args.get_locus ()); + SubstitutionArgumentMappings intermediate ( + mappings, binding_arguments, + {used_arguments.get_regions ().size ()}, args.get_locus ()); resolved = Resolver::SubstMapperInternal::Resolve (resolved, intermediate); @@ -687,8 +723,10 @@ SubstitutionRef::get_mappings_from_generic_args (HIR::GenericArgs &args) } } - return SubstitutionArgumentMappings (mappings, binding_arguments, - args.get_locus ()); + return {mappings, binding_arguments, + RegionParamList::from_subst (used_arguments.get_regions ().size (), + regions), + args.get_locus ()}; } BaseType * @@ -727,6 +765,7 @@ SubstitutionRef::infer_substitions (location_t locus) SubstitutionArgumentMappings infer_arguments (std::move (args), {} /* binding_arguments */, + used_arguments.get_regions (), locus); return handle_substitions (infer_arguments); } @@ -773,6 +812,7 @@ SubstitutionRef::adjust_mappings_for_this ( return SubstitutionArgumentMappings (resolved_mappings, mappings.get_binding_args (), + mappings.get_regions (), mappings.get_locus (), mappings.get_subst_cb (), mappings.trait_item_mode ()); @@ -840,6 +880,7 @@ SubstitutionRef::solve_mappings_from_receiver_for_self ( return SubstitutionArgumentMappings (resolved_mappings, mappings.get_binding_args (), + mappings.get_regions (), mappings.get_locus ()); } diff --git a/gcc/rust/typecheck/rust-tyty-subst.h b/gcc/rust/typecheck/rust-tyty-subst.h index d9d179d426f..dbabff3d449 100644 --- a/gcc/rust/typecheck/rust-tyty-subst.h +++ b/gcc/rust/typecheck/rust-tyty-subst.h @@ -23,6 +23,9 @@ #include "rust-location.h" #include "rust-hir-full-decls.h" #include "rust-tyty-bounds.h" +#include "rust-tyty-region.h" + +#include namespace Rust { namespace TyTy { @@ -69,6 +72,61 @@ private: ParamType *param; }; +/** + * Represents the part of the parameter list that contains lifetime + * parameters. + * + * ``` + * Foo<'a, 'b, i32, 8> + * ^^^^^^ + * ``` + * + * It has fixed size based on the number of lifetime parameters and they are + * indexed based on their order. + * + * All regions are initially set to unresolved. When type instantiation is + * encountered, all explicitly mentioned lifetimes are resolved to bound + * lifetimes. The remaining unresolved lifetimes are set to anonymous. During + * BIR construction, all lifetimes are replaced with free region variables. + * Inference of anonymous regions happens automatically using BIR subtyping + * pass. + */ +class RegionParamList +{ + std::vector regions; + +public: + RegionParamList (size_t num_regions) : regions (num_regions) {} + + Region *begin () { return regions.data (); } + Region *end () { return regions.data () + regions.size (); } + Region &operator[] (size_t index) { return regions.at (index); } + const Region &operator[] (size_t index) const { return regions.at (index); } + WARN_UNUSED_RESULT const Region *begin () const { return regions.data (); } + WARN_UNUSED_RESULT const Region *end () const + { + return regions.data () + regions.size (); + } + size_t size () const { return regions.size (); } + + /** + * Takes regions from the `subst` parameter and fills the rest with anonymous + * regions. + */ + static RegionParamList from_subst (size_t num_regions, + std::vector subst) + { + RegionParamList list (num_regions); + for (size_t i = 0; i < subst.size (); i++) + list.regions.at (i) = subst.at (i); + for (size_t i = subst.size (); i < num_regions; i++) + { + list.regions.at (i) = Region::make_anonymous (); + } + return list; + } +}; + class SubstitutionArg { public: @@ -110,7 +168,7 @@ class SubstitutionArgumentMappings public: SubstitutionArgumentMappings (std::vector mappings, std::map binding_args, - location_t locus, + RegionParamList regions, location_t locus, ParamSubstCb param_subst_cb = nullptr, bool trait_item_flag = false, bool error_flag = false); @@ -124,12 +182,26 @@ public: = default; static SubstitutionArgumentMappings error (); - static SubstitutionArgumentMappings empty (); + + /** Creates empty substitution argument mappings with unresolved regions */ + static SubstitutionArgumentMappings empty (size_t num_regions = 0); + + static RegionParamList + regions_from_nullable_args (SubstitutionArgumentMappings *args) + { + if (args == nullptr) + return RegionParamList (0); + + return args->get_regions (); + } bool is_error () const; bool get_argument_for_symbol (const ParamType *param_to_find, - SubstitutionArg *argument); + SubstitutionArg *argument) const; + + /** Return type parameter index for symbol */ + tl::optional find_symbol (const ParamType ¶m_to_find) const; bool get_argument_at (size_t index, SubstitutionArg *argument); @@ -152,6 +224,9 @@ public: const std::map &get_binding_args () const; + const RegionParamList &get_regions () const; + RegionParamList &get_mut_regions (); + std::string as_string () const; void on_param_subst (const ParamType &p, const SubstitutionArg &a) const; @@ -163,6 +238,7 @@ public: private: std::vector mappings; std::map binding_args; + RegionParamList regions; location_t locus; ParamSubstCb param_subst_cb; bool trait_item_flag; @@ -193,6 +269,10 @@ public: size_t get_num_substitutions () const; + size_t get_num_lifetime_params () const; + + size_t get_num_type_params () const; + std::vector &get_substs (); const std::vector &get_substs () const; @@ -221,7 +301,8 @@ public: // the substitions we have here define X,Y but the arguments have no bindings // so its a matter of ordering SubstitutionArgumentMappings - get_mappings_from_generic_args (HIR::GenericArgs &args); + get_mappings_from_generic_args (HIR::GenericArgs &args, + const std::vector ®ions); // Recursive substitutions // Foo { a:A, b: B}; Bar {a:X, b: Foo} @@ -318,7 +399,10 @@ public: virtual BaseType *handle_substitions (SubstitutionArgumentMappings &mappings) = 0; - SubstitutionArgumentMappings get_used_arguments () const; + WARN_UNUSED_RESULT const SubstitutionArgumentMappings & + get_used_arguments () const; + + WARN_UNUSED_RESULT tl::optional get_arg_at (size_t i) const; protected: std::vector substitutions; diff --git a/gcc/rust/typecheck/rust-tyty.cc b/gcc/rust/typecheck/rust-tyty.cc index f1789f008a0..890d079d67f 100644 --- a/gcc/rust/typecheck/rust-tyty.cc +++ b/gcc/rust/typecheck/rust-tyty.cc @@ -572,7 +572,8 @@ BaseType::monomorphized_clone () const { TyVar elm = ref->get_var_element_type ().monomorphized_clone (); return new ReferenceType (ref->get_ref (), ref->get_ty_ref (), elm, - ref->mutability (), ref->get_combined_refs ()); + ref->mutability (), ref->get_region (), + ref->get_combined_refs ()); } else if (auto tuple = x->try_as ()) { @@ -594,7 +595,8 @@ BaseType::monomorphized_clone () const return new FnType (fn->get_ref (), fn->get_ty_ref (), fn->get_id (), fn->get_identifier (), fn->ident, fn->get_flags (), fn->get_abi (), std::move (cloned_params), retty, - fn->clone_substs (), fn->get_combined_refs ()); + fn->clone_substs (), fn->get_substitution_arguments (), + fn->get_combined_refs ()); } else if (auto fn = x->try_as ()) { @@ -977,6 +979,7 @@ InferType::default_type (BaseType **type) const auto context = Resolver::TypeCheckContext::get (); bool ok = false; + // NOTE: Calling this error is misleading. if (default_hint.kind == TypeKind::ERROR) { switch (infer_kind) @@ -1955,7 +1958,7 @@ FnType::clone () const return new FnType (get_ref (), get_ty_ref (), get_id (), get_identifier (), ident, flags, abi, std::move (cloned_params), get_return_type ()->clone (), clone_substs (), - get_combined_refs ()); + get_substitution_arguments (), get_combined_refs ()); } FnType * @@ -2848,19 +2851,20 @@ CharType::clone () const // Reference Type ReferenceType::ReferenceType (HirId ref, TyVar base, Mutability mut, - std::set refs) + Region region, std::set refs) : BaseType (ref, ref, KIND, {Resolver::CanonicalPath::create_empty (), BUILTINS_LOCATION}, - refs), - base (base), mut (mut) + std::move (refs)), + base (base), mut (mut), region (region) {} ReferenceType::ReferenceType (HirId ref, HirId ty_ref, TyVar base, - Mutability mut, std::set refs) + Mutability mut, Region region, + std::set refs) : BaseType (ref, ty_ref, KIND, {Resolver::CanonicalPath::create_empty (), BUILTINS_LOCATION}, - refs), - base (base), mut (mut) + std::move (refs)), + base (base), mut (mut), region (region) {} Mutability @@ -2874,6 +2878,11 @@ ReferenceType::is_mutable () const { return mut == Mutability::Mut; } +Region +ReferenceType::get_region () const +{ + return region; +} bool ReferenceType::is_dyn_object () const @@ -2982,7 +2991,7 @@ BaseType * ReferenceType::clone () const { return new ReferenceType (get_ref (), get_ty_ref (), base, mutability (), - get_combined_refs ()); + get_region (), get_combined_refs ()); } ReferenceType * diff --git a/gcc/rust/typecheck/rust-tyty.h b/gcc/rust/typecheck/rust-tyty.h index b04048f400d..7384c402f4e 100644 --- a/gcc/rust/typecheck/rust-tyty.h +++ b/gcc/rust/typecheck/rust-tyty.h @@ -26,6 +26,9 @@ #include "rust-tyty-bounds.h" #include "rust-tyty-util.h" #include "rust-tyty-subst.h" +#include "rust-tyty-region.h" + +#include namespace Rust { @@ -770,10 +773,10 @@ public: uint8_t flags, ABI abi, std::vector> params, BaseType *type, std::vector subst_refs, + SubstitutionArgumentMappings substitution_argument_mappings, std::set refs = std::set ()) : CallableTypeInterface (ref, ref, TypeKind::FNDEF, ident, refs), - SubstitutionRef (std::move (subst_refs), - SubstitutionArgumentMappings::error ()), + SubstitutionRef (std::move (subst_refs), substitution_argument_mappings), params (std::move (params)), type (type), flags (flags), identifier (identifier), id (id), abi (abi) { @@ -785,10 +788,10 @@ public: RustIdent ident, uint8_t flags, ABI abi, std::vector> params, BaseType *type, std::vector subst_refs, + SubstitutionArgumentMappings substitution_argument_mappings, std::set refs = std::set ()) : CallableTypeInterface (ref, ty_ref, TypeKind::FNDEF, ident, refs), - SubstitutionRef (std::move (subst_refs), - SubstitutionArgumentMappings::error ()), + SubstitutionRef (std::move (subst_refs), substitution_argument_mappings), params (params), type (type), flags (flags), identifier (identifier), id (id), abi (abi) { @@ -977,7 +980,7 @@ public: = std::vector ()) : CallableTypeInterface (ref, ty_ref, TypeKind::CLOSURE, ident, refs), SubstitutionRef (std::move (subst_refs), - SubstitutionArgumentMappings::error ()), + SubstitutionArgumentMappings::error ()), // TODO parameters (parameters), result_type (std::move (result_type)), id (id), captures (captures) { @@ -1365,11 +1368,13 @@ public: class ReferenceType : public BaseType { public: - static constexpr auto KIND = TypeKind::REF; + static constexpr auto KIND = REF; ReferenceType (HirId ref, TyVar base, Mutability mut, + Region region = Region::make_anonymous (), std::set refs = std::set ()); ReferenceType (HirId ref, HirId ty_ref, TyVar base, Mutability mut, + Region region = Region::make_anonymous (), std::set refs = std::set ()); BaseType *get_base () const; @@ -1393,6 +1398,9 @@ public: Mutability mutability () const; bool is_mutable () const; + WARN_UNUSED_RESULT Region get_region () const; + void set_region (Region region); + bool is_dyn_object () const; bool is_dyn_slice_type (const TyTy::SliceType **slice = nullptr) const; bool is_dyn_str_type (const TyTy::StrType **str = nullptr) const; @@ -1401,6 +1409,7 @@ public: private: TyVar base; Mutability mut; + Region region; }; class PointerType : public BaseType From patchwork Wed Feb 7 11:43:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197899 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2200635dyb; Wed, 7 Feb 2024 04:47:06 -0800 (PST) X-Google-Smtp-Source: AGHT+IGtfAyS8kx+MGpdS/r5HOSDK0BZkWH2iRiWmnVGhcq+KXd7TCINEbnL/yEbjDNHX1jLzz3I X-Received: by 2002:a05:6902:1244:b0:dbd:4c4d:240d with SMTP id t4-20020a056902124400b00dbd4c4d240dmr5217804ybu.59.1707310025966; Wed, 07 Feb 2024 04:47:05 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310025; cv=pass; d=google.com; s=arc-20160816; b=nrmspVUba9A3oE/jyAt3R6XSV26b7cSwUziACmKbld9cNyoh+cDTa2Mf+sfKRLWpZj 6Z+Ehc0zgeF2uVtyaXWjZdPjV0OJFx2xn9Tn71SlZWErOGqrx9iiz/NtEfkyNqPs5LM9 NMXzuvYGcCvtSY+ppWDDb1XLaqU2IdlIDNcwHuoJev1oDKvjEXUD0PGRuTf+82mZ+lfA mc55AtD0TUuE1IO1QDZt6UgJZnyQy4oLbKGaE3Tp1gaE13GOJlt1qf0pc20i0AyqCoEw PWjtCK07j3RuqMaBC841OcsBazU0ddScRH+WhPlEcU7RDsEr/NjZxNXZbhqIx/p5UhZz JrGQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=JZXRo/UcZjqCN4fMRYOAtwhO44igH8VDMmzAhVccp/c=; fh=4wfXPJS9UqtS0kiK3L8e67okYUoMEUmzcfIa9QSG42Q=; b=rMv+9A71jRjz+P7lRzXHcSqHHbF+1p0mqwBytTXF1cZx58shPOSHiOdMw4ltFRIBB4 jSWGk87zw4a6ipJTEZXM21HjfciU4B6sz5ljIG7aZJp8lFJC4YI0QjMyom3eZ51o9F81 nJud8A33w0gG4ieCVZjzVc4jH/888Eksn3kktxFOEbAb+O5VJGu206i3qjYUKG/K7B+m sjGhC/wo6/T5rAI9gA5W57wXvFohwySiBJjw7iTRGqddYinO/sqsbvxIbcOzkRDEwu9L muqz7tO+pUICQAAR8TveWb1OVo2Q9F+l9ZfFz+PdlqEix1Y335XvjYa7Hdne8OcvgP4k KtQQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=etzGJxLe; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCURYPjAwG2ixe/HXxji64WeTnzAZlSzamvjM7IJKJ/AhQGh7Yg2eFB6QLW3P2bxtAq83l9Kratq+jD3v8eUfrEgq6Ny0g== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id c17-20020a05620a201100b0078552f53b80si1009242qka.50.2024.02.07.04.47.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:47:05 -0800 (PST) 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=@embecosm.com header.s=google header.b=etzGJxLe; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A8D313858001 for ; Wed, 7 Feb 2024 12:47:05 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id 57B0538582B7 for ; Wed, 7 Feb 2024 12:44:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 57B0538582B7 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 57B0538582B7 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309857; cv=none; b=HwhRnKTk/kM+y7WwgKTjQECGBIMASvnjPlhGdOU/Wg/JaoGWnJ3aV2jYj9JupgPk71DVSHlbySCkxNCrFTVXicv4dvlk2xx0oogJKbA0BXCEr3/QnkbvNUEXzPk77ToJKsSp8SN6v7r/BhsCYUDZNStvW2K3wqQdsRmU6J6YgTc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309857; c=relaxed/simple; bh=FRMfU4v57/d4QWuFMN6H5amqcjB0IrTaQnyb9KrNKGk=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Zqbz3IoaWMGcIHoMV6NOMZvb5YKQVEzVvleI6NndQVvHO219yBB4nWH6TMIxCYnzIBoHElLs3UhsG9AxAJQFNJ00iTAi43bdRdEL7WcllsoBdbpq9ZC9Rxo7b0wNcYYnx2tcSt1pmkVuAl+8+c83rT6vHAa1iEEKjZBZ5mVDmaI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40fc654a718so4831705e9.2 for ; Wed, 07 Feb 2024 04:44:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309846; x=1707914646; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=JZXRo/UcZjqCN4fMRYOAtwhO44igH8VDMmzAhVccp/c=; b=etzGJxLeU7h5snXME001+UNlZyIZENUzrDYICAvvtBXTsMMEY1ZpW0mx6fQ1LIHNAq Hm5YYh2SFGHz0yViY7mrezrvmSKbfwDIKAKtPU+JF8NV+fzxGbZe15j+/FmMxzJqNltf +Lnf28Sm6Km1SamOp1T99tDIej+XZIdOC32Zh4f4hLri5NhEeWdP4UcvZCBm0VWHpFWx 40+kdrbhiNVtISK+LBXyFhhD/QeYEOlYUvPp7DFQzSKGdevHvdrFiD0fOQbwlhBgFlRy uh5tzEcWrMKIX2QlkZ08901ViRDDGor1k4LnE1UN94X9gK71XXhWJrnOLsP4BSnWBXvW YBrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309846; x=1707914646; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=JZXRo/UcZjqCN4fMRYOAtwhO44igH8VDMmzAhVccp/c=; b=Xvh91dzKmKChyEOSdfEwVIak2wKLNsYTfDO+n5UjoTObuK1ccRP2tDpt8CpOM4YZhJ 119M0zwQ9nxPjsRTtLYGrZwEYrimOq5ffBW88VfUKb9MzDOAcSJco9xmatXP8O5q6ecI smPaUHGTzPO+szNkI/c5DyyOKTMb+6fQB9tQFLKZVi84V7oER0FYIVXebedF7T6992bB fSYezjh2C35c6HJghxQ6ARfS5OBcuRdJgdEBaGAB4fNV4QJmWEHIo4SSfNfi5a9fqxcx 4/6xRmWgWjejoKRN8WwywEdtDr+y7U7TWDubYx/dmz9Rmh8zYgwP8XHqemyCNwL1yAxR iHEg== X-Gm-Message-State: AOJu0Yx9axs0iV6zI1ZvHZT+08lgiAiE5d6OnMN/WThE/6Vji7hQzxfV 458iNIRzZDgi9KaR/PR6kw9QO5xigDN3Jpx+P2v2T7N/b3dKruM47O+vKf3eeKTHZrAvvjBeNcm J1A== X-Received: by 2002:a05:600c:19c8:b0:40f:b691:d3c1 with SMTP id u8-20020a05600c19c800b0040fb691d3c1mr4277608wmq.30.1707309845815; Wed, 07 Feb 2024 04:44:05 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUZFhhU9uF7yS5/hFRo67ua6s1X/7JnECZ/C1xgBJMvxxeDyPbJL50BmDFmiIldUYmyD4kZKWQopCh4NXOGKZEa/r0= Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:05 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Jakub Dupak Subject: [COMMITTED 07/25] gccrs: TyTy: Store region constraints Date: Wed, 7 Feb 2024 12:43:53 +0100 Message-ID: <20240207114419.1100894-8-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244317893167295 X-GMAIL-MSGID: 1790244317893167295 From: Jakub Dupak gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-implitem.cc (TypeCheckTopLevelExternItem::visit): Add region constraints. (TypeCheckImplItem::visit): Add region constraints. * typecheck/rust-hir-type-check-implitem.h: Add region constraints. * typecheck/rust-hir-type-check-item.cc (TypeCheckItem::ResolveImplBlockSelf): Add region constraints. (TypeCheckItem::visit): Add region constraints. (TypeCheckItem::resolve_impl_item): Add region constraints. (TypeCheckItem::resolve_impl_block_substitutions): Add region constraints. * typecheck/rust-hir-type-check-item.h: Add region constraints. * typecheck/rust-hir-type-check-type.cc (ResolveWhereClauseItem::Resolve): Add region constraints. (ResolveWhereClauseItem::visit): Add region constraints. * typecheck/rust-hir-type-check-type.h (class ResolveWhereClauseItem): Add region constraints. * typecheck/rust-hir-type-check.cc (TraitItemReference::get_type_from_fn): Add region constraints. * typecheck/rust-tyty-bounds.cc (TypeBoundPredicate::TypeBoundPredicate): Add region constraints. * typecheck/rust-tyty-subst.cc (SubstitutionRef::get_region_constraints): Add region constraints. * typecheck/rust-tyty-subst.h (class BaseType): Add region constraints. (struct RegionConstraints): Add region constraints. * typecheck/rust-tyty.cc (BaseType::monomorphized_clone): Add region constraints. (ADTType::clone): Add region constraints. (FnType::clone): Add region constraints. (ProjectionType::clone): Add region constraints. * typecheck/rust-tyty.h: Add region constraints. Signed-off-by: Jakub Dupak --- .../typecheck/rust-hir-type-check-implitem.cc | 24 ++++++-- .../typecheck/rust-hir-type-check-implitem.h | 1 + .../typecheck/rust-hir-type-check-item.cc | 58 +++++++++++++------ gcc/rust/typecheck/rust-hir-type-check-item.h | 3 +- .../typecheck/rust-hir-type-check-type.cc | 11 +++- gcc/rust/typecheck/rust-hir-type-check-type.h | 10 +++- gcc/rust/typecheck/rust-hir-type-check.cc | 11 +++- gcc/rust/typecheck/rust-tyty-bounds.cc | 8 +-- gcc/rust/typecheck/rust-tyty-subst.cc | 11 +++- gcc/rust/typecheck/rust-tyty-subst.h | 17 +++++- gcc/rust/typecheck/rust-tyty.cc | 23 +++++--- gcc/rust/typecheck/rust-tyty.h | 27 ++++++--- 12 files changed, 151 insertions(+), 53 deletions(-) diff --git a/gcc/rust/typecheck/rust-hir-type-check-implitem.cc b/gcc/rust/typecheck/rust-hir-type-check-implitem.cc index 0ca59dea899..6b4141a4270 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-implitem.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-implitem.cc @@ -96,6 +96,16 @@ TypeCheckTopLevelExternItem::visit (HIR::ExternalFunctionItem &function) } } + TyTy::RegionConstraints region_constraints; + if (function.has_where_clause ()) + { + for (auto &where_clause_item : function.get_where_clause ().get_items ()) + { + ResolveWhereClauseItem::Resolve (*where_clause_item.get (), + region_constraints); + } + } + TyTy::BaseType *ret_type = nullptr; if (!function.has_return_type ()) ret_type @@ -166,7 +176,8 @@ TypeCheckTopLevelExternItem::visit (HIR::ExternalFunctionItem &function) function.get_item_name ().as_string (), ident, flags, parent.get_abi (), std::move (params), ret_type, std::move (substitutions), TyTy::SubstitutionArgumentMappings::empty ( - context->get_lifetime_resolver ().get_num_bound_regions ())); + context->get_lifetime_resolver ().get_num_bound_regions ()), + region_constraints); context->insert_type (function.get_mappings (), fnType); resolved = fnType; @@ -206,9 +217,11 @@ TypeCheckImplItem::visit (HIR::Function &function) if (function.has_generics ()) resolve_generic_params (function.get_generic_params (), substitutions); + TyTy::RegionConstraints region_constraints; for (auto &where_clause_item : function.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item.get ()); + ResolveWhereClauseItem::Resolve (*where_clause_item.get (), + region_constraints); } TyTy::BaseType *ret_type = nullptr; @@ -334,7 +347,8 @@ TypeCheckImplItem::visit (HIR::Function &function) : TyTy::FnType::FNTYPE_DEFAULT_FLAGS, ABI::RUST, std::move (params), ret_type, std::move (substitutions), TyTy::SubstitutionArgumentMappings::empty ( - context->get_lifetime_resolver ().get_num_bound_regions ())); + context->get_lifetime_resolver ().get_num_bound_regions ()), + region_constraints); context->insert_type (function.get_mappings (), fnType); result = fnType; @@ -389,9 +403,11 @@ TypeCheckImplItem::visit (HIR::TypeAlias &alias) context->insert_type (alias.get_mappings (), actual_type); result = actual_type; + TyTy::RegionConstraints region_constraints; for (auto &where_clause_item : alias.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item.get ()); + ResolveWhereClauseItem::Resolve (*where_clause_item.get (), + region_constraints); } } diff --git a/gcc/rust/typecheck/rust-hir-type-check-implitem.h b/gcc/rust/typecheck/rust-hir-type-check-implitem.h index 067465ec77a..4d178440775 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-implitem.h +++ b/gcc/rust/typecheck/rust-hir-type-check-implitem.h @@ -97,6 +97,7 @@ private: HIR::ImplBlock *parent; TyTy::BaseType *self; std::vector substitutions; + TyTy::RegionConstraints region_costraints; }; } // namespace Resolver diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.cc b/gcc/rust/typecheck/rust-hir-type-check-item.cc index eb2698ead28..16b4906a356 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-item.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-item.cc @@ -63,12 +63,15 @@ TypeCheckItem::ResolveImplBlockSelf (HIR::ImplBlock &impl_block) TypeCheckItem resolver; bool failed_flag = false; - std::vector substitutions + auto result = resolver.resolve_impl_block_substitutions (impl_block, failed_flag); if (failed_flag) { return new TyTy::ErrorType (impl_block.get_mappings ().get_hirid ()); } + std::vector substitutions + = std::move (result.first); + TyTy::RegionConstraints region_constraints = std::move (result.second); return resolver.resolve_impl_block_self (impl_block); } @@ -81,12 +84,14 @@ TypeCheckItem::ResolveImplBlockSelfWithInference ( TypeCheckItem resolver; bool failed_flag = false; - std::vector substitutions - = resolver.resolve_impl_block_substitutions (impl, failed_flag); + auto result = resolver.resolve_impl_block_substitutions (impl, failed_flag); if (failed_flag) { return new TyTy::ErrorType (impl.get_mappings ().get_hirid ()); } + std::vector substitutions + = std::move (result.first); + TyTy::RegionConstraints region_constraints = std::move (result.second); // now that we have the param mappings we need to query the self type TyTy::BaseType *self = resolver.resolve_impl_block_self (impl); @@ -140,9 +145,10 @@ TypeCheckItem::visit (HIR::TypeAlias &alias) context->insert_type (alias.get_mappings (), actual_type); + TyTy::RegionConstraints region_constraints; for (auto &where_clause_item : alias.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item); + ResolveWhereClauseItem::Resolve (*where_clause_item, region_constraints); } infered = actual_type; } @@ -156,9 +162,10 @@ TypeCheckItem::visit (HIR::TupleStruct &struct_decl) if (struct_decl.has_generics ()) resolve_generic_params (struct_decl.get_generic_params (), substitutions); + TyTy::RegionConstraints region_constraints; for (auto &where_clause_item : struct_decl.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item); + ResolveWhereClauseItem::Resolve (*where_clause_item, region_constraints); } std::vector fields; @@ -203,7 +210,8 @@ TypeCheckItem::visit (HIR::TupleStruct &struct_decl) TyTy::ADTType::ADTKind::TUPLE_STRUCT, std::move (variants), std::move (substitutions), repr, TyTy::SubstitutionArgumentMappings::empty ( - context->get_lifetime_resolver ().get_num_bound_regions ())); + context->get_lifetime_resolver ().get_num_bound_regions ()), + region_constraints); context->insert_type (struct_decl.get_mappings (), type); infered = type; @@ -218,9 +226,10 @@ TypeCheckItem::visit (HIR::StructStruct &struct_decl) if (struct_decl.has_generics ()) resolve_generic_params (struct_decl.get_generic_params (), substitutions); + TyTy::RegionConstraints region_constraints; for (auto &where_clause_item : struct_decl.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item); + ResolveWhereClauseItem::Resolve (*where_clause_item, region_constraints); } std::vector fields; @@ -263,7 +272,8 @@ TypeCheckItem::visit (HIR::StructStruct &struct_decl) TyTy::ADTType::ADTKind::STRUCT_STRUCT, std::move (variants), std::move (substitutions), repr, TyTy::SubstitutionArgumentMappings::empty ( - context->get_lifetime_resolver ().get_num_bound_regions ())); + context->get_lifetime_resolver ().get_num_bound_regions ()), + region_constraints); context->insert_type (struct_decl.get_mappings (), type); infered = type; @@ -316,9 +326,10 @@ TypeCheckItem::visit (HIR::Union &union_decl) if (union_decl.has_generics ()) resolve_generic_params (union_decl.get_generic_params (), substitutions); + TyTy::RegionConstraints region_constraints; for (auto &where_clause_item : union_decl.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item); + ResolveWhereClauseItem::Resolve (*where_clause_item, region_constraints); } std::vector fields; @@ -401,13 +412,15 @@ TypeCheckItem::visit (HIR::ImplBlock &impl_block) auto binder_pin = context->push_clean_lifetime_resolver (true); bool failed_flag = false; - std::vector substitutions - = resolve_impl_block_substitutions (impl_block, failed_flag); + auto result = resolve_impl_block_substitutions (impl_block, failed_flag); if (failed_flag) { infered = new TyTy::ErrorType (impl_block.get_mappings ().get_hirid ()); return; } + std::vector substitutions + = std::move (result.first); + TyTy::RegionConstraints region_constraints = std::move (result.second); TyTy::BaseType *self = resolve_impl_block_self (impl_block); @@ -427,13 +440,16 @@ TypeCheckItem::resolve_impl_item (HIR::ImplBlock &impl_block, HIR::ImplItem &item) { bool failed_flag = false; - std::vector substitutions - = resolve_impl_block_substitutions (impl_block, failed_flag); + auto result = resolve_impl_block_substitutions (impl_block, failed_flag); if (failed_flag) { return new TyTy::ErrorType (impl_block.get_mappings ().get_hirid ()); } + std::vector substitutions + = std::move (result.first); + TyTy::RegionConstraints region_constraints = std::move (result.second); + TyTy::BaseType *self = resolve_impl_block_self (impl_block); return TypeCheckImplItem::Resolve (&impl_block, &item, self, substitutions); @@ -445,11 +461,13 @@ TypeCheckItem::visit (HIR::Function &function) auto lifetime_pin = context->push_clean_lifetime_resolver (); std::vector substitutions; if (function.has_generics ()) - resolve_generic_params (function.get_generic_params (), substitutions); + resolve_generic_params (function.get_generic_params (), + substitutions); // TODO resolve constraints + TyTy::RegionConstraints region_constraints; for (auto &where_clause_item : function.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item); + ResolveWhereClauseItem::Resolve (*where_clause_item, region_constraints); } TyTy::BaseType *ret_type = nullptr; @@ -498,7 +516,8 @@ TypeCheckItem::visit (HIR::Function &function) TyTy::FnType::FNTYPE_DEFAULT_FLAGS, ABI::RUST, std::move (params), ret_type, std::move (substitutions), TyTy::SubstitutionArgumentMappings::empty ( - context->get_lifetime_resolver ().get_num_bound_regions ())); + context->get_lifetime_resolver ().get_num_bound_regions ()), + region_constraints); context->insert_type (function.get_mappings (), fn_type); @@ -558,7 +577,7 @@ TypeCheckItem::visit (HIR::ExternBlock &extern_block) } } -std::vector +std::pair, TyTy::RegionConstraints> TypeCheckItem::resolve_impl_block_substitutions (HIR::ImplBlock &impl_block, bool &failure_flag) { @@ -566,9 +585,10 @@ TypeCheckItem::resolve_impl_block_substitutions (HIR::ImplBlock &impl_block, if (impl_block.has_generics ()) resolve_generic_params (impl_block.get_generic_params (), substitutions); + TyTy::RegionConstraints region_constraints; for (auto &where_clause_item : impl_block.get_where_clause ().get_items ()) { - ResolveWhereClauseItem::Resolve (*where_clause_item); + ResolveWhereClauseItem::Resolve (*where_clause_item, region_constraints); } auto specified_bound = TyTy::TypeBoundPredicate::error (); @@ -600,7 +620,7 @@ TypeCheckItem::resolve_impl_block_substitutions (HIR::ImplBlock &impl_block, failure_flag = check_for_unconstrained (substitutions, trait_constraints, impl_constraints, self); - return substitutions; + return {substitutions, region_constraints}; } void diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.h b/gcc/rust/typecheck/rust-hir-type-check-item.h index 73cf9ded1fd..8a90ba051eb 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-item.h +++ b/gcc/rust/typecheck/rust-hir-type-check-item.h @@ -57,7 +57,8 @@ public: void visit (HIR::UseDeclaration &) override {} protected: - std::vector + std::pair, + TyTy::RegionConstraints> resolve_impl_block_substitutions (HIR::ImplBlock &impl_block, bool &failure_flag); diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.cc b/gcc/rust/typecheck/rust-hir-type-check-type.cc index e7a86b9eee1..0d108c3959c 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-type.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-type.cc @@ -889,9 +889,10 @@ TypeResolveGenericParam::visit (HIR::TypeParam ¶m) } void -ResolveWhereClauseItem::Resolve (HIR::WhereClauseItem &item) +ResolveWhereClauseItem::Resolve (HIR::WhereClauseItem &item, + TyTy::RegionConstraints ®ion_constraints) { - ResolveWhereClauseItem resolver; + ResolveWhereClauseItem resolver (region_constraints); auto binder_pin = resolver.context->push_lifetime_binder (); @@ -922,6 +923,8 @@ ResolveWhereClauseItem::visit (HIR::LifetimeWhereClauseItem &item) { rust_error_at (UNKNOWN_LOCATION, "failed to resolve lifetime"); } + region_constraints.region_region.emplace_back (lhs.value (), + rhs_i.value ()); } } @@ -958,7 +961,7 @@ ResolveWhereClauseItem::visit (HIR::TypeBoundWhereClauseItem &item) } break; case HIR::TypeParamBound::BoundType::LIFETIME: { - if (binding->is ()) + if (auto param = binding->try_as ()) { auto *b = static_cast (bound.get ()); auto region = context->lookup_and_resolve_lifetime (*b); @@ -967,6 +970,8 @@ ResolveWhereClauseItem::visit (HIR::TypeBoundWhereClauseItem &item) rust_error_at (UNKNOWN_LOCATION, "failed to resolve lifetime"); } + region_constraints.type_region.emplace_back (param, + region.value ()); } } break; diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.h b/gcc/rust/typecheck/rust-hir-type-check-type.h index 31b486958f4..3083a94f97b 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-type.h +++ b/gcc/rust/typecheck/rust-hir-type-check-type.h @@ -115,15 +115,21 @@ private: class ResolveWhereClauseItem : public TypeCheckBase { + // pair(a, b) => a: b + TyTy::RegionConstraints ®ion_constraints; + public: - static void Resolve (HIR::WhereClauseItem &item); + static void Resolve (HIR::WhereClauseItem &item, + TyTy::RegionConstraints ®ion_constraints); protected: void visit (HIR::LifetimeWhereClauseItem &item); void visit (HIR::TypeBoundWhereClauseItem &item); private: - ResolveWhereClauseItem () : TypeCheckBase () {} + ResolveWhereClauseItem (TyTy::RegionConstraints ®ion_constraints) + : region_constraints (region_constraints) + {} }; } // namespace Resolver diff --git a/gcc/rust/typecheck/rust-hir-type-check.cc b/gcc/rust/typecheck/rust-hir-type-check.cc index 68d9681485a..2b7868685d4 100644 --- a/gcc/rust/typecheck/rust-hir-type-check.cc +++ b/gcc/rust/typecheck/rust-hir-type-check.cc @@ -189,6 +189,7 @@ TraitItemReference::get_type_from_fn (/*const*/ HIR::TraitItemFunc &fn) const std::vector substitutions = inherited_substitutions; + TyTy::RegionConstraints region_constraints; HIR::TraitFunctionDecl &function = fn.get_decl (); if (function.has_generics ()) { @@ -224,6 +225,13 @@ TraitItemReference::get_type_from_fn (/*const*/ HIR::TraitItemFunc &fn) const } } + if (function.has_where_clause ()) + { + for (auto &where_clause_item : function.get_where_clause ().get_items ()) + ResolveWhereClauseItem::Resolve (*where_clause_item, + region_constraints); + } + TyTy::BaseType *ret_type = nullptr; if (!function.has_return_type ()) ret_type = TyTy::TupleType::get_unit_type (fn.get_mappings ().get_hirid ()); @@ -336,7 +344,8 @@ TraitItemReference::get_type_from_fn (/*const*/ HIR::TraitItemFunc &fn) const : TyTy::FnType::FNTYPE_DEFAULT_FLAGS, ABI::RUST, std::move (params), ret_type, substitutions, TyTy::SubstitutionArgumentMappings::empty ( - context->get_lifetime_resolver ().get_num_bound_regions ())); + context->get_lifetime_resolver ().get_num_bound_regions ()), + region_constraints); context->insert_type (fn.get_mappings (), resolved); return resolved; } diff --git a/gcc/rust/typecheck/rust-tyty-bounds.cc b/gcc/rust/typecheck/rust-tyty-bounds.cc index 066fe4781ed..f37cf50d53c 100644 --- a/gcc/rust/typecheck/rust-tyty-bounds.cc +++ b/gcc/rust/typecheck/rust-tyty-bounds.cc @@ -306,7 +306,7 @@ namespace TyTy { TypeBoundPredicate::TypeBoundPredicate ( const Resolver::TraitReference &trait_reference, BoundPolarity polarity, location_t locus) - : SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()), + : SubstitutionRef ({}, SubstitutionArgumentMappings::empty (), {}), reference (trait_reference.get_mappings ().get_defid ()), locus (locus), error_flag (false), polarity (polarity) { @@ -324,7 +324,7 @@ TypeBoundPredicate::TypeBoundPredicate ( TypeBoundPredicate::TypeBoundPredicate ( DefId reference, std::vector subst, BoundPolarity polarity, location_t locus) - : SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()), + : SubstitutionRef ({}, SubstitutionArgumentMappings::empty (), {}), reference (reference), locus (locus), error_flag (false), polarity (polarity) { @@ -340,13 +340,13 @@ TypeBoundPredicate::TypeBoundPredicate ( } TypeBoundPredicate::TypeBoundPredicate (mark_is_error) - : SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()), + : SubstitutionRef ({}, SubstitutionArgumentMappings::empty (), {}), reference (UNKNOWN_DEFID), locus (UNDEF_LOCATION), error_flag (true), polarity (BoundPolarity::RegularBound) {} TypeBoundPredicate::TypeBoundPredicate (const TypeBoundPredicate &other) - : SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()), + : SubstitutionRef ({}, SubstitutionArgumentMappings::empty (), {}), reference (other.reference), locus (other.locus), error_flag (other.error_flag), polarity (other.polarity) { diff --git a/gcc/rust/typecheck/rust-tyty-subst.cc b/gcc/rust/typecheck/rust-tyty-subst.cc index fcb09d507a8..0a8340e317d 100644 --- a/gcc/rust/typecheck/rust-tyty-subst.cc +++ b/gcc/rust/typecheck/rust-tyty-subst.cc @@ -440,8 +440,9 @@ SubstitutionArgumentMappings::trait_item_mode () const SubstitutionRef::SubstitutionRef ( std::vector substitutions, - SubstitutionArgumentMappings arguments) - : substitutions (substitutions), used_arguments (arguments) + SubstitutionArgumentMappings arguments, RegionConstraints region_constraints) + : substitutions (substitutions), used_arguments (arguments), + region_constraints (region_constraints) {} bool @@ -588,6 +589,12 @@ SubstitutionRef::get_used_arguments () const return used_arguments; } +const RegionConstraints & +SubstitutionRef::get_region_constraints () const +{ + return region_constraints; +} + SubstitutionArgumentMappings SubstitutionRef::get_mappings_from_generic_args ( HIR::GenericArgs &args, const std::vector ®ions) diff --git a/gcc/rust/typecheck/rust-tyty-subst.h b/gcc/rust/typecheck/rust-tyty-subst.h index dbabff3d449..562267cd059 100644 --- a/gcc/rust/typecheck/rust-tyty-subst.h +++ b/gcc/rust/typecheck/rust-tyty-subst.h @@ -30,8 +30,17 @@ namespace Rust { namespace TyTy { -class BaseType; class ParamType; + +struct RegionConstraints +{ + /** 'a: 'b */ + std::vector> region_region; + /** T: 'a */ + std::vector> type_region; +}; + +class BaseType; class SubstitutionArgumentMappings; class SubstitutionParamMapping { @@ -249,7 +258,8 @@ class SubstitutionRef { public: SubstitutionRef (std::vector substitutions, - SubstitutionArgumentMappings arguments); + SubstitutionArgumentMappings arguments, + RegionConstraints region_constraints); bool has_substitutions () const; @@ -404,9 +414,12 @@ public: WARN_UNUSED_RESULT tl::optional get_arg_at (size_t i) const; + const RegionConstraints &get_region_constraints () const; + protected: std::vector substitutions; SubstitutionArgumentMappings used_arguments; + RegionConstraints region_constraints; }; } // namespace TyTy diff --git a/gcc/rust/typecheck/rust-tyty.cc b/gcc/rust/typecheck/rust-tyty.cc index 890d079d67f..a8d358161fc 100644 --- a/gcc/rust/typecheck/rust-tyty.cc +++ b/gcc/rust/typecheck/rust-tyty.cc @@ -596,6 +596,7 @@ BaseType::monomorphized_clone () const fn->get_identifier (), fn->ident, fn->get_flags (), fn->get_abi (), std::move (cloned_params), retty, fn->clone_substs (), fn->get_substitution_arguments (), + fn->get_region_constraints (), fn->get_combined_refs ()); } else if (auto fn = x->try_as ()) @@ -620,6 +621,7 @@ BaseType::monomorphized_clone () const adt->get_adt_kind (), cloned_variants, adt->clone_substs (), adt->get_repr_options (), adt->get_used_arguments (), + adt->get_region_constraints (), adt->get_combined_refs ()); } else @@ -1639,7 +1641,7 @@ ADTType::clone () const return new ADTType (get_ref (), get_ty_ref (), identifier, ident, get_adt_kind (), cloned_variants, clone_substs (), get_repr_options (), used_arguments, - get_combined_refs ()); + get_region_constraints (), get_combined_refs ()); } static bool @@ -1958,7 +1960,8 @@ FnType::clone () const return new FnType (get_ref (), get_ty_ref (), get_id (), get_identifier (), ident, flags, abi, std::move (cloned_params), get_return_type ()->clone (), clone_substs (), - get_substitution_arguments (), get_combined_refs ()); + get_substitution_arguments (), get_region_constraints (), + get_combined_refs ()); } FnType * @@ -3573,11 +3576,13 @@ PlaceholderType::is_equal (const BaseType &other) const ProjectionType::ProjectionType ( HirId ref, BaseType *base, const Resolver::TraitReference *trait, DefId item, std::vector subst_refs, - SubstitutionArgumentMappings generic_arguments, std::set refs) + SubstitutionArgumentMappings generic_arguments, + RegionConstraints region_constraints, std::set refs) : BaseType (ref, ref, KIND, {Resolver::CanonicalPath::create_empty (), BUILTINS_LOCATION}, - refs), - SubstitutionRef (std::move (subst_refs), std::move (generic_arguments)), + std::move (refs)), + SubstitutionRef (std::move (subst_refs), std::move (generic_arguments), + std::move (region_constraints)), base (base), trait (trait), item (item) {} @@ -3585,11 +3590,13 @@ ProjectionType::ProjectionType ( HirId ref, HirId ty_ref, BaseType *base, const Resolver::TraitReference *trait, DefId item, std::vector subst_refs, - SubstitutionArgumentMappings generic_arguments, std::set refs) + SubstitutionArgumentMappings generic_arguments, + RegionConstraints region_constraints, std::set refs) : BaseType (ref, ty_ref, KIND, {Resolver::CanonicalPath::create_empty (), BUILTINS_LOCATION}, refs), - SubstitutionRef (std::move (subst_refs), std::move (generic_arguments)), + SubstitutionRef (std::move (subst_refs), std::move (generic_arguments), + std::move (region_constraints)), base (base), trait (trait), item (item) {} @@ -3640,7 +3647,7 @@ ProjectionType::clone () const { return new ProjectionType (get_ref (), get_ty_ref (), base->clone (), trait, item, clone_substs (), used_arguments, - get_combined_refs ()); + region_constraints, get_combined_refs ()); } ProjectionType * diff --git a/gcc/rust/typecheck/rust-tyty.h b/gcc/rust/typecheck/rust-tyty.h index 7384c402f4e..570a57bff01 100644 --- a/gcc/rust/typecheck/rust-tyty.h +++ b/gcc/rust/typecheck/rust-tyty.h @@ -650,9 +650,11 @@ public: std::vector subst_refs, SubstitutionArgumentMappings generic_arguments = SubstitutionArgumentMappings::error (), + RegionConstraints region_constraints = {}, std::set refs = std::set ()) : BaseType (ref, ref, TypeKind::ADT, ident, refs), - SubstitutionRef (std::move (subst_refs), std::move (generic_arguments)), + SubstitutionRef (std::move (subst_refs), std::move (generic_arguments), + region_constraints), identifier (identifier), variants (variants), adt_kind (adt_kind) {} @@ -661,9 +663,11 @@ public: std::vector subst_refs, SubstitutionArgumentMappings generic_arguments = SubstitutionArgumentMappings::error (), + RegionConstraints region_constraints = {}, std::set refs = std::set ()) : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs), - SubstitutionRef (std::move (subst_refs), std::move (generic_arguments)), + SubstitutionRef (std::move (subst_refs), std::move (generic_arguments), + region_constraints), identifier (identifier), variants (variants), adt_kind (adt_kind) {} @@ -672,9 +676,11 @@ public: std::vector subst_refs, ReprOptions repr, SubstitutionArgumentMappings generic_arguments = SubstitutionArgumentMappings::error (), + RegionConstraints region_constraints = {}, std::set refs = std::set ()) : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs), - SubstitutionRef (std::move (subst_refs), std::move (generic_arguments)), + SubstitutionRef (std::move (subst_refs), std::move (generic_arguments), + region_constraints), identifier (identifier), variants (variants), adt_kind (adt_kind), repr (repr) {} @@ -774,9 +780,11 @@ public: std::vector> params, BaseType *type, std::vector subst_refs, SubstitutionArgumentMappings substitution_argument_mappings, + RegionConstraints region_constraints, std::set refs = std::set ()) : CallableTypeInterface (ref, ref, TypeKind::FNDEF, ident, refs), - SubstitutionRef (std::move (subst_refs), substitution_argument_mappings), + SubstitutionRef (std::move (subst_refs), substitution_argument_mappings, + region_constraints), params (std::move (params)), type (type), flags (flags), identifier (identifier), id (id), abi (abi) { @@ -789,9 +797,11 @@ public: std::vector> params, BaseType *type, std::vector subst_refs, SubstitutionArgumentMappings substitution_argument_mappings, + RegionConstraints region_constraints, std::set refs = std::set ()) : CallableTypeInterface (ref, ty_ref, TypeKind::FNDEF, ident, refs), - SubstitutionRef (std::move (subst_refs), substitution_argument_mappings), + SubstitutionRef (std::move (subst_refs), substitution_argument_mappings, + region_constraints), params (params), type (type), flags (flags), identifier (identifier), id (id), abi (abi) { @@ -962,7 +972,8 @@ public: = std::vector ()) : CallableTypeInterface (ref, ref, TypeKind::CLOSURE, ident, refs), SubstitutionRef (std::move (subst_refs), - SubstitutionArgumentMappings::error ()), + SubstitutionArgumentMappings::error (), + {}), // TODO: check region constraints parameters (parameters), result_type (std::move (result_type)), id (id), captures (captures) { @@ -980,7 +991,7 @@ public: = std::vector ()) : CallableTypeInterface (ref, ty_ref, TypeKind::CLOSURE, ident, refs), SubstitutionRef (std::move (subst_refs), - SubstitutionArgumentMappings::error ()), // TODO + SubstitutionArgumentMappings::error (), {}), // TODO parameters (parameters), result_type (std::move (result_type)), id (id), captures (captures) { @@ -1534,6 +1545,7 @@ public: std::vector subst_refs, SubstitutionArgumentMappings generic_arguments = SubstitutionArgumentMappings::error (), + RegionConstraints region_constraints = {}, std::set refs = std::set ()); ProjectionType (HirId ref, HirId ty_ref, BaseType *base, @@ -1541,6 +1553,7 @@ public: std::vector subst_refs, SubstitutionArgumentMappings generic_arguments = SubstitutionArgumentMappings::error (), + RegionConstraints region_constraints = {}, std::set refs = std::set ()); void accept_vis (TyVisitor &vis) override; From patchwork Wed Feb 7 11:43:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197915 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2203815dyb; Wed, 7 Feb 2024 04:53:18 -0800 (PST) X-Google-Smtp-Source: AGHT+IGV3bherRUzKugSv8Uq6dKPJws+FXhYOzcMrRPLQP+semVELZ4GLihW/jHE8zepW+EqkOC5 X-Received: by 2002:a81:b3c1:0:b0:604:7a6a:9d58 with SMTP id r184-20020a81b3c1000000b006047a6a9d58mr5010796ywh.25.1707310398152; Wed, 07 Feb 2024 04:53:18 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310398; cv=pass; d=google.com; s=arc-20160816; b=VarI7cFQedVTbJtEDAqWVLw3f1hnKvoH7eA3y+ZUzX9ZnOZByGr0gKkTmyFGepLMnf y6CBFvTkTkEwF6IlxiG/J/7QqGKinRWdugdUcPvtafJzLT9CXwl6dFp/3uoppAH7Pu4y GFRiRCVyyjaLXOro0MVf+/B2rsEANjBkInD7kePxGB2B318MhcOLeH/Xf5Nhn1c9Sg1z CGrfOjQNQ8ZNeB+H0iSPeesHqvm2S7ePGPuI864Vv+7vepmhMW/6ei12FHPo6jn6BGco yR/Hvc4GGSn9RCgYjEzmTj6k2D0JKmmf4EzF30B4Vw0BhDLR6DyQIH6rFjrqxfa20mJr jkJw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=HguN8gt8Hn8MrSs8ctd0Pp8v5/mXUgPlaoVv7GT9Cpg=; fh=JVkFzcNNCLMKa6ctXmEIqQBYo4mMQrvtJUz+ufpFhho=; b=oGmSANsh12ve1Dl0w2yL+Fb3W6y1m87R04a166aLKLWjHlFcQp1FTV7+LWedFfT6g4 xnSG0uIGmoA9opqRxe1y/5wignd/n/Ka7x8pgjawNjsNspDLQOHurMvPRhkhQvIE+ruh 6U/JG2nSJS5DflqgQa2iwgguOb8qmTa0b5ONHhV/XS5Kym2CZaIW1OJ85nEJg+1xQqVw zPx5Y44w3UiF5bPx1UOamLMY2QGoD1klIHpmylB6Eu92M0NpsxL7vTdnHrZGrBxCrqFv R8+tn5YjwFGhJvlp2qwXFc6JkWEZ0/gqF6B4322syGApEx5OX/N4mo5vg8QK3HgjED/Z G3rg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=Q8CejH7V; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCUD2t9sytTaFEb9QIrw/KTecvTwayUJ1u185+5G+hOIr1FUgfmd3dhxDYubJQ2iFCsC+guL+Ax/k6dTKV/atAeI/kcfTg== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id o9-20020a05622a138900b0042c42bd45a5si643014qtk.777.2024.02.07.04.53.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:53:18 -0800 (PST) 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=@embecosm.com header.s=google header.b=Q8CejH7V; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CE9E33858036 for ; Wed, 7 Feb 2024 12:53:17 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id DC42438582BD for ; Wed, 7 Feb 2024 12:44:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DC42438582BD Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org DC42438582BD Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309858; cv=none; b=ZLQmVCXgcH2N2mhSP6xXoMdI1jg8YRtcowIvZPJNtI57XshYG3sLB4HzceTn9jEaWGQ8fsfV/OsedVJ9Fu2Uz62Br7gkF9DBCMriZPRBILCi4Q9jXsK1Po4avhRWjrjn0LaTwPOEVKnBykXlIjRIYhJblkktEusqmUfpdzgS94Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309858; c=relaxed/simple; bh=7eCtILJT7fZqPi1Gkx6A5/5xgZNNJfJ5rDiHF9vbf0M=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=XprnC7GImom45hbZ6goF1Z7Aczm67Fq+w6MZ0V49+0mGtkEiQRDBp0wX8fdIBJBNefCprx7M44mJkcC9riBbxjGW71YNHB4SzBl3UK3rvBGt/skDVZi9hBcIr/BBaN3PTXJrkJgm/XznOdDv1cgUe6XEaUJYppbLCHLOITsuEc4= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-410219f18f9so504675e9.1 for ; Wed, 07 Feb 2024 04:44:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309847; x=1707914647; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=HguN8gt8Hn8MrSs8ctd0Pp8v5/mXUgPlaoVv7GT9Cpg=; b=Q8CejH7VCZsviRzodBqnFPfLI4F+ktky5F5hBh8f6JIZmcxHJo0JbnSY1CRBrmGdyk LO2z9HRw+zbXaSXJZ/EwWiKGAgnKfnUE0T/Bq+wcl6mSJN7sx8I6Riq7uxFRRDkvmM/7 UIZym9X9b3kxShpeEXFhi15eCmyAFYcF3KUMFF3bi2Q6pUlBQ3xbKPrUwNMNGLVEuZnu yM0bA+FCnohb0EsKLE0hYnED/52/qGcOgGXilNg6StS6oP3Uscvreu25rKiA3fUd+bRI vSMwxatbxbQtKX0h6DdYVpviv8KuSA65JJtgXTxDARKO9hU66+Gq8lf76Tl9wP5vovQk 20uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309847; x=1707914647; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=HguN8gt8Hn8MrSs8ctd0Pp8v5/mXUgPlaoVv7GT9Cpg=; b=QKIHmz6Cs9haS6EsvDt8fCIul3Ce9dfUcIyNgPtIavLq220XL/OIYgRp6LtsRKH3j3 zM06cKFcaiJByNPbDTps/3zeqbxn5WYzxBHL8l0TWTeanSj+5fvSF3VY6YCWC+Uhc0/S 1jr/8Jh0sqhownaSVk9uSUokKI27wJtoB28R78iN1zhd7ld9hVH9tDSHvabC0gU1+jT7 KycFjFSHgaUit/6zSq+WERbh9A+1OFcFPLDd8NMESADN52FaggJImNj0s6p0sa+KXyIa br0+7OyZVSWTlK3Wg1EOymGU2Zv6KZVpwS8lqnOZX2B57rOuaaFuNABAX44UEHM3DkTN Nd9g== X-Gm-Message-State: AOJu0YxMZa966iRD4bk58nyi2K3SIa4j984Ul1MKMWZcV6MwKdxSKlf3 XnQQ32GdvZcirYnMUZT781jkX/lV7MOwRzIvzP1+VV0ik24JIrcpN7TCHZGb1U3CirZeb0caCrm XrQ== X-Received: by 2002:a05:600c:4fc1:b0:410:ae8:4c2d with SMTP id o1-20020a05600c4fc100b004100ae84c2dmr1462981wmq.3.1707309847449; Wed, 07 Feb 2024 04:44:07 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCWirX5Wndw0FSdTaCBPpVOG/koBOdfsBL1z3XTRXAJGCNPeGDQ21cm1G5hPbI4NFmT7+Ee5t8OqbgHWzcm9t6b9gHU= Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:06 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Jakub Dupak Subject: [COMMITTED 08/25] gccrs: TyTy: Store reference to type before any substitutions Date: Wed, 7 Feb 2024 12:43:54 +0100 Message-ID: <20240207114419.1100894-9-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244707938698904 X-GMAIL-MSGID: 1790244707938698904 From: Jakub Dupak gcc/rust/ChangeLog: * typecheck/rust-tyty.cc (BaseType::BaseType): Store orig ref. (BaseType::get_orig_ref): Add getter. * typecheck/rust-tyty.h: Store orig ref. Signed-off-by: Jakub Dupak --- gcc/rust/typecheck/rust-tyty.cc | 10 ++++++++-- gcc/rust/typecheck/rust-tyty.h | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gcc/rust/typecheck/rust-tyty.cc b/gcc/rust/typecheck/rust-tyty.cc index a8d358161fc..d81311eed6e 100644 --- a/gcc/rust/typecheck/rust-tyty.cc +++ b/gcc/rust/typecheck/rust-tyty.cc @@ -140,14 +140,15 @@ is_primitive_type_kind (TypeKind kind) BaseType::BaseType (HirId ref, HirId ty_ref, TypeKind kind, RustIdent ident, std::set refs) : TypeBoundsMappings ({}), kind (kind), ref (ref), ty_ref (ty_ref), - combined (refs), ident (ident), mappings (Analysis::Mappings::get ()) + orig_ref (ref), combined (refs), ident (ident), + mappings (Analysis::Mappings::get ()) {} BaseType::BaseType (HirId ref, HirId ty_ref, TypeKind kind, RustIdent ident, std::vector specified_bounds, std::set refs) : TypeBoundsMappings (specified_bounds), kind (kind), ref (ref), - ty_ref (ty_ref), combined (refs), ident (ident), + ty_ref (ty_ref), orig_ref (ref), combined (refs), ident (ident), mappings (Analysis::Mappings::get ()) {} @@ -178,6 +179,11 @@ BaseType::set_ty_ref (HirId id) { ty_ref = id; } +HirId +BaseType::get_orig_ref () const +{ + return orig_ref; +} bool BaseType::is_equal (const BaseType &other) const diff --git a/gcc/rust/typecheck/rust-tyty.h b/gcc/rust/typecheck/rust-tyty.h index 570a57bff01..5d4eab42a91 100644 --- a/gcc/rust/typecheck/rust-tyty.h +++ b/gcc/rust/typecheck/rust-tyty.h @@ -99,6 +99,8 @@ public: HirId get_ty_ref () const; void set_ty_ref (HirId id); + HirId get_orig_ref () const; + virtual void accept_vis (TyVisitor &vis) = 0; virtual void accept_vis (TyConstVisitor &vis) const = 0; @@ -243,6 +245,7 @@ protected: TypeKind kind; HirId ref; HirId ty_ref; + const HirId orig_ref; std::set combined; RustIdent ident; From patchwork Wed Feb 7 11:43:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197908 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2202052dyb; Wed, 7 Feb 2024 04:49:57 -0800 (PST) X-Google-Smtp-Source: AGHT+IG2LJTm36anmql6UUd1Xx+BVqdeL2UDQZh6DGq/+eG6MkvXoOWNteIzlFs93fDyaXRWdNxU X-Received: by 2002:a05:6214:258b:b0:681:78cf:3920 with SMTP id fq11-20020a056214258b00b0068178cf3920mr6823549qvb.25.1707310197154; Wed, 07 Feb 2024 04:49:57 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310197; cv=pass; d=google.com; s=arc-20160816; b=hbB0/EOj4tlRLz8p056t5nxz+5VhWRkMOt59ExpaK09gCoo86JT+Vkj9uXFfail1Gj IRf9Q4wgGOpJ1uJ+l9AL8H772IJRsaEg/1R4lStEyRf8DRVjlqfuhX0aSbSeaumZLL1Q JdzZzb4EjGOpZ9oDvbdhSkLilbsWdInzqPVw5ayROb8UOToXVr67QmwOuwo+jucmqjXe WPvj1j5Mh4tqeNDQcdmA962xAF0AE9oJ31IwN/wxie34DDNhX06zH8CEuJ7ml3Jvn3do A8IzVkQW2mnUgZTeN3I3DrWx+2i62h5AslRyiUnFPfhFbGUgrR2eOYNYn3RVbs2nH+mj g8aA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=ItWy1jd9IB0h/7EFl8Y/9+12Ai4pPLPuEY+pHZCzzbQ=; fh=aK4Te3vgCS23IvLV1n+UYbI0fcCMBkMlmTT5pW0079k=; b=yZwU8poIEpECeeWOWBLDjWME1se1UFwL/cLinkpXhK2idopAUCgdmi+kjxYiUFZQY2 XKowhodwGckfqbJM6Msf6tornHNRUIT1U1MUusH0QxJ8t+rUcX5zJ1FDu7jCHc56J1Sz 2SwoyvKz+dd0SWbI4ADPSdp+hCUkLW/aMAlKF1txJpW7aERBVBxQieWStApaPUUuGil1 jYKYPsV8xs0kGo33bRcjSwfLC4m/kTc7iK65xk7pzo7LDq3UEGv9mUVJRfovwPj58A+6 QnU8+oepm1PUhuz3BJlxMqHDwSIR0pWNHM0oTmlOdV1yKnex4ETHKt7knS1OIGgZarmw t+pw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=KG+nONC0; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCWPVBh7N4CzKMmakLwbilQ0fcRA0WoZLOvwsG2739FbujiV32ykVWjfW4AmCjgEjWHG3qFLS3is8WNkMxWbAKfVtRHp/w== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id iy8-20020a0562140f6800b0068cbe717d32si985632qvb.117.2024.02.07.04.49.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:49:57 -0800 (PST) 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=@embecosm.com header.s=google header.b=KG+nONC0; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C4D23385800C for ; Wed, 7 Feb 2024 12:49:56 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by sourceware.org (Postfix) with ESMTPS id 684A33858017 for ; Wed, 7 Feb 2024 12:44:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 684A33858017 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 684A33858017 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::132 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309860; cv=none; b=APm7nQYbRTdm0mfh6ePK1INHR367ZtehHq/oVQqgXu3yXlLXxiDNFdny0I8Q8KbfAUJkVGAPJ3df/HMyi2HiDc+q0ylQlahJqQG7FdCuDkRHsAbwnsVOSztpASnqY2refPJ2KTYcV5zwZbe8M13sdb/c0c4oM8wbdkiPmJGWKgc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309860; c=relaxed/simple; bh=IjkmwbATDhzOZYjeopKGdi6xRRxiNzAT4t4OddsU7MQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=jcXsZDkj7yKLz9HKBqFs/5JhTz6b0phW1WXgNxMpLmmeL6tCgNe129I2NBECwCzjXA5wqUUzwS3jb4FIuoXqq3pfPZS+MANAq8GMCvr6JBeuFy5C8EpB1u6Nf5q9tgxtsD/UmUBzJPEvU8TBuoogKxMGpNLOqfnAgfZXvOHSnI8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-511689cc22aso529857e87.0 for ; Wed, 07 Feb 2024 04:44:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309848; x=1707914648; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=ItWy1jd9IB0h/7EFl8Y/9+12Ai4pPLPuEY+pHZCzzbQ=; b=KG+nONC0g4aHftQBz4pVruYc3jmHFuAFpGrIAluVOCME+/wtoD9RqqN5bmRWrzz38M 9zBM1eYq3+SVVP7IRuZG5yCpxi78Tw4K6E+kSawAptKR5dwa6JzqhK+COegTPooqIv8v j/+lgg5oS/vxkOuojdonSfJoTihlUYOCbOjc+2K9sM9FmG/bXHRN1vXIfbscjeu/eD2t 7XiY4HTcCCJx6PlPdcLPxpH6JJ6g0F2Y9lYRYo5N5zfXRBUi3ZgdYSXNLc7zzSjGJkgw w26FfjOj+Rr+lCJ3f2tWT7SboRDqq+1S8QSxqGfJ19PaBKCRBJAixvXiHdLBl/BTyPqi afIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309848; x=1707914648; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ItWy1jd9IB0h/7EFl8Y/9+12Ai4pPLPuEY+pHZCzzbQ=; b=fwuji0c4NhvvR1Y3+zs5Ta6rBVy1EnWT9xB71n49FnRRzrk4P25N9faCeHqnakqJDM twijGd/sUmhawcGl7Rbwd/LSi/zCobKkL1SH9ojToto94xNBvrTRkbXbYn2ywvy95vLW 8Brs982rI8Ebibcagf6XMcRKtGOFCFvIU1KQSDNy+Gxa+tUHhkAtWbs6ljjP1cDfo+Xt /dldQNSrRsg7G/INBl2q2l9O243w1EsjIgSBKYi775brbdmPRmHTbdmH4jy1Tv0Bc956 NgoQVYkmXs4fN5u9xAKfgw1YjrSHwsCwcbef2hGaZkWNRYgHgwKedJTfzFgAiFA3Ic1d 9fFA== X-Gm-Message-State: AOJu0YxQIMJ3kS9v2Zn19vCiMeTaanqmvDMO5P/iYs3q9yn+A35xpYcF sEuh4Y7NTldLwSDOlbTC0uL6Y+ReJElQmD17oAXm8qhwWZzD3oJTs5ZqUdyWm3TeYvrVJEZArPm 29Q== X-Received: by 2002:a05:6512:33cc:b0:511:522f:12b with SMTP id d12-20020a05651233cc00b00511522f012bmr4893511lfg.14.1707309848180; Wed, 07 Feb 2024 04:44:08 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCVcyqj7GNx9njgZETYgESLwA3jI595XGcFBWITGkQCUTM2svTM/QnNBk1+bzIP2p60kkpsqi0jVyHR+bogvmLMCrqIT Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:07 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Nobel Singh Subject: [COMMITTED 09/25] gccrs: Set the default ABI to C for extern blocks and extern functions Date: Wed, 7 Feb 2024 12:43:55 +0100 Message-ID: <20240207114419.1100894-10-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244497060290041 X-GMAIL-MSGID: 1790244497060290041 From: Nobel Singh Previously, the default ABI was set to Rust, which is not correct for extern blocks and extern functions. This patch changes the default ABI to C for these cases. gcc/rust/ChangeLog: * hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_qualifiers): Change default ABI to C for extern functions (ASTLoweringBase::lower_extern_block): Likewise Signed-off-by: Nobel Singh --- gcc/rust/hir/rust-ast-lower-base.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc index 748cec74829..19f20885209 100644 --- a/gcc/rust/hir/rust-ast-lower-base.cc +++ b/gcc/rust/hir/rust-ast-lower-base.cc @@ -718,8 +718,8 @@ ASTLoweringBase::lower_qualifiers (const AST::FunctionQualifiers &qualifiers) Unsafety unsafety = qualifiers.is_unsafe () ? Unsafety::Unsafe : Unsafety::Normal; bool has_extern = qualifiers.is_extern (); + ABI abi = has_extern ? ABI::C : ABI::RUST; - ABI abi = ABI::RUST; if (qualifiers.has_abi ()) { const std::string &extern_abi = qualifiers.get_extern_abi (); @@ -965,7 +965,7 @@ ASTLoweringBase::lower_extern_block (AST::ExternBlock &extern_block) extern_items.push_back (std::unique_ptr (lowered)); } - ABI abi = ABI::RUST; + ABI abi = ABI::C; if (extern_block.has_abi ()) { const std::string &extern_abi = extern_block.get_abi (); From patchwork Wed Feb 7 11:43:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197912 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2202698dyb; Wed, 7 Feb 2024 04:51:11 -0800 (PST) X-Google-Smtp-Source: AGHT+IHG/5wTgUFK9iRgDsmfQTv92LoR1ukws5ptxIlLtiwlkeHptA6iNnzsAXH1F+g8MREl34Et X-Received: by 2002:a05:620a:165b:b0:785:51a7:3554 with SMTP id c27-20020a05620a165b00b0078551a73554mr5306177qko.1.1707310271434; Wed, 07 Feb 2024 04:51:11 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310271; cv=pass; d=google.com; s=arc-20160816; b=Uc+EQ7A2BAEe1AC+rCysqOfHus7lYqiZEZIL1veNLVGwZAtBcG+XDejS851ScwMsP6 mERZ9wGt9BJRqbEo5KBbkuybV1F9DQrtnd60I07s5PKGLeii2VwrkEw+1eNwP1/5T/4C r6H9iX6JhnCMO46IZZYqMxvZDxFE87PT31krszUpIrmS/keJUAtLc4I9v32O5qPUpm8I Cb4N+7LxLiENTe1mBlvBVPY0Hg6sow2nBiqE8Aswoeyr5dsRHYlyeJdZf4ST90rut5QW 7uDlci9jwLBnbBdrYeRwm1pzz3piFuTNklmsxjO+E6ZxeA0FOk4PZFZgP+LHa9eqbL/0 RYgg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=w4ZJ5TAyupWZDdna310NCKc1jMfHe6CunIGXb7jkSgM=; fh=TCWGDjevoBSubUxZf38nKmObasl1piax6ZHp2Ha7oc0=; b=HGuLeIA0peD6ZZG55SZLkpK6HjT3Rpw181TJ4mGlfMqrEuVd3SG1LDZfaFlYpIFbEN PemyfnsvAyiAlmgAT/PyNraQPBmXE4q1wZXje4VzHbnEpxfCSRQ/JhtioeRsu/VN7P2o teDg4USEMdVCCL7pRfUuKcDgiVYGY8/xgc3/PYs8Njb8SDlcEPVnACT0nbwBaTz5OwFg tyFtVKVwPY3r6kbyU0qHpUeJW9IXwsdjOIeLKDduvYMPoIfvnnFJy0LcvHX2qvHNkJ4/ 6w1/bMzEsAByTdB2OSaDd+2rPnX2Ftc+68vcnV7+Ot0+MMsxVzPySKmCz10P5fqSCutz OQaw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=NyOc6OV2; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCVTF78Ibk0fGoGSe+4P3QFDLAjx54IlMZ4Fhit3GTNUdk4pMvUgG4724mKNvaCJbihlyv8xTeACGbRDtn+xxN8vKG3UaA== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id h20-20020a05620a245400b007840da09c34si1058463qkn.484.2024.02.07.04.51.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:51:11 -0800 (PST) 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=@embecosm.com header.s=google header.b=NyOc6OV2; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1EF5D3857C55 for ; Wed, 7 Feb 2024 12:51:11 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by sourceware.org (Postfix) with ESMTPS id 23DC93858028 for ; Wed, 7 Feb 2024 12:44:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 23DC93858028 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 23DC93858028 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309860; cv=none; b=GFJmD+5Jzon2bK6uwIPnqFMVNXtNoudQaXP5FEYh2mK0b6NEdurGOizEZCy3Ynb563BR4GaHwriulh/6fNZDyGVMKwCtFIcT6yE/qtbXBQklzNEHtkV6fkGL4QbkKcwi5qFpYf9Y05tlCX/DwCzvAUOWxE5h8kpmmeIf9idQjOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309860; c=relaxed/simple; bh=ZTBIyaGtzv76Evl/R1+h6ExxctgarFOyqdXYYSjSijM=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=bA/7OA4sQMx6nIqBOpmC+S+2duKIv5TH5+bDs2nAG/1sUNbVulAb5EGHWR9lPPWOxU5L2MdxVVkOnQw9x6324zQ4eCACVvL3mzOV93uBnz7TIjDgBzPz+sM1cuvdcJaJvS5+f1GWf4NWoTDavqYAXvidlU5KPOs+47oE8pZFvQo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-40fc6343bd2so4867645e9.1 for ; Wed, 07 Feb 2024 04:44:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309849; x=1707914649; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=w4ZJ5TAyupWZDdna310NCKc1jMfHe6CunIGXb7jkSgM=; b=NyOc6OV2oce4y1x9FMolX0YCRYB2xLTa3D1R05hvxqsWzovwtBqKAPyErg0crUzmGa csjzBJlmliH5KssM/y/qIOVImFUPJQU4BvFEJxR5E0YftSXR8tJPiaJngaLjeh/CAerb SaucUbXNO9+yHZYSioUgsaVjUnmFsuAjsWI+1VGxIlfMA/0L8LWenMV1x/GzIkl+hZg/ Rjlgd+IQjJaqDYWn6ns0qlrfCnSXAt4BxxaTPUc85PTeKM/LoYymn9fwzMb5jlNI7+e1 y7KNm+vd/UwxrFrG7duUHmfoyi/m/KjPe2shjNQZhaZrBHcdLgR7XHUJZFr6aaKWO228 NR3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309849; x=1707914649; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=w4ZJ5TAyupWZDdna310NCKc1jMfHe6CunIGXb7jkSgM=; b=D1glaBTmvvsRjvxubWmWg6LxMUrb1yPcw8U5gFL+pGKrZhaDKNSSBaxpcOK8G6cmI+ aCxQSOhC2PxZk0t0QxqhDFapmvs/2HfuJsekzPPMwvInhdP+JlbcUfrMwkETcsVEQ+pH MwcQEPJA8FYOHpsjG0OO1GLcwaYWcpK8kNhatyuHSrEUHsDcqGKpUW8sSlP12EafGMJI qn0CB2iqFVUFUJPfy6XSXakphYyXKEZJ32aMaa59I/kVukQmKzifgv8iVKPqLwtqqATP Ua2Hx6ArQrhVM1t3jgSuwmLN5FSmqrGLyZJ+D+McpDlhw6cGNY9ukheck5lyVUVI/cgn B7rg== X-Gm-Message-State: AOJu0YyODdKvIpoUijU6S9T3rjTjHg0IrX+aK+EG0Nht0YTkz+wZrgBl gVnLf1GV80XrUNIcUWK15TTi7/48M09Ve8Jewb+5JFzMG1nbi3PgIdBqjJy1I/Oyg3Pz08hG+Cq OeQ== X-Received: by 2002:adf:e643:0:b0:33b:1c1e:3e5f with SMTP id b3-20020adfe643000000b0033b1c1e3e5fmr3942745wrn.16.1707309849452; Wed, 07 Feb 2024 04:44:09 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCU9YYGvrUx4SJfvgs1HoSXiR7ZnJAtsWPY5WErEtBeEuHcILeHs0jEu3WnHNDFVFD2QDkF6qchNUCf+A6PbJdnGy6JC49TjmXiFUPub Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:08 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Philip Herron Subject: [COMMITTED 10/25] gccrs: add testcase to prove issue has already been fixed Date: Wed, 7 Feb 2024 12:43:56 +0100 Message-ID: <20240207114419.1100894-11-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244575123633061 X-GMAIL-MSGID: 1790244575123633061 From: Philip Herron Fixes #1483 gcc/testsuite/ChangeLog: * rust/compile/issue-1483.rs: New test. --- gcc/testsuite/rust/compile/issue-1483.rs | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 gcc/testsuite/rust/compile/issue-1483.rs diff --git a/gcc/testsuite/rust/compile/issue-1483.rs b/gcc/testsuite/rust/compile/issue-1483.rs new file mode 100644 index 00000000000..eda7e139283 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-1483.rs @@ -0,0 +1,28 @@ +#[lang = "sized"] +pub trait Sized {} + +#[lang = "fn_once"] +pub trait FnOnce { + #[lang = "fn_once_output"] + type Output; + + extern "rust-call" fn call_once(self, args: Args) -> Self::Output; +} + +pub fn takes_fn_generic i32>(a: i32, f: F) -> i32 { + f(a) +} + +pub fn takes_fn_generic_where(a: i32, f: F) -> i32 +where + F: FnOnce(i32) -> i32, +{ + f(a) +} + +pub fn test() { + let foo = |x: i32| -> i32 { x + 1 }; + + takes_fn_generic(1, foo); + takes_fn_generic_where(2, foo); +} From patchwork Wed Feb 7 11:43:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197902 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2201298dyb; Wed, 7 Feb 2024 04:48:19 -0800 (PST) X-Google-Smtp-Source: AGHT+IFRzdvrEl1WqeUn2/QxdZcsG+4+eH1Fhyne8fQK+W4/dtcA+Dk3EHPK3o0KmeG1QV61+9SQ X-Received: by 2002:a05:6214:21ec:b0:68c:c0ed:1f8d with SMTP id p12-20020a05621421ec00b0068cc0ed1f8dmr781909qvj.55.1707310099366; Wed, 07 Feb 2024 04:48:19 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310099; cv=pass; d=google.com; s=arc-20160816; b=UtmGNavqFpVNFoJpWQ1ogqU9jF5XWZ4oSCZmP9ZRHQnJ4LU42AR+wSSJDt9nFwVg72 u4FzDsmdDT5GJp/02rH3EG4hWel7YH0cXk7AaKAxl/haY59jAFmOI/O07XEUIqnL8qDw YmfdFRYsSctlkrmugODMdFYy8jM9M5tnYHQ7nd7f0iUCoNGl6XKoA7ac+zSsTB5cCzl2 /8FfBEpKbH+E8y7bvGrzC00jRFsTLhv2HqM/6rgm2cYf18xqv2xZv9uBFDZnP4WJ52/N z60OTjOYh++3UrLuhd6Ua5Inn+MWNHjArifF03L4xUOTJj/PMpvpi1u5tEcndSC78Zgi K45g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=fAPA2jXaAtBBCyeKJhiTs0iWXb0gPZdDxfROs6hCzXM=; fh=pjHKXHJzxMmxL8dC0es0k3XEsVKDMP1PhtY55CjU8hs=; b=TeVTDXWy9lkiUu3uO58FFsWqn69PB11Fw6e6N1cfM/bGxc2pg4vhy9QLBJitpcqNNd hALOEi2BCybqwNsdTH8sWbO9kixYj/EB/CHcYvuI+Y6PA6rSptHT+eYvKy944OOHFAWc dNQg4NRiCmKrr/SOQOkmiozMx3q+GwZw7vSj4/9wyQw0T/5U4PZ9B9tKUtDW6c2DMEos 3G/cK3iYaZC5oS15Ti8shC1QJNBcEqCrv1gYN8exgSENQz5YUDvy13oP5PwTdAqrEv4i DfvzwfAmfwi67ynUKA0ar7X6Vnz9Hpp5KGCTcF+h/JjDJbjzc5qWxKJ7WUFy0HG2Alxw FaNg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=SLvNtoRX; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCVShzBfA8rY1gIJAToeqyXvQHj0Z0D94T3wDnpjd5pJ1AK3P3KkGgGROwKTjvje1jHg01n/OCtpqnsa3DcCaRV4CmQRmQ== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id x26-20020ae9e91a000000b007859517410csi995189qkf.479.2024.02.07.04.48.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:48:19 -0800 (PST) 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=@embecosm.com header.s=google header.b=SLvNtoRX; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AA1123857B92 for ; Wed, 7 Feb 2024 12:48:18 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by sourceware.org (Postfix) with ESMTPS id C37833858298 for ; Wed, 7 Feb 2024 12:44:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C37833858298 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C37833858298 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309861; cv=none; b=ifsFmQbFGedqDff+71jZ3OwjtSZyNJIXonqiQ/TrQejTNCPTuOi0PmpAuUqz/s02sBPHswmo3CccN5L4B8e4yzSFow1Or3ZgVSo/i0URG81iEdJZk46K0m8GyrGM6LO4v+vg4P2dOm1HUzsKyaG2bF6maD3/0oOuZvOGWinN6B0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309861; c=relaxed/simple; bh=PTB0kFrKyZTNaohTnzwFoFojbxBB1E7UkeaKHOJ1JxA=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=S2P4J2Nrjn7drlwR/2SFFV2RdPHvxwDer9e4aCu+66NpyCCqeHi0LOdWhZO6YEVgGf7WIvdlBAkWW9cKnOAomerW1AONBsC0cYRV0LEj2mmxX2VO3bATxffugjZ7MpgOwOdgi58LCIQY2qLYDeVh/poc6WdjNQVznd7zR8m+fks= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-5116063585aso646476e87.1 for ; Wed, 07 Feb 2024 04:44:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309850; x=1707914650; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=fAPA2jXaAtBBCyeKJhiTs0iWXb0gPZdDxfROs6hCzXM=; b=SLvNtoRXh9K4xYBdrFq8mvahf0OL/RWLUJLYuoAg201RecOIKqX9kJsK2//ek5Hi/+ 7B+AmepiikJl2Na71wOElotQGq7mmiSRrKW3XjqgDTM4cwZDWgE+s9jqFmCq6ZJnnJwR vgO8y2NUlc59pPsF7Iinwh0IiWHNDihtkJrJbyo87IcbOGLW5JBOQ5VUDxpmhtLz3t5K KnRFNjfVBA6Mt8IZ4KULQ5wzMfIKceRDQgdgfz7UdKQCnl+HzYCxHirk0OT9iwuybPQ8 xBeuGUd3nbXLKqomqNhk7EyFlyO03V9D4U6PySHEwYo2Gn06NotHEv/kw1/VqcI27Xo4 9Cgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309850; x=1707914650; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=fAPA2jXaAtBBCyeKJhiTs0iWXb0gPZdDxfROs6hCzXM=; b=nfDTCXrbQxiz7jbNStuKtmbDKKhBsDDfj3K0Ync+Ag/aDBb3ElusRyAK0x0+HV+F8W YF3D/bD1GUTIfFZaSMAJ/J9xMKHMQMkmjneaScI50AHBMHejS2ElydA+PdNYTIbNPiVP hqu2Mt4Ou2vE93nwqfjwdIw5+GOi/QTapP6dU8mAea5TcpZpdfoQLAEm17Opi0xYwgJC 1BOL9ASky3uKPTDPls16pCXyKypmiFVBcmaqqMXkQCxnjd7qeYwcuDGVPQDxHyMpdC4l KbLQd1wQaRJ1OTm/NhTxQkj1QS35g+eeXzLiPVn18w8lTD2l8IqybtDGQnypG27THPqa kIzg== X-Gm-Message-State: AOJu0Yzmr6WjHxQJzPyoxSQ8karXJs5mQ5umd0rLLFlijHNIqVOtmQjS YbNeTFOEujZslg042q01Yf+OTNnYGttGO7IOBHpluT7cvr2JPHAPY/LiQeGFeQoJl0pA0VEY9MX H/Q== X-Received: by 2002:a05:6512:2392:b0:511:5026:abac with SMTP id c18-20020a056512239200b005115026abacmr4798260lfv.52.1707309849996; Wed, 07 Feb 2024 04:44:09 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCVJGnBYzvECJXz976eroe1G5bQKxDuMw0K3p2GAKvAQY0iC7u2OZ5motByWMHY0tZiKk308NAP9w13hynbN+56F4SK5aPsVjY6ZdYpQ Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:09 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Philip Herron Subject: [COMMITTED 11/25] gccrs: add test cases to prove type inference is working Date: Wed, 7 Feb 2024 12:43:57 +0100 Message-ID: <20240207114419.1100894-12-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244394479684969 X-GMAIL-MSGID: 1790244394479684969 From: Philip Herron Fixes #2772 gcc/testsuite/ChangeLog: * rust/compile/issue-2772-1.rs: New test. * rust/compile/issue-2772-2.rs: New test. --- gcc/testsuite/rust/compile/issue-2772-1.rs | 20 ++++++++++++++++++++ gcc/testsuite/rust/compile/issue-2772-2.rs | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 gcc/testsuite/rust/compile/issue-2772-1.rs create mode 100644 gcc/testsuite/rust/compile/issue-2772-2.rs diff --git a/gcc/testsuite/rust/compile/issue-2772-1.rs b/gcc/testsuite/rust/compile/issue-2772-1.rs new file mode 100644 index 00000000000..69977db0bfb --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2772-1.rs @@ -0,0 +1,20 @@ +// { dg-options "-w" } +#[lang = "sized"] +pub trait Sized {} + +struct Pair<'a, T, U> +where + T: 'a, + U: 'a, +{ + left: T, + right: U, +} + +pub fn test<'a>() { + let a: i32 = 50; + let x = Pair { + left: &&a, + right: &a, + }; +} diff --git a/gcc/testsuite/rust/compile/issue-2772-2.rs b/gcc/testsuite/rust/compile/issue-2772-2.rs new file mode 100644 index 00000000000..b05f2b1dc2b --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2772-2.rs @@ -0,0 +1,20 @@ +// { dg-options "-w" } +#[lang = "sized"] +pub trait Sized {} + +struct Pair<'a, T, U> +where + T: 'a, + U: 'a, +{ + left: T, + right: U, +} + +pub fn test<'a>() { + let a: i32 = 50; + let x = Pair::<&'_ _, &'_ _> { + left: &&a, + right: &a, + }; +} From patchwork Wed Feb 7 11:43:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197900 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2200828dyb; Wed, 7 Feb 2024 04:47:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IHxZAoyoEdEBxLbsmyPwJ29aC+u4UM33ab5Bnjbh5p/FNUNJIzfSWYdJTrrgW3V3lkn9ZgL X-Received: by 2002:ac8:57cd:0:b0:42c:43c7:b25a with SMTP id w13-20020ac857cd000000b0042c43c7b25amr769245qta.22.1707310048856; Wed, 07 Feb 2024 04:47:28 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310048; cv=pass; d=google.com; s=arc-20160816; b=eRtoN1f7nEdX4w4VQ73Fx+P//JV26FiNciFYFAa9niEjqb1LbhWqRgLX0dew576gPK CujaHJGKtYxLF29gi2E3aqBFsWrznhQ3ss6/KFE27jTLM57P5BEOWEZ5k8+uYjpn8Tde m6GWolKFqzv4j3JunYIZpiLYj/hHulfGe6JoDAcInqySeWPn6kIqfjIvW9SZ+bJVR+WA p5KPC4Bmrbsi0u4mXCoCCcDl0GHEHOxRAHvZitXTBsiBOZrKdt7iSM+BSxxOIRklfHnH Jy71nW0f8RIH7jU9BkxyRQpQNSN2Hk8fsvA9wCdOnJqU7TqkUsLb8PM/hxS7w+7CFn5r f7fw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=mziRn53uDQ0kL2FGZgCxuPFqTax5Tj4yVpHHuRBgQOI=; fh=O8lHM31WTC7llNyq8xE84SJj1vnf/s2gHozalGhz99A=; b=pmEKrdsjBZ0czP81Hb31o94FZB9xaZVUJiJHd0TLtmBJmUyynchT0RppakfcVJrpDX iyS2OwPVfZxZV+WbjLQPoCyUrgFpC+8PDn+vNdWAmovpjawxAel3GOEof9spb4jW2WpF UdXDFhQogpnLzlZGfeyFdd8pTQ8hmx0I0w2TB6DNk17g8jtVXhB/ksjkOwoS2vOEFLxf mQYL6IFJ8zZRiqw4sAvImiuvmmwKX4ge01KOkGcERNukuc/XVYD4A3rFykUVP3dRwu7L 42Boi9CuoTtDl7Sf9iZswfcNrwYm56cnrMgNJF51GvlYZypVbB7GU10bSSX0HV5axuxk RSRA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=DK41+OZG; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCWcISlwz42bRKTBciHKIGEd7rvGUQOx95m9OhM6KlR90+kuVAym+iM0gigADW5Vq3wYTNr/z/mH8Z20YQzjDiTUJGmJzA== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id n7-20020ac85a07000000b0042c28be0ebdsi1003035qta.249.2024.02.07.04.47.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:47:28 -0800 (PST) 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=@embecosm.com header.s=google header.b=DK41+OZG; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8CAAB385829A for ; Wed, 7 Feb 2024 12:47:28 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by sourceware.org (Postfix) with ESMTPS id F13203858012 for ; Wed, 7 Feb 2024 12:44:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F13203858012 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F13203858012 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::431 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309861; cv=none; b=mdsv2uDKHgLfzfXhbsC65e0E/1buJ8RJSwfMfDtVkS5t6m69aKHeSjwFATZoNbGLFrdPOEOFVIBN+Md6MB50pPrX0c09HcxururL7HPgKe90nRKfNdrAjoFBYOrHOQvs+A6xEdUYu2BfBZQckPrPhxgRdwEaKQgGUqT0IkpRxwE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309861; c=relaxed/simple; bh=433LSMMt69sVGd61kvw6ZAtRQ/abhWVa1TAERCx76A8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=hsycwWEOoCt3ByazQTf/yu1jV3hNLTKo0L/dALvZP5pqjy/RzjWYK4M8DerWUV1gVmZV7slFxjXfusJX+afp8StTb3Tc49hOLPkAWJUWstGs1fybWn46jBwFhKemVk0jqpgpbCB7t47e69FeF01QXi73UnJRTmMNzR+5QYGq7W0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-33b29b5ea96so346988f8f.0 for ; Wed, 07 Feb 2024 04:44:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309850; x=1707914650; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=mziRn53uDQ0kL2FGZgCxuPFqTax5Tj4yVpHHuRBgQOI=; b=DK41+OZG/zwDKJPhhfiHWTg1rYkItR1LeFSIYXt+CkJ25xm7SUZ0kunegdhy9NfAnk COC6TD3TBfY9T6IHpcFQpFjTzgbnUlzjjm2Q430yiX6zcGekz79PQtisRKYU0yRzRgBU ZGeEfO9MrzaUh77sG0/nCPwKIdgCQrXkITvztdgGxC64aIzgXBl3rr64luGULXrVujF7 ceQjrFoTTDqyOu4348PWbfdt8BGU/U2+TWx1jWbR2UG6O2UEMmCjXb6xsbMcKTUaBeWd NKzZR4oSiGH2X12EyntmYQC5gvMJodLKZwdMlBXSxuHpnCuTMWqLzM+nYsga//OrdPeG LftQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309850; x=1707914650; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=mziRn53uDQ0kL2FGZgCxuPFqTax5Tj4yVpHHuRBgQOI=; b=RfqzaciBBz96v+kFicgYoXxLkrA2ygAtXf0w1b/loqKACOzwiaTphXsuAe/2ifEyuV XTRxFI/F9tIgH/74xf1pIGK5H3cilUEiLf2dgBTF4kpUkd3Ag1W5nq/+kNFxinWIZDlS ovZSjVRWGo4F7fJPwgp32MwYI/YFjIO3Vd5b8v9FVu2Bh+iocZsAJueuPa6bbVDNfHm4 pMEhUtsAluCA+OLq/UmocOmGmJc5A846zYZPG+cYxvxUMCJ+VGyFFgkKE/DXvAuOc9hW 4Iu8Gl/a39lXe2XhaTpALylU2MT8ooHXfA8/G7bfP9dm5pASbpRlcPhGe+kY2Mtyg/u3 oZnA== X-Gm-Message-State: AOJu0YzdZ4UEBVUvKnCJeIElSWdjCsGnZ0EalTLmRda+7BKOREteJ0y1 58x1Ki/rQKigOgGGBREGZasrtKW4slohRP1RtRxIKbSGIZv0F+EDkQxF1DIVAGpnxAbQhFYL9SK FDA== X-Received: by 2002:a5d:6da2:0:b0:33b:48ef:2df9 with SMTP id u2-20020a5d6da2000000b0033b48ef2df9mr3963706wrs.24.1707309850500; Wed, 07 Feb 2024 04:44:10 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCVZl2vEJW4pOS5Mrjk13fwtwt+RIhD0ggSSHLGrbG/cQTLCG8pw6VnIpvDy1KsWj/KQ8Zjs85EcRx8WgK9UYLiHWKq3G6pwnuiAmA1o Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:10 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Philip Herron Subject: [COMMITTED 12/25] gccrs: Fix ICE accessing empty vector without check Date: Wed, 7 Feb 2024 12:43:58 +0100 Message-ID: <20240207114419.1100894-13-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244342189297167 X-GMAIL-MSGID: 1790244342189297167 From: Philip Herron Fixes #2747 gcc/rust/ChangeLog: * typecheck/rust-tyty-subst.cc (SubstitutionRef::get_mappings_from_generic_args): fix gcc/testsuite/ChangeLog: * rust/compile/issue-2747.rs: New test. --- gcc/rust/typecheck/rust-tyty-subst.cc | 3 ++- gcc/testsuite/rust/compile/issue-2747.rs | 31 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/rust/compile/issue-2747.rs diff --git a/gcc/rust/typecheck/rust-tyty-subst.cc b/gcc/rust/typecheck/rust-tyty-subst.cc index 0a8340e317d..5a753566d48 100644 --- a/gcc/rust/typecheck/rust-tyty-subst.cc +++ b/gcc/rust/typecheck/rust-tyty-subst.cc @@ -660,7 +660,8 @@ SubstitutionRef::get_mappings_from_generic_args ( if (args.get_type_args ().size () + offs > substitutions.size ()) { rich_location r (line_table, args.get_locus ()); - r.add_range (substitutions.front ().get_param_locus ()); + if (!substitutions.empty ()) + r.add_range (substitutions.front ().get_param_locus ()); rust_error_at ( r, diff --git a/gcc/testsuite/rust/compile/issue-2747.rs b/gcc/testsuite/rust/compile/issue-2747.rs new file mode 100644 index 00000000000..a9c09e7372f --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2747.rs @@ -0,0 +1,31 @@ +#[lang = "sized"] +pub trait Sized {} + +#[lang = "fn_once"] +pub trait FnOnce { + #[lang = "fn_once_output"] + type Output; + + extern "rust-call" fn call_once(self, args: Args) -> Self::Output; +} + +struct Foo<'a, 'b: 'a> { + x: &'a i32, + y: &'a i32, + a: &'b i32, + q: &'a [&'b i32], +} + +pub fn test<'x, 'y>(f: Foo<'x, 'y, ()>) { + // { dg-error "generic item takes at most 0 type arguments but 1 were supplied" "" { target *-*-* } .-1 } + let x = 5; + let y = 6; + let z = 7; + type F<'a, 'b> = fn(&'a i32, &'b i32) -> i32; + let f = Foo { + x: &x, + y: &y, + a: &z, + q: &[&x, &y], + }; +} From patchwork Wed Feb 7 11:43:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197914 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2203381dyb; Wed, 7 Feb 2024 04:52:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IHqH76r0D4/NVjjYyDQvYFephCJ1YMoYXPsONTf7tea0yirZbEhTfQSVM4Bm3k/XrlKkH4c X-Received: by 2002:ac8:1009:0:b0:42c:1647:a72e with SMTP id z9-20020ac81009000000b0042c1647a72emr8936045qti.13.1707310348895; Wed, 07 Feb 2024 04:52:28 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310348; cv=pass; d=google.com; s=arc-20160816; b=IIcz5ppJPcpiAXqX7mxmX65MJ/VYSR4oNOD4ioprVfmx2BIN24JeHZy2Nv8fU9edfS XX80HULDZTO7bNQnow/s7CmHK4f0TshroNGwlRgOakjDdjX13icgCFPkJ3YN4kiMmbPq qQouc+X0V50fJRDpcc9/lukx0wC5AdPYyHajaFqybQQfK5b3eommuvy8ND3MxhWFL9Cw lAKFaeV4JrLjzx+pSumuSM92JEg8JVgW7n41ZIbQyB/OoVBNdCQQJPlywyCD0xVmIZ8U cHh7FUiMF9jvv7Vzla4ng2Y8lLFdfvbc0S/vNK9wP4rlr1d1m5ZSeG4NZim427ti0R8R h9Lg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=1VaMcE7SqiNjtUm3iu40jRyrL8r2UnOfTDlLeMlydGs=; fh=Nu0YK4XNtu63A7+fsz7qkbj5MzeJrs6V0YCrzxsstFk=; b=ONctIwSZBajZxZnUgQMihkTNzehSDqBXnzv1w8uZg7f4TxHSV5gK1ML03TDDolIBhQ NuoY19NmYawE5FF2OLwrqe6Yl4t8p6vuKWbFffz6w7SiC/6U/6S9/Rvfa6wRPrS93JhB xECzVgTd8aHZYSHHgsrVTxEWmILugZjTODlShuJ9vnjZXgx7H9rXE9cRp/FFzP45AcOw BxD4krtxUmJRI9WiGRqIl8IMYt3+rx+S7yVeHAQCVbGHT0axeNZE9CV+oEyprg5iASLE BpkKjnzr3X6d2UJrSn7GSjyUKowP3mdCXt/wHOCEDYwAJxqUTpDCCPS/e0AYKC19/dul xT6w==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b="foB2jZ/I"; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCXOWL+nH6osKU2hH04lMExay/FQnjA4UL9OgVWAe6vvmMSYVXrOHKMqqGnGVqg6V3RqEJwgB4zIHI/DvXb3mcdXsfgf9A== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id g12-20020ac87f4c000000b0042bf9849fc8si1056228qtk.31.2024.02.07.04.52.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:52:28 -0800 (PST) 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=@embecosm.com header.s=google header.b="foB2jZ/I"; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8F9AF3858014 for ; Wed, 7 Feb 2024 12:52:28 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by sourceware.org (Postfix) with ESMTPS id 2B545385801E for ; Wed, 7 Feb 2024 12:44:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2B545385801E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2B545385801E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::336 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309862; cv=none; b=ELV3Ti6ZiM6TX4wKN4+YYkbOwF8WcN+FBQTBTacDLiH70NIJc6zaD4VOKQiCZbJO8IjcDrYXneqhJhci8KtusV90dsoWU744avrkW/ARInJLopSiCa/KQNzkK32vYc1X2iCLrPaYFY+QZ79scY0XbAV2WFKSJkK6EKccLXkkycM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309862; c=relaxed/simple; bh=iJaoCpnTCG/6GFIMzmFmvDuOgYAM7DqOAbE2fykEmoI=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=P7NtC8acHs3WmpHRmsfpKGrmMFw6hoMy2fZWqHE1z4/GzA4JZ8j0J9Nv48CgS46lbVCMqX+k9B3QYdAQX4pgyoPTQQXRo04xcK4NxruqKeBeFmiRVXQKgvMJY/AYZTyiToRjGYR2tTlNxugFpDIf3RGW97cYbHzTPSs5DsAg2Cc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-40fdc63f4feso5091425e9.3 for ; Wed, 07 Feb 2024 04:44:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309851; x=1707914651; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=1VaMcE7SqiNjtUm3iu40jRyrL8r2UnOfTDlLeMlydGs=; b=foB2jZ/IQF/dUxNDp/cA2BBH60THdS5VT0lIjFEv83SBEuX4GyEK89Tt7Dym5UzIR9 T8FJ91wpmHT7UtOlJ2yBZuu4564VWne1C252yc/LoF0WWuObzpBtBN0RFAflioIVFyPJ /0AzPoh8QsXeI4Lao4OrTUJ3tX+GOPIAAGOoGNH1Qob0Ni3ppv9P6uAP3itm2nbh2x36 JRhjRJBPUEjgCk0EG/zDlEbVG4CJZWIVD8uyuXInM3ZQ5i41T3cEGwOjUr7vP9Qo0qQ4 qhf0udSwsdYbbNfD7gtXwvjZnKXmm03oyZI1BURAC/ERFRgZOi773Gek71qWeHviGcii RvTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309851; x=1707914651; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=1VaMcE7SqiNjtUm3iu40jRyrL8r2UnOfTDlLeMlydGs=; b=RElj+hgYdVPa9UTKdjKwEX20N/c1JLVP+ka2BIvEqjyTyCgjGThIYWp9xkAU9hcf2+ 275redUmH0UxoS4xbRn4FfSQi8X4QAw8saH7/pn1v5ONE+ZNlREaenApxN2q02ZDhqOA dprm2wIhlP2JD85ahbek39UIayqxZ3McIrH6IQ/dyIhQwu8MmAsqkaYT6gSdQfB4m2JV e5ZtTbUohOUmhG+on6RdTjEhfbBUTUI8WqV9GHADFCJ99R1ldMIgJPz5xsll2F6lftN8 PKMSQsGMfP8GRt2kSIegtfHy9edTuVJq5MYex5qoiCwEtBBLE1zqOXfVEvC61DFqqemt FeCA== X-Gm-Message-State: AOJu0YxAHqCnj+9HYHiiDJgEMlxaceON/tqVzWVdStMmII9OOoZHTTMC J+1bj19hRcY8MKQB73Xf9q1MddAsDSX1IbZd1IgLyjX03OdNTDUKOEo+dfxPcsX5XGu4JzbUzVd S9w== X-Received: by 2002:a05:600c:3c82:b0:40e:d30b:6129 with SMTP id bg2-20020a05600c3c8200b0040ed30b6129mr4647880wmb.13.1707309851233; Wed, 07 Feb 2024 04:44:11 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCWuPugJ/3z8ynVwvtAwWtq57btxUfuKFtF/PzgwN8BrkdxHyYU3Y4p/A7yZs9fWJd4/mN4qNyUKrnf64i56QPdC0D2BBERqoFHnE0X+ Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:10 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Philip Herron Subject: [COMMITTED 13/25] gccrs: remove old generics hack to reuse generic symbols from previous seg Date: Wed, 7 Feb 2024 12:43:59 +0100 Message-ID: <20240207114419.1100894-14-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244656421453159 X-GMAIL-MSGID: 1790244656421453159 From: Philip Herron This patch introduces one regression because generics are getting better understood over time. The code here used to apply generics with the same symbol from previous segments which was a bit of a hack with out limited inference variable support. The regression looks like it will be related to another issue which needs to default integer inference variables much more aggresivly to default integer. Fixes #2723 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::resolve_segments): remove hack gcc/testsuite/ChangeLog: * rust/compile/issue-1773.rs: Moved to... * rust/compile/issue-1773.rs.bak: ...here. * rust/compile/issue-2723-1.rs: New test. * rust/compile/issue-2723-2.rs: New test. --- .../typecheck/rust-hir-type-check-path.cc | 21 ++----------------- .../{issue-1773.rs => issue-1773.rs.bak} | 0 gcc/testsuite/rust/compile/issue-2723-1.rs | 14 +++++++++++++ gcc/testsuite/rust/compile/issue-2723-2.rs | 14 +++++++++++++ 4 files changed, 30 insertions(+), 19 deletions(-) rename gcc/testsuite/rust/compile/{issue-1773.rs => issue-1773.rs.bak} (100%) create mode 100644 gcc/testsuite/rust/compile/issue-2723-1.rs create mode 100644 gcc/testsuite/rust/compile/issue-2723-2.rs diff --git a/gcc/rust/typecheck/rust-hir-type-check-path.cc b/gcc/rust/typecheck/rust-hir-type-check-path.cc index ea7d8422980..ad31fb74a80 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-path.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-path.cc @@ -456,27 +456,10 @@ TypeCheckExpr::resolve_segments (NodeId root_resolved_node_id, } } - if (tyseg->needs_generic_substitutions ()) - { - if (!prev_segment->needs_generic_substitutions ()) - { - auto used_args_in_prev_segment - = GetUsedSubstArgs::From (prev_segment); - - if (!used_args_in_prev_segment.is_error ()) - { - if (SubstMapperInternal::mappings_are_bound ( - tyseg, used_args_in_prev_segment)) - { - tyseg = SubstMapperInternal::Resolve ( - tyseg, used_args_in_prev_segment); - } - } - } - } - if (seg.has_generic_args ()) { + rust_debug_loc (seg.get_locus (), "applying segment generics: %s", + tyseg->as_string ().c_str ()); tyseg = SubstMapper::Resolve (tyseg, expr_locus, &seg.get_generic_args (), context->regions_from_generic_args ( diff --git a/gcc/testsuite/rust/compile/issue-1773.rs b/gcc/testsuite/rust/compile/issue-1773.rs.bak similarity index 100% rename from gcc/testsuite/rust/compile/issue-1773.rs rename to gcc/testsuite/rust/compile/issue-1773.rs.bak diff --git a/gcc/testsuite/rust/compile/issue-2723-1.rs b/gcc/testsuite/rust/compile/issue-2723-1.rs new file mode 100644 index 00000000000..261956de42e --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2723-1.rs @@ -0,0 +1,14 @@ +#[lang = "sized"] +pub trait Sized {} + +struct S(T); + +impl S { + fn f(t: S) -> S { + t + } +} + +pub fn main() { + S::::f::(0); +} diff --git a/gcc/testsuite/rust/compile/issue-2723-2.rs b/gcc/testsuite/rust/compile/issue-2723-2.rs new file mode 100644 index 00000000000..c7609d1e14d --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2723-2.rs @@ -0,0 +1,14 @@ +#[lang = "sized"] +pub trait Sized {} + +struct S(T1, T2); + +impl S { + fn f(t: S) -> S { + t + } +} + +pub fn main() { + S::::f::(0); +} From patchwork Wed Feb 7 11:44:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197916 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2203986dyb; Wed, 7 Feb 2024 04:53:38 -0800 (PST) X-Google-Smtp-Source: AGHT+IFF0BLI3PE9/uv1Tc+7efxvDCMcF9rvXKSP6bqs+nYxmguYrZai8joWPRHFoWBXha8EjMcW X-Received: by 2002:a0c:d983:0:b0:686:aa78:df4d with SMTP id y3-20020a0cd983000000b00686aa78df4dmr5551950qvj.53.1707310418403; Wed, 07 Feb 2024 04:53:38 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310418; cv=pass; d=google.com; s=arc-20160816; b=OiUZtOAADQAKRcHRLaqypz6Sa+TEa2sExLN3/y+y3GatQCSJpS3dQqZ4TgB0OJ6jn8 LQAE7RP0fBJTmaoAQ91uUxgEQ6+hTUHeLrTp356IkDXh1qtephxrEbUeEzXcNcxpy7YW 9mYqd4z9Wta15dzIcQkETnvAoVT23d+6sSNEyQUNhV693GhpUEh2uRvuuFHlzM1DrFw2 yG0XpxdCtT/TkYXFYUBmcMBliVIhE2cIgllLqWQzfFZCzZHZaIToSLPDbrQJFKiDOn1V dKe0BXlNBM1cTHIIthQCBh5DyepWl1TuSh6wBYK8a6X6zGwK7X2nxjWR3tyYhKHfcF5d Yc+g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=QpFcSii0x7VBtidrQYPvIjRrzKOg4eZf6x+G1FDSSMg=; fh=PiZsKU6qjwf85HElx96tnKfaep8lnG5TDQs9sDRNwek=; b=zRbGddMWAMz0eQ978+n1iCWoGrdgfZLMn68+1UMACyhr6jkr/cPO1rQrliwzVn/hfs /4k48Mh+q8UOPPi6Ylt3oOVUnSAY71+bKKHSCAxTfmm1XiU9joW0d5FGE7/KG7uLceGb oeaDychXDz32jOoJiH2psLXVoF1E8tDujRfo6vgaV4k9fAtP2bIbCO4zfZfQZHB4uTeU e95382ZSy5S9LPqol5NZButGUcbjnMdQfzSEOf2PvLCePlFfPshmAdOdaAto8VJfP41i Cd/7OOX3w00T6EzwkFNWemFbhB3Mb/9vvbia15KRBK0P5JBz3Qt0+Xu4K5IcI/+MV81K zvdA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=LwJsNX9D; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCWDGhghoVP04cO9TGTAtRa+YI92kOwvo1rHZ72LXOwXxlgfFiQYRLlwcmrTwgrTBM8jG8nbwPDm1+GEskmLRUYHeTu9ow== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id gm2-20020a056214268200b0068cbd67d34bsi1106982qvb.67.2024.02.07.04.53.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:53:38 -0800 (PST) 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=@embecosm.com header.s=google header.b=LwJsNX9D; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 131053857BA3 for ; Wed, 7 Feb 2024 12:53:38 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) by sourceware.org (Postfix) with ESMTPS id D152138582AE for ; Wed, 7 Feb 2024 12:44:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D152138582AE Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D152138582AE Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::331 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309862; cv=none; b=FtG3PsLSBpm71N4FPyKoU2ptAQlH4GPLTeUnrBZNepqupKmnasHVC+AqQoE+Txawf3GRKZ8gbvCZ9q4LtH1w+QHCUm38Y0VFdDA5Tlr3ls/vr0DXIpx3aW+5e1Hi/fJ5Xb8Gk0VBai6L2hB1d3HjRm655OP2/VYzDSbVY+fqKV8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309862; c=relaxed/simple; bh=Y87feO7Zvpa7AUiPI0qkgfuC+NuJFL9HNIDC2zR4W4s=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=gKhgIB5ZpNlMF58h4TEDpf5mrzPZwcKTKkBWNPetM/GvcY5qM9PkNzLi96Ksc6SrBd/0RFZxhTkP3OZW/rLQQm2Y/PZP9c59F9lRAU7rS92INyl7A8B88X0yf4teW33YaSMKj4GwzqOp0qdy/U+c1b0d1DIEQFwseRahZDPNjbo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-4101fc00832so1131685e9.3 for ; Wed, 07 Feb 2024 04:44:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309852; x=1707914652; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=QpFcSii0x7VBtidrQYPvIjRrzKOg4eZf6x+G1FDSSMg=; b=LwJsNX9DpnEgX3ppAaoIARe++YJ1TEJETgYRCbiOfymGFMea8SLhrf0OYtCQindCNR AQu4twcSnddbht4YhvzPzhxKaPoXnoRIV98ufIGt0QBQXdi601Wv4mZT55YAhKlVIvH7 CQtBhDMm9hDtEAqvw7gpSoJdK99lNdsj+xccdgID7UnzlUJm0XNJDVpk8luQqTxV1vjD 6J3lrN4xSnTm6qttyEWqx+ey99AnRXE+NZI2KLAr8S5DY219osXsN5G7QS53b7JSSmSw Hb0+0BDd7EabXBXLUnk7XOOds3NpE7c/PFLoNhQQYGV/OhglixxPufri896v726crJVl ax4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309852; x=1707914652; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=QpFcSii0x7VBtidrQYPvIjRrzKOg4eZf6x+G1FDSSMg=; b=Nf94/eXYitD1771s+cTlCU9/OS2W8sxdBdbvJ1Fc97pQv+1CeLL+V22BNxJ9FKyVTS D6aNZqsRuWqBc7zyXp6cq7X3ppCe5Gu1G77n0QSmKio0srlA25q1Goe9TUfBrDUBnojT OVzyDKq+Ucaf4rlvI7+WgEky3sBrqZyA1JZ+VD+qwGKGf/TSd/YJIJ+asfdp+zPcZSa+ pV6QCa/JbEPeopTC2hhTresywKXJ/mgNdn3DMs/qcTllRSaZr0Pwf3PbYIEQu8QZnlx3 ls/jMvH3wcG7jvKO5LXxIcliZErwINli7uNuvlFSWLLWMqNbnvX7coovfqu05gpBv/LI oT5g== X-Gm-Message-State: AOJu0Yxqznpu+URVDsBsv1aKcKeC+naDSUlpdH4m2hUVqPSOx2275Ol4 MynLBlotxxSAkhb73f1Vlq06/SI6ccrmAKc149qlLbvqHBcx0cHmlc2ERGVya9o7XOIbxGKQef2 A2g== X-Received: by 2002:a05:600c:4588:b0:40e:cdff:8d10 with SMTP id r8-20020a05600c458800b0040ecdff8d10mr4390597wmo.6.1707309852486; Wed, 07 Feb 2024 04:44:12 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCU5kHd01Wi091T0IEGgrk3IoDtmbPTzhQKqDie+5ROP3NI45xZBQKptqZwS216CDAxu+Rwwze7cfuyTkJNGln45ot4BBrj5xytJ9yFU Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:11 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Philip Herron Subject: [COMMITTED 14/25] gccrs: remove similar hack in type paths as we had in path expressions Date: Wed, 7 Feb 2024 12:44:00 +0100 Message-ID: <20240207114419.1100894-15-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244729091934976 X-GMAIL-MSGID: 1790244729091934976 From: Philip Herron This keeps the resolution code in line with paths. Addresses #2723 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-type.cc: remove hack --- gcc/rust/typecheck/rust-hir-type-check-type.cc | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.cc b/gcc/rust/typecheck/rust-hir-type-check-type.cc index 0d108c3959c..74a12c4b011 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-type.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-type.cc @@ -572,22 +572,6 @@ TypeCheckType::resolve_segments ( } context->insert_receiver (expr_mappings.get_hirid (), prev_segment); - if (tyseg->needs_generic_substitutions ()) - { - // location_t locus = segments.back ()->get_locus (); - if (!prev_segment->needs_generic_substitutions ()) - { - auto used_args_in_prev_segment - = GetUsedSubstArgs::From (prev_segment); - if (!used_args_in_prev_segment.is_error ()) - tyseg - = SubstMapperInternal::Resolve (tyseg, used_args_in_prev_segment); - } - - if (tyseg->get_kind () == TyTy::TypeKind::ERROR) - return new TyTy::ErrorType (expr_id); - } - rust_assert (resolved_node_id != UNKNOWN_NODEID); // lookup if the name resolver was able to canonically resolve this or not From patchwork Wed Feb 7 11:44:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197905 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2201698dyb; Wed, 7 Feb 2024 04:49:06 -0800 (PST) X-Google-Smtp-Source: AGHT+IECf2/sIKBLBnTQ/W0bpiO4ZQ28FLo2ztTYMRXtT4keHAcb2+9xS+ETkHV8IFge3vvIU0nA X-Received: by 2002:ac8:7ca9:0:b0:42b:f020:f36e with SMTP id z9-20020ac87ca9000000b0042bf020f36emr4848862qtv.59.1707310146547; Wed, 07 Feb 2024 04:49:06 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310146; cv=pass; d=google.com; s=arc-20160816; b=MA5kmMyaOH4ZDOlYHc4qKPsftAnd5yv1QF7T39J4J1ViG3MPrgfTf4t3pOqYYoPZV3 FLqvk0YoBAt8FoQ4vbhDh6LxRej0aMZUlmfBrAPv8/0M1T2hEmsLJAFwADGCviWkKiQ4 dhjgtq13lkaqnPbtlRIzkzIkfDlFyMvY40o3QkcK7D/u+Inw/n1wCMcpc9Sh5OPKdDQZ VSNp/l5EFjnQBZfQbpJWCQOs9Vm7ZeK0emVFTPH+X04gHhWV8mbxwSXWnWqkLRgsx3AN 3+iWR93mDJ1zKGbu/ufWLWsPY8Qb0iMXSRm/X4QKVpuyPCRq1JAzldJawwKZhuCDnp26 Xx2g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=JTPWczjXRLl4YXHpDiGew11D6mj2E3TIj9ZOPf8yTgE=; fh=FNr0QHaBmd2rKmzzNsatqni7VHieZ2qy/fxK3mVGFQ0=; b=lyTG6AWBbj3LynMrXZJm41xuHIJA0jP2+NuBjsiL6yT8vV4crRgjhxf0UHOsxzhzWl mBIdTC0G8F6n/NT+BaCFMS0IDQejVmWf27u8ohrAuTs9t6ijzPVH//in2TJbewS1SKfj CQXlc95uJMCWCzZEpfgpGj4TjdhUH0qZixZU7gFiB6L8KXaxholt+1nmsJ0+QJtMSwIZ eWAIrn692TWEkWWgC6nBdnEq06vIwZ92qtVT47j2X3UwfG23SUHRF6O8/mg0Px052DEh JKWd8t7UhhAYj40NPhDa/0L5iPMwlpX5INKNbRa44aZim9Da41rGW7z2KQL0w7eLvdKF J9ew==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=FuUa0Ksf; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCXYgyFVH8CyQ9qSKw5sTZsfC0rjzKgoOXz61jqs3yqdBGXRndB8XzEj4Tknc/IihSAwqgXPtrEfHKrnyEiMeusluADtiA== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id u21-20020a05622a199500b0042c44923b31si326146qtc.597.2024.02.07.04.49.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:49:06 -0800 (PST) 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=@embecosm.com header.s=google header.b=FuUa0Ksf; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F18D63857C7C for ; Wed, 7 Feb 2024 12:49:05 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id 197BE385841D for ; Wed, 7 Feb 2024 12:44:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 197BE385841D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 197BE385841D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309864; cv=none; b=G/BZ7e9+W4BwrSsVRh/+mPgoPSLG/rIf1DrxbQ71lIkFaWZUr/6uQ8/gkOkF7fgzZSzXg5Bdooh6bLithSrIZXivpWZAwJb0Amd8AK8F6w+E7FYSQphg7uZG/pflJQsAnrsU6VngtvMiYqm4yzpiiUKk+fOwByKD0xjoZddtbSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309864; c=relaxed/simple; bh=ppmQGMf5cSqwXh8+CjzRQKocSVijK0/FRHgD/uQ02C4=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Cbq2IkVA1CH66eCk8X/xlfuvn9ANq+4BCyl7gyRCS7umFlL2/fgTkdwPy0ls2XY+dIVoB9XP3Xo49yxvXcBiUd7cl7PTMYKkqWMGx4kQl5K7to0rVXw4QGcW6wt4UlpW4XftiDofUqILI8oBMh+yjeLekmRC5eXmKBJlQBviBOQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40fe3141e1cso5520625e9.0 for ; Wed, 07 Feb 2024 04:44:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309853; x=1707914653; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=JTPWczjXRLl4YXHpDiGew11D6mj2E3TIj9ZOPf8yTgE=; b=FuUa0Ksfze9DyxLeiE9FZKCad9jk0md0BwVUzll/q0pl7RnzZdtOjOuLu3qibrns4V py9VayR6SJZ5//jC5lWoIgkbu+gOKxrxdBHcIo+N21InAUJIMWIXIkqW6TLzGTXp7EFP 8NqnuGRrmt1MSUBoh88CQX3Bpgoh5U+8FqwzbrXU0Z7f7iYTsv9fC0qG5XZQaoV2LfLO 7bJm/84wAPsgX0I/NtkjxUBo0gRSJByUhdDfm6RZjaIla/JjDSBx03dCcZUULk+aiVbS YKKsrFVVKxFQyVsdpa1n+GGfOgVnk4WR5WQEFGMrx2tgTMjkJ1ZU9BHKtoI47Q3wT6wx v/1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309853; x=1707914653; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=JTPWczjXRLl4YXHpDiGew11D6mj2E3TIj9ZOPf8yTgE=; b=FsmcNgaK+hoNTASC05joN7mGMY7NlJ311qsIm7pSLEtNnYMUg5yykEEGvXMPlNd8Sp Zqs29Cd8wFDQ86N2Et+jNtfzYm3pOyTqM3taG0MO27AJ3hn8usQLAOU04/nvQmmD14Oz drgYWCkmdo/74FVuekWDriz1YUFniI8fqoDCs4cgr+ZtND1TFH1s46ESVw2m2/OBt4BN s3xgRI5ojQjghdiGR6MJahZIDmTaLLXNQmmJNwkc1ehORHUr31+y9eb2RY/ETOH4GlEH 11w+RaH/XATFMKSPoIpIWtzS1J8FRBB9Mbg4zIayXeO5fX6oJFFZ8Gge80k+j850FyMf AuZQ== X-Gm-Message-State: AOJu0Yzxx48AVJ4be3R8GXu9uILrfkp3ADasApcckNC/xHUKTm9iGlqH 4TwHgdAfhQKmlCwNHW/A9CM+JNEZL3Za/27iYyHaT6nZY36Ce9gjwozxru6R+8HwEyKgUYtDkxe lNw== X-Received: by 2002:a05:600c:a39c:b0:40f:b283:bb00 with SMTP id hn28-20020a05600ca39c00b0040fb283bb00mr3887786wmb.18.1707309853174; Wed, 07 Feb 2024 04:44:13 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCXqxTdA9p3SyW8f5HdJKNd9y5NVIDqVnVbmGzUssTCk0zc0+2x/47oS5pjRGtw4KuLpaB5pzlURBp/ihRLfcsjO992HExrfTk/qcDjf Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:12 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Philip Herron Subject: [COMMITTED 15/25] gccrs: refactor inference variable computation into a seperate method Date: Wed, 7 Feb 2024 12:44:01 +0100 Message-ID: <20240207114419.1100894-16-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244443914708236 X-GMAIL-MSGID: 1790244443914708236 From: Philip Herron gcc/rust/ChangeLog: * typecheck/rust-hir-type-check.cc (TypeResolution::Resolve): refactor * typecheck/rust-hir-type-check.h: new prototype * typecheck/rust-typecheck-context.cc (TypeCheckContext::compute_inference_variables): x --- gcc/rust/typecheck/rust-hir-type-check.cc | 34 +--------------- gcc/rust/typecheck/rust-hir-type-check.h | 2 + gcc/rust/typecheck/rust-typecheck-context.cc | 41 ++++++++++++++++++++ 3 files changed, 44 insertions(+), 33 deletions(-) diff --git a/gcc/rust/typecheck/rust-hir-type-check.cc b/gcc/rust/typecheck/rust-hir-type-check.cc index 2b7868685d4..0bc72d3f73f 100644 --- a/gcc/rust/typecheck/rust-hir-type-check.cc +++ b/gcc/rust/typecheck/rust-hir-type-check.cc @@ -76,40 +76,8 @@ TypeResolution::Resolve (HIR::Crate &crate) if (saw_errors ()) return; - auto mappings = Analysis::Mappings::get (); auto context = TypeCheckContext::get (); - - // default inference variables if possible - context->iterate ([&] (HirId id, TyTy::BaseType *ty) mutable -> bool { - // nothing to do - if (ty->get_kind () != TyTy::TypeKind::INFER) - return true; - - TyTy::InferType *infer_var = static_cast (ty); - TyTy::BaseType *default_type; - bool ok = infer_var->default_type (&default_type); - if (!ok) - { - rust_error_at (mappings->lookup_location (id), ErrorCode::E0282, - "type annotations needed"); - return true; - } - else - { - auto result - = unify_site (id, TyTy::TyWithLocation (ty), - TyTy::TyWithLocation (default_type), UNDEF_LOCATION); - rust_assert (result); - rust_assert (result->get_kind () != TyTy::TypeKind::ERROR); - result->set_ref (id); - context->insert_type ( - Analysis::NodeMapping (mappings->get_current_crate (), 0, id, - UNKNOWN_LOCAL_DEFID), - result); - } - - return true; - }); + context->compute_inference_variables (true); } // rust-hir-trait-ref.h diff --git a/gcc/rust/typecheck/rust-hir-type-check.h b/gcc/rust/typecheck/rust-hir-type-check.h index 3d66e29052f..52c84fc4435 100644 --- a/gcc/rust/typecheck/rust-hir-type-check.h +++ b/gcc/rust/typecheck/rust-hir-type-check.h @@ -231,6 +231,8 @@ public: WARN_UNUSED_RESULT std::vector regions_from_generic_args (const HIR::GenericArgs &args) const; + void compute_inference_variables (bool error); + private: TypeCheckContext (); diff --git a/gcc/rust/typecheck/rust-typecheck-context.cc b/gcc/rust/typecheck/rust-typecheck-context.cc index 1f4a5a35626..9059e0261b3 100644 --- a/gcc/rust/typecheck/rust-typecheck-context.cc +++ b/gcc/rust/typecheck/rust-typecheck-context.cc @@ -17,6 +17,7 @@ // . #include "rust-hir-type-check.h" +#include "rust-type-util.h" namespace Rust { namespace Resolver { @@ -576,6 +577,46 @@ TypeCheckContext::regions_from_generic_args (const HIR::GenericArgs &args) const return regions; } +void +TypeCheckContext::compute_inference_variables (bool error) +{ + auto mappings = Analysis::Mappings::get (); + + // default inference variables if possible + iterate ([&] (HirId id, TyTy::BaseType *ty) mutable -> bool { + // nothing to do + if (ty->get_kind () != TyTy::TypeKind::INFER) + return true; + + TyTy::InferType *infer_var = static_cast (ty); + TyTy::BaseType *default_type; + + rust_debug_loc (mappings->lookup_location (id), + "trying to default infer-var: %s", + infer_var->as_string ().c_str ()); + bool ok = infer_var->default_type (&default_type); + if (!ok) + { + if (error) + rust_error_at (mappings->lookup_location (id), ErrorCode::E0282, + "type annotations needed"); + return true; + } + + auto result + = unify_site (id, TyTy::TyWithLocation (ty), + TyTy::TyWithLocation (default_type), UNDEF_LOCATION); + rust_assert (result); + rust_assert (result->get_kind () != TyTy::TypeKind::ERROR); + result->set_ref (id); + insert_type (Analysis::NodeMapping (mappings->get_current_crate (), 0, id, + UNKNOWN_LOCAL_DEFID), + result); + + return true; + }); +} + // TypeCheckContextItem TypeCheckContextItem::Item::Item (HIR::Function *item) : item (item) {} From patchwork Wed Feb 7 11:44:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197911 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2202542dyb; Wed, 7 Feb 2024 04:50:54 -0800 (PST) X-Google-Smtp-Source: AGHT+IECAmuc+rbpkrxrgWX1rukHdW4W391v+4WdXSR+++3acyux2hgIDFW/A1LKUnnWxAdQi6B0 X-Received: by 2002:ac8:4406:0:b0:42b:f32c:33c9 with SMTP id j6-20020ac84406000000b0042bf32c33c9mr5607001qtn.54.1707310254263; Wed, 07 Feb 2024 04:50:54 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310254; cv=pass; d=google.com; s=arc-20160816; b=FzFT0FUXIVgFekkEorfGslSMkyofZPzn2W1jMpDNeGr8hAqBEgHubb2B4miOgNkkMV B9bwwMtYnobhmzEQSiWfSZGMEO+tN8O6Db9cD2C49QyDCbpLPZpi2BPBS6cM7UQ63ijM N2EfGPqL/fEm5IDUq7HyPBT9EWDwaSNhSK0M2FxNqww6Nuw3tV7tzLCtd0KVm37wEt65 eJjYcHn/Px7LccuQcyBEEmUBjDkJ2oPz26Xalr37K2pNvbnqjizdN0UVfDmnR+8h49nX jU/gQVJwD4mcgyPg3I74xoNlL6LZ4e9Qvy8+U6SoU+k0rVO8pyCFCnaGx1d05fJB1/OU bD5A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=Chvm7TPbYMmlsfG1XuyENv3MxBxmaG66Xo9Z2aFB3FM=; fh=O7MjXDUHLOsg8DDfdht3bkd/IyuTdzVYhHO66zfsc6I=; b=EH4JIk+Li0/3ErKbjoVOOldYkj/IAM0TId1kN03+uU5YtbXCPhfZQ9EvCzbsAbPunR wRbM8j7ruBreL749bDVJxYqmvAQEzHpMFtjkVF7GlMVmfmHIB3fIp+D4qPH6+jCy823+ wESDXmv49S9871vOXqIkqM3/iAWsbIhgMzLyXNB8zWXbZ9Y1ghOkQnOM8pkq6HLJRv2W Hq6Zg5R2MiMHb0EV2onSFRMdHDHL5Htin1F0Fozic4NXQrmnVlVXBziNLqyhJbHeETFv Crn6bJ/GADiiLtnASdDBJjGzdcc2odQDbG3a6c5Cs+7O96K4vsNtWrL6QL1dIXBuq94z D+xQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b="RO1gu6/i"; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCVsRZ0jBspaE86q75DXviSw7gngA5LwIVU8tX2dI3y8NamPl0qG72edKtPvt8jqCSX1+vYc/DL6FGR5plHuEF1rjDAh1w== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id 22-20020ac85716000000b0042c3f6eb1ecsi1024993qtw.187.2024.02.07.04.50.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:50:54 -0800 (PST) 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=@embecosm.com header.s=google header.b="RO1gu6/i"; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E54863857C69 for ; Wed, 7 Feb 2024 12:50:53 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by sourceware.org (Postfix) with ESMTPS id 729E33858011 for ; Wed, 7 Feb 2024 12:44:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 729E33858011 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 729E33858011 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::134 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309868; cv=none; b=fguFDVzA6WBX7Mv/DEDEY5a9jBw4l9qzHjbBSRvtus0aWRvkFFuJQEK4wkG+vfVDYmTiNuZdDM2JxbJr4+0qeFRrMefYEfzW/7BE4SfBTLmvpN77LCU6QZiSt0UEkncxmEYq25t2IzAXn/e0YIRJSsrpcbJEkcKlf4UzEvAfbc8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309868; c=relaxed/simple; bh=aBmEKKFjKZ1RNs5fYjPTpVtFXtRT6KZVcQVne8S8eYw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=rt6XQBbKf7/7HerZsKzJYFS7xmkJBn1YyRFeCNWq/wxwtCKfWRS2YkTVeE2L9vSQAMWD9Ov49htBDpVGmtAuyfEA7T8xOkAdf3DdXhiiFjrl53mlX0OtpxaEr2/weiO2TkFJxDkl/BpMDGYgwrIGuUmb26uIZ6ka6hn039PSvZQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-51165a488baso726621e87.2 for ; Wed, 07 Feb 2024 04:44:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309854; x=1707914654; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=Chvm7TPbYMmlsfG1XuyENv3MxBxmaG66Xo9Z2aFB3FM=; b=RO1gu6/ixNW7a/xQbgry2pwmmKWIBFg4Wqqr6GliJ5Ios8ZuxQKJkgcZsJ4mC0Tr/o 1boag1oSEXnE+XJ2iN+1dZDXziqzlrBvtUhjgpLGY2c1MCmZz0B8Pt151lllH08O/q52 9xho6Q9QnbSFbePvg+fHyB9l9gd99k2nyFykisyxOQnQHVWQCi5KNx3Ycgbq3T1u43LH 98aZKD2jLYeV302ztJKokTOApKo23jajqosExMEjZh3ZsnaY7MsmYUgPn3Ku4f+U+p1V lCBBDHWx9kVM/dkJm+kW/V4TZIZGaQ6dJZ4I2I6NwQUntiPHsDAeL6StWiIBFFRhFvSO Bf8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309854; x=1707914654; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Chvm7TPbYMmlsfG1XuyENv3MxBxmaG66Xo9Z2aFB3FM=; b=Hs2Df0JCYYtMmWCfkJ9DR7MqsHa3HHWmjGTlhDddupvL6ITsaTGYohdspeMHoZKYpv Jfs7h9qHTYjvnMZHSvRTidWA5qu5k0VK7dorGrGdPgktXteTnKVXtdxMahTQN8hWsFDy nnD+KqO4AeC9E8+J5Tu/PUvmFLHfJQo9n/eakqXah0lrj9QMOdJo9dIZg/WQtqZ/ncQ+ sWVSJgXAuyDYK8XszOVQInmShmf8c8722+NLrn/JuUsi5KLs8GdTMscJ+bHXC2Px5yEm gWhGKKoEJhZLdvd4gLiNGUqiupcXnHA/Yx83UMMkmDnmiLmxItVsm05OG69vlj9TD1rA UgXQ== X-Gm-Message-State: AOJu0YxAmpFxENdvAsffRqzxcu0MLubMGLhQSnfujLHGHxkze7cCu9tr oWmQX6Nof2I8s36HZyy4a5GLQDgqgQa8x/5iTT8D+B3N6NA3G1MN+rUrHCLa6y53Z61Kn+551r/ 2HQ== X-Received: by 2002:ac2:4947:0:b0:511:1b89:1a30 with SMTP id o7-20020ac24947000000b005111b891a30mr3519309lfi.63.1707309854476; Wed, 07 Feb 2024 04:44:14 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCXf9kugIfvRA8w3BNaT6UA5yzxXcVQgal0EClnerOP5tQNfXBbeeANqxAzeARzPoILXIyPxWgD7kRsTfvSqtwigxKnwHXEsPf/eB1uxA/xoZXqfs7i3Qhyh Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:13 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Nobel Singh , Nobel Singh Subject: [COMMITTED 16/25] gccrs: Move the Implementation of implitem lowering into its own file. Date: Wed, 7 Feb 2024 12:44:02 +0100 Message-ID: <20240207114419.1100894-17-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244557149510308 X-GMAIL-MSGID: 1790244557149510308 From: Nobel Singh This patch moves the implementation of the implitem lowering from rust-ast-lower-implitem.h into the rust-ast-lower-implitem.cc file. gcc/rust/ChangeLog: * Make-lang.in: Add rust-ast-lower-implitem.cc to list of objects. * hir/rust-ast-lower-implitem.h (RUST_AST_LOWER_IMPLITEM_H): Remove implementation. * hir/rust-ast-lower-implitem.cc: Copy implementation from header. Signed-off-by: Nobel Singh --- gcc/rust/Make-lang.in | 1 + gcc/rust/hir/rust-ast-lower-implitem.cc | 428 ++++++++++++++++++++++++ gcc/rust/hir/rust-ast-lower-implitem.h | 406 +--------------------- 3 files changed, 439 insertions(+), 396 deletions(-) create mode 100644 gcc/rust/hir/rust-ast-lower-implitem.cc diff --git a/gcc/rust/Make-lang.in b/gcc/rust/Make-lang.in index bdaef41c419..4d646018792 100644 --- a/gcc/rust/Make-lang.in +++ b/gcc/rust/Make-lang.in @@ -111,6 +111,7 @@ GRS_OBJS = \ rust/rust-ast-lower-base.o \ rust/rust-ast-lower-pattern.o \ rust/rust-ast-lower-item.o \ + rust/rust-ast-lower-implitem.o \ rust/rust-ast-lower-expr.o \ rust/rust-ast-lower-type.o \ rust/rust-ast-lower-stmt.o \ diff --git a/gcc/rust/hir/rust-ast-lower-implitem.cc b/gcc/rust/hir/rust-ast-lower-implitem.cc new file mode 100644 index 00000000000..98db1dccd7c --- /dev/null +++ b/gcc/rust/hir/rust-ast-lower-implitem.cc @@ -0,0 +1,428 @@ +// Copyright (C) 2020-2023 Free Software Foundation, Inc. + +// This file is part of GCC. + +// GCC is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 3, or (at your option) any later +// version. + +// GCC is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. + +// You should have received a copy of the GNU General Public License +// along with GCC; see the file COPYING3. If not see +// . + +#include "rust-ast-lower-implitem.h" +#include "rust-ast-lower.h" +#include "rust-ast-lower-type.h" +#include "rust-ast-lower-expr.h" +#include "rust-ast-lower-pattern.h" +#include "rust-ast-lower-block.h" +#include "rust-item.h" + +namespace Rust { +namespace HIR { + +HIR::ImplItem * +ASTLowerImplItem::translate (AST::AssociatedItem *item, HirId parent_impl_id) +{ + ASTLowerImplItem resolver; + item->accept_vis (resolver); + + if (resolver.translated != nullptr) + { + rust_assert (resolver.item_cast != nullptr); + + auto id = resolver.translated->get_impl_mappings ().get_hirid (); + auto defid = resolver.translated->get_impl_mappings ().get_defid (); + auto locus = resolver.translated->get_locus (); + + resolver.handle_outer_attributes (*resolver.item_cast); + resolver.mappings->insert_hir_implitem (parent_impl_id, + resolver.translated); + resolver.mappings->insert_location (id, locus); + resolver.mappings->insert_defid_mapping (defid, resolver.item_cast); + } + + return resolver.translated; +} + +void +ASTLowerImplItem::visit (AST::TypeAlias &alias) +{ + std::vector > where_clause_items; + HIR::WhereClause where_clause (std::move (where_clause_items)); + HIR::Visibility vis = translate_visibility (alias.get_visibility ()); + + std::vector > generic_params; + if (alias.has_generics ()) + generic_params = lower_generic_params (alias.get_generic_params ()); + + HIR::Type *existing_type + = ASTLoweringType::translate (alias.get_type_aliased ().get ()); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, alias.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id (crate_num)); + + auto type_alias + = new HIR::TypeAlias (mapping, alias.get_new_type_name (), + std::move (generic_params), std::move (where_clause), + std::unique_ptr (existing_type), + std::move (vis), alias.get_outer_attrs (), + alias.get_locus ()); + + translated = type_alias; + item_cast = type_alias; +} + +void +ASTLowerImplItem::visit (AST::ConstantItem &constant) +{ + HIR::Visibility vis = translate_visibility (constant.get_visibility ()); + + HIR::Type *type + = ASTLoweringType::translate (constant.get_type ().get (), true); + HIR::Expr *expr = ASTLoweringExpr::translate (constant.get_expr ().get ()); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, constant.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id (crate_num)); + + auto translated_constant + = new HIR::ConstantItem (mapping, constant.get_identifier (), vis, + std::unique_ptr (type), + std::unique_ptr (expr), + constant.get_outer_attrs (), + constant.get_locus ()); + + translated = translated_constant; + item_cast = translated_constant; +} + +void +ASTLowerImplItem::visit (AST::Function &function) +{ + // ignore for now and leave empty + std::vector > where_clause_items; + for (auto &item : function.get_where_clause ().get_items ()) + { + HIR::WhereClauseItem *i + = ASTLowerWhereClauseItem::translate (*item.get ()); + where_clause_items.push_back (std::unique_ptr (i)); + } + + HIR::WhereClause where_clause (std::move (where_clause_items)); + HIR::FunctionQualifiers qualifiers + = lower_qualifiers (function.get_qualifiers ()); + HIR::Visibility vis = translate_visibility (function.get_visibility ()); + + // need + std::vector > generic_params; + if (function.has_generics ()) + { + generic_params = lower_generic_params (function.get_generic_params ()); + } + Identifier function_name = function.get_function_name (); + location_t locus = function.get_locus (); + + HIR::SelfParam self_param = HIR::SelfParam::error (); + if (function.has_self_param ()) + self_param = lower_self (function.get_self_param ()); + + std::unique_ptr return_type + = function.has_return_type () ? std::unique_ptr ( + ASTLoweringType::translate (function.get_return_type ().get ())) + : nullptr; + + std::vector function_params; + for (auto &p : function.get_function_params ()) + { + if (p->is_self () || p->is_variadic ()) + continue; + auto param = static_cast (p.get ()); + + auto translated_pattern = std::unique_ptr ( + ASTLoweringPattern::translate (param->get_pattern ().get ())); + auto translated_type = std::unique_ptr ( + ASTLoweringType::translate (param->get_type ().get ())); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, param->get_node_id (), + mappings->get_next_hir_id (crate_num), + UNKNOWN_LOCAL_DEFID); + + auto hir_param + = HIR::FunctionParam (mapping, std::move (translated_pattern), + std::move (translated_type), param->get_locus ()); + function_params.push_back (std::move (hir_param)); + } + + bool terminated = false; + std::unique_ptr function_body + = std::unique_ptr ( + ASTLoweringBlock::translate (function.get_definition ()->get (), + &terminated)); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, function.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id (crate_num)); + + mappings->insert_location (function_body->get_mappings ().get_hirid (), + function.get_locus ()); + + auto fn + = new HIR::Function (mapping, std::move (function_name), + std::move (qualifiers), std::move (generic_params), + std::move (function_params), std::move (return_type), + std::move (where_clause), std::move (function_body), + std::move (vis), function.get_outer_attrs (), + std::move (self_param), locus); + + if (!fn->get_self_param ().is_error ()) + { + // insert mappings for self + mappings->insert_hir_self_param (&fn->get_self_param ()); + mappings->insert_location ( + fn->get_self_param ().get_mappings ().get_hirid (), + fn->get_self_param ().get_locus ()); + } + + // add the mappings for the function params at the end + for (auto ¶m : fn->get_function_params ()) + { + mappings->insert_hir_param (¶m); + mappings->insert_location (mapping.get_hirid (), param.get_locus ()); + } + + translated = fn; + item_cast = fn; +} + +HIR::TraitItem * +ASTLowerTraitItem::translate (AST::AssociatedItem *item) +{ + ASTLowerTraitItem resolver; + item->accept_vis (resolver); + + if (resolver.translated != nullptr) + { + auto id = resolver.translated->get_mappings ().get_hirid (); + auto defid = resolver.translated->get_mappings ().get_defid (); + auto locus = resolver.translated->get_trait_locus (); + + resolver.handle_outer_attributes (*resolver.translated); + resolver.mappings->insert_hir_trait_item (resolver.translated); + resolver.mappings->insert_location (id, locus); + resolver.mappings->insert_defid_mapping (defid, resolver.translated); + } + + return resolver.translated; +} + +void +ASTLowerTraitItem::visit (AST::TraitItemFunc &func) +{ + AST::TraitFunctionDecl &ref = func.get_trait_function_decl (); + std::vector > where_clause_items; + HIR::WhereClause where_clause (std::move (where_clause_items)); + HIR::FunctionQualifiers qualifiers + = lower_qualifiers (func.get_trait_function_decl ().get_qualifiers ()); + + std::vector > generic_params; + if (ref.has_generics ()) + { + generic_params = lower_generic_params (ref.get_generic_params ()); + } + + std::unique_ptr return_type + = ref.has_return_type () ? std::unique_ptr ( + ASTLoweringType::translate (ref.get_return_type ().get ())) + : nullptr; + + std::vector function_params; + for (auto &p : ref.get_function_params ()) + { + if (p->is_variadic () || p->is_self ()) + continue; + + auto param = static_cast (p.get ()); + + auto translated_pattern = std::unique_ptr ( + ASTLoweringPattern::translate (param->get_pattern ().get ())); + auto translated_type = std::unique_ptr ( + ASTLoweringType::translate (param->get_type ().get ())); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, param->get_node_id (), + mappings->get_next_hir_id (crate_num), + UNKNOWN_LOCAL_DEFID); + + auto hir_param + = HIR::FunctionParam (mapping, std::move (translated_pattern), + std::move (translated_type), param->get_locus ()); + function_params.push_back (std::move (hir_param)); + } + + HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), + std::move (generic_params), + HIR::SelfParam::error (), + std::move (function_params), + std::move (return_type), + std::move (where_clause)); + bool terminated = false; + std::unique_ptr block_expr + = func.has_definition () ? std::unique_ptr ( + ASTLoweringBlock::translate (func.get_definition ().get (), + &terminated)) + : nullptr; + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, func.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id (crate_num)); + + HIR::TraitItemFunc *trait_item + = new HIR::TraitItemFunc (mapping, std::move (decl), std::move (block_expr), + func.get_outer_attrs (), func.get_locus ()); + translated = trait_item; + + // add the mappings for the function params at the end + for (auto ¶m : trait_item->get_decl ().get_function_params ()) + { + mappings->insert_hir_param (¶m); + mappings->insert_location (mapping.get_hirid (), param.get_locus ()); + } +} + +void +ASTLowerTraitItem::visit (AST::TraitItemMethod &method) +{ + AST::TraitMethodDecl &ref = method.get_trait_method_decl (); + + std::vector > where_clause_items; + HIR::WhereClause where_clause (std::move (where_clause_items)); + HIR::FunctionQualifiers qualifiers + = lower_qualifiers (method.get_trait_method_decl ().get_qualifiers ()); + + std::vector > generic_params; + if (ref.has_generics ()) + { + generic_params = lower_generic_params (ref.get_generic_params ()); + } + + std::unique_ptr return_type + = ref.has_return_type () ? std::unique_ptr ( + ASTLoweringType::translate (ref.get_return_type ().get ())) + : nullptr; + + HIR::SelfParam self_param = lower_self (ref.get_self_param ()); + + std::vector function_params; + for (auto &p : ref.get_function_params ()) + { + if (p->is_variadic () || p->is_self ()) + continue; + + auto param = static_cast (p.get ()); + + auto translated_pattern = std::unique_ptr ( + ASTLoweringPattern::translate (param->get_pattern ().get ())); + auto translated_type = std::unique_ptr ( + ASTLoweringType::translate (param->get_type ().get ())); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, param->get_node_id (), + mappings->get_next_hir_id (crate_num), + UNKNOWN_LOCAL_DEFID); + + auto hir_param + = HIR::FunctionParam (mapping, std::move (translated_pattern), + std::move (translated_type), param->get_locus ()); + function_params.push_back (hir_param); + } + + HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), + std::move (generic_params), + std::move (self_param), + std::move (function_params), + std::move (return_type), + std::move (where_clause)); + + bool terminated = false; + std::unique_ptr block_expr + = method.has_definition () ? std::unique_ptr ( + ASTLoweringBlock::translate (method.get_definition ().get (), + &terminated)) + : nullptr; + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, method.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id (crate_num)); + + HIR::TraitItemFunc *trait_item + = new HIR::TraitItemFunc (mapping, std::move (decl), std::move (block_expr), + method.get_outer_attrs (), method.get_locus ()); + translated = trait_item; + + // insert mappings for self + mappings->insert_hir_self_param (&self_param); + mappings->insert_location (self_param.get_mappings ().get_hirid (), + self_param.get_locus ()); + + // add the mappings for the function params at the end + for (auto ¶m : trait_item->get_decl ().get_function_params ()) + { + mappings->insert_hir_param (¶m); + mappings->insert_location (mapping.get_hirid (), param.get_locus ()); + } +} + +void +ASTLowerTraitItem::visit (AST::TraitItemConst &constant) +{ + HIR::Type *type = ASTLoweringType::translate (constant.get_type ().get ()); + HIR::Expr *expr = constant.has_expression () + ? ASTLoweringExpr::translate (constant.get_expr ().get ()) + : nullptr; + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, constant.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id (crate_num)); + + HIR::TraitItemConst *trait_item + = new HIR::TraitItemConst (mapping, constant.get_identifier (), + std::unique_ptr (type), + std::unique_ptr (expr), + constant.get_outer_attrs (), + constant.get_locus ()); + translated = trait_item; +} + +void +ASTLowerTraitItem::visit (AST::TraitItemType &type) +{ + std::vector > type_param_bounds; + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, type.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id (crate_num)); + + HIR::TraitItemType *trait_item + = new HIR::TraitItemType (mapping, type.get_identifier (), + std::move (type_param_bounds), + type.get_outer_attrs (), type.get_locus ()); + translated = trait_item; +} + +} // namespace HIR +} // namespace Rust diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h index 81dae14cdca..3a266b41ed4 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.h +++ b/gcc/rust/hir/rust-ast-lower-implitem.h @@ -19,11 +19,7 @@ #ifndef RUST_AST_LOWER_IMPLITEM_H #define RUST_AST_LOWER_IMPLITEM_H -#include "rust-ast-lower-type.h" -#include "rust-ast-lower-expr.h" -#include "rust-ast-lower-pattern.h" -#include "rust-ast-lower-block.h" -#include "rust-item.h" +#include "rust-ast-lower-base.h" namespace Rust { namespace HIR { @@ -34,179 +30,10 @@ class ASTLowerImplItem : public ASTLoweringBase public: static HIR::ImplItem *translate (AST::AssociatedItem *item, - HirId parent_impl_id) - { - ASTLowerImplItem resolver; - item->accept_vis (resolver); - - if (resolver.translated != nullptr) - { - rust_assert (resolver.item_cast != nullptr); - - auto id = resolver.translated->get_impl_mappings ().get_hirid (); - auto defid = resolver.translated->get_impl_mappings ().get_defid (); - auto locus = resolver.translated->get_locus (); - - resolver.handle_outer_attributes (*resolver.item_cast); - resolver.mappings->insert_hir_implitem (parent_impl_id, - resolver.translated); - resolver.mappings->insert_location (id, locus); - resolver.mappings->insert_defid_mapping (defid, resolver.item_cast); - } - - return resolver.translated; - } - - void visit (AST::TypeAlias &alias) override - { - std::vector > where_clause_items; - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::Visibility vis = translate_visibility (alias.get_visibility ()); - - std::vector > generic_params; - if (alias.has_generics ()) - generic_params = lower_generic_params (alias.get_generic_params ()); - - HIR::Type *existing_type - = ASTLoweringType::translate (alias.get_type_aliased ().get ()); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, alias.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - auto type_alias = new HIR::TypeAlias ( - mapping, alias.get_new_type_name (), std::move (generic_params), - std::move (where_clause), std::unique_ptr (existing_type), - std::move (vis), alias.get_outer_attrs (), alias.get_locus ()); - - translated = type_alias; - item_cast = type_alias; - } - - void visit (AST::ConstantItem &constant) override - { - HIR::Visibility vis = translate_visibility (constant.get_visibility ()); - - HIR::Type *type - = ASTLoweringType::translate (constant.get_type ().get (), true); - HIR::Expr *expr = ASTLoweringExpr::translate (constant.get_expr ().get ()); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, constant.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - auto translated_constant - = new HIR::ConstantItem (mapping, constant.get_identifier (), vis, - std::unique_ptr (type), - std::unique_ptr (expr), - constant.get_outer_attrs (), - constant.get_locus ()); - translated = translated_constant; - item_cast = translated_constant; - } - - void visit (AST::Function &function) override - { - // ignore for now and leave empty - std::vector > where_clause_items; - for (auto &item : function.get_where_clause ().get_items ()) - { - HIR::WhereClauseItem *i - = ASTLowerWhereClauseItem::translate (*item.get ()); - where_clause_items.push_back ( - std::unique_ptr (i)); - } - - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::FunctionQualifiers qualifiers - = lower_qualifiers (function.get_qualifiers ()); - HIR::Visibility vis = translate_visibility (function.get_visibility ()); - - // need - std::vector > generic_params; - if (function.has_generics ()) - { - generic_params = lower_generic_params (function.get_generic_params ()); - } - Identifier function_name = function.get_function_name (); - location_t locus = function.get_locus (); - - HIR::SelfParam self_param = HIR::SelfParam::error (); - if (function.has_self_param ()) - self_param = lower_self (function.get_self_param ()); - - std::unique_ptr return_type - = function.has_return_type () ? std::unique_ptr ( - ASTLoweringType::translate (function.get_return_type ().get ())) - : nullptr; - - std::vector function_params; - for (auto &p : function.get_function_params ()) - { - if (p->is_self () || p->is_variadic ()) - continue; - auto param = static_cast (p.get ()); - - auto translated_pattern = std::unique_ptr ( - ASTLoweringPattern::translate (param->get_pattern ().get ())); - auto translated_type = std::unique_ptr ( - ASTLoweringType::translate (param->get_type ().get ())); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, param->get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - auto hir_param - = HIR::FunctionParam (mapping, std::move (translated_pattern), - std::move (translated_type), - param->get_locus ()); - function_params.push_back (std::move (hir_param)); - } - - bool terminated = false; - std::unique_ptr function_body - = std::unique_ptr ( - ASTLoweringBlock::translate (function.get_definition ()->get (), - &terminated)); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, function.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - mappings->insert_location (function_body->get_mappings ().get_hirid (), - function.get_locus ()); - - auto fn - = new HIR::Function (mapping, std::move (function_name), - std::move (qualifiers), std::move (generic_params), - std::move (function_params), std::move (return_type), - std::move (where_clause), std::move (function_body), - std::move (vis), function.get_outer_attrs (), - std::move (self_param), locus); - - if (!fn->get_self_param ().is_error ()) - { - // insert mappings for self - mappings->insert_hir_self_param (&fn->get_self_param ()); - mappings->insert_location ( - fn->get_self_param ().get_mappings ().get_hirid (), - fn->get_self_param ().get_locus ()); - } - - // add the mappings for the function params at the end - for (auto ¶m : fn->get_function_params ()) - { - mappings->insert_hir_param (¶m); - mappings->insert_location (mapping.get_hirid (), param.get_locus ()); - } - - translated = fn; - item_cast = fn; - } + HirId parent_impl_id); + void visit (AST::TypeAlias &alias) override; + void visit (AST::ConstantItem &constant) override; + void visit (AST::Function &function) override; private: ASTLowerImplItem () : translated (nullptr), item_cast (nullptr) {} @@ -220,224 +47,11 @@ class ASTLowerTraitItem : public ASTLoweringBase using Rust::HIR::ASTLoweringBase::visit; public: - static HIR::TraitItem *translate (AST::AssociatedItem *item) - { - ASTLowerTraitItem resolver; - item->accept_vis (resolver); - - if (resolver.translated != nullptr) - { - auto id = resolver.translated->get_mappings ().get_hirid (); - auto defid = resolver.translated->get_mappings ().get_defid (); - auto locus = resolver.translated->get_trait_locus (); - - resolver.handle_outer_attributes (*resolver.translated); - resolver.mappings->insert_hir_trait_item (resolver.translated); - resolver.mappings->insert_location (id, locus); - resolver.mappings->insert_defid_mapping (defid, resolver.translated); - } - - return resolver.translated; - } - - void visit (AST::TraitItemFunc &func) override - { - AST::TraitFunctionDecl &ref = func.get_trait_function_decl (); - - std::vector > where_clause_items; - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::FunctionQualifiers qualifiers - = lower_qualifiers (func.get_trait_function_decl ().get_qualifiers ()); - - std::vector > generic_params; - if (ref.has_generics ()) - { - generic_params = lower_generic_params (ref.get_generic_params ()); - } - - std::unique_ptr return_type - = ref.has_return_type () ? std::unique_ptr ( - ASTLoweringType::translate (ref.get_return_type ().get ())) - : nullptr; - - std::vector function_params; - for (auto &p : ref.get_function_params ()) - { - if (p->is_variadic () || p->is_self ()) - continue; - - auto param = static_cast (p.get ()); - - auto translated_pattern = std::unique_ptr ( - ASTLoweringPattern::translate (param->get_pattern ().get ())); - auto translated_type = std::unique_ptr ( - ASTLoweringType::translate (param->get_type ().get ())); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, param->get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - auto hir_param - = HIR::FunctionParam (mapping, std::move (translated_pattern), - std::move (translated_type), - param->get_locus ()); - function_params.push_back (std::move (hir_param)); - } - - HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), - std::move (generic_params), - HIR::SelfParam::error (), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - bool terminated = false; - std::unique_ptr block_expr - = func.has_definition () ? std::unique_ptr ( - ASTLoweringBlock::translate (func.get_definition ().get (), - &terminated)) - : nullptr; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, func.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemFunc *trait_item - = new HIR::TraitItemFunc (mapping, std::move (decl), - std::move (block_expr), func.get_outer_attrs (), - func.get_locus ()); - translated = trait_item; - - // add the mappings for the function params at the end - for (auto ¶m : trait_item->get_decl ().get_function_params ()) - { - mappings->insert_hir_param (¶m); - mappings->insert_location (mapping.get_hirid (), param.get_locus ()); - } - } - - void visit (AST::TraitItemMethod &method) override - { - AST::TraitMethodDecl &ref = method.get_trait_method_decl (); - - std::vector > where_clause_items; - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::FunctionQualifiers qualifiers - = lower_qualifiers (method.get_trait_method_decl ().get_qualifiers ()); - - std::vector > generic_params; - if (ref.has_generics ()) - { - generic_params = lower_generic_params (ref.get_generic_params ()); - } - - std::unique_ptr return_type - = ref.has_return_type () ? std::unique_ptr ( - ASTLoweringType::translate (ref.get_return_type ().get ())) - : nullptr; - - HIR::SelfParam self_param = lower_self (ref.get_self_param ()); - - std::vector function_params; - for (auto &p : ref.get_function_params ()) - { - if (p->is_variadic () || p->is_self ()) - continue; - - auto param = static_cast (p.get ()); - - auto translated_pattern = std::unique_ptr ( - ASTLoweringPattern::translate (param->get_pattern ().get ())); - auto translated_type = std::unique_ptr ( - ASTLoweringType::translate (param->get_type ().get ())); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, param->get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - auto hir_param - = HIR::FunctionParam (mapping, std::move (translated_pattern), - std::move (translated_type), - param->get_locus ()); - function_params.push_back (hir_param); - } - - HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), - std::move (generic_params), - std::move (self_param), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - bool terminated = false; - std::unique_ptr block_expr - = method.has_definition () ? std::unique_ptr ( - ASTLoweringBlock::translate (method.get_definition ().get (), - &terminated)) - : nullptr; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, method.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemFunc *trait_item - = new HIR::TraitItemFunc (mapping, std::move (decl), - std::move (block_expr), - method.get_outer_attrs (), method.get_locus ()); - translated = trait_item; - - // insert mappings for self - mappings->insert_hir_self_param (&self_param); - mappings->insert_location (self_param.get_mappings ().get_hirid (), - self_param.get_locus ()); - - // add the mappings for the function params at the end - for (auto ¶m : trait_item->get_decl ().get_function_params ()) - { - mappings->insert_hir_param (¶m); - mappings->insert_location (mapping.get_hirid (), param.get_locus ()); - } - } - - void visit (AST::TraitItemConst &constant) override - { - HIR::Type *type = ASTLoweringType::translate (constant.get_type ().get ()); - HIR::Expr *expr - = constant.has_expression () - ? ASTLoweringExpr::translate (constant.get_expr ().get ()) - : nullptr; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, constant.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemConst *trait_item - = new HIR::TraitItemConst (mapping, constant.get_identifier (), - std::unique_ptr (type), - std::unique_ptr (expr), - constant.get_outer_attrs (), - constant.get_locus ()); - translated = trait_item; - } - - void visit (AST::TraitItemType &type) override - { - std::vector > type_param_bounds; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, type.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemType *trait_item - = new HIR::TraitItemType (mapping, type.get_identifier (), - std::move (type_param_bounds), - type.get_outer_attrs (), type.get_locus ()); - translated = trait_item; - } + static HIR::TraitItem *translate (AST::AssociatedItem *item); + void visit (AST::TraitItemFunc &func) override; + void visit (AST::TraitItemMethod &method) override; + void visit (AST::TraitItemConst &constant) override; + void visit (AST::TraitItemType &type) override; private: ASTLowerTraitItem () : translated (nullptr) {} From patchwork Wed Feb 7 11:44:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197904 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2201544dyb; Wed, 7 Feb 2024 04:48:48 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCW+jl+8Mphiz/PsW5xAOa8DbgMwtJnCoDQrLo97EO8WWA0Ptl27TiOyFr1MUEqJ0kSH78jKOm0Zi1bQkqNtuaHC4Ct9hA== X-Google-Smtp-Source: AGHT+IFIh/KU0e7PkAgnb5LLxhRnFp7zc5PKjNCazVFZeFtgmCKPAnRBGqNlGdhBOu6W+4g7LuQ7 X-Received: by 2002:a05:6214:5096:b0:68c:ab0e:718f with SMTP id kk22-20020a056214509600b0068cab0e718fmr6599290qvb.48.1707310128080; Wed, 07 Feb 2024 04:48:48 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310128; cv=pass; d=google.com; s=arc-20160816; b=yivcp+U9/+LZcBwwkvj4clA1dOilXiMCEzHAEeAJWIfbMRjb4zu+UWiDLA3yBxEtYg GKgFPuN1pu2TN0/Xe8sd0k0qFpFZpnfJ7/quelL5ro1NL8Bs8M9XJF904dzpQgVbn954 Ll6E/PtJXjHWZL5hy6baK4T7hMLbxDEiNVwJCmWanqWuW9sDD0TTuwobhVsme2j17Bbk jHCMjXzbYqhAd+JsamFnO2u+y4Su8k+YMWrVSu2ovbdET/jVfbUMwact7M76QG7fyKsE zE1CF0tEVVQcT00GcvKDAGJZZ3RD2VG3QlmLGD/bhoZQynIYTcFG+AVcU83kfrX1+Afd gWiQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=wd0CRI7pN+DibNNTS1axihs4NhY0X7hVoqEEm4Z/7CQ=; fh=WEsGjhICWItIfE353iRiw34VdwP6xyK5FqVDpR2+w8k=; b=yPEFb9nyrUa4xaneA++d3NpA2OeNT4x0LHkTQKMcM2Gfe2ynJDxvlS27Ask9v8dMB/ ouAq4V23o7pV7DJAzJvSNTOP1m01u9409Y51u5yD2mQzpjHD51izxFRgLHfOAOA6eYkB Ab/aZAcv3iPk5qfZRXzJIGLJ6rgpgbEhUgnYlKoW11FkBlU0Y+0aBEdd8Zqk38xmggrl GLAdr2GQ0KojbqdyUwQzNc+fkRJ9O8hKUnbRb2oL4l/x5QDbAqWCH9lf48Z/S5eFtzCt ppE9EvXiww0PUaE7ed9LHVZMgRflXr/4VzAWMjawef6QkZSihanNro/XjkGu258YuNzG 6PCw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=NjfCgGOA; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCVqstaFLn7kSGvgyA+e90FaTjGOf15RjLLVp6BD0TNCW6Ufk9pebKFXSoC82Sj9xJhT4i+aR25+SWeTpy/DCDrUZnOOAQ== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id gg4-20020a056214252400b0068cb2904279si1082894qvb.18.2024.02.07.04.48.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:48:48 -0800 (PST) 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=@embecosm.com header.s=google header.b=NjfCgGOA; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C68D23857C51 for ; Wed, 7 Feb 2024 12:48:47 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by sourceware.org (Postfix) with ESMTPS id 7993D3858014 for ; Wed, 7 Feb 2024 12:44:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7993D3858014 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7993D3858014 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::336 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309864; cv=none; b=Mu3Vf4z0h73BCP2cDdrjq0/u7vYgIjwnG/sCc8JTV243InRHttd4rqRcHnfDD++8HACRAjiOSnc3q0YpjHAwId12QyliqwH2VBzOCc/kU+A3n9aR5juniGYvCcQ9wzN6BJfhYC08C2Y6DZgpOHWnHE8+8upWhudHM4W7vHhzlS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309864; c=relaxed/simple; bh=1uC+WbRt0wnqHkss2bQ+cW4m7JzqzoHICLMOS4djebc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=wBJIZUJbpT9vAGlZ0R3R+JpdmL8fp5ebuHdqajkmM06z0VeZUQ6TrrjCd/KroMt2ucd5bP6LXlkvVKIjZLc17iCQPZv1LvA5fmoB8i3meUYftFWkbp4ZLLftJlRuj3FphE1RXLQcMbnW2dOqYoiCVXYZj+aW6BUEmIvgM/5hxD0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-40ff28388a6so5084995e9.1 for ; Wed, 07 Feb 2024 04:44:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309855; x=1707914655; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=wd0CRI7pN+DibNNTS1axihs4NhY0X7hVoqEEm4Z/7CQ=; b=NjfCgGOArx6mBGHIHVV9SgX2zstu3e50V8CmcaiL2qOV7w3wkw3PQOTr3EumR0MbuV fhp2O7ZORFWagBA5z79orn9OqM0eY36ub5SkPD1FPFneIjHGCJpNm6TAeaZ2EI6srpmW +ejADwbE2g1NXkypW+aaatyTe5qsfclYLXhpPrYnjgrYrKks5PCnQeVgZlu8I9ryo/SQ SKX1kXpF8lLAlpI1apSUiGZYfyu40Z3XLNVcDf1WXSUC+yVA6PXJNCaK+bgBaLnWzdiC 0C41lID9Bvml5/XX9Ib7OXrFGcWqkQINZMV8j6rWHoWwQW8bUUok20r7hlv8cb8odqXo wzVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309855; x=1707914655; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=wd0CRI7pN+DibNNTS1axihs4NhY0X7hVoqEEm4Z/7CQ=; b=SYxoxQxJkwTQc3HMhtxCLEvxamYdVdzhey7lYhZqydW4RC1/pPf81+GKx4mpsmVfFp QuhieeulAAIdLibYRbQ980NDxzPpysxIcUIXKLwsBzK5o5wOgsAzWygqDP1kxy5eGOYR OBJoHLJwNwsalCwUDTbPWORjdNHh6JcpboGF+YjkmjBqtB4BzTB8Z514hjj9HpB0jxtu C6sPgFqI2UiXRA+pxSpEacCgP+TRzqStwr1fLsFtxrS/yZAEL1WtfgqiQTo6q6FSsMpE G9ImeSd1JliVNG+8GqF8FnN1d/ihfN5xTlaviBNGhMh1rHeKPtQ/mOHgYtGCnMTlci+w VpBg== X-Gm-Message-State: AOJu0Yw2DfpSyZ2/rGvBTkeSVmC5VmpQDqQID73aXNg5Ei68ilKFD2Z1 uwYLHy6jXPrCSLP+4Ep+GDb7Se9GWCC/kcvY6i4N6lTcRMHMfrWsFZMMLSZmTmq5dgEDBWDgvoH iRw== X-Received: by 2002:a05:600c:4f08:b0:40f:f891:d282 with SMTP id l8-20020a05600c4f0800b0040ff891d282mr2475113wmq.18.1707309855102; Wed, 07 Feb 2024 04:44:15 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCX5IwVUpu523yh3FBcqWIfbVCVZV2y4LGjNptM5iU4jO3Yf/SzjuEDXhKdrDAfhsqBPmHSeRHRNHA1yncje3DqWpolJ7aV7wkFlBS12 Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:14 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Philip Herron Subject: [COMMITTED 17/25] gccrs: Add testcase to show issue is already fixed Date: Wed, 7 Feb 2024 12:44:03 +0100 Message-ID: <20240207114419.1100894-18-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244424566465769 X-GMAIL-MSGID: 1790244424566465769 From: Philip Herron Fixes #2782 gcc/testsuite/ChangeLog: * rust/compile/issue-2782.rs: New test. Signed-off-by: Philip Herron --- gcc/testsuite/rust/compile/issue-2782.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 gcc/testsuite/rust/compile/issue-2782.rs diff --git a/gcc/testsuite/rust/compile/issue-2782.rs b/gcc/testsuite/rust/compile/issue-2782.rs new file mode 100644 index 00000000000..e199c882c86 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2782.rs @@ -0,0 +1,12 @@ +#[lang = "sized"] +pub trait Sized {} + +struct S(T); + +impl S { + fn foo() {} +} + +fn main() { + S::foo::(); +} From patchwork Wed Feb 7 11:44:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197907 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2201954dyb; Wed, 7 Feb 2024 04:49:42 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUf3O0u7FTuMx+ddHuWa07lngMMb8EJZkYo1ACD6UjwaSE3vCulmVDGbFmacXsHR2r+DtUl17jJTXm+3VCQDeDuCHKKqA== X-Google-Smtp-Source: AGHT+IFJPQ42adgcgmtKC0weHJoWB8MOy/nzDCK9uhlh6B+uTLF6vl/eysf9CfHgR6Yp0EnFQrmj X-Received: by 2002:ac8:1082:0:b0:42b:f5b0:36bf with SMTP id a2-20020ac81082000000b0042bf5b036bfmr8502434qtj.34.1707310182684; Wed, 07 Feb 2024 04:49:42 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310182; cv=pass; d=google.com; s=arc-20160816; b=qY9XK7UiAiOT8ReU4HAfyt9xlpL/yqgKVm4TWKkSaBEtpWohdg/Js1hnWE3+U87bYm GAsfHYDJP7YxG/Vmgz2uW+9vqTi+U/qN0WBICF/JBk7gvpYM2gCZsSiCj/4WYKK6GUc1 gIi+QAnod/puoctVkONCXoQuYrXG0uhJXyoXwYYz1CfQHyh28i2Pphu8vwNKL9J9yEsZ P7W7nJByWmlGRChF9yC1oD1okBi58gWKi8hU8CQElPYxuOejcjcJaupSjfFA9hxhAWub mP+hJRBWW6PAsWQp48UqQI94LlscIEkCF0YDfD6Sb3/wpRYvUnY6P29h8/f2goHkAVkT 0nCg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=xJz+t2cuPyJjAh5s9qb+4K0uBLyopMxYjqJhmjDVmhc=; fh=Yu369Jjsure7u8x5BBy+7OrFqDOmuEdL9Zc19OvshaA=; b=R25EwZkOIlT0ITbS1NznGjlFR9tB9hqhEaU89Qkf0ocs4VLj6nl52icKxM30n5Weiy z2wykp4jRP0B+n4LGgjeBfc9tvvRgIPKYxWZOtMk5ifcnMbO5VW+GSWW9KZtLwBGDi9J E08HYTNw4WzD7u+ozAT54aeJtECg6A3HHbBPl1NihkuoKx47K1HUb85g8i9neMXGGJBq WMr1ryCuNtpqifZDj+Y7m7c9b1djxuVWm7WQ7FlPyH5oofNNnP3+CPhBjiYx2lBfAPgA rs5iaO0fhK8qDbI85PKGaPVqqQMsBCtWRiiV/s61t3UCI9t+l1xTNo8I8Y9zyuqQ6mzE 554Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=U7+wBkxF; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCWpaI3EBd1w4G1XlBVgTRbiA/YvOLkwmMHlUBQKpg3FYKnuYHvQgkZOHHJd3DwZ2+yRhSXDtMBlRcN9QyPBjsRAovo60w== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id 20-20020ac84e94000000b0042c3d95e8fbsi1061846qtp.141.2024.02.07.04.49.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:49:42 -0800 (PST) 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=@embecosm.com header.s=google header.b=U7+wBkxF; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5B49238582B1 for ; Wed, 7 Feb 2024 12:49:42 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by sourceware.org (Postfix) with ESMTPS id 3811438582BB for ; Wed, 7 Feb 2024 12:44:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3811438582BB Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 3811438582BB Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309866; cv=none; b=cZ8kNy/mNukjgGciQUV+O/cj/MS5eL1wu7UdWHrjvdQUGZdxSnUs/UoKQQP7BKfIU3+0StmzbmsHn++1eHG+wYZHgtLdQmACACncr+kikGKXeSRm6yxShwUraQW3ziq9DQFaxGtquuL8SuAl/8hEn2k/ptDLtWo7HIrhDV9XP04= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309866; c=relaxed/simple; bh=4YBO7lVMNEFk79EpWqhp7kMDfsV9YdG/ZR3FxOjWD9g=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=FvfExoruEezex8o0Qxq/6K+lx/AzTyHHjssEbwh0kvs8AMnselv7VKireLufRThH3a6YgOSKV/oxm1TRzXtUfRtYs/vXo1+c/iSMdQJQIn1LhzQ/h65GshCxKj41SoLc4rV936742j1MuLBhFwa8kaS1lfQQaXMIB9UsjjqrIgI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-40fb3b5893eso4504165e9.0 for ; Wed, 07 Feb 2024 04:44:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309856; x=1707914656; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=xJz+t2cuPyJjAh5s9qb+4K0uBLyopMxYjqJhmjDVmhc=; b=U7+wBkxFAbfmNyLAiD+eOk1X/smfPUI+oQ16CHJzfbrL/CsBN2KKgonHggbxKQcK5x XCpejEWsWxMW9+YkskH4EYioPe5WdRrm6U+wHvONp6P+tuhBUUOikyY4KM3mzWL6YZY5 XNEGek2MbYxsei8nQL2KFUgzJ/N4cSNQqRDFNraITRDI2yDMuc7nDEvaOpljG84queLN KSBVyohAsajWQrmSmgKI/mHaDLCB0QG9LQdgdKNbjuoyYHquifSTTjiimfnKl4cL4GpU D4SJ+nBUzme7iNDGYZj2NUOqPqPvqbBM/bbJ+XIUX6/YkkYr1Fm1oaCGseEtwzx8O44K iTuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309856; x=1707914656; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=xJz+t2cuPyJjAh5s9qb+4K0uBLyopMxYjqJhmjDVmhc=; b=ZR4K2me9h2VSpiqIcxKktbhKI2zrI6/zWJCsuvZ0WVw8FzqmzgyC5TPECrCiDGBXEa mi5CVb8baFUoGeqiCdsgXplE2K4HntvW+fzVW65/F+zHhJc/DHjOTsE5TtjkV6/UQVw/ HBExa8tjbWdOvN0CVJ+m1eZn0SbdRUjHVOt3PJNGxWUPO97tUKRXkV3aSD2K4WbeBuF3 AjhLz2GjbAHOaT8TGI9N2OKLEIXhPefH5Wtr+tW3GZVNYwsYNUPJvDxGQ4VhaQUv7TIH pQr1BwalAKWIGWdL1X9ohuwU6ys8RBRiBK7KYGXih7+CvcMbKZz0FgfoVAFpcnb24EIr NPMg== X-Gm-Message-State: AOJu0YzXml7x3lsjTHm/xgTq8sM7FcnHOXPzreFhZ0oI4nxPN69M45M+ 7ox8S2mhwxLZDsDe5CcmRbw2atgn8KGS1JKbvqN2cc72C1vBTJ6yBZ1PP53I2RXiP0luNdIP+7y OMw== X-Received: by 2002:a05:600c:1d2a:b0:40f:be53:79db with SMTP id l42-20020a05600c1d2a00b0040fbe5379dbmr4574132wms.5.1707309855787; Wed, 07 Feb 2024 04:44:15 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCW2/fd5j2rFPxtZV7MEct7TO1OB5yR4/w5OMzAFLMOfLcjOe/WfBASBszrmUzRd5NUG3psa0LLG/PWMOqW6W5D4scm3nzNNVLf+1J3F Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:15 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Philip Herron Subject: [COMMITTED 18/25] gccrs: fix bug in pattern check for tuples Date: Wed, 7 Feb 2024 12:44:04 +0100 Message-ID: <20240207114419.1100894-19-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244482125865622 X-GMAIL-MSGID: 1790244482125865622 From: Philip Herron We can point to generic parent types which means we need to do the shallow resolve thing that rustc does. We have destructure which is similar to get what the parameter type points to. Fixes #2775 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): use destructure gcc/testsuite/ChangeLog: * rust/compile/issue-2775.rs: New test. Signed-off-by: Philip Herron --- gcc/rust/typecheck/rust-hir-type-check-pattern.cc | 6 ++++-- gcc/testsuite/rust/compile/issue-2775.rs | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/rust/compile/issue-2775.rs diff --git a/gcc/rust/typecheck/rust-hir-type-check-pattern.cc b/gcc/rust/typecheck/rust-hir-type-check-pattern.cc index 19f742f2154..c7f29e28b2d 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-pattern.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-pattern.cc @@ -302,7 +302,8 @@ TypeCheckPattern::visit (HIR::TuplePattern &pattern) = *static_cast ( pattern.get_items ().get ()); - if (parent->get_kind () != TyTy::TUPLE) + auto resolved_parent = parent->destructure (); + if (resolved_parent->get_kind () != TyTy::TUPLE) { rust_error_at (pattern.get_locus (), "expected %s, found tuple", parent->as_string ().c_str ()); @@ -312,7 +313,8 @@ TypeCheckPattern::visit (HIR::TuplePattern &pattern) const auto &patterns = ref.get_patterns (); size_t nitems_to_resolve = patterns.size (); - TyTy::TupleType &par = *static_cast (parent); + TyTy::TupleType &par + = *static_cast (resolved_parent); if (patterns.size () != par.get_fields ().size ()) { emit_pattern_size_error (pattern, par.get_fields ().size (), diff --git a/gcc/testsuite/rust/compile/issue-2775.rs b/gcc/testsuite/rust/compile/issue-2775.rs new file mode 100644 index 00000000000..3ad7085785e --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2775.rs @@ -0,0 +1,11 @@ +// { dg-options "-w" } +#[lang = "sized"] +pub trait Sized {} + +struct Ref<'a, T> { + x: &'a T, +} + +pub fn test<'a, 'b, 'c>() { + let (_, &&Ref::<(&'_ i32, i32)> { x: &(a, b) }): (i32, &'_ &'b Ref<'b, (&'c i32, i32)>); +} From patchwork Wed Feb 7 11:44:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197917 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2204385dyb; Wed, 7 Feb 2024 04:54:33 -0800 (PST) X-Google-Smtp-Source: AGHT+IGfxPp21JaVHkz+IPESgmRXLw6omkr/9okAdnLs/FtDQgppJSKFJb7ZmzpkDtfv73x3ZePf X-Received: by 2002:a05:622a:1453:b0:42c:b29:ad6a with SMTP id v19-20020a05622a145300b0042c0b29ad6amr12235530qtx.31.1707310473736; Wed, 07 Feb 2024 04:54:33 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310473; cv=pass; d=google.com; s=arc-20160816; b=bbVwQZWW+qk307D54zuwYCcgqyEsv8Uz349P0mBbJ2FcqOKKffeeyMqbRAJiTkD4aH yHNIG26+wVoBP5lgMNI+G2GZjWQ+9Rh483QBjYzy4cYV137ZEeQi0iODzapDTLEMUekc K7XTBrs7JmusCcKp5s6psdF2YU/kkfcV/+9hCt1ycO9g0JwyjSdnCi/GlRbda4g6EXl+ sMIri6nsVv7y27wydCUS2sN68oezuMRE6l1/hsm1H3Ocf2IhVkHgU0wYWNqZB/pTZTBv oCnVr+bhNURVpMr0LWnGsBzVLsthoc/xyf49E4Av0N7B97LjiP9NlhP3ThPgWsVdOSw/ LOfQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=35jofY51ecUsirhQmojVytRMLoCnU83j2hMm1aKGhmM=; fh=rHGhaTGp+T5IXBvEP9xgKFpb9+1SBhnUa5tcdmAwtos=; b=PkUkX9hx1vvvf6AyoJccqVc6Islqi6QotPsVUdJJjPMQlzYZIms9GPIaAgQdifyTQ8 R2iMyQjh6ZoYRjO+O91D/bMGrL/xb0gZtD24wKkGUPSDLSDcADGR5ijuazm5lc241eC3 cI8+qNSIa5DDcR+rbHaccpoNJ0k2U8dUHA8Zw75/88OLFmDwjiK/6Z/AqMKmsc/PjLIU TECUFqaWVMRd/pj7bVLCzZvZd+UIus5JNum3S1VAdvYN0gBng4ZjL6ovq4OGn+gZvAob 7rIv/9vQjIUD9sT/7XRGb5TCac0F0UN8KS36toUhGdD8i90JnzUNLl6DoZI61iqDxQAD 4vLQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b="U8BtX/Ch"; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCWtBUiwWpNcdryfvqrPLmPth2mtHqZbxU1O5wnhut9n0gp5g4hAa6Kgt8zvGPMsb59rXL9u4S8M4MzpfE93kn9o6rHiXg== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id t22-20020a05622a181600b0042aad1f71bdsi1022671qtc.618.2024.02.07.04.54.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:54:33 -0800 (PST) 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=@embecosm.com header.s=google header.b="U8BtX/Ch"; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 649FF3857708 for ; Wed, 7 Feb 2024 12:54:33 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [IPv6:2a00:1450:4864:20::12c]) by sourceware.org (Postfix) with ESMTPS id 360F33857C48 for ; Wed, 7 Feb 2024 12:44:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 360F33857C48 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 360F33857C48 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309867; cv=none; b=EMLp26jq+k/LD5eLxqaViDe9kxvtOJEYBHSvWda1JmONB9DDI9V3XvCjVRPH5d1RSiq1b0FmR07pFWMNlJxoaU53As5FeakWT/jygxQBrpKedwEyV/p7X5Pk+M+SK4PouFGkryA9UTNp/Vq/wYAxPocjZPquyU+gZDPuTlob21g= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309867; c=relaxed/simple; bh=HXLpM8UJd3Jh9gVekPDZ+dQCUhjWNL7ZXGboOyTy7is=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=EByHdKh+Yvr+0BGCECWrb6MqwNXxwpxxgm/91+V6eqm+ip+TDhTO7y7OSJHvWcE3J/4hYW1m9bDhmU6EELBRB2fbQqSAbRg9ld+wEG7ut4LjMO6TZyexMKkPEi9F8pPrLfcj4OKeyCZhXIU8akwphsxpc5ysKYN9dF22JS+F2GQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-51167496943so822818e87.2 for ; Wed, 07 Feb 2024 04:44:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309856; x=1707914656; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=35jofY51ecUsirhQmojVytRMLoCnU83j2hMm1aKGhmM=; b=U8BtX/ChTjj5PDNFXe0qzD+hgMBnfCQY2/RqcBWTDt5pGziXAjjXN0Yo61NVQxnzxl KuVpWu/B5hJ8jbogDc6QGLoER0XYFnAOYWOrFH8vkM1On2fQMBiv1zVNvsmeuP3W6F5O XkBdvDk+ks6+vERiXdEuUW0UdiPA7Er7EWJe/A2mCOFv/Cpjl4DRSCP4D24AFfrriJ9S EG8Ix7WqxnTkvUEaZJlZ4NY2Ar8IdUS/NLXlqCxo/qmSt8VWYKTfxBO13FtOlU5fAWTj aSsCfMojXmH05jT1BxIWLapF9hrJIACbzDvbo5ILtStcCMCiGdE+Yf/AyNnPwFfH+SU+ Hc/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309856; x=1707914656; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=35jofY51ecUsirhQmojVytRMLoCnU83j2hMm1aKGhmM=; b=K1iS5SAN+DZaGYSbrY5t6P2+rzdhMQTlJeAnJgKEoLckU+wrvw+xYB2omH+wFyYMNK AX4xqQ36GtQUHZoQZ/UhAZcvrakC3jmoDMVBf8H1b0q6IZMsLsiCEx5R1CfIQ/clXZ7V tZ3vNnuAkW/WGMpvpyolESJvStOj5l/HJyvP4JWcKVaQQXHVEe1Dwh75euDj/topFIZ6 lnpgh4WE1jA2EqkFERkmUn/rbn+36pkI2IT/LIpjy7C4VIDKY4Kf2vt59CRQzZG372a9 lPLXSOw5SwvlDj+vFR3AKLjfKXI4OJXuo3+1qHkYRSbOHzsZwCwv7LUyqrHaf3LKs3mL jEoQ== X-Gm-Message-State: AOJu0Yzd4gf+5Mco1mkt4sbRUn3Uk1xNG4dDGoewD6G+9RX1VHST7r0/ Sl80LKi9mrwRWhWxQMHfmK4BJZU/vg6iYDFfij3gj8iPzoJRZblAkxNTZYrZOIzDVmC1qgs+Um2 ngg== X-Received: by 2002:a05:6512:470:b0:511:558f:f398 with SMTP id x16-20020a056512047000b00511558ff398mr4020897lfd.27.1707309856522; Wed, 07 Feb 2024 04:44:16 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCWUfxRIv628Ft1s4vsqMetJ4D0KYc+bJcLlrXtDgADM8wt0fBL35X1KMIGKvTu88pvsth5LRpV/moOofz9IAHLIjMqSGoC4 Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:16 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Kushal Pal Subject: [COMMITTED 19/25] gccrs: Use AssociatedItem in place of TraitItem Date: Wed, 7 Feb 2024 12:44:05 +0100 Message-ID: <20240207114419.1100894-20-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244786774902651 X-GMAIL-MSGID: 1790244786774902651 From: Kushal Pal gcc/rust/ChangeLog: * ast/rust-ast.h: Replace TraitItem with AssociatedItem. * ast/rust-item.h (class Trait): Likewise. * expand/rust-expand-visitor.cc (ExpandVisitor::visit): Likewise. * parse/rust-parse-impl.h (Parser::parse_trait): Likewise. * parse/rust-parse.h: Likewise. Signed-off-by: Kushal Pal --- gcc/rust/ast/rust-ast.h | 6 +++--- gcc/rust/ast/rust-item.h | 16 ++++++++-------- gcc/rust/expand/rust-expand-visitor.cc | 3 ++- gcc/rust/parse/rust-parse-impl.h | 6 +++--- gcc/rust/parse/rust-parse.h | 2 +- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/gcc/rust/ast/rust-ast.h b/gcc/rust/ast/rust-ast.h index e96ac349733..1422d77eade 100644 --- a/gcc/rust/ast/rust-ast.h +++ b/gcc/rust/ast/rust-ast.h @@ -1907,11 +1907,11 @@ public: return std::move (item); } - std::unique_ptr take_trait_item () + std::unique_ptr take_trait_item () { rust_assert (!is_error ()); - return std::unique_ptr ( - static_cast (assoc_item.release ())); + return std::unique_ptr ( + static_cast (assoc_item.release ())); } std::unique_ptr take_external_item () diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index 1553f29ad2d..1defecc4452 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -3140,7 +3140,7 @@ class Trait : public VisItem std::vector> type_param_bounds; WhereClause where_clause; std::vector inner_attrs; - std::vector> trait_items; + std::vector> trait_items; location_t locus; public: @@ -3171,9 +3171,9 @@ public: std::vector> generic_params, std::vector> type_param_bounds, WhereClause where_clause, - std::vector> trait_items, Visibility vis, - std::vector outer_attrs, std::vector inner_attrs, - location_t locus) + std::vector> trait_items, + Visibility vis, std::vector outer_attrs, + std::vector inner_attrs, location_t locus) : VisItem (std::move (vis), std::move (outer_attrs)), has_unsafe (is_unsafe), has_auto (is_auto), name (std::move (name)), generic_params (std::move (generic_params)), @@ -3199,7 +3199,7 @@ public: trait_items.reserve (other.trait_items.size ()); for (const auto &e : other.trait_items) - trait_items.push_back (e->clone_trait_item ()); + trait_items.push_back (e->clone_associated_item ()); } // Overloaded assignment operator with vector clone @@ -3223,7 +3223,7 @@ public: trait_items.reserve (other.trait_items.size ()); for (const auto &e : other.trait_items) - trait_items.push_back (e->clone_trait_item ()); + trait_items.push_back (e->clone_associated_item ()); return *this; } @@ -3244,11 +3244,11 @@ public: const std::vector &get_inner_attrs () const { return inner_attrs; } std::vector &get_inner_attrs () { return inner_attrs; } - const std::vector> &get_trait_items () const + const std::vector> &get_trait_items () const { return trait_items; } - std::vector> &get_trait_items () + std::vector> &get_trait_items () { return trait_items; } diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc index dad2417eac4..bc0149ca99d 100644 --- a/gcc/rust/expand/rust-expand-visitor.cc +++ b/gcc/rust/expand/rust-expand-visitor.cc @@ -903,7 +903,8 @@ ExpandVisitor::visit (AST::Trait &trait) expander.push_context (MacroExpander::ContextType::TRAIT); - std::function (AST::SingleASTNode)> extractor + std::function (AST::SingleASTNode)> + extractor = [] (AST::SingleASTNode node) { return node.take_trait_item (); }; expand_macro_children (MacroExpander::ContextType::TRAIT, diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index 89e3731a898..a7de948006b 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -5045,12 +5045,12 @@ Parser::parse_trait (AST::Visibility vis, AST::AttrVec inner_attrs = parse_inner_attributes (); // parse trait items - std::vector> trait_items; + std::vector> trait_items; const_TokenPtr t = lexer.peek_token (); while (t->get_id () != RIGHT_CURLY) { - std::unique_ptr trait_item = parse_trait_item (); + std::unique_ptr trait_item = parse_trait_item (); if (trait_item == nullptr) { @@ -5082,7 +5082,7 @@ Parser::parse_trait (AST::Visibility vis, // Parses a trait item used inside traits (not trait, the Item). template -std::unique_ptr +std::unique_ptr Parser::parse_trait_item () { // parse outer attributes (if they exist) diff --git a/gcc/rust/parse/rust-parse.h b/gcc/rust/parse/rust-parse.h index 34397540321..1614d19e4a5 100644 --- a/gcc/rust/parse/rust-parse.h +++ b/gcc/rust/parse/rust-parse.h @@ -169,7 +169,7 @@ public: = ParseRestrictions ()); std::unique_ptr parse_type (bool save_errors = true); std::unique_ptr parse_external_item (); - std::unique_ptr parse_trait_item (); + std::unique_ptr parse_trait_item (); std::unique_ptr parse_inherent_impl_item (); std::unique_ptr parse_trait_impl_item (); AST::PathInExpression parse_path_in_expression (); From patchwork Wed Feb 7 11:44:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197919 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2204923dyb; Wed, 7 Feb 2024 04:55:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IGCIC7vldpoQ3IxpKLILYAlQ5UrFvI3yTdrtQx+Oz5vZRmGU0stuLEUz3c4n5BCl5jIpxf1 X-Received: by 2002:ad4:5dec:0:b0:68c:c145:c90d with SMTP id jn12-20020ad45dec000000b0068cc145c90dmr683151qvb.49.1707310551293; Wed, 07 Feb 2024 04:55:51 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310551; cv=pass; d=google.com; s=arc-20160816; b=wwFiVV7dLHsitKXh0DkhE9oGYkkMbNqKh3+XNKN90iBrHW42xJD4tf8rh97ry0/X3s 1cX7JGR6wyDDoeNWQPoL5q5jjBKRHsxJDp/GTgmIEujwF61r2G7ldfIZtjkS+I3auFyC /7Jjx4fvbjpdMlQlG9NYBL+GwO17IKUUh9GpP2TRFdMOmQiqLRmTW2xoy+E7KaZ4tcro N7N/LjIwG5jodC0WGfVD2lqIUcbk7zMam1odelrdkXmm0ucR4hceKjorGlFpX9L/XYmr NG37UyZ57invUhQnwTnT6RRGiQxdx1mVTAedyiPYcANJJm1JuNWwE+9oWErD4zfG0kyq /ZZw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=wqNHLuLzlt/JmKsodfYBzj0FDtZBhZkR1ufIl17mH2k=; fh=f6HgfqAKQGYzbvwcp/F6Pk/F4YBNK9A4a2Cc4u0ELMs=; b=mHIBII5TBVBsnNjZCq+GwPQNEm+nXv2r/fA9pB740WLRAcK+TymAddh6yL6ZR8azdY beAl2vVkJJIB1TS+I2a9ZnTm90gQ0hS21nwlfeDa2rKO4o0oYJXgPC6jV8vgfq9IEMzw kITLIYnj2448rpMya//RTfeVcjhTwrlGHTPUTygBZSRVgCoCfdLBaU5/IbZnyQlhE526 9co+B0yUbjnE85kFdIQWDlVL+BNgLF6kPtu/HFHyniDT86hj2gO+pQd+mO5kdpLuwJvq WLmuq2dY7r/Ipd5t4fKEwe+xX1HQKi0rDIaWNsL7ss9ML6oNvmC6ldNVXhpAJ5y1oSGU 7bmA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=NQ0tgDdO; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCWXoiQ5En7uSldx+VGLQNXhkmLOgJ0OAIRbhJ02Aw9bNGbIZp0BsHoM0o3xeDoGVRNxz7DfbVPjVHfPe9OPrQ3+58zzCw== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id kd12-20020a056214400c00b0068cc01da4d1si579881qvb.420.2024.02.07.04.55.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:55:51 -0800 (PST) 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=@embecosm.com header.s=google header.b=NQ0tgDdO; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 058C63857C5B for ; Wed, 7 Feb 2024 12:55:51 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by sourceware.org (Postfix) with ESMTPS id AF5BB385801C for ; Wed, 7 Feb 2024 12:44:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AF5BB385801C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AF5BB385801C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::336 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309868; cv=none; b=U1qe7pKKl5H0mgNBhhu0ECYE3WktCTEcNQKruGDNpYuL4omp679+zLXUfOL6NzVLSu3ukQmsalv0hB0ouoPfCr3oO7teHmhHDgczViNW4e1HHo7tb6j2XhAl2xsIGGaJE67jbd7kgL//ajwW7AUvFaCJAvXwE6adoLOL8VsAtNU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309868; c=relaxed/simple; bh=mS31iCIkKmBLyOuai7/+dNRSqZPKTnVVU/Q1IbT2glo=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Qx/LFI9JAACB8GquFO6ivYUDeLkytZXTQXbLe5Yzk9wutotLbdF6gIWM1uOn4avfvvTEsVl5CIvr9iBDnbHZ0XTy4Kj2v8ZaEQE5ry6ISZftAbNaPiSR7LF9UOrvLhx7SuI2G9uRo5MaDfx0swJSZIIiPX+3CtUV0dQ/4712gDU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-40fe79f1aaaso4936015e9.0 for ; Wed, 07 Feb 2024 04:44:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309857; x=1707914657; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=wqNHLuLzlt/JmKsodfYBzj0FDtZBhZkR1ufIl17mH2k=; b=NQ0tgDdO5+CWcVHW0WYSFqw4QNmp3b8fecnUOqEm+aOLLY7ox/OmiF8HT0NseNwxBc kUCMP5Rv5AXvE5c0to7vmTX0DDntJ20bBSbgC2v33hq5wNRDHRq+62BsNEhAJwDn5vhG xqBj2TDeFK6iDmF3/B9kFHJ0Fr+BZPF8N91dZiKC/0VX3Q6rwy5a4E0bffSlrjqQnxPN Ep1nKoLkUKxn18SqVd4mAqyOWEzIDZHaLRJ98p4MKrRgWrf4zyDoxuXQNrl5NPx5sX2y vtbtxHz6hC6avGzqcLENoRXXDHJe+WWXOHvHPhmkE9FV/TbrThXxahGbgzvryTxsS26o I+6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309857; x=1707914657; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=wqNHLuLzlt/JmKsodfYBzj0FDtZBhZkR1ufIl17mH2k=; b=M6wAZBqXQ/B/FPqsUDn5VD6owwP1hrLGLpu1pNfYkD1HIa0dVq16JQy1v1Rs89Qjdr y4Gj28DEh7s0TvKwCTvu0l3ubMYsPtAJfVMzU2Aa4HIU/3O5EkBffuuoCQPIQCeiBF2W aViniKxSKp+4icFeE5qbYSSjuUrAVSl/d7t4n8VScc9B42+sT0S/HJSJwvNLDitBSrwi pst89vBY5av+UeWNNKzrLuKg4NQMl8HHMUS443i1F6xoIdfGYBpR02nxo/vc+cUa9VFw FL6/f0TDBC9mo9S9pTdMkz8KKlEV7zOVRG4TyhAZGEcPYR8mmEoLLtP1eqI7wfe+IEwG /xpA== X-Gm-Message-State: AOJu0YxJ5yzVek2N6ut19EtE5gN9CHn3gvba2XgLCnonhs/z0CAUuiPL flm0cMcRnyu+aDGfWnaptqF8HWzqM11GFWhYuEhXrUlrW+qeDpMsICmykDdl/Hk7GZgtdhbVglH iyQ== X-Received: by 2002:a05:600c:1f90:b0:40e:a7cf:10e0 with SMTP id je16-20020a05600c1f9000b0040ea7cf10e0mr4814591wmb.20.1707309857296; Wed, 07 Feb 2024 04:44:17 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCWwWLkwuC6iYiPzCRhdJaxrAeXEmqoUB8utQT4qMHWfEiE064J1HpHzP5zTAx/RoSAZ80CkrY41DgnT3yiihprSUP/MtRku Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:16 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Kushal Pal Subject: [COMMITTED 20/25] gccrs: Add checks for Trait functions Date: Wed, 7 Feb 2024 12:44:06 +0100 Message-ID: <20240207114419.1100894-21-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244868803947324 X-GMAIL-MSGID: 1790244868803947324 From: Kushal Pal Since we want to use AST::Function class for trait functions as well, we need to check against specific conditions in ASTValidation phase. gcc/rust/ChangeLog: * checks/errors/rust-ast-validation.cc (ASTValidation::visit): Add checks for Trait functions. Signed-off-by: Kushal Pal --- gcc/rust/checks/errors/rust-ast-validation.cc | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/gcc/rust/checks/errors/rust-ast-validation.cc b/gcc/rust/checks/errors/rust-ast-validation.cc index ccb071f74b0..d1c8273a0b3 100644 --- a/gcc/rust/checks/errors/rust-ast-validation.cc +++ b/gcc/rust/checks/errors/rust-ast-validation.cc @@ -95,24 +95,28 @@ ASTValidation::visit (AST::Union &item) void ASTValidation::visit (AST::Function &function) { - std::set valid_context - = {Context::INHERENT_IMPL, Context::TRAIT_IMPL}; - const auto &qualifiers = function.get_qualifiers (); if (qualifiers.is_async () && qualifiers.is_const ()) rust_error_at (function.get_locus (), "functions cannot be both % and %"); - if (qualifiers.is_const () && context.back () == Context::TRAIT_IMPL) + if (qualifiers.is_const () + && (context.back () == Context::TRAIT_IMPL + || context.back () == Context::TRAIT)) rust_error_at (function.get_locus (), ErrorCode::E0379, - "functions in traits cannot be declared const"); + "functions in traits cannot be declared %"); // may change soon - if (qualifiers.is_async () && context.back () == Context::TRAIT_IMPL) + if (qualifiers.is_async () + && (context.back () == Context::TRAIT_IMPL + || context.back () == Context::TRAIT)) rust_error_at (function.get_locus (), ErrorCode::E0706, "functions in traits cannot be declared %"); - if (valid_context.find (context.back ()) == valid_context.end () + // if not an associated function but has a self parameter + if (context.back () != Context::TRAIT + && context.back () != Context::TRAIT_IMPL + && context.back () != Context::INHERENT_IMPL && function.has_self_param ()) rust_error_at ( function.get_self_param ()->get_locus (), From patchwork Wed Feb 7 11:44:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197909 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2202187dyb; Wed, 7 Feb 2024 04:50:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IGux881618dYvJby9UAN2SCfz2JbpV0WVYkVE4K5ruPHBGFcZKm92DLtEVbSRra52UBw1I7 X-Received: by 2002:a05:622a:648:b0:42c:333:d89b with SMTP id a8-20020a05622a064800b0042c0333d89bmr7771894qtb.2.1707310209534; Wed, 07 Feb 2024 04:50:09 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310209; cv=pass; d=google.com; s=arc-20160816; b=h4JpTejdurTlMWwDfDmQRM4N8j2iHkOSZ3M5rlPOChiuv+QLW2u+WQQy1zCHQl+Q4q JKhjbf4PrwL5kG15Eoe97qrxciUrm/wJw48ArfDuP73wHeBgeiXtfNdjKFfIPRAtLI19 fv58QFuyO818YEn7Dt5LTfB018aPVKqq0EZYd3/iSuxyYKikvBiNQo5+9KZu/O1ccG2Y kxDXYNkUASnitIoPUy4J0m/cvsl4iuC2yvXJBRXAOLRbtOosIdMQuPxNuaflWSxzVfVo /MynGYefWBonbEftzL6hDGBbWWUGB526bvXYiOo1IAeXXj/MvtB99RFWKvhku5ba7eeA D5jA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=XbUhUP6AxF+FUf7hCTn+jyUvuUbzDEMH13n5ULAmyrI=; fh=T0FgLyZUXHj9yTRLtbvtCp/vFktxsQScz2FTbe0tseA=; b=XApzHs4QRHO/R2dIgtm3tgREeHC4EJh95bDMFiHdVoYYjjEVl+leh+In2GaYOSPbp7 JxCTofwFuGUbMlMcccE+ToEIkl8WVLQMM0h/htm6bwD0NkDHmc/bjmaw93e3u9P/mUDb QkN7VHKuvG1OyFBa1E6Y7kfUj9gUSBEk73/vcc99C99JpomifENX834mt7Dl3goPxzW0 IyQJr5xE3s+u5z11i6Ce3kPRUJ1bY++reFsFbBqiauosYpw24FJy36BwAAy/TJoXxC4U oiPKEj50X3FsoyINVhblDWQcwPUhK0EeMtDW2KvZaTe56PwqfGF79kA+9tGwfZBZo8JG hrKw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=VjhZfbq+; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCWLsL9WU+gHawd/ID4m15HwpJcLZ37YUIxja0Y56mvsk3DHtyZdord5Ggng1vTC3FrcqgVVoEqWKWLEO9otAu8q7TyzEQ== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id x12-20020ac85f0c000000b0042c426013basi669490qta.192.2024.02.07.04.50.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:50:09 -0800 (PST) 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=@embecosm.com header.s=google header.b=VjhZfbq+; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2F6D53857C56 for ; Wed, 7 Feb 2024 12:50:09 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by sourceware.org (Postfix) with ESMTPS id 2183D3857C52 for ; Wed, 7 Feb 2024 12:44:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2183D3857C52 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2183D3857C52 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::333 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309872; cv=none; b=qAExDDX8mzwF/q014THV/WZ6J1jsZ4lHRW6R30plBZqCoNGAPfLuadTbOBHfnASYi+ehqCgX1K75JxavKpwcuabgIu2TVOd0V1+RJVFadW8p7fYkyQHQCsda20Cwja66pp0Rh96/Iz0cDTIEmiZP27/LbgMHf0vEzWAbDE1+zrM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309872; c=relaxed/simple; bh=8oFUY0hOsk7x7NvoBk0PI5dPTAZCdm26j22lKEulKf4=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=DBUDF0E41r81rjati3fqPJObymwfY7iEMwN+JXXbvL+KaPDDO8XOrptmsZy0FAZMo+MAM3+umRVeBaF1I+94TwdPlvr7ON/QL4cgT3/BlbXZkMQZf+GHxx6+jRmJpZKR/UPAF3IKVjQ2QQWNF63fZzcHCMHPD+5Wi3otbJzaSh0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-40fc52c2ae4so4827795e9.3 for ; Wed, 07 Feb 2024 04:44:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309858; x=1707914658; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=XbUhUP6AxF+FUf7hCTn+jyUvuUbzDEMH13n5ULAmyrI=; b=VjhZfbq+2gGSh3oi2yAdaJNYKGlI3kDpC3gFDjQMjV5on/mn7C+hNFIz9OhjdQqtP0 9QMaCgrnXHrO7OCGS91IN2Q2OdsXX1v4wkc31a+NPm/0vjtvsHL6LIeNTmJTu7z/yHpk 858g3lHMHUlxYDO6E/AtxT3cqc07rx1xu71bu27vvrf2LzXfLRVhXXMZ748Dy0wRzlsB BcLM6y4Rfnv2vI4tZIQxRUhcO8WXFytsCJLhitbVcLaGhz5H/YgE2HcXR7nwCXex3MwT IawUlOL692JMBve2YA+op9Ny6n0o3mG9Av3iBX7Xe42L1G/FM9Z1bxBi/U5a8lU/y7MG kuFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309858; x=1707914658; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=XbUhUP6AxF+FUf7hCTn+jyUvuUbzDEMH13n5ULAmyrI=; b=pEMFvj637gfcaucoy3itPctJq2RkOYiidObTUOzsmNb+10UCPyRuKxhwEUPmMEq3wt /62Ki70DISiRBx62QblJxaGVuKNwbOvKHFrL+z4cYkeHEbGCqIox7PZbr3sf1hXBKjXs wXblZtmGY/FsoFCVjtVWsAAK304+0dKnVh6DP3W72B7vAzhUcMhzNvCSAK69YCP1b+eF 9cFp1wVsFCi/GM4QfND9j39H4TUZYMb3vVWVgYbUgbqZAzZZLR2fiwI2AnIl6/3XT1nu sg1KtqPAuHLfvt0G/lxe2xjnWGIFdqSC3MYEwUUHCqxigmt6SRAmQ6HuyAT5HW8Yr308 TQrA== X-Gm-Message-State: AOJu0YyI52bjVMXIeowpLTSEWgWQopqjdQkOP7YWJ8MQPvoy/N1w40MU Iufz7GWk/lU59nEKPyqyCjGs8DKkelCB9AvJYjLPlvuIRw9AZ72nOzVdgw6ZPN9CRenl/Oc4aV7 RBw== X-Received: by 2002:a05:600c:5250:b0:40f:cf69:3e1a with SMTP id fc16-20020a05600c525000b0040fcf693e1amr4394460wmb.39.1707309858158; Wed, 07 Feb 2024 04:44:18 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCW10DT+WmC5QgfPAJJ+8kpVmLkLvQOrr5+M78YAljxPUWjQYTIlXusZ9Y+7px/3WwGuGgV6t8mysy9wL/V9XafPdSd7OlyG Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:17 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Kushal Pal Subject: [COMMITTED 21/25] gccrs: Add missing visitors for AST::Function. Date: Wed, 7 Feb 2024 12:44:07 +0100 Message-ID: <20240207114419.1100894-22-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244510128642317 X-GMAIL-MSGID: 1790244510128642317 From: Kushal Pal To use AST::Function instead of AST::TraitItemFunc and AST::TraitItemMethod, we need to provide similar visitors during lowering and resolving phase. gcc/rust/ChangeLog: * hir/rust-ast-lower-implitem.cc (ASTLowerTraitItem::visit): Provide visitor for AST::Function. * hir/rust-ast-lower-implitem.h: Likewise. * resolve/rust-ast-resolve-implitem.h: Likewise. * resolve/rust-ast-resolve-item.cc (ResolveTraitItems::visit): Likewise. * resolve/rust-ast-resolve-item.h: Likewise. Signed-off-by: Kushal Pal --- gcc/rust/hir/rust-ast-lower-implitem.cc | 86 +++++++++++++++++++ gcc/rust/hir/rust-ast-lower-implitem.h | 1 + gcc/rust/resolve/rust-ast-resolve-implitem.h | 20 +++++ gcc/rust/resolve/rust-ast-resolve-item.cc | 88 ++++++++++++++++++++ gcc/rust/resolve/rust-ast-resolve-item.h | 1 + 5 files changed, 196 insertions(+) diff --git a/gcc/rust/hir/rust-ast-lower-implitem.cc b/gcc/rust/hir/rust-ast-lower-implitem.cc index 98db1dccd7c..77230e7a8bf 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.cc +++ b/gcc/rust/hir/rust-ast-lower-implitem.cc @@ -227,6 +227,92 @@ ASTLowerTraitItem::translate (AST::AssociatedItem *item) return resolver.translated; } +void +ASTLowerTraitItem::visit (AST::Function &func) +{ + std::vector > where_clause_items; + HIR::WhereClause where_clause (std::move (where_clause_items)); + HIR::FunctionQualifiers qualifiers + = lower_qualifiers (func.get_qualifiers ()); + + std::vector > generic_params; + if (func.has_generics ()) + generic_params = lower_generic_params (func.get_generic_params ()); + + std::unique_ptr return_type + = func.has_return_type () ? std::unique_ptr ( + ASTLoweringType::translate (func.get_return_type ().get ())) + : nullptr; + + // set self parameter to error if this is a method + // else lower to hir + HIR::SelfParam self_param = func.has_self_param () + ? lower_self (func.get_self_param ()) + : HIR::SelfParam::error (); + + std::vector function_params; + for (auto &p : func.get_function_params ()) + { + if (p->is_variadic () || p->is_self ()) + continue; + + auto param = static_cast (p.get ()); + + auto translated_pattern = std::unique_ptr ( + ASTLoweringPattern::translate (param->get_pattern ().get ())); + auto translated_type = std::unique_ptr ( + ASTLoweringType::translate (param->get_type ().get ())); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, param->get_node_id (), + mappings->get_next_hir_id (crate_num), + UNKNOWN_LOCAL_DEFID); + + auto hir_param + = HIR::FunctionParam (mapping, std::move (translated_pattern), + std::move (translated_type), param->get_locus ()); + function_params.push_back (hir_param); + } + + HIR::TraitFunctionDecl decl (func.get_function_name (), + std::move (qualifiers), + std::move (generic_params), + std::move (self_param), + std::move (function_params), + std::move (return_type), + std::move (where_clause)); + bool terminated = false; + std::unique_ptr block_expr + = func.has_body () ? std::unique_ptr ( + ASTLoweringBlock::translate (func.get_definition ()->get (), + &terminated)) + : nullptr; + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, func.get_node_id (), + mappings->get_next_hir_id (crate_num), + mappings->get_next_localdef_id (crate_num)); + + auto *trait_item + = new HIR::TraitItemFunc (mapping, std::move (decl), std::move (block_expr), + func.get_outer_attrs (), func.get_locus ()); + translated = trait_item; + if (func.has_self_param ()) + { + // insert mappings for self + mappings->insert_hir_self_param (&self_param); + mappings->insert_location (self_param.get_mappings ().get_hirid (), + self_param.get_locus ()); + } + + // add the mappings for the function params at the end + for (auto ¶m : trait_item->get_decl ().get_function_params ()) + { + mappings->insert_hir_param (¶m); + mappings->insert_location (mapping.get_hirid (), param.get_locus ()); + } +} + void ASTLowerTraitItem::visit (AST::TraitItemFunc &func) { diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h index 3a266b41ed4..b9d12cc4a56 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.h +++ b/gcc/rust/hir/rust-ast-lower-implitem.h @@ -48,6 +48,7 @@ class ASTLowerTraitItem : public ASTLoweringBase public: static HIR::TraitItem *translate (AST::AssociatedItem *item); + void visit (AST::Function &func) override; void visit (AST::TraitItemFunc &func) override; void visit (AST::TraitItemMethod &method) override; void visit (AST::TraitItemConst &constant) override; diff --git a/gcc/rust/resolve/rust-ast-resolve-implitem.h b/gcc/rust/resolve/rust-ast-resolve-implitem.h index 365bdd6135f..d9c9bcb28c9 100644 --- a/gcc/rust/resolve/rust-ast-resolve-implitem.h +++ b/gcc/rust/resolve/rust-ast-resolve-implitem.h @@ -110,6 +110,26 @@ public: item->accept_vis (resolver); }; + void visit (AST::Function &function) override + { + auto decl + = CanonicalPath::new_seg (function.get_node_id (), + function.get_function_name ().as_string ()); + auto path = prefix.append (decl); + auto cpath = canonical_prefix.append (decl); + + resolver->get_name_scope ().insert ( + path, function.get_node_id (), function.get_locus (), false, + Rib::ItemType::Function, + [&] (const CanonicalPath &, NodeId, location_t locus) -> void { + rich_location r (line_table, function.get_locus ()); + r.add_range (locus); + rust_error_at (r, "redefined multiple times"); + }); + + mappings->insert_canonical_path (function.get_node_id (), cpath); + } + void visit (AST::TraitItemFunc &function) override { auto decl = CanonicalPath::new_seg ( diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc index 60eca5b13c7..6037fe59f5b 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.cc +++ b/gcc/rust/resolve/rust-ast-resolve-item.cc @@ -45,6 +45,94 @@ ResolveTraitItems::go (AST::AssociatedItem *item, const CanonicalPath &prefix, item->accept_vis (resolver); } +void +ResolveTraitItems::visit (AST::Function &function) +{ + auto decl + = CanonicalPath::new_seg (function.get_node_id (), + function.get_function_name ().as_string ()); + auto path = prefix.append (decl); + auto cpath = canonical_prefix.append (decl); + mappings->insert_canonical_path (function.get_node_id (), cpath); + + NodeId scope_node_id = function.get_node_id (); + resolver->get_name_scope ().push (scope_node_id); + resolver->get_type_scope ().push (scope_node_id); + resolver->get_label_scope ().push (scope_node_id); + resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); + resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); + resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); + + if (function.has_generics ()) + for (auto &generic : function.get_generic_params ()) + ResolveGenericParam::go (generic.get (), prefix, canonical_prefix); + + if (function.has_return_type ()) + ResolveType::go (function.get_return_type ().get ()); + + // self turns into (self: Self) as a function param + std::vector bindings + = {PatternBinding (PatternBoundCtx::Product, std::set ())}; + + // we make a new scope so the names of parameters are resolved and shadowed + // correctly + for (auto &p : function.get_function_params ()) + { + if (p->is_variadic ()) + { + auto param = static_cast (p.get ()); + PatternDeclaration::go (param->get_pattern ().get (), + Rib::ItemType::Param, bindings); + } + else if (p->is_self ()) + { + auto param = static_cast (p.get ()); + // FIXME: which location should be used for Rust::Identifier `self`? + AST::IdentifierPattern self_pattern ( + param->get_node_id (), {"self"}, param->get_locus (), + param->get_has_ref (), param->get_is_mut (), + std::unique_ptr (nullptr)); + + PatternDeclaration::go (&self_pattern, Rib::ItemType::Param); + + if (param->has_type ()) + { + // This shouldn't happen the parser should already error for this + rust_assert (!param->get_has_ref ()); + ResolveType::go (param->get_type ().get ()); + } + else + { + // here we implicitly make self have a type path of Self + std::vector> segments; + segments.push_back (std::unique_ptr ( + new AST::TypePathSegment ("Self", false, param->get_locus ()))); + + AST::TypePath self_type_path (std::move (segments), + param->get_locus ()); + ResolveType::go (&self_type_path); + } + } + else + { + auto param = static_cast (p.get ()); + ResolveType::go (param->get_type ().get ()); + PatternDeclaration::go (param->get_pattern ().get (), + Rib::ItemType::Param, bindings); + } + } + + if (function.has_where_clause ()) + ResolveWhereClause::Resolve (function.get_where_clause ()); + + // trait items have an optional body + if (function.has_body ()) + ResolveExpr::go (function.get_definition ()->get (), path, cpath); + + resolver->get_name_scope ().pop (); + resolver->get_type_scope ().pop (); + resolver->get_label_scope ().pop (); +} void ResolveTraitItems::visit (AST::TraitItemType &type) { diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index 712fe62336f..33a78e21957 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -35,6 +35,7 @@ public: static void go (AST::AssociatedItem *item, const CanonicalPath &prefix, const CanonicalPath &canonical_prefix); + void visit (AST::Function &type) override; void visit (AST::TraitItemType &type) override; void visit (AST::TraitItemFunc &func) override; void visit (AST::TraitItemMethod &func) override; From patchwork Wed Feb 7 11:44:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197910 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2202330dyb; Wed, 7 Feb 2024 04:50:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IGg7/vmoXJNmaiJ8WxZdeIB28YVutoQOgzeLjeLNcwxCRa8PbTEjqGMtAoGDBXnscSCSTfP X-Received: by 2002:a05:6902:2002:b0:dc7:3198:b080 with SMTP id dh2-20020a056902200200b00dc73198b080mr2257226ybb.51.1707310229572; Wed, 07 Feb 2024 04:50:29 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310229; cv=pass; d=google.com; s=arc-20160816; b=HBFvQttc7MaRCYCxekd4ux9tUCkbCH5QgiC2hTAl+vtnlW8dPLnF4sYVBfqvnlfttN shX2tQ48Ywctt+6jy8T2X+Bza7q5Jnkl7g2NVV18MCya8kkKZoKuKC4BNoN5IYpb/gXL FRdcxmK5JtNg0IJYpKKH0FpxlEPFD8yvyz9ndtBjTgRPsteJaMtqjPPtnlg+6j7z6AYF LD/46hIkZ1oqOTJ74djsJHuC3gr+O5coaz7wf5RoNXR0Pdtxy8oim/FptW/jhNHWvpFf SxB5aE5rSBqPfrMLu0FL26Er6y2qgMRdGR0tFvZKKLodxqIwt9RWTv/UywCrxC1u5QW8 vObA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=0fbYg0qjcE0eG4rgOLErIg97R0aD1gwVMHVuDp7h9oU=; fh=/fSCwYvZThQuPFQAsB1XTQttUI0igQsY1KIp/kg+uLQ=; b=iMoFEgRBP9WvrelMpwc1YAEFBBh5mwDKAWVtAaNA6ExLr1TaqApYzNAnOoPgoWbKSE OilL09plOYLJj7ez6XOMGMSJ0FTZwrlpqld+oNDuM1vo5g2//7CmPf40vuKNei989FMe 60kUGcEP/4N9vEbzG1dWfFvQ88EOQeuK0DyJsrlxie1m3dMYMR8jFg3bQcORXC8iRbfb HDDAQYI0FfXbfKDafrrKEJrvIw/pbaEmMOqmCBwZn1e4D3szm6GztaoBEngjhsytMMbV xd8YXR0Ivn0bZKbE7NwVmqf7x4vbRw+50gWR+ugptZ5IucMS2+alrubxKL60UPJ+e5tq yYKw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=K+s43pEn; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCUxy0ZMaFwXgau3KSGfydr5uIh6ZFWsM84VrT22JUqrKm1E6kpG31x+JBU/NYl5FoK7gzsFBlxH4i3tU24c0PN19fhH9Q== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id y9-20020a0ceac9000000b0068c5a4d359asi1010756qvp.75.2024.02.07.04.50.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:50:29 -0800 (PST) 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=@embecosm.com header.s=google header.b=K+s43pEn; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D43543857C76 for ; Wed, 7 Feb 2024 12:50:28 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by sourceware.org (Postfix) with ESMTPS id B72CE3857C43 for ; Wed, 7 Feb 2024 12:44:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B72CE3857C43 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B72CE3857C43 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::334 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309872; cv=none; b=dOT6n7ONws36rIq3C2n5RYZtfsJ5YSdUbUbyy8kqATXWdo5iQXHlN6GbKoyPSfJe+RX3bCcmS9BTBgcLoHELujtxo/V/T78cuaLgPWUCnwXdYuUptp4oH4Ah0aeTt3rlZO+s1yV65w1wXNjdiclD9pgtvqrBL6nb/f/f/bOH1uo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309872; c=relaxed/simple; bh=QFq77KHS7PgRPyVne3PnC9MVVPmfvigbzaVGEihY5/o=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=hFDt1IDfM0/RaaYRAsc8hWE/4eYO3xDmnCGkXv/oFBv15IEM60Zpq/nNAcqUHqVT95c48ddvvouky8ORlp1I00EQZAyHyEQkryhSp9KPqMidZKTKfO2kZpw84UN1IL7XkSa0ue/m9eGWj7PC19loOgqL5Jbp+QgB5AHQyeskteg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-40fc6578423so4928205e9.0 for ; Wed, 07 Feb 2024 04:44:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309859; x=1707914659; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=0fbYg0qjcE0eG4rgOLErIg97R0aD1gwVMHVuDp7h9oU=; b=K+s43pEnp6uzIaw9Av2uJGCCuTuOQKUcEQ1PuA2tscBqFyCdOtwE0brjSTXqewevXQ jbv8nH9rUqrys/3fQRIFrJKO8T/guuW7uS+0Lvxfx/0CNwTjPX+fJuJy5gZoPjK7n7qj 0Fb2juEmhWSIzK5ehO0sp/IiLneE/S32k56tsFzmQMqqA9UweZA22NHNNUzIB5VYdR+l CysdOYSQ6+h5F38G+FO1+xQVLzdZI0nz6znVlkWU0jsHp4CiWfSISfcAZYwD1/xuT1oa uLwHlsHS1wJ9+YgLyHVrelb4QAfW+1mpZ2bdoC/5QC3RtcyAArrG/IdH46wXr+5MVPqN zWpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309859; x=1707914659; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=0fbYg0qjcE0eG4rgOLErIg97R0aD1gwVMHVuDp7h9oU=; b=N1JgA0LsudB0Dq2t8uh6yvLFFJ2PsvzeeaYgwnL4vQnsMtE2jSmSggDhntK7kHi1hK liFKg3L/+gJlESfmch3XyzeltT2fg0DyBX1hZ/hJJJMpM34RT/XFweK7bfvKpAVf9rbv uqqWN/RvsKTEIUfPQ3smpilLCENLJyJKHX8r0UWSTMcT8CWNYIxIU16qCjq7n8yIBHdV tqAmhkEnCWfUh4cs6vH3tQQ6VRSssRFRPubbThHRRGJO75yCCkZKuMC9NORDRIrlROVd qT7A6vF8QneayPzWxrJR8NBneI4MQYNrzF/N/qTHMzkAr1yLaSMsVgagCrcRo1xc+0tI 52LQ== X-Gm-Message-State: AOJu0Yz8dvvPAApUytfRJTH+vgQKGO7CEv5Ws+QSUUuN0zftoU+U+U3t TwfK4XoHaV3v+Iyc6m3LM4aK1xcE6RoH6l8VlQAz3xGgv1U05GCmtcd5aMwV83DIVnA1s51ugK7 png== X-Received: by 2002:a05:600c:1d20:b0:40f:e1ec:5d41 with SMTP id l32-20020a05600c1d2000b0040fe1ec5d41mr4442712wms.32.1707309859395; Wed, 07 Feb 2024 04:44:19 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCVMHkRs+IvzwQta5xgYYcy8q08Q3eQeQJB41JieQzPU2/kb8aFf6NoVLhJ6lvPVhNw6+boFKakNQEbMw3fmQLQTKOlaShpE Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:18 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Kushal Pal Subject: [COMMITTED 22/25] gccrs: Fix inconsistent formatting. Date: Wed, 7 Feb 2024 12:44:08 +0100 Message-ID: <20240207114419.1100894-23-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244531253809433 X-GMAIL-MSGID: 1790244531253809433 From: Kushal Pal gcc/testsuite/ChangeLog: * rust/compile/issue-2040.rs: Enclose 'const' in single quotes. Signed-off-by: Kushal Pal --- gcc/testsuite/rust/compile/issue-2040.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/rust/compile/issue-2040.rs b/gcc/testsuite/rust/compile/issue-2040.rs index fbac168b9f3..89895420a4d 100644 --- a/gcc/testsuite/rust/compile/issue-2040.rs +++ b/gcc/testsuite/rust/compile/issue-2040.rs @@ -4,7 +4,7 @@ trait Foo { impl Foo for u32 { const fn f() -> u32 { - // { dg-error "functions in traits cannot be declared const" "" { target *-*-* } .-1 } + // { dg-error "functions in traits cannot be declared .const." "" { target *-*-* } .-1 } 22 } } From patchwork Wed Feb 7 11:44:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197921 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2205893dyb; Wed, 7 Feb 2024 04:57:49 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWH9nZP/6JuiI2CgZ6ELyjgN8ERh4dVTJELK8/Y+y+1DZTQQ/w0IthA8s1Z1Kek47boyC7vcRNwVJd60k4YcnRol5Kd4g== X-Google-Smtp-Source: AGHT+IFBKtsQrEGoU6MA2Fy8ovE4epuCNM3f3dFC12ikR+8HpkiBMsM9Y/RliMtUC73YhgU5wvRN X-Received: by 2002:a05:620a:4713:b0:783:ccc5:b2b4 with SMTP id bs19-20020a05620a471300b00783ccc5b2b4mr7312322qkb.71.1707310669505; Wed, 07 Feb 2024 04:57:49 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310669; cv=pass; d=google.com; s=arc-20160816; b=MTakEHQkpR2/eCVUf/rBqP7trdmB3lKkC5FtYT67BtK6k57Xgz/hic0+nlXV1fVdsH a+aEVsgXM0TCVM4KNPBMwk/AcXSe5Ia5bQLy6OsSPJ0JTDfoMfIIfU1ichniYYBf2iD7 I1BnUWmkY05HjuEcTmbugEw7Qocw+lpE3vaM4eg9sYqhigsqTFw+0chiOlW7ymTnac1c YQBWnyxq9/RhKHyaW5tKQyxFWiLXaBfdSkn+qHERYoPGJOHwsS2sI4buF7cj5mhpDLxt 4iuRRpgE8RAGtedPmrHUwOFjVdlKG9QJp3e1dK7+INdTHJ2dwrVlqNK1fRXuRI2czgJZ kObw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=275pzFBZbtbGNKqcC26qikhiqLmdIMI55PSWmHZe7Lk=; fh=u4MHiZBWsvwlCYa14eiNT7uSiRHR1HxFrhGy77hyDw0=; b=uF5B+9/x2yPDCBEfBicpmt1w6R94OMTo/SOf+2HLzPeGBsEtaDCX/EpXLQ4u5lWXpu gL0uHn7yBOUEV/fu8Zr6Ebml/ohnZn/rTPLZNR8ckPmGW/Tmhu/xdnwJIFheRc/6HyWI uCk5zXRwy//CDc7zQmZ5sMU57Bt2ZN1dcTNQoLyg0WbOOzTc7oR9SakkgcBx9wQUK/UO lvmc7b6iI8wlMJtpH2fDn5iPjyXI2HzmYrpiEe8F9rmW9tnoPFoSX044logHUK0qJWpK gtFKQ1UHR8++lWwtpdlPvHn0Spbt8g7FeRlCAULqYEGwDyhhh6D6Hodq98MfO1oVNLYn 0v+Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=BqTk5e17; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCXZ1NRZgcTAyB1iDqsO7Ove/jOY/h2i9GXQTMqLhWs6tcWxWPDFvZVguJjJqfBEyYhzj9NMK7LzXut8NFpn2BXdlXefmQ== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id s14-20020a05620a030e00b00783f739287csi1024023qkm.212.2024.02.07.04.57.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:57:49 -0800 (PST) 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=@embecosm.com header.s=google header.b=BqTk5e17; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3C5813857828 for ; Wed, 7 Feb 2024 12:57:49 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by sourceware.org (Postfix) with ESMTPS id 0E3C13858001 for ; Wed, 7 Feb 2024 12:44:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0E3C13858001 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0E3C13858001 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::333 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309880; cv=none; b=WmahVXDY+rcOZzpwSF0koHNpd/RbW+XWGJqWoSlQNw/xtz2spiz+4DB6PPuwaFx/OUlWVdpEcmsPf8LqA+na+rDN0R7SLJCL1muJ0EEno7Hn5Dn197tpmPBbyqyuhozPwfxbLjy7WOTwd8b7167HTOa25eoMLy1euTvrUZbiwho= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309880; c=relaxed/simple; bh=TkjHz7aPL9v3vq5OWNodpPcmmN04DJBTOXd1vQJxsew=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=et8vh4ux7qrZiLqkL7iMaTUz90R86Q3Jo7TNFDyqFpbU3FNmuI+AelvZdAJrTfLwcIeGXkS/p9ZZcO6LSgVJjmNrXbOcGa2goS+sag3v8QJnTwHowFd37yiNvnkDrOAP7/RTi7M8nC6Qpw2FXfjRy7VkWXrGQ8SYsoJ5C1xv+r0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-40efcb37373so5038575e9.2 for ; Wed, 07 Feb 2024 04:44:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309860; x=1707914660; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=275pzFBZbtbGNKqcC26qikhiqLmdIMI55PSWmHZe7Lk=; b=BqTk5e17mRmSssVA9whRieYUP9bHcMHLXrwynwurYqoc4MWUNtThAm1tzQOdWGoZcu 1KAT0t7S6e5u2fEUWOSxR5d0xZKuIqI8Sdw2RVU6dIlkA0ui2E71ZouzH3MBye5EljM/ 2aQMmha1vzGNHLYbxgOqpIqRIWIvPtSOa4WltZVA5MeyMD0EIayMfvp8AuBCDf4KP4ft DmDKk4Znn76ZGcnuej+1/zmaW1w1Jz72ApQaYcHrWX10Qk4c9m3h6puWQtgci2IekRRB 9zSAm2Q4tJJ9fuqIt7XlWoT1x912qJpUQf/1jXxflKx7/invlLozIx70ggPekmWIfGTv qakQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309860; x=1707914660; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=275pzFBZbtbGNKqcC26qikhiqLmdIMI55PSWmHZe7Lk=; b=FPSeg01cr4uLhEkEK/C/4msazQy0viS2FZkYte6AA69NT80aTrCXEp4pxG0Skzq6Hw fyyTyzjzJdtRfRHs2DNxCyyfEQsJaqwDD6oqdL/3q/8r/Sn1YlF/WWGpXZPspzM83uff x6Hd8EILFvE65v/ZNflyvw22ECan7UWlMYXLjsFf5D7f3nfBrkGsmZKC/asMV+smh5Tc EK3fnYgsMNDWt/747srdKZ9+68Chhs6wyVB+iGJQ5nlaIrmCl7VpnpnKrinn9oZwmedL AgoNMDkrr+zOYb0U4Fz+4UrcjpaDubdkgRUt9HdXdDFqdOLbSbhvvb+THuHpw/l5w7UG cUYA== X-Gm-Message-State: AOJu0YweEfVbnrm2nK+nIMUtbzJCOUKj8rW9HUtcxurhMJ+OPaeueNmL NnTXvvusfBvoZ6YgEWdhS4EucaHg7900BVrL11xkKmtL3pj42FiJb/h6Xy4Z1YrZuoyiPLi2xYE CfA== X-Received: by 2002:a05:600c:1c01:b0:40e:b313:b8db with SMTP id j1-20020a05600c1c0100b0040eb313b8dbmr4726906wms.28.1707309860054; Wed, 07 Feb 2024 04:44:20 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCXzfd8ofodheRGppLdOQi5XxTjB1jXe9BuNhCzmD4VnYj33Y7paOCc45n/+/R1S9PERSYdD/R8yx71vKpyUValc7EylCsKt Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:19 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Kushal Pal Subject: [COMMITTED 23/25] gccrs: Parse trait functions as `AST::Function`. Date: Wed, 7 Feb 2024 12:44:09 +0100 Message-ID: <20240207114419.1100894-24-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244992591885544 X-GMAIL-MSGID: 1790244992591885544 From: Kushal Pal To use AST::Function for trait functions, we can parse trait functions using available parse_function(). gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_trait_item): Use parse_function() to parse trait functions. Signed-off-by: Kushal Pal --- gcc/rust/parse/rust-parse-impl.h | 127 +------------------------------ 1 file changed, 2 insertions(+), 125 deletions(-) diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index a7de948006b..ed264371db7 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -5108,132 +5108,9 @@ Parser::parse_trait_item () case ASYNC: case UNSAFE: case EXTERN_KW: - case FN_KW: { - /* function and method can't be disambiguated by lookahead alone - * (without a lot of work and waste), so either make a - * "parse_trait_function_or_method" or parse here mostly and pass in - * most parameters (or if short enough, parse whole thing here). */ - // parse function and method here - - // parse function or method qualifiers - AST::FunctionQualifiers qualifiers = parse_function_qualifiers (); - - skip_token (FN_KW); - - // parse function or method name - const_TokenPtr ident_tok = expect_token (IDENTIFIER); - if (ident_tok == nullptr) - return nullptr; - - Identifier ident{ident_tok}; - - // parse generic params - std::vector> generic_params - = parse_generic_params_in_angles (); - - if (!skip_token (LEFT_PAREN)) - { - // skip after somewhere? - return nullptr; - } - - /* now for function vs method disambiguation - method has opening - * "self" param */ - auto initial_param = parse_self_param (); - if (!initial_param.has_value () && initial_param.error () != NOT_SELF) - return nullptr; - /* FIXME: ensure that self param doesn't accidently consume tokens for - * a function */ - bool is_method = false; - if (initial_param.has_value ()) - { - if ((*initial_param)->is_self ()) - is_method = true; - - /* skip comma so function and method regular params can be parsed - * in same way */ - if (lexer.peek_token ()->get_id () == COMMA) - lexer.skip_token (); - } - - // parse trait function params - std::vector> function_params - = parse_function_params ( - [] (TokenId id) { return id == RIGHT_PAREN; }); - - if (!skip_token (RIGHT_PAREN)) - { - // skip after somewhere? - return nullptr; - } - - if (initial_param.has_value ()) - function_params.insert (function_params.begin (), - std::move (*initial_param)); - - // parse return type (optional) - std::unique_ptr return_type = parse_function_return_type (); - - // parse where clause (optional) - AST::WhereClause where_clause = parse_where_clause (); - - // parse semicolon or function definition (in block) - const_TokenPtr t = lexer.peek_token (); - std::unique_ptr definition = nullptr; - switch (t->get_id ()) - { - case SEMICOLON: - lexer.skip_token (); - // definition is already nullptr, so don't need to change it - break; - case LEFT_CURLY: - definition = parse_block_expr (); - /* FIXME: are these outer attributes meant to be passed into the - * block? */ - break; - default: - add_error ( - Error (t->get_locus (), - "expected %<;%> or definiton at the end of trait %s " - "definition - found %qs instead", - is_method ? "method" : "function", - t->get_token_description ())); - - // skip? - return nullptr; - } + case FN_KW: + return parse_function (std::move (vis), std::move (outer_attrs)); - // do actual if instead of ternary for return value optimisation - if (is_method) - { - AST::TraitMethodDecl method_decl (std::move (ident), - std::move (qualifiers), - std::move (generic_params), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - - // TODO: does this (method_decl) need move? - return std::unique_ptr ( - new AST::TraitItemMethod (std::move (method_decl), - std::move (definition), - std::move (outer_attrs), - tok->get_locus ())); - } - else - { - AST::TraitFunctionDecl function_decl (std::move (ident), - std::move (qualifiers), - std::move (generic_params), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - - return std::unique_ptr (new AST::TraitItemFunc ( - std::move (function_decl), std::move (definition), - std::move (outer_attrs), tok->get_locus ())); - } - } default: { // TODO: try and parse macro invocation semi - if fails, maybe error. std::unique_ptr macro_invoc From patchwork Wed Feb 7 11:44:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197918 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2204595dyb; Wed, 7 Feb 2024 04:55:06 -0800 (PST) X-Google-Smtp-Source: AGHT+IFrvpmtN2XPmn3lBNpHr4ZQ6ExvrChvo46BY/jjT2GC8HDxK3nFuuLyztU997fxjbEW43ys X-Received: by 2002:a05:620a:841a:b0:783:def5:dae4 with SMTP id pc26-20020a05620a841a00b00783def5dae4mr5967430qkn.25.1707310506161; Wed, 07 Feb 2024 04:55:06 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310506; cv=pass; d=google.com; s=arc-20160816; b=w4OIyALBZNcpkxgmFzJJELULciLQV/UtelEjPucMNlO0UBu3pSsdR8BD3Wt4aS4R9F K/XBVrC15uW+6V8DiHVB14YcFbWqi03HZ7+eFJzxKB6cyBOb6Uqp55hnvXMA5/wTgz9a Jt5zYGEq0oP/+SNwI7bkWfSpen+H4SWe7d84A0ZM94078C/5sLrUtf+ndJNBTttpQB9i BscqWGU7h9f5eod9YJSePnf0kBbyl1w3zt6nUf9gtyQsCZjGp0beo0M+rCICxk27Y1An 151rdVuNUPlFduBMuf+I3//J4K887J4K3oXNdKxRSx3nAvrW7/zzcpY4tNUftjfTr5Gi QjMA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=IiELQjfVLw8DzGi433XmhY9l6pwWVbEz+I3wOUia++Q=; fh=tVPHOT1IfqCrzOSS1fqDyHhGaltvzgBp8u28E/UHwnM=; b=FVWHPJWxK7krk15SwnVkw4RIN2o4/rULlzP56Ltbz9pu7WboOK1BU61ZpTTeH3AXUM tQhxzClEFU5MktXr+ZaZjfpeO5gAoompNDUsxDeDfp4lsWaC/7/CGr/QBAjEHFc10tB9 UKNWyQmW0Ax3wpx+L/AZPn5idXqI1BSCsA+cDlrCoqDIM7eq53Ke+LxZKB+WX6XmpKK+ sJSI3JSH+AdLGxpgPoNTNvxetJrpLYxY1cgwqv5QVHM3o4l8CkJhuAru+3ltOwqjGzRB pgrdFvG7/GpsyDlZJRaRTUqiYq5YalsB//1sLRrA7abgC8uhjHRRpub8aTp0+1MuG9V0 HdFg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=Yk2GGVHG; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCVoUGC1pM4yW9fZkaMt9ioZPYPvGHB32+3s62PPfR5d96S+XOcofY7rl/efsztT2D0TLm6zXejq0zU0CVLflpVziGXReg== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id m8-20020a05620a24c800b007853b0ddad3si1080860qkn.148.2024.02.07.04.55.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:55:06 -0800 (PST) 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=@embecosm.com header.s=google header.b=Yk2GGVHG; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D1FFF385771A for ; Wed, 7 Feb 2024 12:55:05 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by sourceware.org (Postfix) with ESMTPS id C3AFF385800D for ; Wed, 7 Feb 2024 12:44:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C3AFF385800D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C3AFF385800D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::135 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309884; cv=none; b=XyyCJ7//RyoxT/QrTlDhild3YNuahuiYqld3Fu19IpHizIjaPiwArW+eFCuUO+j04JgFDCn4aKO8+z1GhuCLvkiuvrDifSWu5NglmSrcNSYHR3ZuAOvi3i6Sc47FgbSaBdA62vClce1URuTBaj41/gbqCi1yYmXW7vfCjsADYCg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309884; c=relaxed/simple; bh=VoHbSN5/sU+TdLzNG9GC73nQT8ueeQ2R9eHkd2ltVX8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=WwstX3o+1wdGKs0HP8RigwJVjBW/YlN7v9MSx4BjgbLKIe9s6oYxO2A/NWqkLakSbeOffdNynzO7wA2EPTXySzg0oshi4MC6UOnK34wFsDQ7DSoPrZtK5OhJ+yTjk/HOy1ebFN8D1/p0NpSS3ViXKs5rjzowitNnGvGH+28rhoo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-511616b73ddso983043e87.0 for ; Wed, 07 Feb 2024 04:44:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309862; x=1707914662; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=IiELQjfVLw8DzGi433XmhY9l6pwWVbEz+I3wOUia++Q=; b=Yk2GGVHG2HEBFGqBx1xYkTAg4q9ubiiPmITceJNMDGB/IzU7zs8Lrxcxrtay3rHsIq fRGS3XR6HbwMAU9hJ9shqEAHS2jc37JLhw2yVY0F5obfK42Cv02b5QQY/TweCUgAsI6C rass+fBC+pXm4TVyH84SBT+pV8LTUHAHx4XUkMXG687NbrGHqVPBlhPIiB+D9xHn+51J ljcHht8cL9Ha1Q31D3bGX0UU4qCgc8p0xFms2R46zjRyZKzJPfnXAXOuEyOBwB5TL7wu XEpKGUQO9X8Rv0Dd2oyFuHpfzbV4BLQSfkvkBgn2YpNoyLpplPtw3lq/Vw5A5Z4BJNa+ D0VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309862; x=1707914662; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=IiELQjfVLw8DzGi433XmhY9l6pwWVbEz+I3wOUia++Q=; b=s6qU4Xt5XPI9XuBBL1sex0qK4nHQg1kD+1NtbHYfwOyjiJPhGiu6mQXtCyJoyN/++y 80Mpi60NrtwsUwWqW7HGzl3bAdsWOMTl5KpGTJthIUHOXXh0viyu79w9/MEfWjj+W/S0 yWWTWJ/J10j7fcwYaAuMkmDdd15NxLkYV3I/u+n9vb0RtAg0nx9Ys98wa9p2dxvfbJjh 88w96/wQvLZm7qfp/wib5LBN0aiWgBQ9CnX14IHz4KwsY9iCyJ0omjWGhSVTZ7/s79uA Bzs3tu6eII2olb0ynavQTCnGnzcxvcOjAIgVnUaCJhahph6NL3g352q0MMsH+aARXD3h udKQ== X-Gm-Message-State: AOJu0Yw6xP+90qj5JdkXO1QrFVzUMlFi6qk8GjZtzpokFHyEMfteyDRr wHpXvh8vBZTCiwEJ2233unoK2Tua+BEbr96oS6I0R9qGXhre6fyiA2UVeeiH2+iFvXqJinX+zEE IzQ== X-Received: by 2002:a05:6512:3253:b0:511:55b3:bbe2 with SMTP id c19-20020a056512325300b0051155b3bbe2mr3362225lfr.66.1707309861478; Wed, 07 Feb 2024 04:44:21 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUkl3FprjP0aQGsgsh3pL/FFPQAbhe9YrNiW9ai2aTTzqV3Iuy7Di8AxItw+nncrlDsR0OVcizDobGfe7WABv59KodioU86 Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:20 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Kushal Pal Subject: [COMMITTED 24/25] gccrs: Remove obsolete classes and functions. Date: Wed, 7 Feb 2024 12:44:10 +0100 Message-ID: <20240207114419.1100894-25-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244821313420170 X-GMAIL-MSGID: 1790244821313420170 From: Kushal Pal Trait functions now use AST::Function class, so classes AST::TraitItemFunc, AST::TraitItemMethod, AST::TraitFunctionDecl, AST::TraitMethodDecl and their related functions can be removed. gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Remove obsolete classes and functions. * ast/rust-ast-collector.h: Likewise. * ast/rust-ast-full-decls.h (class TraitFunctionDecl): Likewise. (class TraitItemFunc): Likewise. (class TraitMethodDecl): Likewise. (class TraitItemMethod): Likewise. * ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Likewise. * ast/rust-ast-visitor.h: Likewise. * ast/rust-ast.cc (TraitItemFunc::TraitItemFunc): Likewise. (TraitItemFunc::operator=): Likewise. (TraitItemFunc::as_string): Likewise. (TraitFunctionDecl::as_string): Likewise. (TraitItemMethod::TraitItemMethod): Likewise. (TraitItemMethod::operator=): Likewise. (TraitItemMethod::as_string): Likewise. (TraitMethodDecl::as_string): Likewise. (TraitItemFunc::accept_vis): Likewise. (TraitItemMethod::accept_vis): Likewise. * ast/rust-item.h (class TraitFunctionDecl): Likewise. (class TraitItemFunc): Likewise. (class TraitMethodDecl): Likewise. (class TraitItemMethod): Likewise. * checks/errors/rust-ast-validation.cc (ASTValidation::visit): Likewise. * checks/errors/rust-ast-validation.h: Likewise. * checks/errors/rust-feature-gate.h: Likewise. * expand/rust-cfg-strip.cc (CfgStrip::maybe_strip_trait_function_decl): Likewise. (CfgStrip::maybe_strip_trait_method_decl): Likewise. (CfgStrip::visit): Likewise. * expand/rust-cfg-strip.h: Likewise. * expand/rust-derive.h: Likewise. * expand/rust-expand-visitor.cc (ExpandVisitor::expand_trait_function_decl): Likewise. (ExpandVisitor::expand_trait_method_decl): Likewise. (ExpandVisitor::visit): Likewise. * expand/rust-expand-visitor.h: Likewise. * hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Likewise. * hir/rust-ast-lower-base.h: Likewise. * hir/rust-ast-lower-implitem.cc (ASTLowerTraitItem::visit): Likewise. * hir/rust-ast-lower-implitem.h: Likewise. * resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Likewise. * resolve/rust-ast-resolve-base.h: Likewise. * resolve/rust-ast-resolve-implitem.h (visit): Likewise. * resolve/rust-ast-resolve-item.cc (ResolveTraitItems::visit): Likewise. * resolve/rust-ast-resolve-item.h: Likewise. * resolve/rust-default-resolver.cc (DefaultResolver::visit): Likewise. * resolve/rust-default-resolver.h: Likewise. * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Likewise. * resolve/rust-toplevel-name-resolver-2.0.h: Likewise. * util/rust-attributes.cc (AttributeChecker::visit): Likewise. * util/rust-attributes.h: Likewise. Signed-off-by: Kushal Pal --- gcc/rust/ast/rust-ast-collector.cc | 34 -- gcc/rust/ast/rust-ast-collector.h | 2 - gcc/rust/ast/rust-ast-full-decls.h | 4 - gcc/rust/ast/rust-ast-visitor.cc | 45 -- gcc/rust/ast/rust-ast-visitor.h | 6 - gcc/rust/ast/rust-ast.cc | 209 --------- gcc/rust/ast/rust-item.h | 406 ------------------ gcc/rust/checks/errors/rust-ast-validation.cc | 17 - gcc/rust/checks/errors/rust-ast-validation.h | 1 - gcc/rust/checks/errors/rust-feature-gate.h | 2 - gcc/rust/expand/rust-cfg-strip.cc | 105 ----- gcc/rust/expand/rust-cfg-strip.h | 4 - gcc/rust/expand/rust-derive.h | 2 - gcc/rust/expand/rust-expand-visitor.cc | 54 --- gcc/rust/expand/rust-expand-visitor.h | 4 - gcc/rust/hir/rust-ast-lower-base.cc | 6 - gcc/rust/hir/rust-ast-lower-base.h | 2 - gcc/rust/hir/rust-ast-lower-implitem.cc | 159 ------- gcc/rust/hir/rust-ast-lower-implitem.h | 2 - gcc/rust/resolve/rust-ast-resolve-base.cc | 8 - gcc/rust/resolve/rust-ast-resolve-base.h | 2 - gcc/rust/resolve/rust-ast-resolve-implitem.h | 40 -- gcc/rust/resolve/rust-ast-resolve-item.cc | 155 ------- gcc/rust/resolve/rust-ast-resolve-item.h | 2 - gcc/rust/resolve/rust-default-resolver.cc | 8 - gcc/rust/resolve/rust-default-resolver.h | 2 - .../rust-toplevel-name-resolver-2.0.cc | 10 - .../resolve/rust-toplevel-name-resolver-2.0.h | 1 - gcc/rust/util/rust-attributes.cc | 8 - gcc/rust/util/rust-attributes.h | 2 - 30 files changed, 1302 deletions(-) diff --git a/gcc/rust/ast/rust-ast-collector.cc b/gcc/rust/ast/rust-ast-collector.cc index d5a98f1ccc7..fb0e6f9be1d 100644 --- a/gcc/rust/ast/rust-ast-collector.cc +++ b/gcc/rust/ast/rust-ast-collector.cc @@ -1948,23 +1948,6 @@ TokenCollector::visit_function_common (std::unique_ptr &return_type, } } -void -TokenCollector::visit (TraitItemFunc &item) -{ - auto func = item.get_trait_function_decl (); - auto id = func.get_identifier ().as_string (); - - push (Rust::Token::make (FN_KW, item.get_locus ())); - push (Rust::Token::make_identifier (UNDEF_LOCATION, std::move (id))); - push (Rust::Token::make (LEFT_PAREN, UNDEF_LOCATION)); - - visit_items_joined_by_separator (func.get_function_params ()); - - push (Rust::Token::make (RIGHT_PAREN, UNDEF_LOCATION)); - - visit_function_common (func.get_return_type (), item.get_definition ()); -} - void TokenCollector::visit (SelfParam ¶m) { @@ -1987,23 +1970,6 @@ TokenCollector::visit (SelfParam ¶m) } } -void -TokenCollector::visit (TraitItemMethod &item) -{ - auto method = item.get_trait_method_decl (); - auto id = method.get_identifier ().as_string (); - - push (Rust::Token::make (FN_KW, item.get_locus ())); - push (Rust::Token::make_identifier (UNDEF_LOCATION, std::move (id))); - push (Rust::Token::make (LEFT_PAREN, UNDEF_LOCATION)); - - visit_items_joined_by_separator (method.get_function_params (), COMMA); - - push (Rust::Token::make (RIGHT_PAREN, UNDEF_LOCATION)); - - visit_function_common (method.get_return_type (), item.get_definition ()); -} - void TokenCollector::visit (TraitItemConst &item) { diff --git a/gcc/rust/ast/rust-ast-collector.h b/gcc/rust/ast/rust-ast-collector.h index 55c13d103d0..246411fa15f 100644 --- a/gcc/rust/ast/rust-ast-collector.h +++ b/gcc/rust/ast/rust-ast-collector.h @@ -325,9 +325,7 @@ public: void visit (Union &union_item); void visit (ConstantItem &const_item); void visit (StaticItem &static_item); - void visit (TraitItemFunc &item); void visit (SelfParam ¶m); - void visit (TraitItemMethod &item); void visit (TraitItemConst &item); void visit (TraitItemType &item); void visit (Trait &trait); diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h index 0f95149a214..c96bbfb07d9 100644 --- a/gcc/rust/ast/rust-ast-full-decls.h +++ b/gcc/rust/ast/rust-ast-full-decls.h @@ -193,10 +193,6 @@ class Enum; class Union; class ConstantItem; class StaticItem; -class TraitFunctionDecl; -class TraitItemFunc; -class TraitMethodDecl; -class TraitItemMethod; class TraitItemConst; class TraitItemType; class Trait; diff --git a/gcc/rust/ast/rust-ast-visitor.cc b/gcc/rust/ast/rust-ast-visitor.cc index 586570377aa..cb7ba846c39 100644 --- a/gcc/rust/ast/rust-ast-visitor.cc +++ b/gcc/rust/ast/rust-ast-visitor.cc @@ -911,51 +911,6 @@ DefaultASTVisitor::visit (AST::StaticItem &static_item) visit (static_item.get_expr ()); } -void -DefaultASTVisitor::visit (AST::TraitFunctionDecl &decl) -{ - visit (decl.get_qualifiers ()); - for (auto &generic : decl.get_generic_params ()) - visit (generic); - visit (decl.get_where_clause ()); - for (auto ¶m : decl.get_function_params ()) - visit (param); - if (decl.has_return_type ()) - visit (decl.get_return_type ()); -} - -void -DefaultASTVisitor::visit (AST::TraitItemFunc &item) -{ - visit_outer_attrs (item); - visit (item.get_trait_function_decl ()); - if (item.has_definition ()) - visit (item.get_definition ()); -} - -void -DefaultASTVisitor::visit (AST::TraitMethodDecl &decl) -{ - visit (decl.get_qualifiers ()); - for (auto &generic : decl.get_generic_params ()) - visit (generic); - visit (decl.get_where_clause ()); - visit (decl.get_self_param ()); - for (auto ¶m : decl.get_function_params ()) - visit (param); - if (decl.has_return_type ()) - visit (decl.get_return_type ()); -} - -void -DefaultASTVisitor::visit (AST::TraitItemMethod &item) -{ - visit_outer_attrs (item); - visit (item.get_trait_method_decl ()); - if (item.has_definition ()) - visit (item.get_definition ()); -} - void DefaultASTVisitor::visit (AST::TraitItemConst &item) { diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index 43cd750f5f7..6c9715eb077 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -156,8 +156,6 @@ public: virtual void visit (Union &union_item) = 0; virtual void visit (ConstantItem &const_item) = 0; virtual void visit (StaticItem &static_item) = 0; - virtual void visit (TraitItemFunc &item) = 0; - virtual void visit (TraitItemMethod &item) = 0; virtual void visit (TraitItemConst &item) = 0; virtual void visit (TraitItemType &item) = 0; virtual void visit (Trait &trait) = 0; @@ -330,8 +328,6 @@ protected: virtual void visit (AST::Union &union_item) override; virtual void visit (AST::ConstantItem &const_item) override; virtual void visit (AST::StaticItem &static_item) override; - virtual void visit (AST::TraitItemFunc &item) override; - virtual void visit (AST::TraitItemMethod &item) override; virtual void visit (AST::TraitItemConst &item) override; virtual void visit (AST::TraitItemType &item) override; virtual void visit (AST::Trait &trait) override; @@ -420,8 +416,6 @@ protected: virtual void visit (AST::WhereClause &where); virtual void visit (AST::StructField &field); virtual void visit (AST::TupleField &field); - virtual void visit (AST::TraitFunctionDecl &decl); - virtual void visit (AST::TraitMethodDecl &decl); virtual void visit (AST::NamedFunctionParam ¶m); virtual void visit (AST::MacroRule &rule); virtual void visit (AST::MacroInvocData &data); diff --git a/gcc/rust/ast/rust-ast.cc b/gcc/rust/ast/rust-ast.cc index 360a9ceb6db..90fe9269404 100644 --- a/gcc/rust/ast/rust-ast.cc +++ b/gcc/rust/ast/rust-ast.cc @@ -3049,203 +3049,6 @@ NamedFunctionParam::as_string () const return str; } -TraitItemFunc::TraitItemFunc (TraitItemFunc const &other) - : TraitItem (other.locus), outer_attrs (other.outer_attrs), decl (other.decl) -{ - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); -} - -TraitItemFunc & -TraitItemFunc::operator= (TraitItemFunc const &other) -{ - TraitItem::operator= (other); - outer_attrs = other.outer_attrs; - decl = other.decl; - locus = other.locus; - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); - else - block_expr = nullptr; - - return *this; -} -std::string -TraitItemFunc::as_string () const -{ - std::string str = append_attributes (outer_attrs, OUTER); - - str += "\n" + decl.as_string (); - - str += "\n Definition (block expr): "; - if (has_definition ()) - str += block_expr->as_string (); - else - str += "none"; - - return str; -} - -std::string -TraitFunctionDecl::as_string () const -{ - std::string str - = qualifiers.as_string () + "fn " + function_name.as_string (); - - // generic params - str += "\n Generic params: "; - if (generic_params.empty ()) - { - str += "none"; - } - else - { - for (const auto ¶m : generic_params) - { - // DEBUG: null pointer check - if (param == nullptr) - { - rust_debug ( - "something really terrible has gone wrong - null pointer " - "generic param in trait function decl."); - return "NULL_POINTER_MARK"; - } - - str += "\n " + param->as_string (); - } - } - - str += "\n Function params: "; - if (has_params ()) - { - for (const auto ¶m : function_params) - str += "\n " + param->as_string (); - } - else - { - str += "none"; - } - - str += "\n Return type: "; - if (has_return_type ()) - str += return_type->as_string (); - else - str += "none (void)"; - - str += "\n Where clause: "; - if (has_where_clause ()) - str += where_clause.as_string (); - else - str += "none"; - - return str; -} - -TraitItemMethod::TraitItemMethod (TraitItemMethod const &other) - : TraitItem (other.locus), outer_attrs (other.outer_attrs), decl (other.decl) -{ - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); -} - -TraitItemMethod & -TraitItemMethod::operator= (TraitItemMethod const &other) -{ - TraitItem::operator= (other); - outer_attrs = other.outer_attrs; - decl = other.decl; - locus = other.locus; - node_id = other.node_id; - - // guard to prevent null dereference - if (other.block_expr != nullptr) - block_expr = other.block_expr->clone_block_expr (); - else - block_expr = nullptr; - - return *this; -} - -std::string -TraitItemMethod::as_string () const -{ - std::string str = append_attributes (outer_attrs, OUTER); - - str += "\n" + decl.as_string (); - - str += "\n Definition (block expr): "; - if (has_definition ()) - str += block_expr->as_string (); - else - str += "none"; - - return str; -} - -std::string -TraitMethodDecl::as_string () const -{ - std::string str - = qualifiers.as_string () + "fn " + function_name.as_string (); - - // generic params - str += "\n Generic params: "; - if (generic_params.empty ()) - { - str += "none"; - } - else - { - for (const auto ¶m : generic_params) - { - // DEBUG: null pointer check - if (param == nullptr) - { - rust_debug ( - "something really terrible has gone wrong - null pointer " - "generic param in trait function decl."); - return "NULL_POINTER_MARK"; - } - - str += "\n " + param->as_string (); - } - } - - str += "\n Function params: "; - if (has_params ()) - { - for (const auto ¶m : function_params) - str += "\n " + param->as_string (); - } - else - { - str += "none"; - } - - str += "\n Return type: "; - if (has_return_type ()) - str += return_type->as_string (); - else - str += "none (void)"; - - str += "\n Where clause: "; - if (has_where_clause ()) - str += where_clause.as_string (); - else - str += "none"; - - return str; -} - std::string TraitItemConst::as_string () const { @@ -5017,18 +4820,6 @@ StaticItem::accept_vis (ASTVisitor &vis) vis.visit (*this); } -void -TraitItemFunc::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - -void -TraitItemMethod::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - void TraitItemConst::accept_vis (ASTVisitor &vis) { diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index 1defecc4452..0911719b716 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -2531,412 +2531,6 @@ protected: } }; -// Function declaration in traits -class TraitFunctionDecl -{ - // TODO: delete and replace with Function decl item? no as no body in this. - FunctionQualifiers qualifiers; - Identifier function_name; - - // bool has_generics; - // Generics generic_params; - std::vector> generic_params; // inlined - - // bool has_params; - // FunctionParams function_params; - std::vector> function_params; // inlined - - // bool has_return_type; - std::unique_ptr return_type; - - // bool has_where_clause; - WhereClause where_clause; - - // should this store location info? - -public: - // Returns whether function decl has generic parameters. - bool has_generics () const { return !generic_params.empty (); } - - // Returns whether function decl has regular parameters. - bool has_params () const { return !function_params.empty (); } - - // Returns whether function has return type (otherwise is void). - bool has_return_type () const { return return_type != nullptr; } - - // Returns whether function has a where clause. - bool has_where_clause () const { return !where_clause.is_empty (); } - - Identifier get_identifier () const { return function_name; } - - // Mega-constructor - TraitFunctionDecl (Identifier function_name, FunctionQualifiers qualifiers, - std::vector> generic_params, - std::vector> function_params, - std::unique_ptr return_type, - WhereClause where_clause) - : qualifiers (std::move (qualifiers)), - function_name (std::move (function_name)), - generic_params (std::move (generic_params)), - function_params (std::move (function_params)), - return_type (std::move (return_type)), - where_clause (std::move (where_clause)) - {} - - // Copy constructor with clone - TraitFunctionDecl (TraitFunctionDecl const &other) - : qualifiers (other.qualifiers), function_name (other.function_name), - where_clause (other.where_clause) - { - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - } - - ~TraitFunctionDecl () = default; - - // Overloaded assignment operator with clone - TraitFunctionDecl &operator= (TraitFunctionDecl const &other) - { - function_name = other.function_name; - qualifiers = other.qualifiers; - where_clause = other.where_clause; - - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - else - return_type = nullptr; - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - - return *this; - } - - // move constructors - TraitFunctionDecl (TraitFunctionDecl &&other) = default; - TraitFunctionDecl &operator= (TraitFunctionDecl &&other) = default; - - std::string as_string () const; - - // Invalid if function name is empty, so base stripping on that. - void mark_for_strip () { function_name = {""}; } - bool is_marked_for_strip () const { return function_name.empty (); } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector> &get_function_params () - { - return function_params; - } - const std::vector> &get_function_params () const - { - return function_params; - } - - std::vector> &get_generic_params () - { - return generic_params; - } - const std::vector> &get_generic_params () const - { - return generic_params; - } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_return_type () { return return_type; } - - // TODO: is this better? Or is a "vis_block" better? - WhereClause &get_where_clause () { return where_clause; } - - FunctionQualifiers get_qualifiers () const { return qualifiers; } - FunctionQualifiers &get_qualifiers () { return qualifiers; } -}; - -// Actual trait item function declaration within traits -class TraitItemFunc : public TraitItem -{ - std::vector outer_attrs; - TraitFunctionDecl decl; - std::unique_ptr block_expr; - -public: - // Returns whether function has a definition or is just a declaration. - bool has_definition () const { return block_expr != nullptr; } - - TraitItemFunc (TraitFunctionDecl decl, std::unique_ptr block_expr, - std::vector outer_attrs, location_t locus) - : TraitItem (locus), outer_attrs (std::move (outer_attrs)), - decl (std::move (decl)), block_expr (std::move (block_expr)) - {} - - // Copy constructor with clone - TraitItemFunc (TraitItemFunc const &other); - - // Overloaded assignment operator to clone - - TraitItemFunc &operator= (TraitItemFunc const &other); - - // move constructors - TraitItemFunc (TraitItemFunc &&other) = default; - TraitItemFunc &operator= (TraitItemFunc &&other) = default; - - std::string as_string () const override; - - void accept_vis (ASTVisitor &vis) override; - - // Invalid if trait decl is empty, so base stripping on that. - void mark_for_strip () override { decl.mark_for_strip (); } - bool is_marked_for_strip () const override - { - return decl.is_marked_for_strip (); - } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector &get_outer_attrs () { return outer_attrs; } - const std::vector &get_outer_attrs () const { return outer_attrs; } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_definition () { return block_expr; } - - // TODO: is this better? Or is a "vis_block" better? - TraitFunctionDecl &get_trait_function_decl () - { - // TODO: maybe only allow access if not marked for strip? - return decl; - } - -protected: - // Clone function implementation as (not pure) virtual method - TraitItemFunc *clone_associated_item_impl () const override - { - return new TraitItemFunc (*this); - } -}; - -// Method declaration within traits -class TraitMethodDecl -{ - // TODO: delete and replace with Function decl item? no as no body. - FunctionQualifiers qualifiers; - Identifier function_name; - - // bool has_generics; - // Generics generic_params; - std::vector> generic_params; // inlined - - // bool has_params; - // FunctionParams function_params; - std::vector> function_params; // inlined - - // bool has_return_type; - std::unique_ptr return_type; - - // bool has_where_clause; - WhereClause where_clause; - - // should this store location info? - -public: - // Returns whether method decl has generic parameters. - bool has_generics () const { return !generic_params.empty (); } - - // Returns whether method decl has regular parameters. - bool has_params () const { return !function_params.empty (); } - - // Returns whether method has return type (otherwise is void). - bool has_return_type () const { return return_type != nullptr; } - - // Returns whether method has a where clause. - bool has_where_clause () const { return !where_clause.is_empty (); } - - Identifier get_identifier () const { return function_name; } - - // Mega-constructor - TraitMethodDecl (Identifier function_name, FunctionQualifiers qualifiers, - std::vector> generic_params, - std::vector> function_params, - std::unique_ptr return_type, WhereClause where_clause) - : qualifiers (std::move (qualifiers)), - function_name (std::move (function_name)), - generic_params (std::move (generic_params)), - function_params (std::move (function_params)), - return_type (std::move (return_type)), - where_clause (std::move (where_clause)) - {} - - // Copy constructor with clone - TraitMethodDecl (TraitMethodDecl const &other) - : qualifiers (other.qualifiers), function_name (other.function_name), - where_clause (other.where_clause) - { - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - } - - ~TraitMethodDecl () = default; - - // Overloaded assignment operator with clone - TraitMethodDecl &operator= (TraitMethodDecl const &other) - { - function_name = other.function_name; - qualifiers = other.qualifiers; - where_clause = other.where_clause; - - // guard to prevent nullptr dereference - if (other.return_type != nullptr) - return_type = other.return_type->clone_type (); - else - return_type = nullptr; - - generic_params.reserve (other.generic_params.size ()); - for (const auto &e : other.generic_params) - generic_params.push_back (e->clone_generic_param ()); - - function_params.reserve (other.function_params.size ()); - for (const auto &e : other.function_params) - function_params.push_back (e->clone_param ()); - - return *this; - } - - // move constructors - TraitMethodDecl (TraitMethodDecl &&other) = default; - TraitMethodDecl &operator= (TraitMethodDecl &&other) = default; - - std::string as_string () const; - - // Invalid if method name is empty, so base stripping on that. - void mark_for_strip () { function_name = {""}; } - bool is_marked_for_strip () const { return function_name.empty (); } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector> &get_function_params () - { - return function_params; - } - const std::vector> &get_function_params () const - { - return function_params; - } - - std::vector> &get_generic_params () - { - return generic_params; - } - const std::vector> &get_generic_params () const - { - return generic_params; - } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_return_type () { return return_type; } - - // TODO: is this better? Or is a "vis_block" better? - WhereClause &get_where_clause () { return where_clause; } - - bool has_self () const - { - return !function_params.empty () && function_params[0]->is_self (); - } - - std::unique_ptr &get_self_param () - { - rust_assert (has_self ()); - return function_params[0]; - } - const std::unique_ptr &get_self_param () const - { - rust_assert (has_self ()); - return function_params[0]; - } - - FunctionQualifiers get_qualifiers () const { return qualifiers; } - - FunctionQualifiers &get_qualifiers () { return qualifiers; } -}; - -// Actual trait item method declaration within traits -class TraitItemMethod : public TraitItem -{ - std::vector outer_attrs; - TraitMethodDecl decl; - std::unique_ptr block_expr; - -public: - // Returns whether method has a definition or is just a declaration. - bool has_definition () const { return block_expr != nullptr; } - - TraitItemMethod (TraitMethodDecl decl, std::unique_ptr block_expr, - std::vector outer_attrs, location_t locus) - : TraitItem (locus), outer_attrs (std::move (outer_attrs)), - decl (std::move (decl)), block_expr (std::move (block_expr)) - {} - - // Copy constructor with clone - TraitItemMethod (TraitItemMethod const &other); - // Overloaded assignment operator to clone - TraitItemMethod &operator= (TraitItemMethod const &other); - - // move constructors - TraitItemMethod (TraitItemMethod &&other) = default; - TraitItemMethod &operator= (TraitItemMethod &&other) = default; - - std::string as_string () const override; - - void accept_vis (ASTVisitor &vis) override; - - // Invalid if trait decl is empty, so base stripping on that. - void mark_for_strip () override { decl.mark_for_strip (); } - bool is_marked_for_strip () const override - { - return decl.is_marked_for_strip (); - } - - // TODO: this mutable getter seems really dodgy. Think up better way. - std::vector &get_outer_attrs () { return outer_attrs; } - const std::vector &get_outer_attrs () const { return outer_attrs; } - - // TODO: is this better? Or is a "vis_block" better? - TraitMethodDecl &get_trait_method_decl () - { - // TODO: maybe only allow access if not marked for strip? - return decl; - } - - // TODO: is this better? Or is a "vis_block" better? - std::unique_ptr &get_definition () { return block_expr; } - -protected: - // Clone function implementation as (not pure) virtual method - TraitItemMethod *clone_associated_item_impl () const override - { - return new TraitItemMethod (*this); - } -}; - // Constant item within traits class TraitItemConst : public TraitItem { diff --git a/gcc/rust/checks/errors/rust-ast-validation.cc b/gcc/rust/checks/errors/rust-ast-validation.cc index d1c8273a0b3..d57b7cb70fe 100644 --- a/gcc/rust/checks/errors/rust-ast-validation.cc +++ b/gcc/rust/checks/errors/rust-ast-validation.cc @@ -140,23 +140,6 @@ ASTValidation::visit (AST::Function &function) AST::ContextualASTVisitor::visit (function); } -void -ASTValidation::visit (AST::TraitFunctionDecl &decl) -{ - const auto &qualifiers = decl.get_qualifiers (); - - if (context.back () == Context::TRAIT) - { - // may change soon - if (qualifiers.is_async ()) - rust_error_at (decl.get_identifier ().get_locus (), ErrorCode::E0706, - "functions in traits cannot be declared %"); - if (qualifiers.is_const ()) - rust_error_at (decl.get_identifier ().get_locus (), ErrorCode::E0379, - "functions in traits cannot be declared %"); - } -} - void ASTValidation::visit (AST::Trait &trait) { diff --git a/gcc/rust/checks/errors/rust-ast-validation.h b/gcc/rust/checks/errors/rust-ast-validation.h index 963357f86cd..01d923ceff3 100644 --- a/gcc/rust/checks/errors/rust-ast-validation.h +++ b/gcc/rust/checks/errors/rust-ast-validation.h @@ -42,7 +42,6 @@ public: virtual void visit (AST::Union &item); virtual void visit (AST::Function &function); virtual void visit (AST::Trait &trait); - virtual void visit (AST::TraitFunctionDecl &decl); }; } // namespace Rust diff --git a/gcc/rust/checks/errors/rust-feature-gate.h b/gcc/rust/checks/errors/rust-feature-gate.h index 8d1a26a1361..ef7449aa581 100644 --- a/gcc/rust/checks/errors/rust-feature-gate.h +++ b/gcc/rust/checks/errors/rust-feature-gate.h @@ -125,8 +125,6 @@ public: void visit (AST::Union &union_item) override {} void visit (AST::ConstantItem &const_item) override {} void visit (AST::StaticItem &static_item) override {} - void visit (AST::TraitItemFunc &item) override {} - void visit (AST::TraitItemMethod &item) override {} void visit (AST::TraitItemConst &item) override {} void visit (AST::TraitItemType &item) override {} void visit (AST::Trait &trait) override {} diff --git a/gcc/rust/expand/rust-cfg-strip.cc b/gcc/rust/expand/rust-cfg-strip.cc index 22f3127f587..2b51a890247 100644 --- a/gcc/rust/expand/rust-cfg-strip.cc +++ b/gcc/rust/expand/rust-cfg-strip.cc @@ -375,56 +375,6 @@ CfgStrip::maybe_strip_where_clause (AST::WhereClause &where_clause) item->accept_vis (*this); } -void -CfgStrip::maybe_strip_trait_function_decl (AST::TraitFunctionDecl &decl) -{ - // just expand sub-stuff - can't actually strip generic params themselves - for (auto ¶m : decl.get_generic_params ()) - param->accept_vis (*this); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - maybe_strip_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - { - auto &return_type = decl.get_return_type (); - return_type->accept_vis (*this); - - if (return_type->is_marked_for_strip ()) - rust_error_at (return_type->get_locus (), - "cannot strip type in this position"); - } - - if (decl.has_where_clause ()) - maybe_strip_where_clause (decl.get_where_clause ()); -} - -void -CfgStrip::maybe_strip_trait_method_decl (AST::TraitMethodDecl &decl) -{ - // just expand sub-stuff - can't actually strip generic params themselves - for (auto ¶m : decl.get_generic_params ()) - param->accept_vis (*this); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - maybe_strip_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - { - auto &return_type = decl.get_return_type (); - return_type->accept_vis (*this); - - if (return_type->is_marked_for_strip ()) - rust_error_at (return_type->get_locus (), - "cannot strip type in this position"); - } - - if (decl.has_where_clause ()) - maybe_strip_where_clause (decl.get_where_clause ()); -} - void CfgStrip::visit (AST::IdentifierExpr &ident_expr) { @@ -2080,61 +2030,6 @@ CfgStrip::visit (AST::StaticItem &static_item) "cannot strip expression in this position - outer " "attributes not allowed"); } -void -CfgStrip::visit (AST::TraitItemFunc &item) -{ - // initial test based on outer attrs - expand_cfg_attrs (item.get_outer_attrs ()); - if (fails_cfg_with_expand (item.get_outer_attrs ())) - { - item.mark_for_strip (); - return; - } - - maybe_strip_trait_function_decl (item.get_trait_function_decl ()); - - AST::DefaultASTVisitor::visit (item); - - if (item.has_definition ()) - { - /* strip any internal sub-expressions - expression itself isn't - * allowed to have external attributes in this position so can't be - * stripped. */ - auto &block = item.get_definition (); - if (block->is_marked_for_strip ()) - rust_error_at (block->get_locus (), - "cannot strip block expression in this " - "position - outer attributes not allowed"); - } -} - -void -CfgStrip::visit (AST::TraitItemMethod &item) -{ - // initial test based on outer attrs - expand_cfg_attrs (item.get_outer_attrs ()); - if (fails_cfg_with_expand (item.get_outer_attrs ())) - { - item.mark_for_strip (); - return; - } - - maybe_strip_trait_method_decl (item.get_trait_method_decl ()); - - AST::DefaultASTVisitor::visit (item); - - if (item.has_definition ()) - { - /* strip any internal sub-expressions - expression itself isn't - * allowed to have external attributes in this position so can't be - * stripped. */ - auto &block = item.get_definition (); - if (block->is_marked_for_strip ()) - rust_error_at (block->get_locus (), - "cannot strip block expression in this " - "position - outer attributes not allowed"); - } -} void CfgStrip::visit (AST::TraitItemConst &item) diff --git a/gcc/rust/expand/rust-cfg-strip.h b/gcc/rust/expand/rust-cfg-strip.h index 6b968b31d05..a3931823ab1 100644 --- a/gcc/rust/expand/rust-cfg-strip.h +++ b/gcc/rust/expand/rust-cfg-strip.h @@ -42,8 +42,6 @@ public: void maybe_strip_closure_params (std::vector ¶ms); void maybe_strip_self_param (AST::SelfParam &self_param); void maybe_strip_where_clause (AST::WhereClause &where_clause); - void maybe_strip_trait_function_decl (AST::TraitFunctionDecl &decl); - void maybe_strip_trait_method_decl (AST::TraitMethodDecl &decl); /** * maybe_strip a set of values, erasing them if they are marked for strip. @@ -145,8 +143,6 @@ public: void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; - void visit (AST::TraitItemMethod &item) override; void visit (AST::TraitItemConst &item) override; void visit (AST::TraitItemType &item) override; void visit (AST::Trait &trait) override; diff --git a/gcc/rust/expand/rust-derive.h b/gcc/rust/expand/rust-derive.h index d5c8b44442d..1531d81f57c 100644 --- a/gcc/rust/expand/rust-derive.h +++ b/gcc/rust/expand/rust-derive.h @@ -159,8 +159,6 @@ private: virtual void visit (EnumItemDiscriminant &item) override final{}; virtual void visit (ConstantItem &const_item) override final{}; virtual void visit (StaticItem &static_item) override final{}; - virtual void visit (TraitItemFunc &item) override final{}; - virtual void visit (TraitItemMethod &item) override final{}; virtual void visit (TraitItemConst &item) override final{}; virtual void visit (TraitItemType &item) override final{}; virtual void visit (Trait &trait) override final{}; diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc index bc0149ca99d..e42715b865f 100644 --- a/gcc/rust/expand/rust-expand-visitor.cc +++ b/gcc/rust/expand/rust-expand-visitor.cc @@ -437,42 +437,6 @@ ExpandVisitor::expand_where_clause (AST::WhereClause &where_clause) visit (item); } -void -ExpandVisitor::expand_trait_function_decl (AST::TraitFunctionDecl &decl) -{ - // just expand sub-stuff - can't actually strip generic params themselves - for (auto ¶m : decl.get_generic_params ()) - visit (param); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - expand_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - maybe_expand_type (decl.get_return_type ()); - - if (decl.has_where_clause ()) - expand_where_clause (decl.get_where_clause ()); -} - -void -ExpandVisitor::expand_trait_method_decl (AST::TraitMethodDecl &decl) -{ - for (auto ¶m : decl.get_generic_params ()) - visit (param); - - /* strip function parameters if required - this is specifically - * allowed by spec */ - expand_function_params (decl.get_function_params ()); - - if (decl.has_return_type ()) - - maybe_expand_type (decl.get_return_type ()); - - if (decl.has_where_clause ()) - expand_where_clause (decl.get_where_clause ()); -} - void ExpandVisitor::visit (AST::Crate &crate) { @@ -862,24 +826,6 @@ ExpandVisitor::visit (AST::StaticItem &static_item) maybe_expand_expr (static_item.get_expr ()); } -void -ExpandVisitor::visit (AST::TraitItemFunc &item) -{ - expand_trait_function_decl (item.get_trait_function_decl ()); - - if (item.has_definition ()) - visit (item.get_definition ()); -} - -void -ExpandVisitor::visit (AST::TraitItemMethod &item) -{ - expand_trait_method_decl (item.get_trait_method_decl ()); - - if (item.has_definition ()) - visit (item.get_definition ()); -} - void ExpandVisitor::visit (AST::TraitItemConst &const_item) { diff --git a/gcc/rust/expand/rust-expand-visitor.h b/gcc/rust/expand/rust-expand-visitor.h index bae9b0f8fa5..8f61db659c3 100644 --- a/gcc/rust/expand/rust-expand-visitor.h +++ b/gcc/rust/expand/rust-expand-visitor.h @@ -86,8 +86,6 @@ public: // FIXME: Add documentation void expand_closure_params (std::vector ¶ms); void expand_where_clause (AST::WhereClause &where_clause); - void expand_trait_function_decl (AST::TraitFunctionDecl &decl); - void expand_trait_method_decl (AST::TraitMethodDecl &decl); /** * Expand a set of values, erasing them if they are marked for strip, and @@ -248,8 +246,6 @@ public: void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; - void visit (AST::TraitItemMethod &item) override; void visit (AST::TraitItemConst &item) override; void visit (AST::Trait &trait) override; void visit (AST::InherentImpl &impl) override; diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc index 19f20885209..3ff0f52e0c6 100644 --- a/gcc/rust/hir/rust-ast-lower-base.cc +++ b/gcc/rust/hir/rust-ast-lower-base.cc @@ -321,12 +321,6 @@ void ASTLoweringBase::visit (AST::StaticItem &) {} void -ASTLoweringBase::visit (AST::TraitItemFunc &) -{} -void -ASTLoweringBase::visit (AST::TraitItemMethod &) -{} -void ASTLoweringBase::visit (AST::TraitItemConst &) {} void diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h index 8da11750d18..d7b94ac8a70 100644 --- a/gcc/rust/hir/rust-ast-lower-base.h +++ b/gcc/rust/hir/rust-ast-lower-base.h @@ -177,8 +177,6 @@ public: virtual void visit (AST::Union &union_item); virtual void visit (AST::ConstantItem &const_item); virtual void visit (AST::StaticItem &static_item); - virtual void visit (AST::TraitItemFunc &item); - virtual void visit (AST::TraitItemMethod &item); virtual void visit (AST::TraitItemConst &item); virtual void visit (AST::TraitItemType &item); virtual void visit (AST::Trait &trait); diff --git a/gcc/rust/hir/rust-ast-lower-implitem.cc b/gcc/rust/hir/rust-ast-lower-implitem.cc index 77230e7a8bf..399c3fb8179 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.cc +++ b/gcc/rust/hir/rust-ast-lower-implitem.cc @@ -313,165 +313,6 @@ ASTLowerTraitItem::visit (AST::Function &func) } } -void -ASTLowerTraitItem::visit (AST::TraitItemFunc &func) -{ - AST::TraitFunctionDecl &ref = func.get_trait_function_decl (); - std::vector > where_clause_items; - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::FunctionQualifiers qualifiers - = lower_qualifiers (func.get_trait_function_decl ().get_qualifiers ()); - - std::vector > generic_params; - if (ref.has_generics ()) - { - generic_params = lower_generic_params (ref.get_generic_params ()); - } - - std::unique_ptr return_type - = ref.has_return_type () ? std::unique_ptr ( - ASTLoweringType::translate (ref.get_return_type ().get ())) - : nullptr; - - std::vector function_params; - for (auto &p : ref.get_function_params ()) - { - if (p->is_variadic () || p->is_self ()) - continue; - - auto param = static_cast (p.get ()); - - auto translated_pattern = std::unique_ptr ( - ASTLoweringPattern::translate (param->get_pattern ().get ())); - auto translated_type = std::unique_ptr ( - ASTLoweringType::translate (param->get_type ().get ())); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, param->get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - auto hir_param - = HIR::FunctionParam (mapping, std::move (translated_pattern), - std::move (translated_type), param->get_locus ()); - function_params.push_back (std::move (hir_param)); - } - - HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), - std::move (generic_params), - HIR::SelfParam::error (), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - bool terminated = false; - std::unique_ptr block_expr - = func.has_definition () ? std::unique_ptr ( - ASTLoweringBlock::translate (func.get_definition ().get (), - &terminated)) - : nullptr; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, func.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemFunc *trait_item - = new HIR::TraitItemFunc (mapping, std::move (decl), std::move (block_expr), - func.get_outer_attrs (), func.get_locus ()); - translated = trait_item; - - // add the mappings for the function params at the end - for (auto ¶m : trait_item->get_decl ().get_function_params ()) - { - mappings->insert_hir_param (¶m); - mappings->insert_location (mapping.get_hirid (), param.get_locus ()); - } -} - -void -ASTLowerTraitItem::visit (AST::TraitItemMethod &method) -{ - AST::TraitMethodDecl &ref = method.get_trait_method_decl (); - - std::vector > where_clause_items; - HIR::WhereClause where_clause (std::move (where_clause_items)); - HIR::FunctionQualifiers qualifiers - = lower_qualifiers (method.get_trait_method_decl ().get_qualifiers ()); - - std::vector > generic_params; - if (ref.has_generics ()) - { - generic_params = lower_generic_params (ref.get_generic_params ()); - } - - std::unique_ptr return_type - = ref.has_return_type () ? std::unique_ptr ( - ASTLoweringType::translate (ref.get_return_type ().get ())) - : nullptr; - - HIR::SelfParam self_param = lower_self (ref.get_self_param ()); - - std::vector function_params; - for (auto &p : ref.get_function_params ()) - { - if (p->is_variadic () || p->is_self ()) - continue; - - auto param = static_cast (p.get ()); - - auto translated_pattern = std::unique_ptr ( - ASTLoweringPattern::translate (param->get_pattern ().get ())); - auto translated_type = std::unique_ptr ( - ASTLoweringType::translate (param->get_type ().get ())); - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, param->get_node_id (), - mappings->get_next_hir_id (crate_num), - UNKNOWN_LOCAL_DEFID); - - auto hir_param - = HIR::FunctionParam (mapping, std::move (translated_pattern), - std::move (translated_type), param->get_locus ()); - function_params.push_back (hir_param); - } - - HIR::TraitFunctionDecl decl (ref.get_identifier (), std::move (qualifiers), - std::move (generic_params), - std::move (self_param), - std::move (function_params), - std::move (return_type), - std::move (where_clause)); - - bool terminated = false; - std::unique_ptr block_expr - = method.has_definition () ? std::unique_ptr ( - ASTLoweringBlock::translate (method.get_definition ().get (), - &terminated)) - : nullptr; - - auto crate_num = mappings->get_current_crate (); - Analysis::NodeMapping mapping (crate_num, method.get_node_id (), - mappings->get_next_hir_id (crate_num), - mappings->get_next_localdef_id (crate_num)); - - HIR::TraitItemFunc *trait_item - = new HIR::TraitItemFunc (mapping, std::move (decl), std::move (block_expr), - method.get_outer_attrs (), method.get_locus ()); - translated = trait_item; - - // insert mappings for self - mappings->insert_hir_self_param (&self_param); - mappings->insert_location (self_param.get_mappings ().get_hirid (), - self_param.get_locus ()); - - // add the mappings for the function params at the end - for (auto ¶m : trait_item->get_decl ().get_function_params ()) - { - mappings->insert_hir_param (¶m); - mappings->insert_location (mapping.get_hirid (), param.get_locus ()); - } -} - void ASTLowerTraitItem::visit (AST::TraitItemConst &constant) { diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h index b9d12cc4a56..bbde9f6878c 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.h +++ b/gcc/rust/hir/rust-ast-lower-implitem.h @@ -49,8 +49,6 @@ class ASTLowerTraitItem : public ASTLoweringBase public: static HIR::TraitItem *translate (AST::AssociatedItem *item); void visit (AST::Function &func) override; - void visit (AST::TraitItemFunc &func) override; - void visit (AST::TraitItemMethod &method) override; void visit (AST::TraitItemConst &constant) override; void visit (AST::TraitItemType &type) override; diff --git a/gcc/rust/resolve/rust-ast-resolve-base.cc b/gcc/rust/resolve/rust-ast-resolve-base.cc index 1283d77d22b..c88bd58860a 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.cc +++ b/gcc/rust/resolve/rust-ast-resolve-base.cc @@ -402,14 +402,6 @@ void ResolverBase::visit (AST::StaticItem &) {} -void -ResolverBase::visit (AST::TraitItemFunc &) -{} - -void -ResolverBase::visit (AST::TraitItemMethod &) -{} - void ResolverBase::visit (AST::TraitItemConst &) {} diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h b/gcc/rust/resolve/rust-ast-resolve-base.h index 78830498771..9bc64331f5a 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.h +++ b/gcc/rust/resolve/rust-ast-resolve-base.h @@ -126,8 +126,6 @@ public: void visit (AST::Union &); void visit (AST::ConstantItem &); void visit (AST::StaticItem &); - void visit (AST::TraitItemFunc &); - void visit (AST::TraitItemMethod &); void visit (AST::TraitItemConst &); void visit (AST::TraitItemType &); void visit (AST::Trait &); diff --git a/gcc/rust/resolve/rust-ast-resolve-implitem.h b/gcc/rust/resolve/rust-ast-resolve-implitem.h index d9c9bcb28c9..fabc25817f5 100644 --- a/gcc/rust/resolve/rust-ast-resolve-implitem.h +++ b/gcc/rust/resolve/rust-ast-resolve-implitem.h @@ -130,46 +130,6 @@ public: mappings->insert_canonical_path (function.get_node_id (), cpath); } - void visit (AST::TraitItemFunc &function) override - { - auto decl = CanonicalPath::new_seg ( - function.get_node_id (), - function.get_trait_function_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - - resolver->get_name_scope ().insert ( - path, function.get_node_id (), function.get_locus (), false, - Rib::ItemType::Function, - [&] (const CanonicalPath &, NodeId, location_t locus) -> void { - rich_location r (line_table, function.get_locus ()); - r.add_range (locus); - rust_error_at (r, "redefined multiple times"); - }); - - mappings->insert_canonical_path (function.get_node_id (), cpath); - } - - void visit (AST::TraitItemMethod &method) override - { - auto decl = CanonicalPath::new_seg ( - method.get_node_id (), - method.get_trait_method_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - - resolver->get_name_scope ().insert ( - path, method.get_node_id (), method.get_locus (), false, - Rib::ItemType::Function, - [&] (const CanonicalPath &, NodeId, location_t locus) -> void { - rich_location r (line_table, method.get_locus ()); - r.add_range (locus); - rust_error_at (r, "redefined multiple times"); - }); - - mappings->insert_canonical_path (method.get_node_id (), cpath); - } - void visit (AST::TraitItemConst &constant) override { auto decl diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc index 6037fe59f5b..e69b945407c 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.cc +++ b/gcc/rust/resolve/rust-ast-resolve-item.cc @@ -146,161 +146,6 @@ ResolveTraitItems::visit (AST::TraitItemType &type) ResolveTypeBound::go (bound.get ()); } -void -ResolveTraitItems::visit (AST::TraitItemFunc &func) -{ - auto decl = CanonicalPath::new_seg ( - func.get_node_id (), - func.get_trait_function_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - mappings->insert_canonical_path (func.get_node_id (), cpath); - - NodeId scope_node_id = func.get_node_id (); - resolver->get_name_scope ().push (scope_node_id); - resolver->get_type_scope ().push (scope_node_id); - resolver->get_label_scope ().push (scope_node_id); - resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); - resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); - resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); - - AST::TraitFunctionDecl &function = func.get_trait_function_decl (); - if (function.has_generics ()) - for (auto &generic : function.get_generic_params ()) - ResolveGenericParam::go (generic.get (), prefix, canonical_prefix); - - if (function.has_return_type ()) - ResolveType::go (function.get_return_type ().get ()); - - std::vector bindings - = {PatternBinding (PatternBoundCtx::Product, std::set ())}; - - // we make a new scope so the names of parameters are resolved and shadowed - // correctly - for (auto &p : function.get_function_params ()) - { - if (p->is_variadic ()) - { - auto param = static_cast (p.get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - else if (p->is_self ()) - { - auto param = static_cast (p.get ()); - ResolveType::go (param->get_type ().get ()); - } - else - { - auto param = static_cast (p.get ()); - ResolveType::go (param->get_type ().get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - } - - if (function.has_where_clause ()) - ResolveWhereClause::Resolve (function.get_where_clause ()); - - // trait items have an optional body - if (func.has_definition ()) - ResolveExpr::go (func.get_definition ().get (), path, cpath); - - resolver->get_name_scope ().pop (); - resolver->get_type_scope ().pop (); - resolver->get_label_scope ().pop (); -} - -void -ResolveTraitItems::visit (AST::TraitItemMethod &func) -{ - auto decl = CanonicalPath::new_seg ( - func.get_node_id (), - func.get_trait_method_decl ().get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - mappings->insert_canonical_path (func.get_node_id (), cpath); - - NodeId scope_node_id = func.get_node_id (); - resolver->get_name_scope ().push (scope_node_id); - resolver->get_type_scope ().push (scope_node_id); - resolver->get_label_scope ().push (scope_node_id); - resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); - resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); - resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); - - AST::TraitMethodDecl &function = func.get_trait_method_decl (); - if (function.has_generics ()) - for (auto &generic : function.get_generic_params ()) - ResolveGenericParam::go (generic.get (), prefix, canonical_prefix); - - if (function.has_return_type ()) - ResolveType::go (function.get_return_type ().get ()); - - // self turns into (self: Self) as a function param - std::vector bindings - = {PatternBinding (PatternBoundCtx::Product, std::set ())}; - - // we make a new scope so the names of parameters are resolved and shadowed - // correctly - for (auto &p : function.get_function_params ()) - { - if (p->is_variadic ()) - { - auto param = static_cast (p.get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - else if (p->is_self ()) - { - auto param = static_cast (p.get ()); - // FIXME: which location should be used for Rust::Identifier `self`? - AST::IdentifierPattern self_pattern ( - param->get_node_id (), {"self"}, param->get_locus (), - param->get_has_ref (), param->get_is_mut (), - std::unique_ptr (nullptr)); - - PatternDeclaration::go (&self_pattern, Rib::ItemType::Param); - - if (param->has_type ()) - { - // This shouldn't happen the parser should already error for this - rust_assert (!param->get_has_ref ()); - ResolveType::go (param->get_type ().get ()); - } - else - { - // here we implicitly make self have a type path of Self - std::vector> segments; - segments.push_back (std::unique_ptr ( - new AST::TypePathSegment ("Self", false, param->get_locus ()))); - - AST::TypePath self_type_path (std::move (segments), - param->get_locus ()); - ResolveType::go (&self_type_path); - } - } - else - { - auto param = static_cast (p.get ()); - ResolveType::go (param->get_type ().get ()); - PatternDeclaration::go (param->get_pattern ().get (), - Rib::ItemType::Param, bindings); - } - } - - if (function.has_where_clause ()) - ResolveWhereClause::Resolve (function.get_where_clause ()); - - // trait items have an optional body - if (func.has_definition ()) - ResolveExpr::go (func.get_definition ().get (), path, cpath); - - resolver->get_name_scope ().pop (); - resolver->get_type_scope ().pop (); - resolver->get_label_scope ().pop (); -} - void ResolveTraitItems::visit (AST::TraitItemConst &constant) { diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index 33a78e21957..0c7b7527c44 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -37,8 +37,6 @@ public: void visit (AST::Function &type) override; void visit (AST::TraitItemType &type) override; - void visit (AST::TraitItemFunc &func) override; - void visit (AST::TraitItemMethod &func) override; void visit (AST::TraitItemConst &constant) override; private: diff --git a/gcc/rust/resolve/rust-default-resolver.cc b/gcc/rust/resolve/rust-default-resolver.cc index ab4d5e8b70d..b1163535657 100644 --- a/gcc/rust/resolve/rust-default-resolver.cc +++ b/gcc/rust/resolve/rust-default-resolver.cc @@ -402,14 +402,6 @@ DefaultResolver::visit (AST::StaticItem &item) ctx.scoped (Rib::Kind::ConstantItem, item.get_node_id (), expr_vis); } -void -DefaultResolver::visit (AST::TraitItemFunc &) -{} - -void -DefaultResolver::visit (AST::TraitItemMethod &) -{} - void DefaultResolver::visit (AST::TraitItemConst &) {} diff --git a/gcc/rust/resolve/rust-default-resolver.h b/gcc/rust/resolve/rust-default-resolver.h index 20dbff8e110..d508ff3ac79 100644 --- a/gcc/rust/resolve/rust-default-resolver.h +++ b/gcc/rust/resolve/rust-default-resolver.h @@ -114,8 +114,6 @@ public: void visit (AST::EnumItemDiscriminant &); void visit (AST::ConstantItem &); void visit (AST::StaticItem &); - void visit (AST::TraitItemFunc &); - void visit (AST::TraitItemMethod &); void visit (AST::TraitItemConst &); void visit (AST::TraitItemType &); void visit (AST::ExternalTypeItem &); diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc index 46113a8a46b..af7766d7b96 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc @@ -228,16 +228,6 @@ TopLevel::visit (AST::StaticItem &static_item) ctx.scoped (Rib::Kind::Item, static_item.get_node_id (), sub_vis); } -void -TopLevel::visit (AST::TraitItemFunc &item) -{ - auto def_vis - = [this, &item] () { item.get_definition ()->accept_vis (*this); }; - - if (item.has_definition ()) - ctx.scoped (Rib::Kind::Function, item.get_node_id (), def_vis); -} - void TopLevel::visit (AST::StructStruct &struct_item) { diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h index 996899b0848..f1943ee1398 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h @@ -65,7 +65,6 @@ private: void visit (AST::Function &function) override; void visit (AST::BlockExpr &expr) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; void visit (AST::StructStruct &struct_item) override; void visit (AST::TupleStruct &tuple_struct) override; void visit (AST::EnumItem &variant) override; diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc index 3c296b565f5..715e9a0b361 100644 --- a/gcc/rust/util/rust-attributes.cc +++ b/gcc/rust/util/rust-attributes.cc @@ -730,14 +730,6 @@ AttributeChecker::visit (AST::StaticItem &item) check_proc_macro_non_function (item.get_outer_attrs ()); } -void -AttributeChecker::visit (AST::TraitItemFunc &) -{} - -void -AttributeChecker::visit (AST::TraitItemMethod &) -{} - void AttributeChecker::visit (AST::TraitItemConst &) {} diff --git a/gcc/rust/util/rust-attributes.h b/gcc/rust/util/rust-attributes.h index eecc4c0050b..d78ab0b3319 100644 --- a/gcc/rust/util/rust-attributes.h +++ b/gcc/rust/util/rust-attributes.h @@ -192,8 +192,6 @@ private: void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; - void visit (AST::TraitItemFunc &item) override; - void visit (AST::TraitItemMethod &item) override; void visit (AST::TraitItemConst &item) override; void visit (AST::TraitItemType &item) override; void visit (AST::Trait &trait) override; From patchwork Wed Feb 7 11:44:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197920 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2205431dyb; Wed, 7 Feb 2024 04:56:56 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXsmrTIjIsgfo9WudBmAeiwliEzJQjCya+b0JQEGtwu9ESnD7TJHvIFcIpmjCzTl8Mi7OoKXJKn1JanzPUjipMy7d8czg== X-Google-Smtp-Source: AGHT+IGqLL++Zc+F9ZdphhcCcKS3s7a+/s10JEPhgC7PQWRP5yZKZm8dqz2jnXUEWDo4deGM20HW X-Received: by 2002:a05:6808:1211:b0:3bf:e42f:92b5 with SMTP id a17-20020a056808121100b003bfe42f92b5mr6038589oil.11.1707310616530; Wed, 07 Feb 2024 04:56:56 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310616; cv=pass; d=google.com; s=arc-20160816; b=xUxhz84qrVq3Shhoj0b49s8zC5X/eTayZehzlAmx5InMLx1Zrq5WFeP43rt8UXzHI2 GJE89icrrbaxyyNd/GSXtNbD8nAgDh4hRzfQc3B6xyfxOlJaYEfuOp+Nn5gnqzUbTLDy FQPEmdGcbOBaQy40r2ER4EPMUwelSajaB/SysfowMmGkuKiKZDslbWniDKgvbibDSJxE ktbk/oTyb6ZDHngYimjt3zhcCIiNDskz45a8OAqa1nPRHQYZdpEPxWZBUHSkowD50i9a +MBfMTmTIXXw2GtRTYHhWdI9xicq1F/L0YFlTGphHUta/DXMTL+r3BxevznWuFQz8HuA oRhw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=LCByLtWih5FZm1TYTsIgXXktR62eqa3J5ps1uxC2ArE=; fh=eKsOoT2LFJnwpVqOfH4no+j4imjFxPaubso+O5GOTXI=; b=pmjo1SoMUgINIVaHpb2iiUEaXU/aPT5C+gWh/2LdLgIM8LfcVdks3xxB8tvfpvB5Yf 4UKcZeKHGSsc2l8cuRtOKPhAv0PQHKTIsSO2SbRjkOtNcP9nuC14mQEKXtzZglIssskA psQtE3SttSCjm6lMNzI2jgiBAvwtciPRnB7QOXC/t/DJmOouw21CIkiK0YgnHtwyTvnk 75hHW/euZ8BJwe+yj6PUYQU3hRvPli2TiUc5/jse81av0D9n5fZlvh/allb14QBwCjgl 9phk3ZV8r4n2Z1RRwbtS67yO+Yr4a1bUybbKbRMHOxFwCx+zGrirgyqbxoKr4tjxMrek vt4g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=XKQVI6oP; arc=pass (i=1); 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" X-Forwarded-Encrypted: i=2; AJvYcCWRQMjF0TWj3GoDXjWJNBow0U00E4CyHOf8yPP6HEJFelX+0WZKmLUMYk8KrSC5gEiPdXPRgr+ajFmaHRCMw0s+4ozNtw== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id k3-20020a05620a414300b0078437fef74fsi1065736qko.776.2024.02.07.04.56.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:56:56 -0800 (PST) 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=@embecosm.com header.s=google header.b=XKQVI6oP; arc=pass (i=1); 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" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3D1183858283 for ; Wed, 7 Feb 2024 12:56:56 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id 53DF83857B80 for ; Wed, 7 Feb 2024 12:44:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 53DF83857B80 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 53DF83857B80 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309880; cv=none; b=PFpJdMiMrv5I0/d8BOckmAInMJQ9370Kt6NdJAWH6Ymg+FeHvcxikWt3MVrCgOObbmEMvwMUq2YgGqO9Aag/5DZkPxaWJVeNtLxKzW4GgnR6pavVNuL5xYamOuCANWkRb9ZB7Jfvp27up4QJDlSOJHYffi7LWh8zt5LiosSlVnA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309880; c=relaxed/simple; bh=Udcl/+wQYMuquLHB1iGy05iKpoWCJeCMz8uEudXWGS8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=AsS63F0w2rt0hYDvZAY6Jt+Dj4mcDcXbRiiPRfKbxknkDmZrNRFKpCdu3cTW+3+Ltd3e1Y1tBs8C7JTo4rcPOxDUFQfJ1hqTkw1NcNPwANqGPZkNLkn7PPOUNLA3FZqGantlQEjNrgX15ek/mKJ3p3VgZEN72tiL7wFdKyN5+5M= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40fb3b5893eso4504915e9.0 for ; Wed, 07 Feb 2024 04:44:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309862; x=1707914662; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=LCByLtWih5FZm1TYTsIgXXktR62eqa3J5ps1uxC2ArE=; b=XKQVI6oPU0yIOV9xUD9V7Z8uYjtyu8lA6Jv2hEcD6Hu2ShgvVvsdTz2D6TBhbX0/Bw GPr973q6IV/7Ff1Ch0BxLqz8awCervSESs0C2SDZW4VGCWCFu+F2u+BV2mo6PX9M/hvq I0J7xl+kltE+qXcKYHxZkcW06JJR7ndnJZxHQAofrfIzdphW5vgi9bwj79SLB52Xt0vQ X66DPPQp/tZ9puxH2r5nt0UZ+ByPIiF739vTQ8lL7jdi8ZDXoKsby9sO8eJ42ggbK1Ny NkdrkDs6oEVti1qh8kKN+cb+CTLTDt1wcmXei496qV4o9cmmi2MQ32nBLh6aUk3243AQ Nk8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309862; x=1707914662; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=LCByLtWih5FZm1TYTsIgXXktR62eqa3J5ps1uxC2ArE=; b=OXAaCAbIlqY0zeLlrbzMATYeUtzVWa5ojPWasxyE8RlgYdV3Rym8JuLFrtAsDvtn28 pxpyPIeTmWnYCc1mZRWBuK6BVs++meu/FBLkJY1uOZJf9AREcGF4HR70o+tfgI1XujNO jGpVun4SCcs7WV9BQ80ie1GZqyhPeurLbEhhtR5nERByA/VgLg5df/icEjkfUkQn3OB0 DunX3cAovlr8oka6/vR1UTDw6BAMoVhbSObFcWF7h0zjvF1VhIc/h6OMavcb5aOT21l/ 7a112oi8YHuLHONHoLJwzWvsOngGax9W4O7xbkmJ62M6+JyT/Xk1Ey91tdVY7NqEVMRL su6g== X-Gm-Message-State: AOJu0Yw1CpDBlAR8nLmnb2CY/cRgnT74Dbpt11x4Iuecnfi3EOO94XQc x/YKWc0fCWoj/XwyrbrW+6qWNxZ6+iiQdR/jpksKnQDCsSDhEhXj5rCiS30Dgpb1x5Peb/edwjg h3A== X-Received: by 2002:a05:600c:4f05:b0:40f:4e0a:4ead with SMTP id l5-20020a05600c4f0500b0040f4e0a4eadmr4336026wmq.26.1707309861976; Wed, 07 Feb 2024 04:44:21 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUdprJjr7/hwyEP9P8hm5lefDmSZ1gcozy5oIHL3r5Q41HVPszt3cPh3sW7lVqp0/fciHU0+EIJz1147rez0Xufo4t30jTo Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:21 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Kushal Pal Subject: [COMMITTED 25/25] gccrs: Fix macro parsing for trait items. Date: Wed, 7 Feb 2024 12:44:11 +0100 Message-ID: <20240207114419.1100894-26-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244936865014682 X-GMAIL-MSGID: 1790244936865014682 From: Kushal Pal gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_trait_item): Handle macros in trait items similar to how its handled for trait implementation items. Signed-off-by: Kushal Pal --- gcc/rust/parse/rust-parse-impl.h | 37 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index ed264371db7..ac1754542d4 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -5094,6 +5094,18 @@ Parser::parse_trait_item () const_TokenPtr tok = lexer.peek_token (); switch (tok->get_id ()) { + case SUPER: + case SELF: + case CRATE: + case DOLLAR_SIGN: + // these seem to be SimplePath tokens, so this is a macro invocation + // semi + return parse_macro_invocation_semi (std::move (outer_attrs)); + case IDENTIFIER: + if (lexer.peek_token ()->get_str () == Values::WeakKeywords::DEFAULT) + return parse_function (std::move (vis), std::move (outer_attrs)); + else + return parse_macro_invocation_semi (std::move (outer_attrs)); case TYPE: return parse_trait_type (std::move (outer_attrs), vis); case CONST: @@ -5110,25 +5122,14 @@ Parser::parse_trait_item () case EXTERN_KW: case FN_KW: return parse_function (std::move (vis), std::move (outer_attrs)); - - default: { - // TODO: try and parse macro invocation semi - if fails, maybe error. - std::unique_ptr macro_invoc - = parse_macro_invocation_semi (outer_attrs); - - if (macro_invoc == nullptr) - { - // TODO: error? - return nullptr; - } - else - { - return macro_invoc; - } - /* FIXME: macro invocations can only start with certain tokens. be - * more picky with these? */ - } + default: + break; } + add_error (Error (tok->get_locus (), + "unrecognised token %qs for item in trait", + tok->get_token_description ())); + // skip? + return nullptr; } // Parse a typedef trait item.