Author: spyffe Date: Tue Sep 1 13:00:35 2015 New Revision: 246563 URL: http://llvm.org/viewvc/llvm-project?rev=246563&view=rev Log: When looking up types, find the first type we can import rather than just taking the first type we find and failing if it can't be imported.
Modified: lldb/trunk/source/Expression/ClangASTSource.cpp Modified: lldb/trunk/source/Expression/ClangASTSource.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangASTSource.cpp?rev=246563&r1=246562&r2=246563&view=diff ============================================================================== --- lldb/trunk/source/Expression/ClangASTSource.cpp (original) +++ lldb/trunk/source/Expression/ClangASTSource.cpp Tue Sep 1 13:00:35 2015 @@ -746,38 +746,42 @@ ClangASTSource::FindExternalVisibleDecls bool found_a_type = false; - if (types.GetSize()) + if (size_t num_types = types.GetSize()) { - lldb::TypeSP type_sp = types.GetTypeAtIndex(0); - - if (log) - { - const char *name_string = type_sp->GetName().GetCString(); - - log->Printf(" CAS::FEVD[%u] Matching type found for \"%s\": %s", - current_id, - name.GetCString(), - (name_string ? name_string : "<anonymous>")); - } - - CompilerType full_type = type_sp->GetFullCompilerType (); - - CompilerType copied_clang_type (GuardedCopyType(full_type)); - - if (!copied_clang_type) + for (size_t ti = 0; ti < num_types; ++ti) { + lldb::TypeSP type_sp = types.GetTypeAtIndex(ti); + if (log) - log->Printf(" CAS::FEVD[%u] - Couldn't export a type", - current_id); - + { + const char *name_string = type_sp->GetName().GetCString(); + + log->Printf(" CAS::FEVD[%u] Matching type found for \"%s\": %s", + current_id, + name.GetCString(), + (name_string ? name_string : "<anonymous>")); + } + + CompilerType full_type = type_sp->GetFullCompilerType(); + + CompilerType copied_clang_type (GuardedCopyType(full_type)); + + if (!copied_clang_type) + { + if (log) + log->Printf(" CAS::FEVD[%u] - Couldn't export a type", + current_id); + + continue; + } + + context.AddTypeDecl(copied_clang_type); + + found_a_type = true; break; } - - context.AddTypeDecl(copied_clang_type); - - found_a_type = true; } - + if (!found_a_type) { // Try the modules next. @@ -1885,6 +1889,9 @@ ClangASTSource::AddNamespace (NameSearch CompilerType ClangASTSource::GuardedCopyType (const CompilerType &src_type) { + if (!ClangASTContext::IsClangType(src_type)) + return CompilerType(); + ClangASTMetrics::RegisterLLDBImport(); ClangASTContext* src_ast = src_type.GetTypeSystem()->AsClangASTContext(); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits