@@ -500,7 +500,7 @@ class MetadataReader {
500
500
return StoredPointer ();
501
501
502
502
auto classMeta = cast<TargetClassMetadata<Runtime>>(meta);
503
- return classMeta->Superclass ;
503
+ return stripSignedPointer ( classMeta->Superclass ) ;
504
504
}
505
505
506
506
// / Given a remote pointer to class metadata, attempt to discover its class
@@ -534,9 +534,9 @@ class MetadataReader {
534
534
size_t start = isaAndRetainCountSize;
535
535
536
536
auto classMeta = cast<TargetClassMetadata<Runtime>>(meta);
537
- while (classMeta->Superclass ) {
537
+ while (stripSignedPointer ( classMeta->Superclass ) ) {
538
538
classMeta = cast<TargetClassMetadata<Runtime>>(
539
- readMetadata (classMeta->Superclass ));
539
+ readMetadata (stripSignedPointer ( classMeta->Superclass ) ));
540
540
541
541
// Subtract the size contribution of the isa and retain counts from
542
542
// the super class.
@@ -1751,7 +1751,8 @@ class MetadataReader {
1751
1751
if (descriptorAddress || !skipArtificialSubclasses)
1752
1752
return static_cast <StoredPointer>(descriptorAddress);
1753
1753
1754
- auto superclassMetadataAddress = classMeta->Superclass ;
1754
+ auto superclassMetadataAddress =
1755
+ stripSignedPointer (classMeta->Superclass );
1755
1756
if (!superclassMetadataAddress)
1756
1757
return 0 ;
1757
1758
@@ -2661,11 +2662,11 @@ class MetadataReader {
2661
2662
BuiltType BuiltObjCClass = Builder.createObjCClassType (std::move (className));
2662
2663
if (!BuiltObjCClass) {
2663
2664
// Try the superclass.
2664
- if (!classMeta->Superclass )
2665
+ if (!stripSignedPointer ( classMeta->Superclass ) )
2665
2666
return BuiltType ();
2666
2667
2667
- BuiltObjCClass = readTypeFromMetadata (classMeta-> Superclass ,
2668
- skipArtificialSubclasses);
2668
+ BuiltObjCClass = readTypeFromMetadata (
2669
+ stripSignedPointer (classMeta-> Superclass ), skipArtificialSubclasses);
2669
2670
}
2670
2671
2671
2672
TypeCache[origMetadataPtr] = BuiltObjCClass;
0 commit comments