@@ -416,9 +416,48 @@ swift::swift_dynamicCastFailure(const void *sourceType, const char *sourceName,
416
416
message ? message : " " );
417
417
}
418
418
419
- SWIFT_NORETURN void swift::swift_dynamicCastFailure (const Metadata *sourceType,
420
- const Metadata *targetType,
421
- const char *message) {
419
+ SWIFT_NORETURN SWIFT_NOINLINE void
420
+ swift_dynamicCastFailure_SOURCE_AND_TARGET_TYPE_NULL (const char *message) {
421
+ swift::fatalError (0 , " Unconditional cast failed. "
422
+ " Both source and target types were NULL. "
423
+ " %s\n " ,
424
+ message ? message : " " );
425
+ }
426
+
427
+ SWIFT_NORETURN SWIFT_NOINLINE void
428
+ swift_dynamicCastFailure_SOURCE_TYPE_NULL (const Metadata *targetType, const char *message) {
429
+ std::string targetName = nameForMetadata (targetType);
430
+ swift::fatalError (0 , " Unconditional cast failed. "
431
+ " Source type was NULL, target was '%s' (%p). "
432
+ " %s\n " ,
433
+ targetName.c_str (), targetType,
434
+ message ? message : " " );
435
+ }
436
+
437
+ SWIFT_NORETURN SWIFT_NOINLINE void
438
+ swift_dynamicCastFailure_TARGET_TYPE_NULL (const Metadata *sourceType, const char *message) {
439
+ std::string sourceName = nameForMetadata (sourceType);
440
+ swift::fatalError (0 , " Unconditional cast failed. "
441
+ " Source type was '%s' (%p), target type was NULL. "
442
+ " %s\n " ,
443
+ sourceName.c_str (), sourceType,
444
+ message ? message : " " );
445
+ }
446
+
447
+ SWIFT_NORETURN SWIFT_NOINLINE void
448
+ swift::swift_dynamicCastFailure (const Metadata *sourceType,
449
+ const Metadata *targetType,
450
+ const char *message) {
451
+ if (sourceType == nullptr ) {
452
+ if (targetType == nullptr ) {
453
+ swift_dynamicCastFailure_SOURCE_AND_TARGET_TYPE_NULL (message);
454
+ } else {
455
+ swift_dynamicCastFailure_SOURCE_TYPE_NULL (targetType, message);
456
+ }
457
+ } else if (targetType == nullptr ) {
458
+ swift_dynamicCastFailure_TARGET_TYPE_NULL (sourceType, message);
459
+ }
460
+
422
461
std::string sourceName = nameForMetadata (sourceType);
423
462
std::string targetName = nameForMetadata (targetType);
424
463
0 commit comments