Skip to content

Commit 191fb23

Browse files
authored
Rollup merge of #133810 - lcnr:remove-verify_bound, r=compiler-errors
remove unnecessary `eval_verify_bound` This does not impact any tests. I feel like any cases where this could useful should instead be fixed by a general improvement to `eval_verify_bound` to avoid having to promote this `TypeTest` in the first place 🤔 r? types cc ``@nikomatsakis``
2 parents ad211ce + 1228b38 commit 191fb23

File tree

1 file changed

+8
-18
lines changed
  • compiler/rustc_borrowck/src/region_infer

1 file changed

+8
-18
lines changed

Diff for: compiler/rustc_borrowck/src/region_infer/mod.rs

+8-18
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
978978
propagated_outlives_requirements: &mut Vec<ClosureOutlivesRequirement<'tcx>>,
979979
) -> bool {
980980
let tcx = infcx.tcx;
981-
let TypeTest { generic_kind, lower_bound, span: blame_span, ref verify_bound } = *type_test;
981+
let TypeTest { generic_kind, lower_bound, span: blame_span, verify_bound: _ } = *type_test;
982982

983983
let generic_ty = generic_kind.to_ty(tcx);
984984
let Some(subject) = self.try_promote_type_test_subject(infcx, generic_ty) else {
@@ -1016,25 +1016,10 @@ impl<'tcx> RegionInferenceContext<'tcx> {
10161016
// For each region outlived by lower_bound find a non-local,
10171017
// universal region (it may be the same region) and add it to
10181018
// `ClosureOutlivesRequirement`.
1019+
let mut found_outlived_universal_region = false;
10191020
for ur in self.scc_values.universal_regions_outlived_by(r_scc) {
1021+
found_outlived_universal_region = true;
10201022
debug!("universal_region_outlived_by ur={:?}", ur);
1021-
// Check whether we can already prove that the "subject" outlives `ur`.
1022-
// If so, we don't have to propagate this requirement to our caller.
1023-
//
1024-
// To continue the example from the function, if we are trying to promote
1025-
// a requirement that `T: 'X`, and we know that `'X = '1 + '2` (i.e., the union
1026-
// `'1` and `'2`), then in this loop `ur` will be `'1` (and `'2`). So here
1027-
// we check whether `T: '1` is something we *can* prove. If so, no need
1028-
// to propagate that requirement.
1029-
//
1030-
// This is needed because -- particularly in the case
1031-
// where `ur` is a local bound -- we are sometimes in a
1032-
// position to prove things that our caller cannot. See
1033-
// #53570 for an example.
1034-
if self.eval_verify_bound(infcx, generic_ty, ur, &verify_bound) {
1035-
continue;
1036-
}
1037-
10381023
let non_local_ub = self.universal_region_relations.non_local_upper_bounds(ur);
10391024
debug!(?non_local_ub);
10401025

@@ -1056,6 +1041,11 @@ impl<'tcx> RegionInferenceContext<'tcx> {
10561041
propagated_outlives_requirements.push(requirement);
10571042
}
10581043
}
1044+
// If we succeed to promote the subject, i.e. it only contains non-local regions,
1045+
// and fail to prove the type test inside of the closure, the `lower_bound` has to
1046+
// also be at least as large as some universal region, as the type test is otherwise
1047+
// trivial.
1048+
assert!(found_outlived_universal_region);
10591049
true
10601050
}
10611051

0 commit comments

Comments
 (0)