forked from OSchip/llvm-project
				
			<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