2
2
3
3
use crate :: infer:: error_reporting:: nice_region_error:: NiceRegionError ;
4
4
use 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 ;
7
7
use rustc_errors:: { ErrorGuaranteed , MultiSpan } ;
8
8
use rustc_hir as hir;
9
9
use rustc_hir:: def:: Res ;
10
- use rustc_hir:: def_id:: { DefId , LocalDefId } ;
10
+ use rustc_hir:: def_id:: DefId ;
11
11
use rustc_hir:: intravisit:: Visitor ;
12
12
use rustc_middle:: hir:: nested_filter;
13
13
use rustc_middle:: ty:: print:: RegionHighlightMode ;
14
14
use rustc_middle:: ty:: { self , Ty , TyCtxt , TypeSuperVisitable , TypeVisitor } ;
15
- use rustc_span:: { Span , Symbol } ;
15
+ use rustc_span:: Span ;
16
16
17
17
use std:: ops:: ControlFlow ;
18
18
@@ -22,38 +22,22 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
22
22
let error = self . error . as_ref ( ) ?;
23
23
debug ! ( "try_report_impl_not_conforming_to_trait {:?}" , error) ;
24
24
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
+ _,
26
32
) = 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 ( )
33
37
&& sup_expected_found == sub_expected_found
34
38
{
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) ;
57
41
return Some ( guar) ;
58
42
}
59
43
None
@@ -147,25 +131,6 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
147
131
}
148
132
err. emit ( )
149
133
}
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
- }
169
134
}
170
135
171
136
struct TypeParamSpanVisitor < ' tcx > {
0 commit comments