fix
This commit is contained in:
parent
ecb867ec3c
commit
b930efb354
3 changed files with 98 additions and 0 deletions
|
@ -325,6 +325,12 @@ pub fn suggest_constraining_type_params<'a>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This check is always run on non-valid code
|
||||||
|
// to not trigger ICE
|
||||||
|
if constraints.is_empty() && suggestions.is_empty() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if constraints.is_empty() {
|
if constraints.is_empty() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
11
src/test/ui/suggestions/constrain-suggest-ice.rs
Normal file
11
src/test/ui/suggestions/constrain-suggest-ice.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
struct Bug<S>{ //~ ERROR parameter `S` is never used [E0392]
|
||||||
|
A: [(); {
|
||||||
|
let x: [u8; Self::W] = [0; Self::W]; //~ ERROR generic `Self` types are currently not permitted in anonymous constants
|
||||||
|
//~^ ERROR generic `Self` types are currently not permitted in anonymous constants
|
||||||
|
//~^^ ERROR the size for values of type `S` cannot be known at compilation time [E0277]
|
||||||
|
F //~ ERROR cannot find value `F` in this scope [E0425]
|
||||||
|
}
|
||||||
|
} //~ ERROR mismatched closing delimiter: `}`
|
||||||
|
//~^ ERROR mismatched closing delimiter: `}`
|
||||||
|
|
||||||
|
fn main() {}
|
81
src/test/ui/suggestions/constrain-suggest-ice.stderr
Normal file
81
src/test/ui/suggestions/constrain-suggest-ice.stderr
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
error: mismatched closing delimiter: `}`
|
||||||
|
--> $DIR/constrain-suggest-ice.rs:2:8
|
||||||
|
|
|
||||||
|
LL | struct Bug<S>{
|
||||||
|
| - closing delimiter possibly meant for this
|
||||||
|
LL | A: [(); {
|
||||||
|
| ^ unclosed delimiter
|
||||||
|
...
|
||||||
|
LL | }
|
||||||
|
| ^ mismatched closing delimiter
|
||||||
|
|
||||||
|
error: mismatched closing delimiter: `}`
|
||||||
|
--> $DIR/constrain-suggest-ice.rs:2:8
|
||||||
|
|
|
||||||
|
LL | struct Bug<S>{
|
||||||
|
| - closing delimiter possibly meant for this
|
||||||
|
LL | A: [(); {
|
||||||
|
| ^ unclosed delimiter
|
||||||
|
...
|
||||||
|
LL | }
|
||||||
|
| ^ mismatched closing delimiter
|
||||||
|
|
||||||
|
error[E0425]: cannot find value `F` in this scope
|
||||||
|
--> $DIR/constrain-suggest-ice.rs:6:9
|
||||||
|
|
|
||||||
|
LL | F
|
||||||
|
| ^
|
||||||
|
|
|
||||||
|
help: a local variable with a similar name exists
|
||||||
|
|
|
||||||
|
LL | x
|
||||||
|
| ~
|
||||||
|
help: you might be missing a type parameter
|
||||||
|
|
|
||||||
|
LL | struct Bug<S, F>{
|
||||||
|
| +++
|
||||||
|
|
||||||
|
error: generic `Self` types are currently not permitted in anonymous constants
|
||||||
|
--> $DIR/constrain-suggest-ice.rs:3:21
|
||||||
|
|
|
||||||
|
LL | let x: [u8; Self::W] = [0; Self::W];
|
||||||
|
| ^^^^
|
||||||
|
|
||||||
|
error: generic `Self` types are currently not permitted in anonymous constants
|
||||||
|
--> $DIR/constrain-suggest-ice.rs:3:36
|
||||||
|
|
|
||||||
|
LL | let x: [u8; Self::W] = [0; Self::W];
|
||||||
|
| ^^^^
|
||||||
|
|
||||||
|
error[E0277]: the size for values of type `S` cannot be known at compilation time
|
||||||
|
--> $DIR/constrain-suggest-ice.rs:3:36
|
||||||
|
|
|
||||||
|
LL | struct Bug<S>{
|
||||||
|
| - this type parameter needs to be `std::marker::Sized`
|
||||||
|
LL | A: [(); {
|
||||||
|
LL | let x: [u8; Self::W] = [0; Self::W];
|
||||||
|
| ^^^^^^^ doesn't have a size known at compile-time
|
||||||
|
|
|
||||||
|
note: required by a bound in `Bug`
|
||||||
|
--> $DIR/constrain-suggest-ice.rs:1:12
|
||||||
|
|
|
||||||
|
LL | struct Bug<S>{
|
||||||
|
| ^ required by this bound in `Bug`
|
||||||
|
help: consider relaxing the implicit `Sized` restriction
|
||||||
|
|
|
||||||
|
LL | struct Bug<S: ?Sized>{
|
||||||
|
| ++++++++
|
||||||
|
|
||||||
|
error[E0392]: parameter `S` is never used
|
||||||
|
--> $DIR/constrain-suggest-ice.rs:1:12
|
||||||
|
|
|
||||||
|
LL | struct Bug<S>{
|
||||||
|
| ^ unused parameter
|
||||||
|
|
|
||||||
|
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
|
||||||
|
|
||||||
|
error: aborting due to 7 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0277, E0392, E0425.
|
||||||
|
For more information about an error, try `rustc --explain E0277`.
|
Loading…
Add table
Add a link
Reference in a new issue