Skip to content

Commit 71d6f49

Browse files
authored
Merge pull request #27847 from fredriss/fix-metadata-reader-5.1
[MetadataReader] Adapt to newer Objective-C class_rw_t
2 parents 96fd946 + 8a5f7d7 commit 71d6f49

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

include/swift/Remote/MetadataReader.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2432,6 +2432,13 @@ class MetadataReader {
24322432
if (!Reader->readInteger(RemoteAddress(dataPtr + OffsetToROPtr), &dataPtr))
24332433
return StoredPointer();
24342434

2435+
// Newer Objective-C runtimes implement a size optimization where the RO
2436+
// field is a tagged union. If the low-bit is set, then the pointer needs
2437+
// to be dereferenced once more to yield the real class_ro_t pointer.
2438+
if (dataPtr & 1)
2439+
if (!Reader->readInteger(RemoteAddress(dataPtr^1), &dataPtr))
2440+
return StoredPointer();
2441+
24352442
return dataPtr;
24362443
}
24372444

0 commit comments

Comments
 (0)