Skip to content

Commit

Permalink
Rollup merge of #103586 - compiler-errors:issue-103573, r=jackh726
Browse files Browse the repository at this point in the history
Process registered region obligation in `resolve_regions_with_wf_tys`

Fixes #103573
  • Loading branch information
matthiaskrgr authored Oct 27, 2022
2 parents 8a29784 + db3b01d commit bf53e71
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
4 changes: 4 additions & 0 deletions compiler/rustc_hir_analysis/src/check/wfcheck.rs
Original file line number Diff line number Diff line change
Expand Up @@ -713,6 +713,10 @@ fn resolve_regions_with_wf_tys<'tcx>(

add_constraints(&infcx, region_bound_pairs);

infcx.process_registered_region_obligations(
outlives_environment.region_bound_pairs(),
param_env,
);
let errors = infcx.resolve_regions(&outlives_environment);

debug!(?errors, "errors");
Expand Down
22 changes: 22 additions & 0 deletions src/test/ui/wf/issue-103573.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
trait TraitA {
type TypeA;
}

trait TraitD {
type TypeD;
}

pub trait TraitB {
type TypeB: TraitD;

fn f(_: &<Self::TypeB as TraitD>::TypeD);
}

pub trait TraitC<E> {
type TypeC<'a>: TraitB;

fn g<'a>(_: &<<Self::TypeC<'a> as TraitB>::TypeB as TraitA>::TypeA);
//~^ ERROR the trait bound `<<Self as TraitC<E>>::TypeC<'a> as TraitB>::TypeB: TraitA` is not satisfied
}

fn main() {}
14 changes: 14 additions & 0 deletions src/test/ui/wf/issue-103573.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
error[E0277]: the trait bound `<<Self as TraitC<E>>::TypeC<'a> as TraitB>::TypeB: TraitA` is not satisfied
--> $DIR/issue-103573.rs:18:5
|
LL | fn g<'a>(_: &<<Self::TypeC<'a> as TraitB>::TypeB as TraitA>::TypeA);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `TraitA` is not implemented for `<<Self as TraitC<E>>::TypeC<'a> as TraitB>::TypeB`
|
help: consider further restricting the associated type
|
LL | fn g<'a>(_: &<<Self::TypeC<'a> as TraitB>::TypeB as TraitA>::TypeA) where <<Self as TraitC<E>>::TypeC<'a> as TraitB>::TypeB: TraitA;
| +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

error: aborting due to previous error

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

0 comments on commit bf53e71

Please sign in to comment.