zequanwu created this revision.
Herald added a project: All.
zequanwu requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D129807
Files:
lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp
lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.h
Index: lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.h
===================================================================
--- lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.h
+++ lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.h
@@ -57,6 +57,7 @@
llvm::DenseMap<lldb::opaque_compiler_type_t,
llvm::SmallSet<std::pair<llvm::StringRef, CompilerType>, 8>>
&m_cxx_record_map;
+ bool has_virtual_base = false;
public:
UdtRecordCompleter(
Index: lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp
+++ lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp
@@ -123,6 +123,7 @@
Error UdtRecordCompleter::visitKnownMember(CVMemberRecord &cvr,
VirtualBaseClassRecord &base) {
+ has_virtual_base = true;
AddBaseClassForTypeIndex(base.BaseType, base.getAccess(), base.VTableIndex);
return Error::success();
@@ -312,6 +313,17 @@
TypeSystemClang::CompleteTagDeclarationDefinition(m_derived_ct);
if (auto *record_decl = llvm::dyn_cast<clang::CXXRecordDecl>(&m_tag_decl)) {
+ clang::MSInheritanceAttr::Spelling spelling;
+ if (has_virtual_base)
+ spelling = clang::MSInheritanceAttr::Keyword_virtual_inheritance;
+ else if (bases.size() > 1)
+ spelling = clang::MSInheritanceAttr::Keyword_multiple_inheritance;
+ else
+ spelling = clang::MSInheritanceAttr::Keyword_single_inheritance;
+ clang::MSInheritanceAttr *inheritance_attr =
+ clang::MSInheritanceAttr::CreateImplicit(
+ m_ast_builder.clang().getASTContext(), spelling);
+ record_decl->addAttr(inheritance_attr);
m_ast_builder.importer().SetRecordLayout(record_decl, m_layout);
}
}
Index: lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.h
===================================================================
--- lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.h
+++ lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.h
@@ -57,6 +57,7 @@
llvm::DenseMap<lldb::opaque_compiler_type_t,
llvm::SmallSet<std::pair<llvm::StringRef, CompilerType>, 8>>
&m_cxx_record_map;
+ bool has_virtual_base = false;
public:
UdtRecordCompleter(
Index: lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp
+++ lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp
@@ -123,6 +123,7 @@
Error UdtRecordCompleter::visitKnownMember(CVMemberRecord &cvr,
VirtualBaseClassRecord &base) {
+ has_virtual_base = true;
AddBaseClassForTypeIndex(base.BaseType, base.getAccess(), base.VTableIndex);
return Error::success();
@@ -312,6 +313,17 @@
TypeSystemClang::CompleteTagDeclarationDefinition(m_derived_ct);
if (auto *record_decl = llvm::dyn_cast<clang::CXXRecordDecl>(&m_tag_decl)) {
+ clang::MSInheritanceAttr::Spelling spelling;
+ if (has_virtual_base)
+ spelling = clang::MSInheritanceAttr::Keyword_virtual_inheritance;
+ else if (bases.size() > 1)
+ spelling = clang::MSInheritanceAttr::Keyword_multiple_inheritance;
+ else
+ spelling = clang::MSInheritanceAttr::Keyword_single_inheritance;
+ clang::MSInheritanceAttr *inheritance_attr =
+ clang::MSInheritanceAttr::CreateImplicit(
+ m_ast_builder.clang().getASTContext(), spelling);
+ record_decl->addAttr(inheritance_attr);
m_ast_builder.importer().SetRecordLayout(record_decl, m_layout);
}
}
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits