forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#135663 - frank-king:fix/135614, r=compiler-errors Fix ICE in resolving associated items as non-bindings Fixes rust-lang#135614 so that imported associated functions of traits can be shadowed by local bindings and associated constants of traits can be used in patterns.
- Loading branch information
Showing
6 changed files
with
110 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 19 additions & 0 deletions
19
tests/ui/resolve/resolve-issue-135614-assoc-const.import_trait_associated_functions.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
error[E0005]: refutable pattern in local binding | ||
--> $DIR/resolve-issue-135614-assoc-const.rs:21:9 | ||
| | ||
LL | let DEFAULT: u32 = 0; | ||
| ^^^^^^^ pattern `1_u32..=u32::MAX` not covered | ||
LL | const DEFAULT: u32 = 0; | ||
| ------------------ missing patterns are not covered because `DEFAULT` is interpreted as a constant pattern, not a new variable | ||
| | ||
= note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant | ||
= note: for more information, visit https://doc.rust-lang.org/book/ch19-02-refutability.html | ||
= note: the matched value is of type `u32` | ||
help: introduce a variable instead | ||
| | ||
LL | let DEFAULT_var: u32 = 0; | ||
| ~~~~~~~~~~~ | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0005`. |
30 changes: 30 additions & 0 deletions
30
tests/ui/resolve/resolve-issue-135614-assoc-const.normal.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
error[E0658]: `use` associated items of traits is unstable | ||
--> $DIR/resolve-issue-135614-assoc-const.rs:6:5 | ||
| | ||
LL | use MyDefault::DEFAULT; | ||
| ^^^^^^^^^^^^^^^^^^ | ||
| | ||
= note: see issue #134691 <https://github.com/rust-lang/rust/issues/134691> for more information | ||
= help: add `#![feature(import_trait_associated_functions)]` to the crate attributes to enable | ||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date | ||
|
||
error[E0005]: refutable pattern in local binding | ||
--> $DIR/resolve-issue-135614-assoc-const.rs:21:9 | ||
| | ||
LL | let DEFAULT: u32 = 0; | ||
| ^^^^^^^ pattern `1_u32..=u32::MAX` not covered | ||
LL | const DEFAULT: u32 = 0; | ||
| ------------------ missing patterns are not covered because `DEFAULT` is interpreted as a constant pattern, not a new variable | ||
| | ||
= note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant | ||
= note: for more information, visit https://doc.rust-lang.org/book/ch19-02-refutability.html | ||
= note: the matched value is of type `u32` | ||
help: introduce a variable instead | ||
| | ||
LL | let DEFAULT_var: u32 = 0; | ||
| ~~~~~~~~~~~ | ||
|
||
error: aborting due to 2 previous errors | ||
|
||
Some errors have detailed explanations: E0005, E0658. | ||
For more information about an error, try `rustc --explain E0005`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
//@ revisions: normal import_trait_associated_functions | ||
#![cfg_attr(import_trait_associated_functions, feature(import_trait_associated_functions))] | ||
|
||
// Makes sure that imported constant can be used in pattern bindings. | ||
|
||
use MyDefault::DEFAULT; //[normal]~ ERROR `use` associated items of traits is unstable | ||
|
||
trait MyDefault { | ||
const DEFAULT: Self; | ||
} | ||
|
||
impl MyDefault for u32 { | ||
const DEFAULT: u32 = 0; | ||
} | ||
|
||
impl MyDefault for () { | ||
const DEFAULT: () = (); | ||
} | ||
|
||
fn foo(x: u32) -> u32 { | ||
let DEFAULT: u32 = 0; //~ ERROR refutable pattern in local binding | ||
const DEFAULT: u32 = 0; | ||
if let DEFAULT = x { DEFAULT } else { 1 } | ||
} | ||
|
||
fn bar() { | ||
let DEFAULT = (); | ||
} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
error[E0658]: `use` associated items of traits is unstable | ||
--> $DIR/resolve-issue-135614.rs:7:5 | ||
| | ||
LL | use A::b; | ||
| ^^^^ | ||
| | ||
= note: see issue #134691 <https://github.com/rust-lang/rust/issues/134691> for more information | ||
= help: add `#![feature(import_trait_associated_functions)]` to the crate attributes to enable | ||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0658`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
//@ revisions: normal import_trait_associated_functions | ||
//@[import_trait_associated_functions] check-pass | ||
#![cfg_attr(import_trait_associated_functions, feature(import_trait_associated_functions))] | ||
|
||
// Makes sure that imported associated functions are shadowed by the local declarations. | ||
|
||
use A::b; //[normal]~ ERROR `use` associated items of traits is unstable | ||
|
||
trait A { | ||
fn b() {} | ||
} | ||
|
||
fn main() { | ||
let b: (); | ||
} |