22
33use crate :: infer:: error_reporting:: nice_region_error:: NiceRegionError ;
44use crate :: infer:: lexical_region_resolve:: RegionResolutionError ;
5- use crate :: infer:: { SubregionOrigin , Subtype } ;
6- use crate :: traits:: ObligationCauseCode :: CompareImplMethodObligation ;
5+ use crate :: infer:: Subtype ;
6+ use crate :: traits:: ObligationCauseCode :: CompareImplItemObligation ;
77use rustc_errors:: { ErrorGuaranteed , MultiSpan } ;
88use rustc_hir as hir;
99use rustc_hir:: def:: Res ;
10- use rustc_hir:: def_id:: { DefId , LocalDefId } ;
10+ use rustc_hir:: def_id:: DefId ;
1111use rustc_hir:: intravisit:: Visitor ;
1212use rustc_middle:: hir:: nested_filter;
1313use rustc_middle:: ty:: print:: RegionHighlightMode ;
1414use rustc_middle:: ty:: { self , Ty , TyCtxt , TypeSuperVisitable , TypeVisitor } ;
15- use rustc_span:: { Span , Symbol } ;
15+ use rustc_span:: Span ;
1616
1717use std:: ops:: ControlFlow ;
1818
@@ -22,38 +22,22 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
2222 let error = self . error . as_ref ( ) ?;
2323 debug ! ( "try_report_impl_not_conforming_to_trait {:?}" , error) ;
2424 if let RegionResolutionError :: SubSupConflict (
25- _, var_origin, sub_origin, _sub, sup_origin, _sup, _,
25+ _,
26+ var_origin,
27+ sub_origin,
28+ _sub,
29+ sup_origin,
30+ _sup,
31+ _,
2632 ) = error. clone ( )
27- && let ( & Subtype ( ref sup_trace) , & Subtype ( ref sub_trace) ) = ( & sup_origin, & sub_origin)
28- && let (
29- sub_expected_found @ Some ( ( sub_expected, sub_found) ) ,
30- sup_expected_found @ Some ( _) ,
31- CompareImplMethodObligation { trait_item_def_id, .. } ,
32- ) = ( sub_trace. values . ty ( ) , sup_trace. values . ty ( ) , sub_trace. cause . code ( ) )
33+ && let ( Subtype ( sup_trace) , Subtype ( sub_trace) ) = ( & sup_origin, & sub_origin)
34+ && let sub_expected_found @ Some ( ( sub_expected, sub_found) ) = sub_trace. values . ty ( )
35+ && let sup_expected_found @ Some ( _) = sup_trace. values . ty ( )
36+ && let CompareImplItemObligation { trait_item_def_id, .. } = sub_trace. cause . code ( )
3337 && sup_expected_found == sub_expected_found
3438 {
35- let guar = self . emit_err (
36- var_origin. span ( ) ,
37- sub_expected,
38- sub_found,
39- * trait_item_def_id,
40- ) ;
41- return Some ( guar) ;
42- }
43- if let RegionResolutionError :: ConcreteFailure ( origin, _, _)
44- | RegionResolutionError :: GenericBoundFailure ( origin, _, _) = error. clone ( )
45- && let SubregionOrigin :: CompareImplTypeObligation {
46- span,
47- impl_item_def_id,
48- trait_item_def_id,
49- } = origin
50- {
51- let guar = self . emit_associated_type_err (
52- span,
53- self . infcx . tcx . item_name ( impl_item_def_id. to_def_id ( ) ) ,
54- impl_item_def_id,
55- trait_item_def_id,
56- ) ;
39+ let guar =
40+ self . emit_err ( var_origin. span ( ) , sub_expected, sub_found, * trait_item_def_id) ;
5741 return Some ( guar) ;
5842 }
5943 None
@@ -147,25 +131,6 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
147131 }
148132 err. emit ( )
149133 }
150-
151- fn emit_associated_type_err (
152- & self ,
153- span : Span ,
154- item_name : Symbol ,
155- impl_item_def_id : LocalDefId ,
156- trait_item_def_id : DefId ,
157- ) -> ErrorGuaranteed {
158- let impl_sp = self . tcx ( ) . def_span ( impl_item_def_id) ;
159- let trait_sp = self . tcx ( ) . def_span ( trait_item_def_id) ;
160- let mut err = self
161- . tcx ( )
162- . sess
163- . struct_span_err ( span, & format ! ( "`impl` associated type signature for `{}` doesn't match `trait` associated type signature" , item_name) ) ;
164- err. span_label ( impl_sp, "found" ) ;
165- err. span_label ( trait_sp, "expected" ) ;
166-
167- err. emit ( )
168- }
169134}
170135
171136struct TypeParamSpanVisitor < ' tcx > {
0 commit comments