diff --git a/llvm/include/llvm/Object/XCOFFObjectFile.h b/llvm/include/llvm/Object/XCOFFObjectFile.h index 4f80297b04c60..fcdbf7a8095ce 100644 --- a/llvm/include/llvm/Object/XCOFFObjectFile.h +++ b/llvm/include/llvm/Object/XCOFFObjectFile.h @@ -60,6 +60,12 @@ template struct XCOFFSectionHeader { bool isReservedSectionType() const; }; +// Explicit extern template declarations. +struct XCOFFSectionHeader32; +struct XCOFFSectionHeader64; +extern template struct XCOFFSectionHeader; +extern template struct XCOFFSectionHeader; + struct XCOFFSectionHeader32 : XCOFFSectionHeader { char Name[XCOFF::NameSize]; support::ubig32_t PhysicalAddress; diff --git a/llvm/lib/Object/XCOFFObjectFile.cpp b/llvm/lib/Object/XCOFFObjectFile.cpp index 5ca2a6a03f045..3ea42bb8b0e0c 100644 --- a/llvm/lib/Object/XCOFFObjectFile.cpp +++ b/llvm/lib/Object/XCOFFObjectFile.cpp @@ -61,6 +61,10 @@ bool XCOFFSectionHeader::isReservedSectionType() const { return getSectionType() & SectionFlagsReservedMask; } +// Explictly instantiate template classes. +template struct XCOFFSectionHeader; +template struct XCOFFSectionHeader; + bool XCOFFRelocation32::isRelocationSigned() const { return Info & XR_SIGN_INDICATOR_MASK; }