diff options
| author | Michael Goulet <michael@errs.io> | 2023-05-11 02:10:56 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2023-05-12 00:10:52 +0000 |
| commit | 14bf909e71209fc946f35ffba8ae6572c9575715 (patch) | |
| tree | 7e74098b379efd7a09f59b8e17f6c820d7202c16 /compiler/rustc_trait_selection/src/traits/select/mod.rs | |
| parent | 2a8221dbdfd180a2d56d4b0089f4f3952d8c2bcd (diff) | |
| download | rust-14bf909e71209fc946f35ffba8ae6572c9575715.tar.gz rust-14bf909e71209fc946f35ffba8ae6572c9575715.zip | |
Note base types of coercion
Diffstat (limited to 'compiler/rustc_trait_selection/src/traits/select/mod.rs')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/select/mod.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index e4f5a84f424..b72ff5b78e4 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -2647,14 +2647,19 @@ impl<'tcx> SelectionContext<'_, 'tcx> { let predicates = predicates.instantiate_own(tcx, substs); let mut obligations = Vec::with_capacity(predicates.len()); for (index, (predicate, span)) in predicates.into_iter().enumerate() { - let cause = cause.clone().derived_cause(parent_trait_pred, |derived| { - ImplDerivedObligation(Box::new(ImplDerivedObligationCause { - derived, - impl_or_alias_def_id: def_id, - impl_def_predicate_index: Some(index), - span, - })) - }); + let cause = + if Some(parent_trait_pred.def_id()) == tcx.lang_items().coerce_unsized_trait() { + cause.clone() + } else { + cause.clone().derived_cause(parent_trait_pred, |derived| { + ImplDerivedObligation(Box::new(ImplDerivedObligationCause { + derived, + impl_or_alias_def_id: def_id, + impl_def_predicate_index: Some(index), + span, + })) + }) + }; let predicate = normalize_with_depth_to( self, param_env, |
