-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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 #91443 - compiler-errors:bad_collect_into_slice, r=we…
…sleywiser Better suggestions when user tries to collect into an unsized `[_]` 1. Extend the predicate on `rustc_on_unimplemented` to support substitutions like note, label, etc (i.e. treat it as a `OnUnimplementedFormatString`) so we can have slightly more general `rustc_on_unimplemented` special-cases. 2. Add a `rustc_on_unimplemented` if we fail on `FromIterator<A> for [A]` which happens when we don't explicitly collect into a `vec<A>`, but then pass the return from a `.collect` call into something that takes a slice. Fixes #91423
- Loading branch information
Showing
5 changed files
with
106 additions
and
12 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
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
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
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 @@ | ||
fn process_slice(data: &[i32]) { | ||
//~^ NOTE required by a bound in this | ||
todo!() | ||
} | ||
|
||
fn main() { | ||
let some_generated_vec = (0..10).collect(); | ||
//~^ ERROR the size for values of type `[i32]` cannot be known at compilation time | ||
//~| ERROR a value of type `[i32]` cannot be built since `[i32]` has no definite size | ||
//~| NOTE try explicitly collecting into a `Vec<{integer}>` | ||
//~| NOTE required by a bound in `collect` | ||
//~| NOTE all local variables must have a statically known size | ||
//~| NOTE doesn't have a size known at compile-time | ||
process_slice(&some_generated_vec); | ||
} |
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,26 @@ | ||
error[E0277]: the size for values of type `[i32]` cannot be known at compilation time | ||
--> $DIR/collect-into-slice.rs:7:9 | ||
| | ||
LL | let some_generated_vec = (0..10).collect(); | ||
| ^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time | ||
| | ||
= help: the trait `Sized` is not implemented for `[i32]` | ||
= note: all local variables must have a statically known size | ||
= help: unsized locals are gated as an unstable feature | ||
|
||
error[E0277]: a value of type `[i32]` cannot be built since `[i32]` has no definite size | ||
--> $DIR/collect-into-slice.rs:7:38 | ||
| | ||
LL | let some_generated_vec = (0..10).collect(); | ||
| ^^^^^^^ try explicitly collecting into a `Vec<{integer}>` | ||
| | ||
= help: the trait `FromIterator<{integer}>` is not implemented for `[i32]` | ||
note: required by a bound in `collect` | ||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL | ||
| | ||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect` | ||
|
||
error: aborting due to 2 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0277`. |