@@ -500,7 +500,7 @@ class MetadataReader {
500500 return StoredPointer ();
501501
502502 auto classMeta = cast<TargetClassMetadata<Runtime>>(meta);
503- return classMeta->Superclass ;
503+ return stripSignedPointer ( classMeta->Superclass ) ;
504504 }
505505
506506 // / Given a remote pointer to class metadata, attempt to discover its class
@@ -534,9 +534,9 @@ class MetadataReader {
534534 size_t start = isaAndRetainCountSize;
535535
536536 auto classMeta = cast<TargetClassMetadata<Runtime>>(meta);
537- while (classMeta->Superclass ) {
537+ while (stripSignedPointer ( classMeta->Superclass ) ) {
538538 classMeta = cast<TargetClassMetadata<Runtime>>(
539- readMetadata (classMeta->Superclass ));
539+ readMetadata (stripSignedPointer ( classMeta->Superclass ) ));
540540
541541 // Subtract the size contribution of the isa and retain counts from
542542 // the super class.
@@ -1751,7 +1751,8 @@ class MetadataReader {
17511751 if (descriptorAddress || !skipArtificialSubclasses)
17521752 return static_cast <StoredPointer>(descriptorAddress);
17531753
1754- auto superclassMetadataAddress = classMeta->Superclass ;
1754+ auto superclassMetadataAddress =
1755+ stripSignedPointer (classMeta->Superclass );
17551756 if (!superclassMetadataAddress)
17561757 return 0 ;
17571758
@@ -2661,11 +2662,11 @@ class MetadataReader {
26612662 BuiltType BuiltObjCClass = Builder.createObjCClassType (std::move (className));
26622663 if (!BuiltObjCClass) {
26632664 // Try the superclass.
2664- if (!classMeta->Superclass )
2665+ if (!stripSignedPointer ( classMeta->Superclass ) )
26652666 return BuiltType ();
26662667
2667- BuiltObjCClass = readTypeFromMetadata (classMeta-> Superclass ,
2668- skipArtificialSubclasses);
2668+ BuiltObjCClass = readTypeFromMetadata (
2669+ stripSignedPointer (classMeta-> Superclass ), skipArtificialSubclasses);
26692670 }
26702671
26712672 TypeCache[origMetadataPtr] = BuiltObjCClass;
0 commit comments