-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Do not suggest generic const items unless enabled
- Loading branch information
Showing
4 changed files
with
106 additions
and
1 deletion.
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
28 changes: 28 additions & 0 deletions
28
tests/ui/resolve/generic-params-from-outer-item-in-const-item.default.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,28 @@ | ||
error[E0401]: can't use generic parameters from outer item | ||
--> $DIR/generic-params-from-outer-item-in-const-item.rs:12:20 | ||
| | ||
LL | fn outer<T: Tr>() { // outer function | ||
| - type parameter from outer item | ||
LL | const K: u32 = T::C; | ||
| ^^^^ use of generic parameter from outer item | ||
|
||
error[E0401]: can't use generic parameters from outer item | ||
--> $DIR/generic-params-from-outer-item-in-const-item.rs:19:24 | ||
| | ||
LL | impl<T> Tr for T { // outer impl block | ||
| - type parameter from outer item | ||
LL | const C: u32 = { | ||
LL | const I: u32 = T::C; | ||
| ^^^^ use of generic parameter from outer item | ||
|
||
error[E0401]: can't use generic parameters from outer item | ||
--> $DIR/generic-params-from-outer-item-in-const-item.rs:27:20 | ||
| | ||
LL | struct S<T: Tr>(U32<{ // outer struct | ||
| - type parameter from outer item | ||
LL | const _: u32 = T::C; | ||
| ^^^^ use of generic parameter from outer item | ||
|
||
error: aborting due to 3 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0401`. |
34 changes: 34 additions & 0 deletions
34
tests/ui/resolve/generic-params-from-outer-item-in-const-item.generic_const_items.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,34 @@ | ||
error[E0401]: can't use generic parameters from outer item | ||
--> $DIR/generic-params-from-outer-item-in-const-item.rs:12:20 | ||
| | ||
LL | fn outer<T: Tr>() { // outer function | ||
| - type parameter from outer item | ||
LL | const K: u32 = T::C; | ||
| - ^^^^ use of generic parameter from outer item | ||
| | | ||
| help: try introducing a local generic parameter here: `<T>` | ||
|
||
error[E0401]: can't use generic parameters from outer item | ||
--> $DIR/generic-params-from-outer-item-in-const-item.rs:19:24 | ||
| | ||
LL | impl<T> Tr for T { // outer impl block | ||
| - type parameter from outer item | ||
LL | const C: u32 = { | ||
LL | const I: u32 = T::C; | ||
| - ^^^^ use of generic parameter from outer item | ||
| | | ||
| help: try introducing a local generic parameter here: `<T>` | ||
|
||
error[E0401]: can't use generic parameters from outer item | ||
--> $DIR/generic-params-from-outer-item-in-const-item.rs:27:20 | ||
| | ||
LL | struct S<T: Tr>(U32<{ // outer struct | ||
| - type parameter from outer item | ||
LL | const _: u32 = T::C; | ||
| - ^^^^ use of generic parameter from outer item | ||
| | | ||
| help: try introducing a local generic parameter here: `<T>` | ||
|
||
error: aborting due to 3 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0401`. |
39 changes: 39 additions & 0 deletions
39
tests/ui/resolve/generic-params-from-outer-item-in-const-item.rs
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,39 @@ | ||
// Regression test for issue #115720. | ||
// If a const item contains generic params from an outer items, only suggest | ||
// turning the const item generic if the feature `generic_const_items` is enabled. | ||
|
||
// revisions: default generic_const_items | ||
|
||
#![cfg_attr(generic_const_items, feature(generic_const_items))] | ||
#![feature(generic_const_exprs)] // only used for the test case "outer struct" | ||
#![allow(incomplete_features)] | ||
|
||
fn outer<T: Tr>() { // outer function | ||
const K: u32 = T::C; | ||
//~^ ERROR can't use generic parameters from outer item | ||
//[generic_const_items]~| HELP try introducing a local generic parameter here | ||
} | ||
|
||
impl<T> Tr for T { // outer impl block | ||
const C: u32 = { | ||
const I: u32 = T::C; | ||
//~^ ERROR can't use generic parameters from outer item | ||
//[generic_const_items]~| HELP try introducing a local generic parameter here | ||
I | ||
}; | ||
} | ||
|
||
struct S<T: Tr>(U32<{ // outer struct | ||
const _: u32 = T::C; | ||
//~^ ERROR can't use generic parameters from outer item | ||
//[generic_const_items]~| HELP try introducing a local generic parameter here | ||
0 | ||
}>); | ||
|
||
trait Tr { | ||
const C: u32; | ||
} | ||
|
||
struct U32<const N: u32>; | ||
|
||
fn main() {} |