From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 DD18A3857BBB for ; Fri, 21 Mar 2025 12:36:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DD18A3857BBB 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 DD18A3857BBB 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=1742560576; cv=none; b=O8bFDH+cfeTTXIgtq019MsnAr1gKt4tTnuhF7jSAPKDAKNWZd/jUhX7LDRzH4qvhPk4+PDckRAWtzN7eZi0YYzNM55s26c2hOGDrMKWaY6y/gJH62I4hsaC/1cpaaL0/JBL7V7XiO4m8+5kmvp/ods4dqhZpWkFpLAHsWToc/Ug= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742560576; c=relaxed/simple; bh=6jvr+UM9fBbIJBrzHeVEzj1g2Dd2vyaUtJQdIJWBvxQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=dyfret0/pLFNvUDTFEiyLEx5fQKkAkGTYcu0kFu02kh87gfE0l7SeupLpxkpBdsbHKc9Tq9BOUQR/7x2v+fo2wCfFQo6LcOG3UM8isF9qu6g4kokAk2s6dVEbsr76Mq/tcuoByg7EH/yw2PJ+j+tNjmoEN56TJpyOFCNJHhAP3g= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-4394a823036so19030845e9.0 for ; Fri, 21 Mar 2025 05:36:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1742560455; x=1743165255; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=krreyCKxDpaVmud1sQBLTQCCUtyNkGN4ZQNJzPLtFMI=; b=Ji9F3P7/j7d8NqMOMuHB6O3qA5spEsIICZzEE3Nu637DL2mf51rnXSL1orAh3WSU6Q 3DdXTZKJNqnoGlejRgpYaP23+OuYpBlyAhNu3ay69eg1tBke+Pgl8yZtKRuby/QiSbOA Fu3bpXIlmmqlHHyQPFDo7+0oxooMCtZerINVaaCVQXULTers9qSc25N67wusvzY/6rfj NCfBD+T+kWHFKVWYfJjkenU+mOsK7AwukgG74xAfu1ZxWNECrJrg8w/kauEKi+PaDzi9 G+MYE6QHht3mRkrfzwgSzeqvjKVGKxGTK3qbMayJ7au8ajOVHSeGZnnCQq6LrcpyCJYR odDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742560455; x=1743165255; h=content-transfer-encoding:mime-version: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=krreyCKxDpaVmud1sQBLTQCCUtyNkGN4ZQNJzPLtFMI=; b=Whij6uW08Eyvq+BpnpKJtKZyhhMdi75v4cPNYaJ29NxFUT6uXEKIKySFjHwKTMNGW1 zgDFqlvOqmT1Baqk33OTPyQppqXEkSReSJa1R5HHg/ldO6mQbNULmQNp3xt5X7a498BV R8c+KzjkxI4zt+BKfg5DhM5pN/wDrGXu3phz6+a8xmtaH0d1RdjUnYJMbI+0NmPfkTzt LxpqTQ55Y1Za+nsZQOQSBH2KO4Lra+yoRC6//mEcvdEFihO2bSvm3Cz5coth6wbmG5C3 GX/SRX7Ewp0zZjt1z1CUE4JxsGbKkLQRDl1gu3S1XmgUSkCvb3fE+mLRa/KyWO6hb/F3 Sklg== X-Gm-Message-State: AOJu0YzVAPX+fkIR0uP3liRjGIDeQmuPvkrfI7+85MzQkWwXPreYRy/j 2sPEXlxCbxCctDcpULRoHrepeLfnPk9pTU80Xbccn4vhUhe/2xeujbeDgY+8NCKQ5cYSjSllKMF OLw== X-Gm-Gg: ASbGncumGKjEDokG70Vdx7PCd8e5WGG9QArAalLpAqCuDE5rO8Xtf8PwmBGicC3rjF5 NgqRVim7zHVAcNny7umGhUjvp2tRQvLscT8FiGocbXzJyQlAxxs3+DhdFUc4VBLquj92VJ42hjl Ks3KI1CnhiGgAIIpFS2gNXwYKkak3dSJ0vjj+mqeTOFktUw5Gy8Ik/QE931P+WX9RYY0IFWkV+J a/dn6N+IF8S2PY6ruh+1BW/JJwT24ZHvPw0f41sIq9Z63g11/ct3FRqQNiHKDazV6khXaVUKOn8 Gu7f+bxpBOM/gQc5gWUWzI6J9gaOvyqJ5WVkg+wCJ22Lw8vVOpUamoxA X-Google-Smtp-Source: AGHT+IHeVL8N/CljkeMsWQ9+rTBBNd+Jk1tAxEGkzDTreQ9Jyria3OQBmYDwMEyR10C+UKpmQvcbqQ== X-Received: by 2002:a05:600c:1d92:b0:43c:fc04:6d35 with SMTP id 5b1f17b1804b1-43d509e3facmr29756995e9.4.1742560454862; Fri, 21 Mar 2025 05:34:14 -0700 (PDT) Received: from platypus.lan ([2a04:cec0:1901:7a99:be55:efb3:1ec6:8ea7]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d440ed4d9sm76950305e9.33.2025.03.21.05.34.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Mar 2025 05:34:13 -0700 (PDT) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Philip Herron Subject: [COMMITTED 118/146] gccrs: Add missing name resolution to static items in blocks Date: Fri, 21 Mar 2025 13:06:59 +0100 Message-ID: <20250321123226.184882-119-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250321123226.184882-1-arthur.cohen@embecosm.com> References: <20250321123226.184882-1-arthur.cohen@embecosm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-14.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 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 need to add name resolution and hir lowering for items as part of blocks in order to typecheck and compile them correctly. Fixes Rust-GCC#3350 gcc/rust/ChangeLog: * hir/rust-ast-lower-stmt.cc (ASTLoweringStmt::visit): hir lowering * hir/rust-ast-lower-stmt.h: likewise * resolve/rust-ast-resolve-stmt.cc (ResolveStmt::visit): name resolution * resolve/rust-ast-resolve-stmt.h: likewise gcc/testsuite/ChangeLog: * rust/compile/issue-3350.rs: New test. Signed-off-by: Philip Herron --- gcc/rust/hir/rust-ast-lower-stmt.cc | 6 ++++++ gcc/rust/hir/rust-ast-lower-stmt.h | 1 + gcc/rust/resolve/rust-ast-resolve-stmt.cc | 21 +++++++++++++++++++++ gcc/rust/resolve/rust-ast-resolve-stmt.h | 1 + gcc/testsuite/rust/compile/issue-3350.rs | 10 ++++++++++ 5 files changed, 39 insertions(+) create mode 100644 gcc/testsuite/rust/compile/issue-3350.rs diff --git a/gcc/rust/hir/rust-ast-lower-stmt.cc b/gcc/rust/hir/rust-ast-lower-stmt.cc index 8244e8ae2ba..fd2cdfb0f11 100644 --- a/gcc/rust/hir/rust-ast-lower-stmt.cc +++ b/gcc/rust/hir/rust-ast-lower-stmt.cc @@ -163,5 +163,11 @@ ASTLoweringStmt::visit (AST::TraitImpl &impl_block) translated = ASTLoweringItem::translate (impl_block); } +void +ASTLoweringStmt::visit (AST::StaticItem &var) +{ + translated = ASTLoweringItem::translate (var); +} + } // namespace HIR } // namespace Rust diff --git a/gcc/rust/hir/rust-ast-lower-stmt.h b/gcc/rust/hir/rust-ast-lower-stmt.h index 5b1e1b9c99a..737a5f8dc4b 100644 --- a/gcc/rust/hir/rust-ast-lower-stmt.h +++ b/gcc/rust/hir/rust-ast-lower-stmt.h @@ -45,6 +45,7 @@ public: void visit (AST::Trait &trait) override; void visit (AST::InherentImpl &impl_block) override; void visit (AST::TraitImpl &impl_block) override; + void visit (AST::StaticItem &var) override; private: ASTLoweringStmt () : translated (nullptr), terminated (false) {} diff --git a/gcc/rust/resolve/rust-ast-resolve-stmt.cc b/gcc/rust/resolve/rust-ast-resolve-stmt.cc index 28852910c71..226d8e8e2f4 100644 --- a/gcc/rust/resolve/rust-ast-resolve-stmt.cc +++ b/gcc/rust/resolve/rust-ast-resolve-stmt.cc @@ -56,5 +56,26 @@ ResolveStmt::visit (AST::TraitImpl &impl_block) ResolveItem::go (impl_block, prefix, canonical_prefix); } +void +ResolveStmt::visit (AST::StaticItem &var) +{ + auto decl = CanonicalPath::new_seg (var.get_node_id (), + var.get_identifier ().as_string ()); + auto path = decl; + auto cpath = canonical_prefix.append (decl); + mappings.insert_canonical_path (var.get_node_id (), cpath); + + resolver->get_name_scope ().insert ( + path, var.get_node_id (), var.get_locus (), false, Rib::ItemType::Static, + [&] (const CanonicalPath &, NodeId, location_t locus) -> void { + rich_location r (line_table, var.get_locus ()); + r.add_range (locus); + rust_error_at (r, "redefined multiple times"); + }); + + ResolveType::go (var.get_type ()); + ResolveExpr::go (var.get_expr (), path, cpath); +} + } // namespace Resolver } // namespace Rust diff --git a/gcc/rust/resolve/rust-ast-resolve-stmt.h b/gcc/rust/resolve/rust-ast-resolve-stmt.h index 8e64a7691d9..6dfac9179d7 100644 --- a/gcc/rust/resolve/rust-ast-resolve-stmt.h +++ b/gcc/rust/resolve/rust-ast-resolve-stmt.h @@ -388,6 +388,7 @@ public: void visit (AST::Trait &trait) override; void visit (AST::InherentImpl &impl_block) override; void visit (AST::TraitImpl &impl_block) override; + void visit (AST::StaticItem &var) override; private: ResolveStmt (const CanonicalPath &prefix, diff --git a/gcc/testsuite/rust/compile/issue-3350.rs b/gcc/testsuite/rust/compile/issue-3350.rs new file mode 100644 index 00000000000..8880659afe6 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-3350.rs @@ -0,0 +1,10 @@ +static FOO: i32 = 0; + +pub fn bar() -> i32 { + FOO +} + +pub fn baz() -> i32 { + static QUX: i32 = 0; + QUX +} -- 2.45.2