@@ -10,7 +10,7 @@ use rustc::{
10
10
hir:: def_id:: DefId ,
11
11
ty:: {
12
12
self ,
13
- relate:: { Relate , RelateResult , TraitObjectMode , TypeRelation } ,
13
+ relate:: { Relate , RelateResult , TypeRelation } ,
14
14
subst:: Substs ,
15
15
Ty , TyCtxt ,
16
16
Visibility :: Public ,
@@ -95,10 +95,6 @@ impl<'a, 'gcx, 'tcx> TypeRelation<'a, 'gcx, 'tcx> for MismatchRelation<'a, 'gcx,
95
95
"Mismatch"
96
96
}
97
97
98
- fn trait_object_mode ( & self ) -> TraitObjectMode {
99
- TraitObjectMode :: NoSquash
100
- }
101
-
102
98
fn a_is_expected ( & self ) -> bool {
103
99
true
104
100
}
@@ -186,14 +182,17 @@ impl<'a, 'gcx, 'tcx> TypeRelation<'a, 'gcx, 'tcx> for MismatchRelation<'a, 'gcx,
186
182
}
187
183
( & TyKind :: Dynamic ( a_obj, a_r) , & TyKind :: Dynamic ( b_obj, b_r) ) => {
188
184
let _ = self . relate ( & a_r, & b_r) ?;
189
- let a = a_obj. principal ( ) ;
190
- let b = b_obj. principal ( ) ;
191
-
192
- if self . check_substs ( a. skip_binder ( ) . substs , b. skip_binder ( ) . substs ) {
193
- let _ = self . relate ( & a. skip_binder ( ) . substs , & b. skip_binder ( ) . substs ) ?;
194
- Some ( ( a. skip_binder ( ) . def_id , b. skip_binder ( ) . def_id ) )
195
- } else {
196
- None
185
+ match ( a_obj. principal ( ) , b_obj. principal ( ) ) {
186
+ ( None , _) => None ,
187
+ ( _, None ) => None ,
188
+ ( Some ( a) , Some ( b) ) => {
189
+ if self . check_substs ( a. skip_binder ( ) . substs , b. skip_binder ( ) . substs ) {
190
+ let _ = self . relate ( & a. skip_binder ( ) . substs , & b. skip_binder ( ) . substs ) ?;
191
+ Some ( ( a. skip_binder ( ) . def_id , b. skip_binder ( ) . def_id ) )
192
+ } else {
193
+ None
194
+ }
195
+ }
197
196
}
198
197
}
199
198
( & TyKind :: Tuple ( as_) , & TyKind :: Tuple ( bs) ) => {
0 commit comments