<rdar://problem/11846023> Fixing a bug where malformed DWARF could lead to an endless recursion with synthetic children
llvm-svn: 161185
This commit is contained in:
parent
637c467528
commit
df31a8aed7
|
@ -2020,7 +2020,9 @@ ValueObject::GetSyntheticExpressionPathChild(const char* expression, bool can_cr
|
||||||
{
|
{
|
||||||
// We haven't made a synthetic array member for expression yet, so
|
// We haven't made a synthetic array member for expression yet, so
|
||||||
// lets make one and cache it for any future reference.
|
// lets make one and cache it for any future reference.
|
||||||
synthetic_child_sp = GetValueForExpressionPath(expression);
|
synthetic_child_sp = GetValueForExpressionPath(expression,
|
||||||
|
NULL, NULL, NULL,
|
||||||
|
GetValueForExpressionPathOptions().DontAllowSyntheticChildren());
|
||||||
|
|
||||||
// Cache the value if we got one back...
|
// Cache the value if we got one back...
|
||||||
if (synthetic_child_sp.get())
|
if (synthetic_child_sp.get())
|
||||||
|
@ -2486,10 +2488,14 @@ ValueObject::GetValueForExpressionPath_Impl(const char* expression_cstr,
|
||||||
else if (options.m_no_synthetic_children == false) // let's try with synthetic children
|
else if (options.m_no_synthetic_children == false) // let's try with synthetic children
|
||||||
{
|
{
|
||||||
if (root->IsSynthetic())
|
if (root->IsSynthetic())
|
||||||
child_valobj_sp = root;
|
{
|
||||||
else
|
*first_unparsed = expression_cstr;
|
||||||
child_valobj_sp = root->GetSyntheticValue();
|
*reason_to_stop = ValueObject::eExpressionPathScanEndReasonNoSuchChild;
|
||||||
|
*final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
|
||||||
|
return ValueObjectSP();
|
||||||
|
}
|
||||||
|
|
||||||
|
child_valobj_sp = root->GetSyntheticValue();
|
||||||
if (child_valobj_sp.get())
|
if (child_valobj_sp.get())
|
||||||
child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true);
|
child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true);
|
||||||
}
|
}
|
||||||
|
@ -2524,6 +2530,14 @@ ValueObject::GetValueForExpressionPath_Impl(const char* expression_cstr,
|
||||||
}
|
}
|
||||||
else if (options.m_no_synthetic_children == false) // let's try with synthetic children
|
else if (options.m_no_synthetic_children == false) // let's try with synthetic children
|
||||||
{
|
{
|
||||||
|
if (root->IsSynthetic())
|
||||||
|
{
|
||||||
|
*first_unparsed = expression_cstr;
|
||||||
|
*reason_to_stop = ValueObject::eExpressionPathScanEndReasonNoSuchChild;
|
||||||
|
*final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
|
||||||
|
return ValueObjectSP();
|
||||||
|
}
|
||||||
|
|
||||||
child_valobj_sp = root->GetSyntheticValue(true);
|
child_valobj_sp = root->GetSyntheticValue(true);
|
||||||
if (child_valobj_sp)
|
if (child_valobj_sp)
|
||||||
child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true);
|
child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true);
|
||||||
|
|
Loading…
Reference in New Issue