|
1 | 1 | use rustc_hir::def::DefKind; |
2 | | -use rustc_hir_analysis::errors::TaitForwardCompat2; |
3 | 2 | use rustc_infer::traits::ObligationCause; |
4 | 3 | use rustc_middle::ty::{ |
5 | 4 | self, DefiningScopeKind, EarlyBinder, OpaqueHiddenType, OpaqueTypeKey, TypeVisitableExt, |
6 | 5 | TypingMode, |
7 | 6 | }; |
8 | 7 | use rustc_trait_selection::error_reporting::infer::need_type_info::TypeAnnotationNeeded; |
9 | 8 | use rustc_trait_selection::opaque_types::{ |
10 | | - NonDefiningUseReason, opaque_type_has_defining_use_args, |
| 9 | + NonDefiningUseReason, opaque_type_has_defining_use_args, report_item_does_not_constrain_error, |
11 | 10 | }; |
12 | 11 | use rustc_trait_selection::solve; |
13 | 12 | use tracing::{debug, instrument}; |
@@ -43,7 +42,7 @@ impl<'tcx> FnCtxt<'_, 'tcx> { |
43 | 42 |
|
44 | 43 | enum UsageKind<'tcx> { |
45 | 44 | None, |
46 | | - NonDefiningUse(OpaqueHiddenType<'tcx>), |
| 45 | + NonDefiningUse(OpaqueTypeKey<'tcx>, OpaqueHiddenType<'tcx>), |
47 | 46 | UnconstrainedHiddenType(OpaqueHiddenType<'tcx>), |
48 | 47 | HasDefiningUse, |
49 | 48 | } |
@@ -106,18 +105,16 @@ impl<'tcx> FnCtxt<'_, 'tcx> { |
106 | 105 | if let Some(guar) = self.tainted_by_errors() { |
107 | 106 | guar |
108 | 107 | } else { |
109 | | - self.tcx.dcx().emit_err(TaitForwardCompat2 { |
110 | | - span: self |
111 | | - .tcx |
112 | | - .def_ident_span(self.body_id) |
113 | | - .unwrap_or_else(|| self.tcx.def_span(self.body_id)), |
114 | | - opaque_type_span: self.tcx.def_span(def_id), |
115 | | - opaque_type: self.tcx.def_path_str(def_id), |
116 | | - }) |
| 108 | + report_item_does_not_constrain_error(self.tcx, self.body_id, def_id, None) |
117 | 109 | } |
118 | 110 | } |
119 | | - UsageKind::NonDefiningUse(hidden_type) => { |
120 | | - tcx.dcx().span_err(hidden_type.span, "non-defining use in the defining scope") |
| 111 | + UsageKind::NonDefiningUse(opaque_type_key, hidden_type) => { |
| 112 | + report_item_does_not_constrain_error( |
| 113 | + self.tcx, |
| 114 | + self.body_id, |
| 115 | + def_id, |
| 116 | + Some((opaque_type_key, hidden_type.span)), |
| 117 | + ) |
121 | 118 | } |
122 | 119 | UsageKind::UnconstrainedHiddenType(hidden_type) => { |
123 | 120 | let infer_var = hidden_type |
@@ -166,7 +163,7 @@ impl<'tcx> FnCtxt<'_, 'tcx> { |
166 | 163 | ); |
167 | 164 | return UsageKind::HasDefiningUse; |
168 | 165 | } |
169 | | - _ => return UsageKind::NonDefiningUse(hidden_type), |
| 166 | + _ => return UsageKind::NonDefiningUse(opaque_type_key, hidden_type), |
170 | 167 | }; |
171 | 168 | } |
172 | 169 |
|
|
0 commit comments