Skip to content

Commit 99e38da

Browse files
committed
nr2.0: Add extra check when resolving identifier patterns
gcc/rust/ChangeLog: * resolve/rust-late-name-resolver-2.0.cc (Late::visit): Check if an identifier pattern can be resolved in the types namespace before visiting it as an identifier proper. gcc/testsuite/ChangeLog: * rust/compile/issue-4116.rs: New test.
1 parent 24a29b8 commit 99e38da

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

gcc/rust/resolve/rust-late-name-resolver-2.0.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,17 @@ Late::visit (AST::IdentifierPattern &identifier)
206206
{
207207
DefaultResolver::visit (identifier);
208208

209+
// We need to check if the Identifier resolves to a variant or empty struct
210+
auto path = AST::SimplePath (identifier.get_ident ());
211+
212+
if (auto resolved = ctx.resolve_path (path, Namespace::Types))
213+
{
214+
ctx.map_usage (Usage (identifier.get_node_id ()),
215+
Definition (resolved->definition.get_node_id ()),
216+
resolved->ns);
217+
return;
218+
}
219+
209220
visit_identifier_as_pattern (ctx, identifier.get_ident (),
210221
identifier.get_locus (),
211222
identifier.get_node_id (),
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
enum Foo {
2+
Relaxed,
3+
SeqCst,
4+
StressedOut,
5+
}
6+
7+
use Foo::{Relaxed, SeqCst, StressedOut};
8+
9+
fn main() {
10+
let a = (Relaxed, Relaxed);
11+
12+
match a {
13+
(Relaxed, Relaxed) => {}
14+
_ => {}
15+
}
16+
}

0 commit comments

Comments
 (0)