https://github.com/fsfod created https://github.com/llvm/llvm-project/pull/113102
These will be needed for when llvm is built as a shared library on windows with explicit visibility macros enabled. Change UnionRecord to class instead of a struct so we can use X macros from CodeViewTypes.def to forward declare all record classes. This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and LLVM plugins on window. >From 9a0e1420ab0621e8c229db75a2460069dee9d499 Mon Sep 17 00:00:00 2001 From: Thomas Fransham <tfrans...@gmail.com> Date: Mon, 12 Aug 2024 16:04:12 +0100 Subject: [PATCH] [DebugInfo] Add explicit visibility macros to CodeView template functions These will be needed for when llvm is built as a shared library on windows with explicit visibility macros enabled. Change UnionRecord to class instead of a struct so we can use X macros from CodeViewTypes.def to forward declare all record classes. This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and LLVM plugins on window. --- .../SymbolFile/NativePDB/SymbolFileNativePDB.h | 2 +- .../DebugInfo/CodeView/ContinuationRecordBuilder.h | 14 ++++++++++++++ .../llvm/DebugInfo/CodeView/SimpleTypeSerializer.h | 13 +++++++++++++ llvm/include/llvm/DebugInfo/CodeView/TypeRecord.h | 3 ++- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h index 669c44aa131edc..297f11451afb75 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h +++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h @@ -32,7 +32,7 @@ class ClassRecord; class EnumRecord; class ModifierRecord; class PointerRecord; -struct UnionRecord; +class UnionRecord; } // namespace codeview } // namespace llvm diff --git a/llvm/include/llvm/DebugInfo/CodeView/ContinuationRecordBuilder.h b/llvm/include/llvm/DebugInfo/CodeView/ContinuationRecordBuilder.h index 84cef520a2f460..8347ef870d0676 100644 --- a/llvm/include/llvm/DebugInfo/CodeView/ContinuationRecordBuilder.h +++ b/llvm/include/llvm/DebugInfo/CodeView/ContinuationRecordBuilder.h @@ -50,6 +50,20 @@ class ContinuationRecordBuilder { std::vector<CVType> end(TypeIndex Index); }; + +// Needed by RandomAccessVisitorTest.cpp +#define TYPE_RECORD(EnumName, EnumVal, Name) +#define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) +#define MEMBER_RECORD(EnumName, EnumVal, Name) \ + extern template LLVM_TEMPLATE_ABI void ContinuationRecordBuilder::writeMemberType( \ + Name##Record &Record); +#define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) +#include "llvm/DebugInfo/CodeView/CodeViewTypes.def" +#undef TYPE_RECORD +#undef TYPE_RECORD_ALIAS +#undef MEMBER_RECORD +#undef MEMBER_RECORD_ALIAS + } // namespace codeview } // namespace llvm diff --git a/llvm/include/llvm/DebugInfo/CodeView/SimpleTypeSerializer.h b/llvm/include/llvm/DebugInfo/CodeView/SimpleTypeSerializer.h index fcc0452a6ae9a7..713798fc38d2d8 100644 --- a/llvm/include/llvm/DebugInfo/CodeView/SimpleTypeSerializer.h +++ b/llvm/include/llvm/DebugInfo/CodeView/SimpleTypeSerializer.h @@ -32,6 +32,19 @@ class SimpleTypeSerializer { ArrayRef<uint8_t> serialize(const FieldListRecord &Record) = delete; }; +// Needed by RandomAccessVisitorTest.cpp +#define TYPE_RECORD(EnumName, EnumVal, Name) \ + class Name##Record; \ + extern template LLVM_TEMPLATE_ABI ArrayRef<uint8_t> llvm::codeview::SimpleTypeSerializer::serialize( \ + Name##Record &Record); +#define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) +#define MEMBER_RECORD(EnumName, EnumVal, Name) +#define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) +#include "llvm/DebugInfo/CodeView/CodeViewTypes.def" +#undef TYPE_RECORD +#undef TYPE_RECORD_ALIAS +#undef MEMBER_RECORD +#undef MEMBER_RECORD_ALIAS } // end namespace codeview } // end namespace llvm diff --git a/llvm/include/llvm/DebugInfo/CodeView/TypeRecord.h b/llvm/include/llvm/DebugInfo/CodeView/TypeRecord.h index 5a84fac5f59034..484e05b5adc672 100644 --- a/llvm/include/llvm/DebugInfo/CodeView/TypeRecord.h +++ b/llvm/include/llvm/DebugInfo/CodeView/TypeRecord.h @@ -495,7 +495,8 @@ class ClassRecord : public TagRecord { }; // LF_UNION -struct UnionRecord : public TagRecord { +class UnionRecord : public TagRecord { +public: UnionRecord() = default; explicit UnionRecord(TypeRecordKind Kind) : TagRecord(Kind) {} UnionRecord(uint16_t MemberCount, ClassOptions Options, TypeIndex FieldList, _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits