[Lldb-commits] [lldb] r326870 - [SymbolFilePDB] Minor cleanup

Aaron Smith via lldb-commits lldb-commits at lists.llvm.org
Tue Mar 6 19:16:50 PST 2018


Author: asmith
Date: Tue Mar  6 19:16:50 2018
New Revision: 326870

URL: http://llvm.org/viewvc/llvm-project?rev=326870&view=rev
Log:
[SymbolFilePDB] Minor cleanup

Summary:
 - Remove unused code

- Adding `break` statement conditionally

- Ignore empty strings in FindTypeByName

Reviewers: zturner, rnk, lldb-commits

Reviewed By: zturner

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D44165

Modified:
    lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp

Modified: lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp?rev=326870&r1=326869&r2=326870&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp Tue Mar  6 19:16:50 2018
@@ -282,16 +282,12 @@ SymbolFilePDB::ParseCompileUnitFunctionF
   if (!func_range.GetBaseAddress().IsValid())
     return nullptr;
 
-  user_id_t func_type_uid = pdb_func->getSignatureId();
-  // TODO: Function symbol with invalid signature won't be handled. We'll set up
-  // a white list to trace them.
-  if (!pdb_func->getSignature())
-    return nullptr;
-
   lldb_private::Type* func_type = ResolveTypeUID(pdb_func->getSymIndexId());
   if (!func_type)
     return nullptr;
 
+  user_id_t func_type_uid = pdb_func->getSignatureId();
+
   Mangled mangled = GetMangledForPDBFunc(pdb_func);
 
   FunctionSP func_sp = std::make_shared<Function>(sc.comp_unit,
@@ -500,7 +496,8 @@ lldb_private::Type *SymbolFilePDB::Resol
   if (result.get()) {
     m_types.insert(std::make_pair(type_uid, result));
     auto type_list = GetTypeList();
-    type_list->Insert(result);
+    if (type_list)
+      type_list->Insert(result);
   }
   return result.get();
 }
@@ -607,8 +604,8 @@ std::string SymbolFilePDB::GetSourceFile
   std::string file_name = pdb_compiland->getSourceFileName();
   if (!file_name.empty()) {
     auto one_src_file_up =
-      m_session_up->findOneSourceFile(pdb_compiland, file_name,
-                                      PDB_NameSearchFlags::NS_CaseInsensitive);
+        m_session_up->findOneSourceFile(pdb_compiland, file_name,
+                                        PDB_NameSearchFlags::NS_CaseInsensitive);
     if (one_src_file_up)
       source_file_name = one_src_file_up->getFileName();
   }
@@ -622,7 +619,7 @@ std::string SymbolFilePDB::GetSourceFile
   auto details_up = pdb_compiland->findOneChild<PDBSymbolCompilandDetails>();
   PDB_Lang pdb_lang = details_up ? details_up->getLanguage() : PDB_Lang::Cpp;
   auto src_files_up =
-    m_session_up->getSourceFilesForCompiland(*pdb_compiland);
+      m_session_up->getSourceFilesForCompiland(*pdb_compiland);
   if (src_files_up) {
     while (auto file_up = src_files_up->getNext()) {
       FileSpec file_spec(file_up->getFileName(), false,
@@ -700,9 +697,7 @@ uint32_t SymbolFilePDB::ResolveSymbolCon
         if ((resolve_scope & eSymbolContextLineEntry) && !has_line_table) {
           // The query asks for line entries, but we can't get them for the
           // compile unit. This is not normal for `line` = 0. So just assert it.
-          if (line == 0) {
-            assert(0 && "Couldn't get all line entries!\n");
-          }
+          assert(line && "Couldn't get all line entries!\n");
 
           // Current compiland does not have the requested line. Search next.
           continue;
@@ -825,14 +820,15 @@ void SymbolFilePDB::CacheFunctionNames()
 
   if (auto results_up = m_global_scope_up->findAllChildren<PDBSymbolFunc>()) {
     while (auto pdb_func_up = results_up->getNext()) {
-      auto uid = pdb_func_up->getSymIndexId();
+      if (pdb_func_up->isCompilerGenerated())
+        continue;
+
       auto name = pdb_func_up->getName();
       auto demangled_name = pdb_func_up->getUndecoratedName();
       if (name.empty() && demangled_name.empty())
         continue;
-      if (pdb_func_up->isCompilerGenerated())
-        continue;
 
+      auto uid = pdb_func_up->getSymIndexId();
       if (!demangled_name.empty() && pdb_func_up->getVirtualAddress())
         addr_ids.insert(std::make_pair(pdb_func_up->getVirtualAddress(), uid));
 
@@ -902,8 +898,6 @@ void SymbolFilePDB::CacheFunctionNames()
         continue;
 
       if (CPlusPlusLanguage::IsCPPMangledName(name.c_str())) {
-        auto demangled_name = pub_sym_up->getUndecoratedName();
-        std::vector<uint32_t> ids;
         auto vm_addr = pub_sym_up->getVirtualAddress();
 
         // PDB public symbol has mangled name for its associated function.
@@ -1092,6 +1086,8 @@ void SymbolFilePDB::FindTypesByName(cons
                                     uint32_t max_matches,
                                     lldb_private::TypeMap &types) {
   std::unique_ptr<IPDBEnumSymbols> results;
+  if (name.empty())
+    return;
   results = m_global_scope_up->findChildren(PDB_SymType::None, name,
                                             PDB_NameSearchFlags::NS_Default);
   if (!results)
@@ -1254,9 +1250,6 @@ SymbolFilePDB::ParseCompileUnitForUID(ui
   auto compiland_up = GetPDBCompilandByUID(id);
   if (!compiland_up)
     return CompUnitSP();
-  std::string path = GetSourceFileNameForPDBCompiland(compiland_up.get());
-  if (path.empty())
-    return CompUnitSP();
 
   lldb::LanguageType lang;
   auto details = compiland_up->findOneChild<PDBSymbolCompilandDetails>();
@@ -1265,6 +1258,13 @@ SymbolFilePDB::ParseCompileUnitForUID(ui
   else
     lang = TranslateLanguage(details->getLanguage());
 
+  if (lang == lldb::LanguageType::eLanguageTypeUnknown)
+    return CompUnitSP();
+
+  std::string path = GetSourceFileNameForPDBCompiland(compiland_up.get());
+  if (path.empty())
+    return CompUnitSP();
+
   // Don't support optimized code for now, DebugInfoPDB does not return this
   // information.
   LazyBool optimized = eLazyBoolNo;
@@ -1451,9 +1451,10 @@ SymbolFilePDB::GetMangledForPDBFunc(cons
         // For a public symbol, it is unique.
         lldbassert(result_up->getChildCount() == 1);
         if (auto *pdb_public_sym =
-            llvm::dyn_cast<PDBSymbolPublicSymbol>(symbol_up.get())) {
+            llvm::dyn_cast_or_null<PDBSymbolPublicSymbol>(symbol_up.get())) {
           if (pdb_public_sym->isFunction()) {
             func_decorated_name = pdb_public_sym->getName();
+            break;
           }
         }
       }




More information about the lldb-commits mailing list