diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc index 0fe2902f2f8f..b85b6bc619cf 100644 --- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc @@ -126,8 +126,14 @@ Late::new_label (Identifier name, NodeId id) void Late::visit (AST::LetStmt &let) { - // so we don't need that method - DefaultResolver::visit (let); + DefaultASTVisitor::visit_outer_attrs (let); + if (let.has_type ()) + visit (let.get_type ()); + // visit expression before pattern + // this makes variable shadowing work properly + if (let.has_init_expr ()) + visit (let.get_init_expr ()); + visit (let.get_pattern ()); // how do we deal with the fact that `let a = blipbloup` should look for a // label and cannot go through function ribs, but `let a = blipbloup()` can? diff --git a/gcc/testsuite/rust/compile/nr2/exclude b/gcc/testsuite/rust/compile/nr2/exclude index 383950ca8635..c96fde25fc5a 100644 --- a/gcc/testsuite/rust/compile/nr2/exclude +++ b/gcc/testsuite/rust/compile/nr2/exclude @@ -74,10 +74,8 @@ issue-1589.rs issue-1725-1.rs issue-1725-2.rs issue-1786.rs -issue-1813.rs issue-1893.rs issue-1901.rs -issue-1930.rs issue-1981.rs issue-2019-1.rs issue-2019-2.rs @@ -142,7 +140,6 @@ match4.rs match5.rs match9.rs method2.rs -multi_reference_type.rs multiple_bindings1.rs multiple_bindings2.rs name_resolution2.rs