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: 1896130 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=embecosm.com header.i=@embecosm.com header.a=rsa-sha256 header.s=google header.b=U7+wBkxF; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TVKgc0pDFz23gD for ; Wed, 7 Feb 2024 23:49:16 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1AE043857C51 for ; Wed, 7 Feb 2024 12:49:14 +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-Google-Smtp-Source: AGHT+IHPDM0e+2N+CenIcb15ZZbpPAQhrHaHpo48gZtyHeW6IWlCyayjldvaLdVIsWbb0c0Qh8wHLA== 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+incoming=patchwork.ozlabs.org@gcc.gnu.org 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)>); +}