@@ -38,16 +38,18 @@ struct CreateMethodDecl : public TypeVisitorCallbacks {
3838 TypeIndex func_type_index,
3939 clang::FunctionDecl *&function_decl,
4040 lldb::opaque_compiler_type_t parent_ty,
41- llvm::StringRef proc_name, CompilerType func_ct)
41+ llvm::StringRef proc_name, ConstString mangled_name,
42+ CompilerType func_ct)
4243 : m_index(m_index), m_clang(m_clang), func_type_index(func_type_index),
4344 function_decl (function_decl), parent_ty(parent_ty),
44- proc_name(proc_name), func_ct(func_ct) {}
45+ proc_name(proc_name), mangled_name(mangled_name), func_ct(func_ct) {}
4546 PdbIndex &m_index;
4647 TypeSystemClang &m_clang;
4748 TypeIndex func_type_index;
4849 clang::FunctionDecl *&function_decl;
4950 lldb::opaque_compiler_type_t parent_ty;
5051 llvm::StringRef proc_name;
52+ ConstString mangled_name;
5153 CompilerType func_ct;
5254
5355 llvm::Error visitKnownMember (CVMemberRecord &cvr,
@@ -87,8 +89,7 @@ struct CreateMethodDecl : public TypeVisitorCallbacks {
8789 bool is_artificial = (options & MethodOptions::CompilerGenerated) ==
8890 MethodOptions::CompilerGenerated;
8991 function_decl = m_clang.AddMethodToCXXRecordType (
90- parent_ty, proc_name,
91- /* asm_label=*/ {}, func_ct, /* access=*/ access_type,
92+ parent_ty, proc_name, mangled_name, func_ct, /* access=*/ access_type,
9293 /* is_virtual=*/ is_virtual, /* is_static=*/ is_static,
9394 /* is_inline=*/ false , /* is_explicit=*/ false ,
9495 /* is_attr_used=*/ false , /* is_artificial=*/ is_artificial);
@@ -892,22 +893,26 @@ PdbAstBuilder::CreateFunctionDecl(PdbCompilandSymId func_id,
892893 tag_record = CVTagRecord::create (index.tpi ().getType (*eti)).asTag ();
893894 }
894895 }
896+
897+ ConstString mangled_name (
898+ pdb->FindMangledFunctionName (func_id).value_or (llvm::StringRef ()));
899+
895900 if (!tag_record.FieldList .isSimple ()) {
896901 CVType field_list_cvt = index.tpi ().getType (tag_record.FieldList );
897902 FieldListRecord field_list;
898903 if (llvm::Error error = TypeDeserializer::deserializeAs<FieldListRecord>(
899904 field_list_cvt, field_list))
900905 llvm::consumeError (std::move (error));
901906 CreateMethodDecl process (index, m_clang, func_ti, function_decl,
902- parent_opaque_ty, func_name, func_ct);
907+ parent_opaque_ty, func_name, mangled_name,
908+ func_ct);
903909 if (llvm::Error err = visitMemberRecordStream (field_list.Data , process))
904910 llvm::consumeError (std::move (err));
905911 }
906912
907913 if (!function_decl) {
908914 function_decl = m_clang.AddMethodToCXXRecordType (
909- parent_opaque_ty, func_name,
910- /* asm_label=*/ {}, func_ct,
915+ parent_opaque_ty, func_name, mangled_name, func_ct,
911916 /* access=*/ lldb::AccessType::eAccessPublic,
912917 /* is_virtual=*/ false , /* is_static=*/ false ,
913918 /* is_inline=*/ false , /* is_explicit=*/ false ,
0 commit comments