@@ -1830,12 +1830,18 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
18301830 ( TransmutabilityCandidate , _) | ( _, TransmutabilityCandidate ) => DropVictim :: No ,
18311831
18321832 // (*)
1833- ( BuiltinCandidate { has_nested : false } | ConstDestructCandidate ( _) , _) => {
1834- DropVictim :: Yes
1835- }
1836- ( _, BuiltinCandidate { has_nested : false } | ConstDestructCandidate ( _) ) => {
1837- DropVictim :: No
1838- }
1833+ (
1834+ BuiltinCandidate { has_nested : false }
1835+ | ConstDestructCandidate ( _)
1836+ | MetadataCastCandidate ( MetadataCastKind :: Unconditional ) ,
1837+ _,
1838+ ) => DropVictim :: Yes ,
1839+ (
1840+ _,
1841+ BuiltinCandidate { has_nested : false }
1842+ | ConstDestructCandidate ( _)
1843+ | MetadataCastCandidate ( MetadataCastKind :: Unconditional ) ,
1844+ ) => DropVictim :: No ,
18391845
18401846 ( ParamCandidate ( other) , ParamCandidate ( victim) ) => {
18411847 let same_except_bound_vars = other. skip_binder ( ) . trait_ref
@@ -1873,6 +1879,7 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
18731879 | BuiltinUnsizeCandidate
18741880 | TraitUpcastingUnsizeCandidate ( _)
18751881 | BuiltinCandidate { .. }
1882+ | MetadataCastCandidate ( _)
18761883 | TraitAliasCandidate
18771884 | ObjectCandidate ( _)
18781885 | ProjectionCandidate ( _) ,
@@ -1903,6 +1910,7 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
19031910 | BuiltinUnsizeCandidate
19041911 | TraitUpcastingUnsizeCandidate ( _)
19051912 | BuiltinCandidate { has_nested : true }
1913+ | MetadataCastCandidate ( MetadataCastKind :: Subtype )
19061914 | TraitAliasCandidate ,
19071915 ParamCandidate ( ref victim_cand) ,
19081916 ) => {
@@ -1939,6 +1947,7 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
19391947 | BuiltinUnsizeCandidate
19401948 | TraitUpcastingUnsizeCandidate ( _)
19411949 | BuiltinCandidate { .. }
1950+ | MetadataCastCandidate ( _)
19421951 | TraitAliasCandidate ,
19431952 ) => DropVictim :: Yes ,
19441953
@@ -1955,6 +1964,7 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
19551964 | BuiltinUnsizeCandidate
19561965 | TraitUpcastingUnsizeCandidate ( _)
19571966 | BuiltinCandidate { .. }
1967+ | MetadataCastCandidate ( _)
19581968 | TraitAliasCandidate ,
19591969 ObjectCandidate ( _) | ProjectionCandidate ( _) ,
19601970 ) => DropVictim :: No ,
@@ -2063,6 +2073,7 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
20632073 | BuiltinUnsizeCandidate
20642074 | TraitUpcastingUnsizeCandidate ( _)
20652075 | BuiltinCandidate { has_nested : true }
2076+ | MetadataCastCandidate ( MetadataCastKind :: Subtype )
20662077 | TraitAliasCandidate ,
20672078 ImplCandidate ( _)
20682079 | ClosureCandidate { .. }
@@ -2075,6 +2086,7 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
20752086 | BuiltinUnsizeCandidate
20762087 | TraitUpcastingUnsizeCandidate ( _)
20772088 | BuiltinCandidate { has_nested : true }
2089+ | MetadataCastCandidate ( MetadataCastKind :: Subtype )
20782090 | TraitAliasCandidate ,
20792091 ) => DropVictim :: No ,
20802092 }
0 commit comments