parent
f5e513b2b2
commit
34407dcdbb
7 changed files with 502 additions and 552 deletions
File diff suppressed because it is too large
Load diff
|
@ -9,7 +9,8 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
fn foo(a: Option<uint>, b: Option<uint>) {
|
fn foo(a: Option<uint>, b: Option<uint>) {
|
||||||
match (a,b) { //~ ERROR: non-exhaustive patterns: None not covered
|
match (a,b) {
|
||||||
|
//~^ ERROR: non-exhaustive patterns: (core::option::None, core::option::None) not covered
|
||||||
(Some(a), Some(b)) if a == b => { }
|
(Some(a), Some(b)) if a == b => { }
|
||||||
(Some(_), None) |
|
(Some(_), None) |
|
||||||
(None, Some(_)) => { }
|
(None, Some(_)) => { }
|
||||||
|
|
18
src/test/compile-fail/issue-4321.rs
Normal file
18
src/test/compile-fail/issue-4321.rs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright 2014 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.
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let tup = (true, true);
|
||||||
|
println!("foo {:}", match tup { //~ ERROR non-exhaustive patterns: (true, false) not covered
|
||||||
|
(false, false) => "foo",
|
||||||
|
(false, true) => "bar",
|
||||||
|
(true, true) => "baz"
|
||||||
|
});
|
||||||
|
}
|
|
@ -8,13 +8,12 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// error-pattern: non-exhaustive patterns
|
|
||||||
enum t { a(u), b }
|
enum t { a(u), b }
|
||||||
enum u { c, d }
|
enum u { c, d }
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let x = a(c);
|
let x = a(c);
|
||||||
match x {
|
match x { //~ ERROR non-exhaustive patterns: a(c) not covered
|
||||||
a(d) => { fail!("hello"); }
|
a(d) => { fail!("hello"); }
|
||||||
b => { fail!("goodbye"); }
|
b => { fail!("goodbye"); }
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,21 +12,21 @@ enum t { a, b, }
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let x = a;
|
let x = a;
|
||||||
match x { b => { } } //~ ERROR non-exhaustive patterns
|
match x { b => { } } //~ ERROR non-exhaustive patterns: a not covered
|
||||||
match true { //~ ERROR non-exhaustive patterns
|
match true { //~ ERROR non-exhaustive patterns: false not covered
|
||||||
true => {}
|
true => {}
|
||||||
}
|
}
|
||||||
match Some(10) { //~ ERROR non-exhaustive patterns
|
match Some(10) { //~ ERROR non-exhaustive patterns: core::option::Some(_) not covered
|
||||||
None => {}
|
None => {}
|
||||||
}
|
}
|
||||||
match (2, 3, 4) { //~ ERROR non-exhaustive patterns
|
match (2, 3, 4) { //~ ERROR non-exhaustive patterns: (_, _, _) not covered
|
||||||
(_, _, 4) => {}
|
(_, _, 4) => {}
|
||||||
}
|
}
|
||||||
match (a, a) { //~ ERROR non-exhaustive patterns
|
match (a, a) { //~ ERROR non-exhaustive patterns: (a, a) not covered
|
||||||
(a, b) => {}
|
(a, b) => {}
|
||||||
(b, a) => {}
|
(b, a) => {}
|
||||||
}
|
}
|
||||||
match a { //~ ERROR b not covered
|
match a { //~ ERROR non-exhaustive patterns: b not covered
|
||||||
a => {}
|
a => {}
|
||||||
}
|
}
|
||||||
// This is exhaustive, though the algorithm got it wrong at one point
|
// This is exhaustive, though the algorithm got it wrong at one point
|
||||||
|
@ -37,8 +37,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
let vec = vec!(Some(42), None, Some(21));
|
let vec = vec!(Some(42), None, Some(21));
|
||||||
let vec: &[Option<int>] = vec.as_slice();
|
let vec: &[Option<int>] = vec.as_slice();
|
||||||
match vec {
|
match vec { //~ ERROR non-exhaustive patterns: [] not covered
|
||||||
//~^ ERROR non-exhaustive patterns: vectors of length 0 not covered
|
|
||||||
[Some(..), None, ..tail] => {}
|
[Some(..), None, ..tail] => {}
|
||||||
[Some(..), Some(..), ..tail] => {}
|
[Some(..), Some(..), ..tail] => {}
|
||||||
[None] => {}
|
[None] => {}
|
||||||
|
@ -51,7 +50,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
let vec = vec!(0.5);
|
let vec = vec!(0.5);
|
||||||
let vec: &[f32] = vec.as_slice();
|
let vec: &[f32] = vec.as_slice();
|
||||||
match vec { //~ ERROR non-exhaustive patterns: vectors of length 4 not covered
|
match vec { //~ ERROR non-exhaustive patterns: [_, _, _, _] not covered
|
||||||
[0.1, 0.2, 0.3] => (),
|
[0.1, 0.2, 0.3] => (),
|
||||||
[0.1, 0.2] => (),
|
[0.1, 0.2] => (),
|
||||||
[0.1] => (),
|
[0.1] => (),
|
||||||
|
|
|
@ -10,9 +10,9 @@
|
||||||
|
|
||||||
|
|
||||||
fn func((1, (Some(1), 2..3)): (int, (Option<int>, int))) { }
|
fn func((1, (Some(1), 2..3)): (int, (Option<int>, int))) { }
|
||||||
//~^ ERROR refutable pattern in function argument
|
//~^ ERROR refutable pattern in function argument: (_, _) not covered
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let (1, (Some(1), 2..3)) = (1, (None, 2));
|
let (1, (Some(1), 2..3)) = (1, (None, 2));
|
||||||
//~^ ERROR refutable pattern in local binding
|
//~^ ERROR refutable pattern in local binding: (_, _) not covered
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let f = |3: int| println!("hello"); //~ ERROR refutable pattern
|
let f = |3: int| println!("hello");
|
||||||
|
//~^ ERROR refutable pattern in function argument: _ not covered
|
||||||
f(4);
|
f(4);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue