Skip to content

Commit 275f894

Browse files
committed
only instantiate opaques with rigid types
1 parent 994d83c commit 275f894

File tree

2 files changed

+20
-6
lines changed
  • compiler
    • rustc_borrowck/src/type_check
    • rustc_trait_selection/src/solve/project_goals

2 files changed

+20
-6
lines changed

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,7 @@ pub(crate) fn type_check<'mir, 'tcx>(
188188
&mut borrowck_context,
189189
);
190190

191-
// FIXME(-Ztrait-solver=next): A bit dubious that we're only registering
192-
// predefined opaques in the typeck root.
193-
if infcx.next_trait_solver() && !infcx.tcx.is_typeck_child(body.source.def_id()) {
194-
checker.register_predefined_opaques_in_new_solver();
195-
}
191+
checker.check_user_type_annotations();
196192

197193
let mut verifier = TypeVerifier::new(&mut checker, promoted);
198194
verifier.visit_body(&body);
@@ -1021,7 +1017,11 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
10211017
borrowck_context,
10221018
reported_errors: Default::default(),
10231019
};
1024-
checker.check_user_type_annotations();
1020+
// FIXME(-Ztrait-solver=next): A bit dubious that we're only registering
1021+
// predefined opaques in the typeck root.
1022+
if infcx.next_trait_solver() && !infcx.tcx.is_typeck_child(body.source.def_id()) {
1023+
checker.register_predefined_opaques_in_new_solver();
1024+
}
10251025
checker
10261026
}
10271027

Diff for: compiler/rustc_trait_selection/src/solve/project_goals/opaques.rs

+14
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,20 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
5353
return self.flounder(&matches);
5454
}
5555
}
56+
57+
let expected = match self.try_normalize_ty(goal.param_env, expected) {
58+
Some(ty) => if ty.is_ty_var() {
59+
return self.evaluate_added_goals_and_make_canonical_response(
60+
Certainty::AMBIGUOUS,
61+
)
62+
} else {
63+
ty
64+
},
65+
None => return self.evaluate_added_goals_and_make_canonical_response(
66+
Certainty::OVERFLOW,
67+
),
68+
};
69+
5670
// Otherwise, define a new opaque type
5771
self.insert_hidden_type(opaque_type_key, goal.param_env, expected)?;
5872
self.add_item_bounds_for_hidden_type(

0 commit comments

Comments
 (0)