From 13ac0e253d0955248e66a2fa34064ed70e3daca1 Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Wed, 17 Oct 2012 19:03:34 +0000 Subject: [PATCH] Fixing an issue where the dynamic type of an Objective-C pointer changed but we still reported the one-true-definition for the previous type. This was causing issues where a variable could be reported as being of an entirely different type after an assignment llvm-svn: 166119 --- lldb/include/lldb/Core/ValueObject.h | 3 +++ lldb/source/Core/ValueObject.cpp | 7 +++++++ lldb/source/Core/ValueObjectDynamicValue.cpp | 2 ++ 3 files changed, 12 insertions(+) diff --git a/lldb/include/lldb/Core/ValueObject.h b/lldb/include/lldb/Core/ValueObject.h index ccf11fe..4c594b6 100644 --- a/lldb/include/lldb/Core/ValueObject.h +++ b/lldb/include/lldb/Core/ValueObject.h @@ -1265,6 +1265,9 @@ protected: DataExtractor & GetDataExtractor (); + void + ResetCompleteTypeInfo (); + //------------------------------------------------------------------ // Sublasses must implement the functions below. //------------------------------------------------------------------ diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index 9debcc0..4db14dd 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -274,6 +274,13 @@ ValueObject::SetNeedsUpdate () ClearUserVisibleData(eClearUserVisibleDataItemsValue); } +void +ValueObject::ResetCompleteTypeInfo () +{ + m_did_calculate_complete_objc_class_type = false; + m_override_type = ClangASTType(); +} + ClangASTType ValueObject::MaybeCalculateCompleteType () { diff --git a/lldb/source/Core/ValueObjectDynamicValue.cpp b/lldb/source/Core/ValueObjectDynamicValue.cpp index e3f27fc..b6d29d4 100644 --- a/lldb/source/Core/ValueObjectDynamicValue.cpp +++ b/lldb/source/Core/ValueObjectDynamicValue.cpp @@ -290,12 +290,14 @@ ValueObjectDynamicValue::UpdateValue () if (!m_type_sp) { m_type_sp = dynamic_type_sp; + ResetCompleteTypeInfo (); } else if (dynamic_type_sp != m_type_sp) { // We are another type, we need to tear down our children... m_type_sp = dynamic_type_sp; SetValueDidChange (true); + ResetCompleteTypeInfo (); } if (!m_address.IsValid() || m_address != dynamic_address) -- 2.7.4