Use forward types where possible to avoid having to parse extra DWARF when
it is not required. llvm-svn: 146418
This commit is contained in:
		
							parent
							
								
									fadc2c83e5
								
							
						
					
					
						commit
						42ce2f35fd
					
				| 
						 | 
					@ -1444,10 +1444,10 @@ SymbolFileDWARF::ParseChildMembers
 | 
				
			||||||
                            member_accessibilities.push_back(accessibility);
 | 
					                            member_accessibilities.push_back(accessibility);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            field_decl = GetClangASTContext().AddFieldToRecordType (class_clang_type, 
 | 
					                            field_decl = GetClangASTContext().AddFieldToRecordType (class_clang_type, 
 | 
				
			||||||
                                                                       name, 
 | 
					                                                                                    name, 
 | 
				
			||||||
                                                                       member_type->GetClangLayoutType(), 
 | 
					                                                                                    member_type->GetClangLayoutType(), 
 | 
				
			||||||
                                                                       accessibility, 
 | 
					                                                                                    accessibility, 
 | 
				
			||||||
                                                                       bit_size);
 | 
					                                                                                    bit_size);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -3341,7 +3341,9 @@ SymbolFileDWARF::ParseChildParameters (const SymbolContext& sc,
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            function_param_types.push_back (type->GetClangForwardType());
 | 
					                            function_param_types.push_back (type->GetClangForwardType());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            clang::ParmVarDecl *param_var_decl = GetClangASTContext().CreateParameterDeclaration (name, type->GetClangForwardType(), storage);
 | 
					                            clang::ParmVarDecl *param_var_decl = GetClangASTContext().CreateParameterDeclaration (name, 
 | 
				
			||||||
 | 
					                                                                                                                  type->GetClangForwardType(), 
 | 
				
			||||||
 | 
					                                                                                                                  storage);
 | 
				
			||||||
                            assert(param_var_decl);
 | 
					                            assert(param_var_decl);
 | 
				
			||||||
                            function_param_decls.push_back(param_var_decl);
 | 
					                            function_param_decls.push_back(param_var_decl);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
| 
						 | 
					@ -4793,7 +4795,7 @@ SymbolFileDWARF::ParseType (const SymbolContext& sc, DWARFCompileUnit* dwarf_cu,
 | 
				
			||||||
                        func_type = ResolveTypeUID(type_die_offset);
 | 
					                        func_type = ResolveTypeUID(type_die_offset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (func_type)
 | 
					                    if (func_type)
 | 
				
			||||||
                        return_clang_type = func_type->GetClangLayoutType();
 | 
					                        return_clang_type = func_type->GetClangForwardType();
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
                        return_clang_type = ast.GetBuiltInType_void();
 | 
					                        return_clang_type = ast.GetBuiltInType_void();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5116,7 +5118,7 @@ SymbolFileDWARF::ParseType (const SymbolContext& sc, DWARFCompileUnit* dwarf_cu,
 | 
				
			||||||
                                element_orders.push_back (1);
 | 
					                                element_orders.push_back (1);
 | 
				
			||||||
                            if (byte_stride == 0 && bit_stride == 0)
 | 
					                            if (byte_stride == 0 && bit_stride == 0)
 | 
				
			||||||
                                byte_stride = element_type->GetByteSize();
 | 
					                                byte_stride = element_type->GetByteSize();
 | 
				
			||||||
                            clang_type_t array_element_type = element_type->GetClangFullType();
 | 
					                            clang_type_t array_element_type = element_type->GetClangForwardType();
 | 
				
			||||||
                            uint64_t array_element_bit_stride = byte_stride * 8 + bit_stride;
 | 
					                            uint64_t array_element_bit_stride = byte_stride * 8 + bit_stride;
 | 
				
			||||||
                            uint64_t num_elements = 0;
 | 
					                            uint64_t num_elements = 0;
 | 
				
			||||||
                            std::vector<uint64_t>::const_reverse_iterator pos;
 | 
					                            std::vector<uint64_t>::const_reverse_iterator pos;
 | 
				
			||||||
| 
						 | 
					@ -6002,7 +6004,7 @@ SymbolFileDWARF::SearchDeclContext (const clang::DeclContext *decl_context,
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                Type *matching_type = ResolveType (dwarf_cu, die);
 | 
					                Type *matching_type = ResolveType (dwarf_cu, die);
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                lldb::clang_type_t type = matching_type->GetClangFullType();
 | 
					                lldb::clang_type_t type = matching_type->GetClangForwardType();
 | 
				
			||||||
                clang::QualType qual_type = clang::QualType::getFromOpaquePtr(type);
 | 
					                clang::QualType qual_type = clang::QualType::getFromOpaquePtr(type);
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                if (const clang::TagType *tag_type = llvm::dyn_cast<clang::TagType>(qual_type.getTypePtr()))
 | 
					                if (const clang::TagType *tag_type = llvm::dyn_cast<clang::TagType>(qual_type.getTypePtr()))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue