@@ -416,9 +416,48 @@ swift::swift_dynamicCastFailure(const void *sourceType, const char *sourceName,
416416 message ? message : " " );
417417}
418418
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+
422461 std::string sourceName = nameForMetadata (sourceType);
423462 std::string targetName = nameForMetadata (targetType);
424463
0 commit comments