@@ -840,8 +840,16 @@ impl<'a, 'tcx> CastCheck<'tcx> {
840
840
// contain wrappers, which we do not care about.
841
841
//
842
842
// e.g. we want to allow `dyn T -> (dyn T,)`, etc.
843
- let src_obj = tcx. mk_ty_from_kind ( ty:: Dynamic ( src_tty, tcx. lifetimes . re_erased , ty:: Dyn ) ) ;
844
- let dst_obj = tcx. mk_ty_from_kind ( ty:: Dynamic ( dst_tty, tcx. lifetimes . re_erased , ty:: Dyn ) ) ;
843
+ let src_obj = tcx. mk_ty_from_kind ( ty:: Dynamic (
844
+ src_tty,
845
+ tcx. lifetimes . re_erased ,
846
+ ty:: Dyn ,
847
+ ) ) ;
848
+ let dst_obj = tcx. mk_ty_from_kind ( ty:: Dynamic (
849
+ dst_tty,
850
+ tcx. lifetimes . re_erased ,
851
+ ty:: Dyn ,
852
+ ) ) ;
845
853
846
854
// `dyn Src: Unsize<dyn Dst>`
847
855
let cause = fcx. misc ( self . span ) ;
@@ -853,7 +861,7 @@ impl<'a, 'tcx> CastCheck<'tcx> {
853
861
tcx,
854
862
tcx. require_lang_item ( LangItem :: Unsize , Some ( self . span ) ) ,
855
863
[ src_obj, dst_obj] ,
856
- )
864
+ ) ,
857
865
) ;
858
866
859
867
fcx. register_predicate ( obligation) ;
@@ -866,9 +874,11 @@ impl<'a, 'tcx> CastCheck<'tcx> {
866
874
}
867
875
868
876
// dyn Auto -> dyn Auto'? ok.
869
- ( None , None )
870
- // dyn Trait -> dyn Auto? ok.
871
- | ( Some ( _) , None ) => Ok ( CastKind :: PtrPtrCast ) ,
877
+ ( None , None ) => Ok ( CastKind :: PtrPtrCast ) ,
878
+
879
+ // dyn Trait -> dyn Auto? should be ok, but we used to not allow it.
880
+ // FIXME: allow this
881
+ ( Some ( _) , None ) => Err ( CastError :: DifferingKinds ) ,
872
882
873
883
// dyn Auto -> dyn Trait? not ok.
874
884
( None , Some ( _) ) => Err ( CastError :: DifferingKinds ) ,
0 commit comments