forked from rust-lang/rust
-
-
Notifications
You must be signed in to change notification settings - Fork 0
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#106521 - oskgo:remove-E0280, r=jackh726
remove E0280 After looking at rust-lang#61137 I tried my hand at E0280. I'm unable to find a reasonable example that emits the error. There are a couple of old examples that compile with the current compiler ([rust-lang#26217](rust-lang#26217), [rust-lang#42114](rust-lang#42114), [rust-lang#27113](rust-lang#27113)) and there is a [bug with chalk](https://github.com/rust-lang/rust/blob/b7cdb635c4b973572307ad288466fba64533369c/src/test/ui/chalkify/bugs/async.rs) that makes it emit the error, with a couple more chalk bugs on zulip. It seems like the error is supposed to be emitted from unfulfilled where bounds, of which two are related to borrow checking (error in where T: 'a or where 'a: 'b) and thus tend to emit errors like "lifetime may not live long enough" from borrow checking instead. The final case is with type equality constraints (where <T as Iterator>::Item == u32), which is unimplemented ([rust-lang#20041](rust-lang#20041)). That such different problems are supposed to have the same error code also seems strange to me. Since the error seems to only be emitted when using chalk I propose to remove it and replace it with an ICE instead. A crater run might be warranted. Pinging `@jackh726` due to removal of chalk test that now ICEs.
- Loading branch information
Showing
4 changed files
with
55 additions
and
52 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 |
---|---|---|
@@ -1,48 +1,40 @@ | ||
error[E0277]: `[async fn body@$DIR/async.rs:7:29: 9:2]` is not a future | ||
--> $DIR/async.rs:7:29 | ||
| | ||
LL | async fn foo(x: u32) -> u32 { | ||
| _____________________________- | ||
LL | | x | ||
LL | | } | ||
| | ^ | ||
| | | | ||
| |_`[async fn body@$DIR/async.rs:7:29: 9:2]` is not a future | ||
| required by a bound introduced by this call | ||
| | ||
= help: the trait `Future` is not implemented for `[async fn body@$DIR/async.rs:7:29: 9:2]` | ||
= note: [async fn body@$DIR/async.rs:7:29: 9:2] must be a future or must implement `IntoFuture` to be awaited | ||
note: required by a bound in `identity_future` | ||
--> $SRC_DIR/core/src/future/mod.rs:LL:COL | ||
|
||
error[E0277]: the size for values of type `<[async fn body@$DIR/async.rs:7:29: 9:2] as Future>::Output` cannot be known at compilation time | ||
--> $DIR/async.rs:7:29 | ||
| | ||
LL | async fn foo(x: u32) -> u32 { | ||
| _____________________________^ | ||
LL | | x | ||
LL | | } | ||
| |_^ doesn't have a size known at compile-time | ||
| | ||
= help: the trait `Sized` is not implemented for `<[async fn body@$DIR/async.rs:7:29: 9:2] as Future>::Output` | ||
note: required by a bound in `identity_future` | ||
--> $SRC_DIR/core/src/future/mod.rs:LL:COL | ||
|
||
error[E0277]: `[async fn body@$DIR/async.rs:7:29: 9:2]` is not a future | ||
--> $DIR/async.rs:7:25 | ||
| | ||
error[E0277]: `[async fn body@$DIR/async.rs:14:29: 16:2]` is not a future | ||
LL |LL | |LL | | } | ||
|
||
|
||
error[E0277]: the size for values of type `<[async fn body@$DIR/async.rs:14:29: 16:2] as Future>::Output` cannot be known at compilation time | ||
LL |LL | |LL | | } | ||
|
||
|
||
error[E0277]: `[async fn body@$DIR/async.rs:14:29: 16:2]` is not a future | ||
LL | async fn foo(x: u32) -> u32 { | ||
| ^^^ `[async fn body@$DIR/async.rs:7:29: 9:2]` is not a future | ||
| | ||
= help: the trait `Future` is not implemented for `[async fn body@$DIR/async.rs:7:29: 9:2]` | ||
= note: [async fn body@$DIR/async.rs:7:29: 9:2] must be a future or must implement `IntoFuture` to be awaited | ||
|
||
error[E0280]: the requirement `<[async fn body@$DIR/async.rs:7:29: 9:2] as Future>::Output == u32` is not satisfied | ||
--> $DIR/async.rs:7:25 | ||
| | ||
|
||
error: internal compiler error: compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs:1114:25: projection clauses should be implied from elsewhere. obligation: `Obligation(predicate=Binder(ProjectionPredicate(AliasTy { substs: [[async fn body@$DIR/async.rs:14:29: 16:2]], def_id: ...), _use_mk_alias_ty_instead: () }, Term::Ty(u32)), []), depth=0)` | ||
LL | async fn foo(x: u32) -> u32 { | ||
| ^^^ | ||
|
||
|
||
stack backtrace: | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
query stack during panic: | ||
#0 [typeck] type-checking `foo` | ||
#1 [thir_body] building THIR for `foo` | ||
#2 [mir_built] building MIR for `foo` | ||
#3 [unsafety_check_result] unsafety-checking `foo` | ||
#4 [mir_const] preparing `foo` for borrow checking | ||
#5 [mir_promoted] processing MIR for `foo` | ||
#6 [mir_borrowck] borrow-checking `foo` | ||
#7 [type_of] computing type of `foo::{opaque#0}` | ||
#8 [check_mod_item_types] checking item types in top-level module | ||
#9 [analysis] running analysis passes on this crate | ||
end of query stack | ||
error: aborting due to 4 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0277`. |