rustc: Handle struct patterns where the expected type is an enum

Previously, rustc would ICE if you matched on an enum-typed thing
with a structure pattern. Error out correctly.
This commit is contained in:
Tim Chevalier 2013-05-02 15:38:19 -07:00
parent 4332f8188b
commit 13df2ea69c
4 changed files with 85 additions and 34 deletions

View file

@ -0,0 +1,18 @@
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
struct S(Either<uint, uint>);
fn main() {
match S(Left(5)) {
Right(_) => {} //~ ERROR mismatched types: expected `S` but found `core::either::Either
_ => {}
}
}

View file

@ -0,0 +1,17 @@
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
struct S(Either<uint, uint>);
fn main() {
match *S(Left(5)) {
S(_) => {} //~ ERROR mismatched types: expected `core::either::Either<uint,uint>` but found a structure pattern
}
}