Skip to content

Commit fb351be

Browse files
committed
[Demangler][Tests] Address Doug's comments.
Moved the test for the metadata kind to MetadataLookup.cpp. Added an assertion (for debug builds) to Metadata.cpp to catch the case where something manages to bypass that test.
1 parent 8db56f0 commit fb351be

File tree

2 files changed

+10
-9
lines changed

2 files changed

+10
-9
lines changed

stdlib/public/runtime/Metadata.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3484,22 +3484,23 @@ ExistentialMetatypeValueWitnessTableCacheEntry(unsigned numWitnessTables) {
34843484
SWIFT_RUNTIME_EXPORT
34853485
const ExistentialMetatypeMetadata *
34863486
swift::swift_getExistentialMetatypeMetadata(const Metadata *instanceMetadata) {
3487-
if (instanceMetadata->getKind() != MetadataKind::Existential
3488-
&& instanceMetadata->getKind() != MetadataKind::ExistentialMetatype)
3489-
return nullptr;
3490-
34913487
return &ExistentialMetatypes.getOrInsert(instanceMetadata).first->Data;
34923488
}
34933489

34943490
ExistentialMetatypeCacheEntry::ExistentialMetatypeCacheEntry(
34953491
const Metadata *instanceMetadata) {
34963492
ExistentialTypeFlags flags;
3497-
if (instanceMetadata->getKind() == MetadataKind::Existential) {
3493+
switch (instanceMetadata->getKind()) {
3494+
case MetadataKind::Existential:
34983495
flags = static_cast<const ExistentialTypeMetadata*>(instanceMetadata)
34993496
->Flags;
3500-
} else {
3497+
break;
3498+
case MetadataKind::ExistentialMetatype:
35013499
flags = static_cast<const ExistentialMetatypeMetadata*>(instanceMetadata)
35023500
->Flags;
3501+
break;
3502+
default:
3503+
assert(false && "expected existential metadata");
35033504
}
35043505

35053506
Data.setKind(MetadataKind::ExistentialMetatype);

stdlib/public/runtime/MetadataLookup.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,13 +1446,13 @@ class DecodedMetadataBuilder {
14461446
TypeLookupErrorOr<BuiltType> createExistentialMetatypeType(
14471447
BuiltType instance,
14481448
llvm::Optional<Demangle::ImplMetatypeRepresentation> repr = None) const {
1449-
BuiltType result = swift_getExistentialMetatypeMetadata(instance);
1450-
if (!result) {
1449+
if (instance->getKind() != MetadataKind::Existential
1450+
&& instance->getKind() != MetadataKind::ExistentialMetatype) {
14511451
return TYPE_LOOKUP_ERROR_FMT("Tried to build an existential metatype from "
14521452
"a type that was neither an existential nor "
14531453
"an existential metatype");
14541454
}
1455-
return result;
1455+
return swift_getExistentialMetatypeMetadata(instance);
14561456
}
14571457

14581458
TypeLookupErrorOr<BuiltType>

0 commit comments

Comments
 (0)