From 33867579238ea94a1d22d1da344d6e484cacd9da Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sat, 4 Nov 2017 03:01:56 +0300 Subject: Move some tests to UI --- src/test/ui/const-pattern-irrefutable.rs | 26 ++++++++++++++++++++++++++ src/test/ui/const-pattern-irrefutable.stderr | 20 ++++++++++++++++++++ src/test/ui/resolve/name-clash-nullary.rs | 13 +++++++++++++ src/test/ui/resolve/name-clash-nullary.stderr | 11 +++++++++++ 4 files changed, 70 insertions(+) create mode 100644 src/test/ui/const-pattern-irrefutable.rs create mode 100644 src/test/ui/const-pattern-irrefutable.stderr create mode 100644 src/test/ui/resolve/name-clash-nullary.rs create mode 100644 src/test/ui/resolve/name-clash-nullary.stderr (limited to 'src/test/ui') diff --git a/src/test/ui/const-pattern-irrefutable.rs b/src/test/ui/const-pattern-irrefutable.rs new file mode 100644 index 00000000000..af0b95e002d --- /dev/null +++ b/src/test/ui/const-pattern-irrefutable.rs @@ -0,0 +1,26 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +mod foo { + pub const b: u8 = 2; + pub const d: u8 = 2; +} + +use foo::b as c; +use foo::d; + +const a: u8 = 2; + +fn main() { + let a = 4; //~ ERROR refutable pattern in local binding: `_` not covered + let c = 4; //~ ERROR refutable pattern in local binding: `_` not covered + let d = 4; //~ ERROR refutable pattern in local binding: `_` not covered + fn f() {} // Check that the `NOTE`s still work with an item here (c.f. issue #35115). +} diff --git a/src/test/ui/const-pattern-irrefutable.stderr b/src/test/ui/const-pattern-irrefutable.stderr new file mode 100644 index 00000000000..1f23eec43ef --- /dev/null +++ b/src/test/ui/const-pattern-irrefutable.stderr @@ -0,0 +1,20 @@ +error[E0005]: refutable pattern in local binding: `_` not covered + --> $DIR/const-pattern-irrefutable.rs:22:9 + | +22 | let a = 4; //~ ERROR refutable pattern in local binding: `_` not covered + | ^ pattern `_` not covered + +error[E0005]: refutable pattern in local binding: `_` not covered + --> $DIR/const-pattern-irrefutable.rs:23:9 + | +23 | let c = 4; //~ ERROR refutable pattern in local binding: `_` not covered + | ^ pattern `_` not covered + +error[E0005]: refutable pattern in local binding: `_` not covered + --> $DIR/const-pattern-irrefutable.rs:24:9 + | +24 | let d = 4; //~ ERROR refutable pattern in local binding: `_` not covered + | ^ pattern `_` not covered + +error: aborting due to 3 previous errors + diff --git a/src/test/ui/resolve/name-clash-nullary.rs b/src/test/ui/resolve/name-clash-nullary.rs new file mode 100644 index 00000000000..adf52c6d8e6 --- /dev/null +++ b/src/test/ui/resolve/name-clash-nullary.rs @@ -0,0 +1,13 @@ +// Copyright 2012-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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + let None: isize = 42; //~ ERROR mismatched types +} diff --git a/src/test/ui/resolve/name-clash-nullary.stderr b/src/test/ui/resolve/name-clash-nullary.stderr new file mode 100644 index 00000000000..014b1fe1b5b --- /dev/null +++ b/src/test/ui/resolve/name-clash-nullary.stderr @@ -0,0 +1,11 @@ +error[E0308]: mismatched types + --> $DIR/name-clash-nullary.rs:12:7 + | +12 | let None: isize = 42; //~ ERROR mismatched types + | ^^^^ expected isize, found enum `std::option::Option` + | + = note: expected type `isize` + found type `std::option::Option<_>` + +error: aborting due to previous error + -- cgit 1.4.1-3-g733a5 From 765076faabcceba7cc75ae78c4923f89bb34975b Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sat, 4 Nov 2017 03:06:01 +0300 Subject: Give better help for identifier patterns failing exhaustiveness check --- src/librustc_const_eval/check_match.rs | 9 ++++++++- src/test/ui/const-pattern-irrefutable.stderr | 6 +++--- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'src/test/ui') diff --git a/src/librustc_const_eval/check_match.rs b/src/librustc_const_eval/check_match.rs index e6a04c9c57a..98ed8d99fda 100644 --- a/src/librustc_const_eval/check_match.rs +++ b/src/librustc_const_eval/check_match.rs @@ -260,7 +260,14 @@ impl<'a, 'tcx> MatchVisitor<'a, 'tcx> { "refutable pattern in {}: `{}` not covered", origin, pattern_string ); - diag.span_label(pat.span, format!("pattern `{}` not covered", pattern_string)); + let label_msg = match pat.node { + PatKind::Path(hir::QPath::Resolved(None, ref path)) + if path.segments.len() == 1 && path.segments[0].parameters.is_none() => { + format!("interpreted as a {} pattern, not new variable", path.def.kind_name()) + } + _ => format!("pattern `{}` not covered", pattern_string), + }; + diag.span_label(pat.span, label_msg); diag.emit(); }); } diff --git a/src/test/ui/const-pattern-irrefutable.stderr b/src/test/ui/const-pattern-irrefutable.stderr index 1f23eec43ef..af48b773638 100644 --- a/src/test/ui/const-pattern-irrefutable.stderr +++ b/src/test/ui/const-pattern-irrefutable.stderr @@ -2,19 +2,19 @@ error[E0005]: refutable pattern in local binding: `_` not covered --> $DIR/const-pattern-irrefutable.rs:22:9 | 22 | let a = 4; //~ ERROR refutable pattern in local binding: `_` not covered - | ^ pattern `_` not covered + | ^ interpreted as a constant pattern, not new variable error[E0005]: refutable pattern in local binding: `_` not covered --> $DIR/const-pattern-irrefutable.rs:23:9 | 23 | let c = 4; //~ ERROR refutable pattern in local binding: `_` not covered - | ^ pattern `_` not covered + | ^ interpreted as a constant pattern, not new variable error[E0005]: refutable pattern in local binding: `_` not covered --> $DIR/const-pattern-irrefutable.rs:24:9 | 24 | let d = 4; //~ ERROR refutable pattern in local binding: `_` not covered - | ^ pattern `_` not covered + | ^ interpreted as a constant pattern, not new variable error: aborting due to 3 previous errors -- cgit 1.4.1-3-g733a5