@@ -292,10 +292,16 @@ CanType swift::getNSBridgedClassOfCFClass(ModuleDecl *M, CanType type) {
292
292
293
293
static bool isCFBridgingConversion (ModuleDecl *M, SILType sourceType,
294
294
SILType targetType) {
295
- return (sourceType.getASTType () ==
296
- getNSBridgedClassOfCFClass (M, targetType.getASTType ()) ||
297
- targetType.getASTType () ==
298
- getNSBridgedClassOfCFClass (M, sourceType.getASTType ()));
295
+ if (auto bridgedTarget =
296
+ getNSBridgedClassOfCFClass (M, targetType.getASTType ())) {
297
+ return bridgedTarget->isExactSuperclassOf (sourceType.getASTType ());
298
+ }
299
+ if (auto bridgedSource =
300
+ getNSBridgedClassOfCFClass (M, sourceType.getASTType ())) {
301
+ return targetType.getASTType ()->isExactSuperclassOf (bridgedSource);
302
+ }
303
+
304
+ return false ;
299
305
}
300
306
301
307
// / Try to classify the dynamic-cast relationship between two types.
@@ -868,7 +874,7 @@ namespace {
868
874
value = getOwnedScalar (source, srcTL);
869
875
}
870
876
auto targetTy = target.LoweredType ;
871
- if (isCFBridgingConversion (SwiftModule, targetTy, value->getType ())) {
877
+ if (isCFBridgingConversion (SwiftModule, value->getType (), targetTy )) {
872
878
value = B.createUncheckedRefCast (Loc, value, targetTy.getObjectType ());
873
879
} else {
874
880
value = B.createUpcast (Loc, value, targetTy.getObjectType ());
0 commit comments