diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp --- a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp @@ -1013,9 +1013,22 @@ llvm::StringRef proc_name = proc.Name; proc_name.consume_front(context_name); proc_name.consume_front("::"); - - clang::FunctionDecl *function_decl = m_clang.CreateFunctionDeclaration( - parent, OptionalClangModuleID(), proc_name, func_ct, storage, false); + clang::FunctionDecl *function_decl = nullptr; + if (parent->isRecord()) { + clang::QualType parent_qt = llvm::dyn_cast(parent) + ->getTypeForDecl() + ->getCanonicalTypeInternal(); + // TODO: Get other information for this method. + function_decl = m_clang.AddMethodToCXXRecordType( + ToCompilerType(parent_qt).GetOpaqueQualType(), proc_name, + /*mangled_name=*/nullptr, func_ct, lldb::AccessType::eAccessPublic, + /*is_virtual=*/false, /*is_static=*/false, + /*is_inline=*/false, /*is_explicit=*/false, + /*is_attr_used=*/false, /*is_artificial=*/false); + } else { + function_decl = m_clang.CreateFunctionDeclaration( + parent, OptionalClangModuleID(), proc_name, func_ct, storage, false); + } lldbassert(m_uid_to_decl.count(toOpaqueUid(func_id)) == 0); m_uid_to_decl[toOpaqueUid(func_id)] = function_decl; @@ -1023,8 +1036,9 @@ status.resolved = true; status.uid = toOpaqueUid(func_id); m_decl_to_status.insert({function_decl, status}); - - CreateFunctionParameters(func_id, *function_decl, func_type->getNumParams()); + if (!parent->isRecord()) + CreateFunctionParameters(func_id, *function_decl, + func_type->getNumParams()); return function_decl; } diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp --- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp @@ -945,11 +945,11 @@ llvm::Optional modi = m_index->GetModuleIndexForVa(file_addr); if (!modi) return 0; - CompilandIndexItem *cci = m_index->compilands().GetCompiland(*modi); - if (!cci) + CompUnitSP cu_sp = GetCompileUnitAtIndex(modi.getValue()); + if (!cu_sp) return 0; - sc.comp_unit = GetOrCreateCompileUnit(*cci).get(); + sc.comp_unit = cu_sp.get(); resolved_flags |= eSymbolContextCompUnit; }