Skip to content

Commit 13f0abf

Browse files
committed
[RemoteAST] Fix metadata reader to properly read tuple type metadata
Because `readMetadata` correctly reads tuple type metadata bounds, there is no need to call for remote read of the memory allocated for element types, since they are going to be laid out right after tuple metadata itself and could be accessed using accessors in `TargetTupleTypeMetadata`.
1 parent 8a62b66 commit 13f0abf

File tree

1 file changed

+4
-12
lines changed

1 file changed

+4
-12
lines changed

include/swift/Remote/MetadataReader.h

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -777,16 +777,8 @@ class MetadataReader {
777777
std::vector<BuiltType> elementTypes;
778778
elementTypes.reserve(tupleMeta->NumElements);
779779

780-
StoredPointer elementAddress = MetadataAddress +
781-
sizeof(TargetTupleTypeMetadata<Runtime>);
782-
using Element = typename TargetTupleTypeMetadata<Runtime>::Element;
783-
for (StoredPointer i = 0; i < tupleMeta->NumElements; ++i,
784-
elementAddress += sizeof(Element)) {
785-
Element element;
786-
if (!Reader->readBytes(RemoteAddress(elementAddress),
787-
(uint8_t*)&element, sizeof(Element)))
788-
return BuiltType();
789-
780+
for (unsigned i = 0, n = tupleMeta->NumElements; i != n; ++i) {
781+
auto &element = tupleMeta->getElement(i);
790782
if (auto elementType = readTypeFromMetadata(element.Type))
791783
elementTypes.push_back(elementType);
792784
else
@@ -1226,8 +1218,8 @@ class MetadataReader {
12261218
if (!Reader->readInteger(RemoteAddress(numElementsAddress),
12271219
&numElements))
12281220
return nullptr;
1229-
auto totalSize = sizeof(TargetTupleTypeMetadata<Runtime>)
1230-
+ numElements * sizeof(StoredPointer);
1221+
auto totalSize = sizeof(TargetTupleTypeMetadata<Runtime>) +
1222+
numElements * sizeof(TupleTypeMetadata::Element);
12311223

12321224
// Make sure the number of elements is reasonable
12331225
if (numElements >= 256)

0 commit comments

Comments
 (0)