Skip to content

Commit 0e28747

Browse files
committed
limit multipayload workaround to Foundation.IndexPath
1 parent df36fa0 commit 0e28747

File tree

1 file changed

+6
-13
lines changed

1 file changed

+6
-13
lines changed

lldb/source/Target/SwiftLanguageRuntimeDynamicTypeResolution.cpp

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,23 +1231,14 @@ findFieldWithName(const std::vector<swift::reflection::FieldInfo> &fields,
12311231
static llvm::Optional<std::string>
12321232
GetMultiPayloadEnumCaseName(const swift::reflection::EnumTypeInfo *eti,
12331233
const DataExtractor &data) {
1234-
using namespace swift::reflection;
1235-
assert(eti->getEnumKind() == EnumKind::MultiPayloadEnum);
1236-
const auto &cases = eti->getCases();
1237-
auto it = std::max_element(cases.begin(), cases.end(),
1238-
[](const auto &a, const auto &b) {
1239-
return a.TI.getSize() < b.TI.getSize();
1240-
});
1241-
if (it == cases.end())
1242-
return {};
1243-
1244-
auto payload_capacity = it->TI.getSize();
1234+
assert(eti->getEnumKind() == swift::reflection::EnumKind::MultiPayloadEnum);
1235+
auto payload_capacity = eti->getPayloadSize();
12451236
if (data.GetByteSize() == payload_capacity + 1) {
12461237
auto tag = data.GetDataStart()[payload_capacity];
1238+
const auto &cases = eti->getCases();
12471239
if (tag >= 0 && tag < cases.size())
12481240
return cases[tag].Name;
12491241
}
1250-
12511242
return {};
12521243
}
12531244

@@ -1268,7 +1259,9 @@ llvm::Optional<std::string> SwiftLanguageRuntimeImpl::GetEnumCaseName(
12681259
return eti->getCases()[case_index].Name;
12691260

12701261
// Temporary workaround.
1271-
if (eti->getEnumKind() == EnumKind::MultiPayloadEnum)
1262+
if (eti->getEnumKind() == EnumKind::MultiPayloadEnum &&
1263+
type.GetMangledTypeName().GetStringRef().startswith(
1264+
"$s10Foundation9IndexPathV7Storage10"))
12721265
return GetMultiPayloadEnumCaseName(eti, data);
12731266

12741267
return {};

0 commit comments

Comments
 (0)