<rdar://problem/12503640> 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
This commit is contained in:
Enrico Granata 2012-10-17 19:03:34 +00:00
parent 56a12cea13
commit 13ac0e253d
3 changed files with 12 additions and 0 deletions

View File

@ -1265,6 +1265,9 @@ protected:
DataExtractor &
GetDataExtractor ();
void
ResetCompleteTypeInfo ();
//------------------------------------------------------------------
// Sublasses must implement the functions below.
//------------------------------------------------------------------

View File

@ -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 ()
{

View File

@ -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)