Skip to content

Commit fe8d5b1

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 456dbb4 commit fe8d5b1

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,16 @@ 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->get_node_id ()));
216+
return;
217+
}
218+
209219
visit_identifier_as_pattern (ctx, identifier.get_ident (),
210220
identifier.get_locus (),
211221
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)