Skip to content

Commit f75eb24

Browse files
committed
remove E0280 and ICE instead
1 parent 3254bef commit f75eb24

File tree

4 files changed

+55
-52
lines changed

4 files changed

+55
-52
lines changed

compiler/rustc_error_codes/src/error_codes.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ E0791: include_str!("./error_codes/E0791.md"),
574574
// E0274, // on_unimplemented #2
575575
// E0278, // requirement is not satisfied
576576
// E0279,
577-
E0280, // requirement is not satisfied
577+
// E0280, // changed to ICE
578578
// E0285, // overflow evaluation builtin bounds
579579
// E0296, // replaced with a generic attribute input check
580580
// E0298, // cannot compare constants

compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs

+11-7
Original file line numberDiff line numberDiff line change
@@ -1102,15 +1102,19 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
11021102
}
11031103

11041104
ty::PredicateKind::Clause(ty::Clause::RegionOutlives(..))
1105-
| ty::PredicateKind::Clause(ty::Clause::Projection(..))
11061105
| ty::PredicateKind::Clause(ty::Clause::TypeOutlives(..)) => {
1107-
let predicate = self.resolve_vars_if_possible(obligation.predicate);
1108-
struct_span_err!(
1109-
self.tcx.sess,
1106+
span_bug!(
11101107
span,
1111-
E0280,
1112-
"the requirement `{}` is not satisfied",
1113-
predicate
1108+
"outlives clauses should not error outside borrowck. obligation: `{:?}`",
1109+
obligation
1110+
)
1111+
}
1112+
1113+
ty::PredicateKind::Clause(ty::Clause::Projection(..)) => {
1114+
span_bug!(
1115+
span,
1116+
"projection clauses should be implied from elsewhere. obligation: `{:?}`",
1117+
obligation
11141118
)
11151119
}
11161120

src/test/ui/chalkify/bugs/async.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
// check-fail
2-
// known-bug: unknown
3-
// compile-flags: -Z trait-solver=chalk --edition=2021
2+
// known-bug
3+
// unset-rustc-env:RUST_BACKTRACE
4+
// compile-flags:-Z trait-solver=chalk --edition=2021
5+
// error-pattern:stack backtrace:
6+
// failure-status:101
7+
// normalize-stderr-test "note: .*" -> ""
8+
// normalize-stderr-test "thread 'rustc' .*" -> ""
9+
// normalize-stderr-test " .*\n" -> ""
10+
// normalize-stderr-test "DefId([^)]*)" -> "..."
411

512
fn main() -> () {}
613

+34-42
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,40 @@
1-
error[E0277]: `[async fn body@$DIR/async.rs:7:29: 9:2]` is not a future
2-
--> $DIR/async.rs:7:29
3-
|
4-
LL | async fn foo(x: u32) -> u32 {
5-
| _____________________________-
6-
LL | | x
7-
LL | | }
8-
| | ^
9-
| | |
10-
| |_`[async fn body@$DIR/async.rs:7:29: 9:2]` is not a future
11-
| required by a bound introduced by this call
12-
|
13-
= help: the trait `Future` is not implemented for `[async fn body@$DIR/async.rs:7:29: 9:2]`
14-
= note: [async fn body@$DIR/async.rs:7:29: 9:2] must be a future or must implement `IntoFuture` to be awaited
15-
note: required by a bound in `identity_future`
16-
--> $SRC_DIR/core/src/future/mod.rs:LL:COL
17-
18-
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
19-
--> $DIR/async.rs:7:29
20-
|
21-
LL | async fn foo(x: u32) -> u32 {
22-
| _____________________________^
23-
LL | | x
24-
LL | | }
25-
| |_^ doesn't have a size known at compile-time
26-
|
27-
= help: the trait `Sized` is not implemented for `<[async fn body@$DIR/async.rs:7:29: 9:2] as Future>::Output`
28-
note: required by a bound in `identity_future`
29-
--> $SRC_DIR/core/src/future/mod.rs:LL:COL
30-
31-
error[E0277]: `[async fn body@$DIR/async.rs:7:29: 9:2]` is not a future
32-
--> $DIR/async.rs:7:25
33-
|
1+
error[E0277]: `[async fn body@$DIR/async.rs:14:29: 16:2]` is not a future
2+
LL |LL | |LL | | }
3+
4+
5+
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
6+
LL |LL | |LL | | }
7+
8+
9+
error[E0277]: `[async fn body@$DIR/async.rs:14:29: 16:2]` is not a future
3410
LL | async fn foo(x: u32) -> u32 {
35-
| ^^^ `[async fn body@$DIR/async.rs:7:29: 9:2]` is not a future
36-
|
37-
= help: the trait `Future` is not implemented for `[async fn body@$DIR/async.rs:7:29: 9:2]`
38-
= note: [async fn body@$DIR/async.rs:7:29: 9:2] must be a future or must implement `IntoFuture` to be awaited
39-
40-
error[E0280]: the requirement `<[async fn body@$DIR/async.rs:7:29: 9:2] as Future>::Output == u32` is not satisfied
41-
--> $DIR/async.rs:7:25
42-
|
11+
12+
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)`
4313
LL | async fn foo(x: u32) -> u32 {
44-
| ^^^
4514

15+
16+
stack backtrace:
17+
18+
19+
20+
21+
22+
23+
24+
25+
26+
query stack during panic:
27+
#0 [typeck] type-checking `foo`
28+
#1 [thir_body] building THIR for `foo`
29+
#2 [mir_built] building MIR for `foo`
30+
#3 [unsafety_check_result] unsafety-checking `foo`
31+
#4 [mir_const] preparing `foo` for borrow checking
32+
#5 [mir_promoted] processing MIR for `foo`
33+
#6 [mir_borrowck] borrow-checking `foo`
34+
#7 [type_of] computing type of `foo::{opaque#0}`
35+
#8 [check_mod_item_types] checking item types in top-level module
36+
#9 [analysis] running analysis passes on this crate
37+
end of query stack
4638
error: aborting due to 4 previous errors
4739

4840
For more information about this error, try `rustc --explain E0277`.

0 commit comments

Comments
 (0)