From: Owen Avery <[email protected]>
gcc/rust/ChangeLog:
* resolve/rust-default-resolver.cc (DefaultResolver::visit):
Override MatchCase visiting function.
* resolve/rust-default-resolver.h (DefaultResolver::visit):
Likewise.
gcc/testsuite/ChangeLog:
* rust/execute/torture/match-structpattern-tuplefield.rs: Fix
test.
* rust/compile/match-scope.rs: New test.
Signed-off-by: Owen Avery <[email protected]>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.
Commit on github:
https://github.com/Rust-GCC/gccrs/commit/fd8acf80ceca1b2d3ca73c2ddb81f78a4aa93b24
The commit has been mentioned in the following pull-request(s):
- https://github.com/Rust-GCC/gccrs/pull/4460
gcc/rust/resolve/rust-default-resolver.cc | 8 ++++++++
gcc/rust/resolve/rust-default-resolver.h | 1 +
gcc/testsuite/rust/compile/match-scope.rs | 8 ++++++++
.../execute/torture/match-structpattern-tuplefield.rs | 5 +++--
4 files changed, 20 insertions(+), 2 deletions(-)
create mode 100644 gcc/testsuite/rust/compile/match-scope.rs
diff --git a/gcc/rust/resolve/rust-default-resolver.cc
b/gcc/rust/resolve/rust-default-resolver.cc
index 9b4f15822..098c81e9b 100644
--- a/gcc/rust/resolve/rust-default-resolver.cc
+++ b/gcc/rust/resolve/rust-default-resolver.cc
@@ -389,6 +389,14 @@ DefaultResolver::visit (AST::MatchExpr &expr)
AST::DefaultASTVisitor::visit (expr);
}
+void
+DefaultResolver::visit (AST::MatchCase &cas)
+{
+ auto vis = [this, &cas] () { AST::DefaultASTVisitor::visit (cas); };
+
+ ctx.scoped (Rib::Kind::Normal, cas.get_node_id (), vis);
+}
+
void
DefaultResolver::visit (AST::ConstantItem &item)
{
diff --git a/gcc/rust/resolve/rust-default-resolver.h
b/gcc/rust/resolve/rust-default-resolver.h
index a9b8d1510..55ae2b15f 100644
--- a/gcc/rust/resolve/rust-default-resolver.h
+++ b/gcc/rust/resolve/rust-default-resolver.h
@@ -79,6 +79,7 @@ public:
void visit (AST::ClosureExprInner &) override;
void visit (AST::ClosureExprInnerTyped &) override;
void visit (AST::MatchExpr &) override;
+ void visit (AST::MatchCase &) override;
// Leaf visitors, which do nothing by default
void visit (AST::ConstantItem &) override;
diff --git a/gcc/testsuite/rust/compile/match-scope.rs
b/gcc/testsuite/rust/compile/match-scope.rs
new file mode 100644
index 000000000..da7c84132
--- /dev/null
+++ b/gcc/testsuite/rust/compile/match-scope.rs
@@ -0,0 +1,8 @@
+#![no_core]
+
+pub fn main() -> i32 {
+ match 12 {
+ x => {}
+ }
+ x // { dg-error "cannot find value 'x'" }
+}
diff --git
a/gcc/testsuite/rust/execute/torture/match-structpattern-tuplefield.rs
b/gcc/testsuite/rust/execute/torture/match-structpattern-tuplefield.rs
index e0ef6da1a..857d5c84c 100644
--- a/gcc/testsuite/rust/execute/torture/match-structpattern-tuplefield.rs
+++ b/gcc/testsuite/rust/execute/torture/match-structpattern-tuplefield.rs
@@ -5,9 +5,10 @@ pub struct TupStruct (i32, i32);
pub fn main() -> i32 {
let mut t = TupStruct (1, 1);
+ let mut ret = 1;
match t {
- TupStruct { 0: 1, 1: b } => { b -= 1 }
+ TupStruct { 0: 1, 1: b } => { b -= 1; ret = b }
_ => {}
}
- b
+ ret
}
base-commit: 6b891ee3e6b879e402b037c1322a8350c72b7798
--
2.53.0