Skip to content

Commit

Permalink
Use error term if missing associated item in new solver
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed May 16, 2023
1 parent 9239760 commit 8921391
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 2 deletions.
16 changes: 15 additions & 1 deletion compiler/rustc_trait_selection/src/solve/project_goals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,24 @@ impl<'tcx> assembly::GoalKind<'tcx> for ProjectionPredicate<'tcx> {
};

if !assoc_def.item.defaultness(tcx).has_value() {
tcx.sess.delay_span_bug(
let guar = tcx.sess.delay_span_bug(
tcx.def_span(assoc_def.item.def_id),
"missing value for assoc item in impl",
);
let error_term = match assoc_def.item.kind {
ty::AssocKind::Const => tcx
.const_error(
tcx.type_of(goal.predicate.def_id())
.subst(tcx, goal.predicate.projection_ty.substs),
guar,
)
.into(),
ty::AssocKind::Type => tcx.ty_error(guar).into(),
ty::AssocKind::Fn => unreachable!(),
};
ecx.eq(goal.param_env, goal.predicate.term, error_term)
.expect("expected goal term to be fully unconstrained");
return ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes);
}

// Getting the right substitutions here is complex, e.g. given:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0046]: not all trait items implemented, missing: `Error`
--> $DIR/issue-103181-1.rs:9:5
--> $DIR/issue-103181-1.rs:11:5
|
LL | type Error;
| ---------- `Error` from trait
Expand Down
12 changes: 12 additions & 0 deletions tests/ui/impl-trait/issue-103181-1.next.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
error[E0046]: not all trait items implemented, missing: `Error`
--> $DIR/issue-103181-1.rs:11:5
|
LL | type Error;
| ---------- `Error` from trait
LL | }
LL | impl HttpBody for () {
| ^^^^^^^^^^^^^^^^^^^^ missing `Error` in implementation

error: aborting due to previous error

For more information about this error, try `rustc --explain E0046`.
2 changes: 2 additions & 0 deletions tests/ui/impl-trait/issue-103181-1.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// revisions: current next
//[next] compile-flags: -Ztrait-solver=next
// edition:2021

mod hyper {
Expand Down

0 comments on commit 8921391

Please sign in to comment.