From 857ba988f189c9a2ebc7d30b1b7b6ec018908aa6 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 12 Aug 2014 10:33:16 -0700 Subject: libsyntax: Don't strip types and lifetimes from single-segment paths in patterns. This breaks code like: fn main() { match Some("foo") { None:: => {} Some(_) => {} } } Change this code to not contain a type error. For example: fn main() { match Some("foo") { None::<&str> => {} Some(_) => {} } } Closes #16353. [breaking-change] --- src/libsyntax/parse/parser.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 7ea000d3aac..08d96f5b008 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3157,7 +3157,16 @@ impl<'a> Parser<'a> { } }, _ => { - if !enum_path.global && enum_path.segments.len() == 1 { + if !enum_path.global && + enum_path.segments.len() == 1 && + enum_path.segments + .get(0) + .lifetimes + .len() == 0 && + enum_path.segments + .get(0) + .types + .len() == 0 { // it could still be either an enum // or an identifier pattern, resolve // will sort it out: -- cgit 1.4.1-3-g733a5