From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by sourceware.org (Postfix) with ESMTPS id 08FB73858032 for ; Wed, 7 Feb 2024 12:44:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 08FB73858032 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 08FB73858032 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32b 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-x32b.google.com with SMTP id 5b1f17b1804b1-40fe282b8adso4408365e9.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=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=u1e1Y8Q5ESwFwAKUEm2o7lYlermMGHTUa1stToAV9Q4nVXoQgg1Ez0LuPNQXPMO42Y JILznixTWUmiGPIBtIN/5KewBTwgQYCFJOMTkfWsYiW9apILVE9R5SC+ZM6ziNEUDJb8 Uv0KHUjjz1N3OuE1nwLsY8UPqMmQu7eikTME28ICi0Y/KM7TyCR9g/H6x3fHnscNyJEW hip3UIKObZJZC2haKWuU5kPXhx3wH0DXvFwdarWvXxsyV3lWfH+7/RdI2YL0tFv/Vigk sZgZWqHwZ33BXouPK5fotZaRh5sLF6cBRH35JSCSkDgXwQKx8MwskoY0akbTT+kyKY3P 2R0w== X-Gm-Message-State: AOJu0YxXAtkx/kOn7G7nFWVKkMHOXftsiH9rhDqILzSP6sO6nWxf9qc+ GNW/tlYoX7qcmA0abg8kqy+YpdGaAenuoIbZASCyAoPt7Lt8Bg9qVLxRAcm/gw== 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> Reply-To: arthur.cohen@embecosm.com MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 List-Id: 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)>); +} -- 2.42.1