diff options
| author | bors <bors@rust-lang.org> | 2017-11-10 19:10:12 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-11-10 19:10:12 +0000 |
| commit | a35a3abcda67a729edbb7d649dbc663c6feabd4c (patch) | |
| tree | 57774687c76fadcb30a945409bcc3738d40901a0 /src/test/ui | |
| parent | 75d25acd977085e6ae01d6a5c56cbbfc97463f89 (diff) | |
| parent | 765076faabcceba7cc75ae78c4923f89bb34975b (diff) | |
| download | rust-a35a3abcda67a729edbb7d649dbc663c6feabd4c.tar.gz rust-a35a3abcda67a729edbb7d649dbc663c6feabd4c.zip | |
Auto merge of #45050 - petrochenkov:ambind, r=nikomatsakis
resolve: Use same rules for disambiguating fresh bindings in `match` and `let`
Resolve `Unit` as a unit struct pattern in
```rust
struct Unit;
let Unit = x;
```
consistently with
```rust
match x {
Unit => {}
}
```
It was previously an error.
(The change also applies to unit variants and constants.)
Fixes https://users.rust-lang.org/t/e0530-cannot-shadow-unit-structs-what-in-the-earthly-what/13054
(This particular change doesn't depend on a fix for the issue mentioned in https://users.rust-lang.org/t/e0530-cannot-shadow-unit-structs-what-in-the-earthly-what/13054/4)
cc @rust-lang/lang
r? @nikomatsakis
Diffstat (limited to 'src/test/ui')
| -rw-r--r-- | src/test/ui/const-pattern-irrefutable.rs | 26 | ||||
| -rw-r--r-- | src/test/ui/const-pattern-irrefutable.stderr | 20 | ||||
| -rw-r--r-- | src/test/ui/resolve/name-clash-nullary.rs | 13 | ||||
| -rw-r--r-- | src/test/ui/resolve/name-clash-nullary.stderr | 11 |
4 files changed, 70 insertions, 0 deletions
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 <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. + +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..af48b773638 --- /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 + | ^ 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 + | ^ 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 + | ^ interpreted as a constant pattern, not new variable + +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 <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 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 + |
