Skip to content

Commit 4bb4a43

Browse files
committed
auto merge of #16454 : pcwalton/rust/types-in-path-patterns, r=brson
patterns. This breaks code like: fn main() { match Some("foo") { None::<int> => {} Some(_) => {} } } Change this code to not contain a type error. For example: fn main() { match Some("foo") { None::<&str> => {} Some(_) => {} } } Closes #16353. [breaking-change] r? @huonw
2 parents e2273d9 + 857ba98 commit 4bb4a43

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

src/libsyntax/parse/parser.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -3157,7 +3157,16 @@ impl<'a> Parser<'a> {
31573157
}
31583158
},
31593159
_ => {
3160-
if !enum_path.global && enum_path.segments.len() == 1 {
3160+
if !enum_path.global &&
3161+
enum_path.segments.len() == 1 &&
3162+
enum_path.segments
3163+
.get(0)
3164+
.lifetimes
3165+
.len() == 0 &&
3166+
enum_path.segments
3167+
.get(0)
3168+
.types
3169+
.len() == 0 {
31613170
// it could still be either an enum
31623171
// or an identifier pattern, resolve
31633172
// will sort it out:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
fn main() {
12+
match Some("foo") {
13+
None::<int> => {} //~ ERROR mismatched types
14+
Some(_) => {}
15+
}
16+
}
17+

0 commit comments

Comments
 (0)