Skip to content

Commit 7a8f86a

Browse files
committed
[WIP][lldb][Swift] Propagate address ValueType in GetDynamicAddressAndType_ExistentialMetaType
rdar://150305159
1 parent 367909f commit 7a8f86a

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,8 @@ class SwiftLanguageRuntime : public LanguageRuntime {
666666
bool GetDynamicTypeAndAddress_ExistentialMetatype(
667667
ValueObject &in_value, CompilerType meta_type,
668668
lldb::DynamicValueType use_dynamic, TypeAndOrName &class_type_or_name,
669-
Address &address);
669+
Address &address,
670+
Value::ValueType &value_type);
670671

671672
bool GetDynamicTypeAndAddress_Value(ValueObject &in_value,
672673
CompilerType &bound_type,

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeDynamicTypeResolution.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2391,7 +2391,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential(
23912391
bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_ExistentialMetatype(
23922392
ValueObject &in_value, CompilerType meta_type,
23932393
lldb::DynamicValueType use_dynamic, TypeAndOrName &class_type_or_name,
2394-
Address &address) {
2394+
Address &address, Value::ValueType &value_type) {
23952395
// Resolve the dynamic type of the metatype.
23962396
AddressType address_type;
23972397
lldb::addr_t ptr = in_value.GetPointerValue(&address_type);
@@ -2437,6 +2437,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_ExistentialMetatype(
24372437
tss->GetTypeSystemSwiftTypeRef()->RemangleAsType(dem, wrapped, flavor);
24382438
class_type_or_name.SetCompilerType(meta_type);
24392439
address.SetRawAddress(ptr);
2440+
value_type = Value::ValueType::LoadAddress;
24402441
return true;
24412442
}
24422443

@@ -3115,8 +3116,9 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress(
31153116
class_type_or_name, address,
31163117
static_value_type, local_buffer);
31173118
else if (type_info.AllSet(eTypeIsMetatype | eTypeIsProtocol))
3118-
success = GetDynamicTypeAndAddress_ExistentialMetatype(
3119-
in_value, val_type, use_dynamic, class_type_or_name, address);
3119+
if (GetDynamicTypeAndAddress_ExistentialMetatype(
3120+
in_value, val_type, use_dynamic, class_type_or_name, address, value_type))
3121+
return true;
31203122
else if (type_info.AnySet(eTypeIsProtocol)) {
31213123
if (type_info.AnySet(eTypeIsObjC))
31223124
success = GetDynamicTypeAndAddress_Class(in_value, val_type, use_dynamic,

0 commit comments

Comments
 (0)