Rename ParseTypeFromDWO to ParseTypeFromClangModule (NFC)

Because that is what this function really does. The old name is
misleading.
This commit is contained in:
Adrian Prantl 2019-11-13 10:52:30 -08:00
parent aeaddf926a
commit 78586775f7
2 changed files with 27 additions and 26 deletions

View File

@ -135,25 +135,26 @@ static bool IsClangModuleFwdDecl(const DWARFDIE &Die) {
return false;
}
TypeSP DWARFASTParserClang::ParseTypeFromDWO(const DWARFDIE &die, Log *log) {
TypeSP DWARFASTParserClang::ParseTypeFromClangModule(const DWARFDIE &die,
Log *log) {
ModuleSP dwo_module_sp = die.GetContainingDWOModule();
if (!dwo_module_sp)
return TypeSP();
// If this type comes from a Clang module, look in the DWARF section
// of the pcm file in the module cache. Clang generates DWO skeleton
// units as breadcrumbs to find them.
// If this type comes from a Clang module, recursively look in the
// DWARF section of the .pcm file in the module cache. Clang
// generates DWO skeleton units as breadcrumbs to find them.
llvm::SmallVector<CompilerContext, 4> decl_context;
die.GetDeclContext(decl_context);
TypeMap dwo_types;
TypeMap pcm_types;
// The type in the Clang module must have the same language as the current CU.
LanguageSet languages;
languages.Insert(die.GetCU()->GetLanguageType());
llvm::DenseSet<SymbolFile *> searched_symbol_files;
dwo_module_sp->GetSymbolFile()->FindTypes(decl_context, languages,
searched_symbol_files, dwo_types);
if (dwo_types.Empty()) {
searched_symbol_files, pcm_types);
if (pcm_types.Empty()) {
if (!IsClangModuleFwdDecl(die))
return TypeSP();
@ -164,34 +165,33 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWO(const DWARFDIE &die, Log *log) {
if (!name_module.second)
continue;
name_module.second->GetSymbolFile()->FindTypes(
decl_context, languages, searched_symbol_files, dwo_types);
if (dwo_types.GetSize())
decl_context, languages, searched_symbol_files, pcm_types);
if (pcm_types.GetSize())
break;
}
}
if (dwo_types.GetSize() != 1)
if (pcm_types.GetSize() != 1)
return TypeSP();
// We found a real definition for this type in the Clang module, so lets use
// it and cache the fact that we found a complete type for this die.
TypeSP dwo_type_sp = dwo_types.GetTypeAtIndex(0);
if (!dwo_type_sp)
TypeSP pcm_type_sp = pcm_types.GetTypeAtIndex(0);
if (!pcm_type_sp)
return TypeSP();
lldb_private::CompilerType dwo_type = dwo_type_sp->GetForwardCompilerType();
lldb_private::CompilerType pcm_type = pcm_type_sp->GetForwardCompilerType();
lldb_private::CompilerType type =
GetClangASTImporter().CopyType(m_ast, dwo_type);
GetClangASTImporter().CopyType(m_ast, pcm_type);
if (!type)
return TypeSP();
SymbolFileDWARF *dwarf = die.GetDWARF();
TypeSP type_sp(new Type(
die.GetID(), dwarf, dwo_type_sp->GetName(), dwo_type_sp->GetByteSize(),
die.GetID(), dwarf, pcm_type_sp->GetName(), pcm_type_sp->GetByteSize(),
nullptr, LLDB_INVALID_UID, Type::eEncodingInvalid,
&dwo_type_sp->GetDeclaration(), type, Type::eResolveStateForward));
&pcm_type_sp->GetDeclaration(), type, Type::eResolveStateForward));
dwarf->GetTypeList().Insert(type_sp);
dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get();
@ -382,13 +382,12 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc,
dwarf->GetObjectFile()->GetModule()->LogMessage(
log,
"SymbolFileDWARF::ParseType (die = 0x%8.8x, decl_ctx = %p (die "
"0x%8.8x)) %s name = '%s')",
"DWARFASTParserClang::ParseTypeFromDWARF "
"(die = 0x%8.8x, decl_ctx = %p (die 0x%8.8x)) %s name = '%s')",
die.GetOffset(), static_cast<void *>(context), context_die.GetOffset(),
die.GetTagAsCString(), die.GetName());
}
Type *type_ptr = dwarf->GetDIEToType().lookup(die.GetDIE());
if (type_ptr == DIE_IS_BEING_PARSED)
return nullptr;
@ -462,7 +461,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc,
// contain those
if (encoding_die &&
encoding_die.GetAttributeValueAsUnsigned(DW_AT_declaration, 0) == 1) {
type_sp = ParseTypeFromDWO(die, log);
type_sp = ParseTypeFromClangModule(die, log);
if (type_sp)
return type_sp;
}
@ -644,7 +643,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc,
case DW_TAG_enumeration_type: {
if (attrs.is_forward_declaration) {
type_sp = ParseTypeFromDWO(die, log);
type_sp = ParseTypeFromClangModule(die, log);
if (type_sp)
return type_sp;
@ -1443,9 +1442,9 @@ DWARFASTParserClang::ParseStructureLikeDIE(const DWARFDIE &die,
attrs.name.GetCString());
}
// See if the type comes from a DWO module and if so, track down that
// type.
type_sp = ParseTypeFromDWO(die, log);
// See if the type comes from a Clang module and if so, track down
// that type.
type_sp = ParseTypeFromClangModule(die, log);
if (type_sp)
return type_sp;

View File

@ -159,7 +159,9 @@ protected:
UpdateSymbolContextScopeForType(const lldb_private::SymbolContext &sc,
const DWARFDIE &die, lldb::TypeSP type_sp);
lldb::TypeSP ParseTypeFromDWO(const DWARFDIE &die, lldb_private::Log *log);
/// Follow Clang Module Skeleton CU references to find a type definition.
lldb::TypeSP ParseTypeFromClangModule(const DWARFDIE &die,
lldb_private::Log *log);
// Return true if this type is a declaration to a type in an external
// module.