diff --git a/stdlib/public/runtime/Metadata.cpp b/stdlib/public/runtime/Metadata.cpp index 03c3975de837a..51dff44d4a530 100644 --- a/stdlib/public/runtime/Metadata.cpp +++ b/stdlib/public/runtime/Metadata.cpp @@ -113,15 +113,14 @@ Metadata *TargetSingletonMetadataInitialization::allocate( // Such a template will fail the `isTypeMetadata` test and we'll think that it // isn't Swift metadata but a plain old ObjC class instead. if (metadata->getKind() == MetadataKind::Class) { - auto *classMetadata = static_cast(metadata); -#if SWIFT_OBJC_INTEROP - classMetadata->setAsTypeMetadata(); -#endif auto *fullMetadata = asFullMetadata(metadata); // Begin by initializing the value witness table; everything else is // initialized by swift_initClassMetadata(). #if SWIFT_OBJC_INTEROP + auto *classMetadata = static_cast(metadata); + classMetadata->setAsTypeMetadata(); + fullMetadata->ValueWitnesses = (classMetadata->Flags & ClassFlags::UsesSwiftRefcounting) ? &VALUE_WITNESS_SYM(Bo)