[llvm] [llvm] annotate interfaces in llvm/Support for DLL export (PR #136014)

via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 16 14:59:10 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-amdgpu

Author: Andrew Rogers (andrurogerz)

<details>
<summary>Changes</summary>

## Purpose

This patch is one in a series of code-mods that annotate LLVM’s public interface for export. This patch annotates the `llvm/Support` library. These annotations currently have no meaningful impact on the LLVM build; however, they are a prerequisite to support an LLVM Windows DLL (shared library) build.

## Background

Additional context on this effort is provided in [this discourse](https://discourse.llvm.org/t/psa-annotating-llvm-public-interface/85307), and documentation for `LLVM_ABI` and related annotations is found in the LLVM repo [here](https://github.com/llvm/llvm-project/blob/main/llvm/docs/InterfaceExportAnnotations.rst). 

The bulk of these changes were generated automatically using the [Interface Definition Scanner (IDS)](https://github.com/compnerd/ids) tool, followed formatting with `git clang-format`.

The following manual adjustments were also applied after running IDS:

- `LLVM_TEMPLATE_ABI` and `LLVM_EXPORT_TEMPLATE` were added to exported instantiated templates
- `LLVM_ABI` was added to a subset of private class methods that required export
- `LLVM_ABI` was added to a small number of symbols that required export but were not declared in headers
- `LLVM_ABI` annotations were elevated from method-level to class-level to support correct vtable export when necessary

## Validation

Local builds and tests to validate cross-platform compatibility. This included llvm, clang, and lldb on the following configurations:

- Windows with MSVC
- Windows with Clang
- Linux with GCC
- Linux with Clang
- Darwin with Clang

---

Patch is 415.71 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/136014.diff


126 Files Affected:

- (modified) llvm/include/llvm/Support/AArch64AttributeParser.h (+2-1) 
- (modified) llvm/include/llvm/Support/AMDGPUMetadata.h (+3-2) 
- (modified) llvm/include/llvm/Support/ARMAttributeParser.h (+2-1) 
- (modified) llvm/include/llvm/Support/ARMBuildAttributes.h (+2-1) 
- (modified) llvm/include/llvm/Support/ARMWinEH.h (+3-2) 
- (modified) llvm/include/llvm/Support/Allocator.h (+3-2) 
- (modified) llvm/include/llvm/Support/BalancedPartitioning.h (+7-6) 
- (modified) llvm/include/llvm/Support/Base64.h (+3-1) 
- (modified) llvm/include/llvm/Support/BinaryStreamError.h (+2-1) 
- (modified) llvm/include/llvm/Support/BinaryStreamReader.h (+2-1) 
- (modified) llvm/include/llvm/Support/BinaryStreamRef.h (+20-17) 
- (modified) llvm/include/llvm/Support/BinaryStreamWriter.h (+15-13) 
- (modified) llvm/include/llvm/Support/BlockFrequency.h (+8-7) 
- (modified) llvm/include/llvm/Support/BranchProbability.h (+8-7) 
- (modified) llvm/include/llvm/Support/BuryPointer.h (+2-1) 
- (modified) llvm/include/llvm/Support/COM.h (+3-1) 
- (modified) llvm/include/llvm/Support/CRC.h (+4-3) 
- (modified) llvm/include/llvm/Support/CSKYAttributeParser.h (+2-1) 
- (modified) llvm/include/llvm/Support/CSKYAttributes.h (+2-1) 
- (modified) llvm/include/llvm/Support/CachePruning.h (+6-3) 
- (modified) llvm/include/llvm/Support/Caching.h (+2-1) 
- (modified) llvm/include/llvm/Support/Chrono.h (+24-12) 
- (modified) llvm/include/llvm/Support/CommandLine.h (+104-89) 
- (modified) llvm/include/llvm/Support/Compression.h (+30-25) 
- (modified) llvm/include/llvm/Support/ConvertEBCDIC.h (+4-3) 
- (modified) llvm/include/llvm/Support/ConvertUTF.h (+66-45) 
- (modified) llvm/include/llvm/Support/CrashRecoveryContext.h (+16-14) 
- (modified) llvm/include/llvm/Support/DJB.h (+2-1) 
- (modified) llvm/include/llvm/Support/DataExtractor.h (+29-21) 
- (modified) llvm/include/llvm/Support/Debug.h (+8-6) 
- (modified) llvm/include/llvm/Support/DebugCounter.h (+9-8) 
- (modified) llvm/include/llvm/Support/DivisionByConstantInfo.h (+3-2) 
- (modified) llvm/include/llvm/Support/DynamicLibrary.h (+13-12) 
- (modified) llvm/include/llvm/Support/ELFAttrParserCompact.h (+2-1) 
- (modified) llvm/include/llvm/Support/ELFAttrParserExtended.h (+2-1) 
- (modified) llvm/include/llvm/Support/ELFAttributes.h (+5-3) 
- (modified) llvm/include/llvm/Support/Errno.h (+3-2) 
- (modified) llvm/include/llvm/Support/Error.h (+23-17) 
- (modified) llvm/include/llvm/Support/ErrorHandling.h (+61-61) 
- (modified) llvm/include/llvm/Support/ExponentialBackoff.h (+2-1) 
- (modified) llvm/include/llvm/Support/ExtensibleRTTI.h (+3-1) 
- (modified) llvm/include/llvm/Support/FileCollector.h (+7-6) 
- (modified) llvm/include/llvm/Support/FileOutputBuffer.h (+2-1) 
- (modified) llvm/include/llvm/Support/FileSystem.h (+149-133) 
- (modified) llvm/include/llvm/Support/FileUtilities.h (+51-50) 
- (modified) llvm/include/llvm/Support/Format.h (+2-1) 
- (modified) llvm/include/llvm/Support/FormatVariadic.h (+2-1) 
- (modified) llvm/include/llvm/Support/FormatVariadicDetails.h (+3-2) 
- (modified) llvm/include/llvm/Support/FormattedStream.h (+5-4) 
- (modified) llvm/include/llvm/Support/GlobPattern.h (+5-4) 
- (modified) llvm/include/llvm/Support/GraphWriter.h (+6-5) 
- (modified) llvm/include/llvm/Support/HexagonAttributeParser.h (+2-1) 
- (modified) llvm/include/llvm/Support/HexagonAttributes.h (+2-1) 
- (modified) llvm/include/llvm/Support/InitLLVM.h (+2-1) 
- (modified) llvm/include/llvm/Support/InstructionCost.h (+2-1) 
- (modified) llvm/include/llvm/Support/JSON.h (+47-45) 
- (modified) llvm/include/llvm/Support/KnownBits.h (+79-57) 
- (modified) llvm/include/llvm/Support/LEB128.h (+3-2) 
- (modified) llvm/include/llvm/Support/LineIterator.h (+2-1) 
- (modified) llvm/include/llvm/Support/Locale.h (+4-3) 
- (modified) llvm/include/llvm/Support/LockFileManager.h (+6-5) 
- (modified) llvm/include/llvm/Support/MD5.h (+12-10) 
- (modified) llvm/include/llvm/Support/MSP430AttributeParser.h (+2-1) 
- (modified) llvm/include/llvm/Support/MSP430Attributes.h (+2-1) 
- (modified) llvm/include/llvm/Support/ManagedStatic.h (+5-3) 
- (modified) llvm/include/llvm/Support/MathExtras.h (+1-1) 
- (modified) llvm/include/llvm/Support/MemAlloc.h (+2-2) 
- (modified) llvm/include/llvm/Support/Memory.h (+12-10) 
- (modified) llvm/include/llvm/Support/MemoryBuffer.h (+21-20) 
- (modified) llvm/include/llvm/Support/MemoryBufferRef.h (+2-1) 
- (modified) llvm/include/llvm/Support/ModRef.h (+5-4) 
- (modified) llvm/include/llvm/Support/Mustache.h (+10-9) 
- (modified) llvm/include/llvm/Support/NativeFormatting.h (+23-20) 
- (modified) llvm/include/llvm/Support/OptimizedStructLayout.h (+4-3) 
- (modified) llvm/include/llvm/Support/PGOOptions.h (+14-11) 
- (modified) llvm/include/llvm/Support/Parallel.h (+10-8) 
- (modified) llvm/include/llvm/Support/Path.h (+78-70) 
- (modified) llvm/include/llvm/Support/PluginLoader.h (+5-3) 
- (modified) llvm/include/llvm/Support/PrettyStackTrace.h (+13-11) 
- (modified) llvm/include/llvm/Support/Process.h (+31-30) 
- (modified) llvm/include/llvm/Support/Program.h (+38-36) 
- (modified) llvm/include/llvm/Support/RISCVAttributeParser.h (+2-1) 
- (modified) llvm/include/llvm/Support/RISCVAttributes.h (+2-1) 
- (modified) llvm/include/llvm/Support/RISCVISAUtils.h (+2-1) 
- (modified) llvm/include/llvm/Support/RandomNumberGenerator.h (+2-2) 
- (modified) llvm/include/llvm/Support/Recycler.h (+3-1) 
- (modified) llvm/include/llvm/Support/Regex.h (+15-13) 
- (modified) llvm/include/llvm/Support/SHA1.h (+7-6) 
- (modified) llvm/include/llvm/Support/SHA256.h (+7-6) 
- (modified) llvm/include/llvm/Support/SMTAPI.h (+6-5) 
- (modified) llvm/include/llvm/Support/ScaledNumber.h (+12-9) 
- (modified) llvm/include/llvm/Support/ScopedPrinter.h (+6-5) 
- (modified) llvm/include/llvm/Support/Signals.h (+87-85) 
- (modified) llvm/include/llvm/Support/Signposts.h (+6-5) 
- (modified) llvm/include/llvm/Support/SipHash.h (+6-5) 
- (modified) llvm/include/llvm/Support/SmallVectorMemoryBuffer.h (+2-1) 
- (modified) llvm/include/llvm/Support/SourceMgr.h (+31-30) 
- (modified) llvm/include/llvm/Support/SpecialCaseList.h (+23-19) 
- (modified) llvm/include/llvm/Support/StringSaver.h (+4-3) 
- (modified) llvm/include/llvm/Support/SuffixTree.h (+4-3) 
- (modified) llvm/include/llvm/Support/SuffixTreeNode.h (+16-15) 
- (modified) llvm/include/llvm/Support/SystemUtils.h (+3-1) 
- (modified) llvm/include/llvm/Support/TarWriter.h (+4-3) 
- (modified) llvm/include/llvm/Support/TargetSelect.h (+15-8) 
- (modified) llvm/include/llvm/Support/ThreadPool.h (+15-14) 
- (modified) llvm/include/llvm/Support/Threading.h (+13-12) 
- (modified) llvm/include/llvm/Support/TimeProfiler.h (+22-20) 
- (modified) llvm/include/llvm/Support/Timer.h (+22-19) 
- (modified) llvm/include/llvm/Support/ToolOutputFile.h (+3-2) 
- (modified) llvm/include/llvm/Support/TypeSize.h (+3-2) 
- (modified) llvm/include/llvm/Support/Unicode.h (+9-7) 
- (modified) llvm/include/llvm/Support/Valgrind.h (+5-4) 
- (modified) llvm/include/llvm/Support/VersionTuple.h (+4-3) 
- (modified) llvm/include/llvm/Support/VirtualFileSystem.h (+128-111) 
- (modified) llvm/include/llvm/Support/Windows/WindowsSupport.h (+10-8) 
- (modified) llvm/include/llvm/Support/WindowsError.h (+3-2) 
- (modified) llvm/include/llvm/Support/WithColor.h (+2-2) 
- (modified) llvm/include/llvm/Support/YAMLParser.h (+35-34) 
- (modified) llvm/include/llvm/Support/YAMLTraits.h (+124-122) 
- (modified) llvm/include/llvm/Support/raw_os_ostream.h (+2-1) 
- (modified) llvm/include/llvm/Support/raw_ostream.h (+74-70) 
- (modified) llvm/include/llvm/Support/raw_socket_stream.h (+12-11) 
- (modified) llvm/include/llvm/Support/thread.h (+7-6) 
- (modified) llvm/include/llvm/Support/xxhash.h (+5-4) 
- (modified) llvm/lib/Support/Chrono.cpp (+7-6) 
- (modified) llvm/lib/Support/CommandLine.cpp (+13-12) 


``````````diff
diff --git a/llvm/include/llvm/Support/AArch64AttributeParser.h b/llvm/include/llvm/Support/AArch64AttributeParser.h
index 823ae180a5c5a..aa82ca13668d5 100644
--- a/llvm/include/llvm/Support/AArch64AttributeParser.h
+++ b/llvm/include/llvm/Support/AArch64AttributeParser.h
@@ -9,13 +9,14 @@
 #ifndef LLVM_SUPPORT_AARCH64ATTRIBUTEPARSER_H
 #define LLVM_SUPPORT_AARCH64ATTRIBUTEPARSER_H
 
+#include "llvm/Support/Compiler.h"
 #include "llvm/Support/ELFAttrParserExtended.h"
 #include "llvm/Support/ELFAttributes.h"
 
 namespace llvm {
 
 class AArch64AttributeParser : public ELFExtendedAttrParser {
-  static std::vector<SubsectionAndTagToTagName> &returnTagsNamesMap();
+  LLVM_ABI static std::vector<SubsectionAndTagToTagName> &returnTagsNamesMap();
 
 public:
   AArch64AttributeParser(ScopedPrinter *Sw)
diff --git a/llvm/include/llvm/Support/AMDGPUMetadata.h b/llvm/include/llvm/Support/AMDGPUMetadata.h
index 76ac7ab74a32e..990c825ae6875 100644
--- a/llvm/include/llvm/Support/AMDGPUMetadata.h
+++ b/llvm/include/llvm/Support/AMDGPUMetadata.h
@@ -16,6 +16,7 @@
 #define LLVM_SUPPORT_AMDGPUMETADATA_H
 
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Compiler.h"
 #include <cstdint>
 #include <string>
 #include <system_error>
@@ -447,10 +448,10 @@ struct Metadata final {
 };
 
 /// Converts \p String to \p HSAMetadata.
-std::error_code fromString(StringRef String, Metadata &HSAMetadata);
+LLVM_ABI std::error_code fromString(StringRef String, Metadata &HSAMetadata);
 
 /// Converts \p HSAMetadata to \p String.
-std::error_code toString(Metadata HSAMetadata, std::string &String);
+LLVM_ABI std::error_code toString(Metadata HSAMetadata, std::string &String);
 
 //===----------------------------------------------------------------------===//
 // HSA metadata for v3 code object.
diff --git a/llvm/include/llvm/Support/ARMAttributeParser.h b/llvm/include/llvm/Support/ARMAttributeParser.h
index 749f9cd2213d7..0fd8a1ed57204 100644
--- a/llvm/include/llvm/Support/ARMAttributeParser.h
+++ b/llvm/include/llvm/Support/ARMAttributeParser.h
@@ -11,6 +11,7 @@
 
 #include "ARMBuildAttributes.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Compiler.h"
 #include "llvm/Support/ELFAttrParserCompact.h"
 #include "llvm/Support/Error.h"
 
@@ -18,7 +19,7 @@ namespace llvm {
 
 class ScopedPrinter;
 
-class ARMAttributeParser : public ELFCompactAttrParser {
+class LLVM_ABI ARMAttributeParser : public ELFCompactAttrParser {
   struct DisplayHandler {
     ARMBuildAttrs::AttrType attribute;
     Error (ARMAttributeParser::*routine)(ARMBuildAttrs::AttrType);
diff --git a/llvm/include/llvm/Support/ARMBuildAttributes.h b/llvm/include/llvm/Support/ARMBuildAttributes.h
index 35f8992ca9329..68acf30e52f3e 100644
--- a/llvm/include/llvm/Support/ARMBuildAttributes.h
+++ b/llvm/include/llvm/Support/ARMBuildAttributes.h
@@ -18,12 +18,13 @@
 #ifndef LLVM_SUPPORT_ARMBUILDATTRIBUTES_H
 #define LLVM_SUPPORT_ARMBUILDATTRIBUTES_H
 
+#include "llvm/Support/Compiler.h"
 #include "llvm/Support/ELFAttributes.h"
 
 namespace llvm {
 namespace ARMBuildAttrs {
 
-const TagNameMap &getARMAttributeTags();
+LLVM_ABI const TagNameMap &getARMAttributeTags();
 
 enum SpecialAttr {
   // This is for the .cpu asm attr. It translates into one or more
diff --git a/llvm/include/llvm/Support/ARMWinEH.h b/llvm/include/llvm/Support/ARMWinEH.h
index b6710cca95650..083bbf405a6b6 100644
--- a/llvm/include/llvm/Support/ARMWinEH.h
+++ b/llvm/include/llvm/Support/ARMWinEH.h
@@ -10,6 +10,7 @@
 #define LLVM_SUPPORT_ARMWINEH_H
 
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/Support/Compiler.h"
 #include "llvm/Support/Endian.h"
 
 namespace llvm {
@@ -205,8 +206,8 @@ inline uint16_t StackAdjustment(const RuntimeFunction &RF) {
 
 /// SavedRegisterMask - Utility function to calculate the set of saved general
 /// purpose (r0-r15) and VFP (d0-d31) registers.
-std::pair<uint16_t, uint32_t> SavedRegisterMask(const RuntimeFunction &RF,
-                                                bool Prologue = true);
+LLVM_ABI std::pair<uint16_t, uint32_t>
+SavedRegisterMask(const RuntimeFunction &RF, bool Prologue = true);
 
 /// RuntimeFunctionARM64 - An entry in the table of procedure data (.pdata)
 ///
diff --git a/llvm/include/llvm/Support/Allocator.h b/llvm/include/llvm/Support/Allocator.h
index 568f0d34032fa..59934190a5206 100644
--- a/llvm/include/llvm/Support/Allocator.h
+++ b/llvm/include/llvm/Support/Allocator.h
@@ -36,8 +36,9 @@ namespace detail {
 
 // We call out to an external function to actually print the message as the
 // printing code uses Allocator.h in its implementation.
-void printBumpPtrAllocatorStats(unsigned NumSlabs, size_t BytesAllocated,
-                                size_t TotalMemory);
+LLVM_ABI void printBumpPtrAllocatorStats(unsigned NumSlabs,
+                                         size_t BytesAllocated,
+                                         size_t TotalMemory);
 
 } // end namespace detail
 
diff --git a/llvm/include/llvm/Support/BalancedPartitioning.h b/llvm/include/llvm/Support/BalancedPartitioning.h
index 539d157343fbe..05307d74c209c 100644
--- a/llvm/include/llvm/Support/BalancedPartitioning.h
+++ b/llvm/include/llvm/Support/BalancedPartitioning.h
@@ -41,6 +41,7 @@
 
 #include "raw_ostream.h"
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/Support/Compiler.h"
 
 #include <atomic>
 #include <condition_variable>
@@ -67,7 +68,7 @@ class BPFunctionNode {
   /// The ID of this node
   IDT Id;
 
-  void dump(raw_ostream &OS) const;
+  LLVM_ABI void dump(raw_ostream &OS) const;
 
 protected:
   /// The list of utility nodes associated with this node
@@ -99,10 +100,10 @@ struct BalancedPartitioningConfig {
 
 class BalancedPartitioning {
 public:
-  BalancedPartitioning(const BalancedPartitioningConfig &Config);
+  LLVM_ABI BalancedPartitioning(const BalancedPartitioningConfig &Config);
 
   /// Run recursive graph partitioning that optimizes a given objective.
-  void run(std::vector<BPFunctionNode> &Nodes) const;
+  LLVM_ABI void run(std::vector<BPFunctionNode> &Nodes) const;
 
 private:
   struct UtilitySignature;
@@ -127,7 +128,7 @@ class BalancedPartitioning {
     /// Blocking wait for all threads to complete. Unlike ThreadPool, it is
     /// acceptable for other threads to add more tasks while blocking on this
     /// call.
-    void wait();
+    LLVM_ABI void wait();
     BPThreadPool(ThreadPoolInterface &TheThreadPool)
         : TheThreadPool(TheThreadPool) {}
   };
@@ -192,8 +193,8 @@ class BalancedPartitioning {
 
 protected:
   /// Compute the move gain for uniform log-gap cost
-  static float moveGain(const BPFunctionNode &N, bool FromLeftToRight,
-                        const SignaturesT &Signatures);
+  LLVM_ABI static float moveGain(const BPFunctionNode &N, bool FromLeftToRight,
+                                 const SignaturesT &Signatures);
   friend class BalancedPartitioningTest_MoveGain_Test;
 };
 
diff --git a/llvm/include/llvm/Support/Base64.h b/llvm/include/llvm/Support/Base64.h
index 3d96884749b32..0dbd87b37868d 100644
--- a/llvm/include/llvm/Support/Base64.h
+++ b/llvm/include/llvm/Support/Base64.h
@@ -13,6 +13,7 @@
 #ifndef LLVM_SUPPORT_BASE64_H
 #define LLVM_SUPPORT_BASE64_H
 
+#include "llvm/Support/Compiler.h"
 #include "llvm/Support/Error.h"
 #include <cstdint>
 #include <string>
@@ -54,7 +55,8 @@ template <class InputBytes> std::string encodeBase64(InputBytes const &Bytes) {
   return Buffer;
 }
 
-llvm::Error decodeBase64(llvm::StringRef Input, std::vector<char> &Output);
+LLVM_ABI llvm::Error decodeBase64(llvm::StringRef Input,
+                                  std::vector<char> &Output);
 
 } // end namespace llvm
 
diff --git a/llvm/include/llvm/Support/BinaryStreamError.h b/llvm/include/llvm/Support/BinaryStreamError.h
index cf6e034ffd2ce..8a45f7bbd52cc 100644
--- a/llvm/include/llvm/Support/BinaryStreamError.h
+++ b/llvm/include/llvm/Support/BinaryStreamError.h
@@ -10,6 +10,7 @@
 #define LLVM_SUPPORT_BINARYSTREAMERROR_H
 
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Compiler.h"
 #include "llvm/Support/Error.h"
 
 #include <string>
@@ -24,7 +25,7 @@ enum class stream_error_code {
 };
 
 /// Base class for errors originating when parsing raw PDB files
-class BinaryStreamError : public ErrorInfo<BinaryStreamError> {
+class LLVM_ABI BinaryStreamError : public ErrorInfo<BinaryStreamError> {
 public:
   static char ID;
   explicit BinaryStreamError(stream_error_code C);
diff --git a/llvm/include/llvm/Support/BinaryStreamReader.h b/llvm/include/llvm/Support/BinaryStreamReader.h
index ca99388c5d03a..e61349d841cdb 100644
--- a/llvm/include/llvm/Support/BinaryStreamReader.h
+++ b/llvm/include/llvm/Support/BinaryStreamReader.h
@@ -14,6 +14,7 @@
 #include "llvm/Support/Alignment.h"
 #include "llvm/Support/BinaryStreamArray.h"
 #include "llvm/Support/BinaryStreamRef.h"
+#include "llvm/Support/Compiler.h"
 #include "llvm/Support/ConvertUTF.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/Error.h"
@@ -26,7 +27,7 @@ namespace llvm {
 /// null-terminated strings, integers in various flavors of endianness, etc.
 /// Can be subclassed to provide reading of custom datatypes, although no
 /// are overridable.
-class BinaryStreamReader {
+class LLVM_ABI BinaryStreamReader {
 public:
   BinaryStreamReader() = default;
   explicit BinaryStreamReader(BinaryStreamRef Ref);
diff --git a/llvm/include/llvm/Support/BinaryStreamRef.h b/llvm/include/llvm/Support/BinaryStreamRef.h
index fdc46f5fd5605..47009ff0b96fc 100644
--- a/llvm/include/llvm/Support/BinaryStreamRef.h
+++ b/llvm/include/llvm/Support/BinaryStreamRef.h
@@ -12,6 +12,7 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/Support/BinaryStream.h"
 #include "llvm/Support/BinaryStreamError.h"
+#include "llvm/Support/Compiler.h"
 #include "llvm/Support/Error.h"
 #include <cstdint>
 #include <memory>
@@ -160,11 +161,12 @@ class BinaryStreamRef
 
 public:
   BinaryStreamRef() = default;
-  BinaryStreamRef(BinaryStream &Stream);
-  BinaryStreamRef(BinaryStream &Stream, uint64_t Offset,
-                  std::optional<uint64_t> Length);
-  explicit BinaryStreamRef(ArrayRef<uint8_t> Data, llvm::endianness Endian);
-  explicit BinaryStreamRef(StringRef Data, llvm::endianness Endian);
+  LLVM_ABI BinaryStreamRef(BinaryStream &Stream);
+  LLVM_ABI BinaryStreamRef(BinaryStream &Stream, uint64_t Offset,
+                           std::optional<uint64_t> Length);
+  LLVM_ABI explicit BinaryStreamRef(ArrayRef<uint8_t> Data,
+                                    llvm::endianness Endian);
+  LLVM_ABI explicit BinaryStreamRef(StringRef Data, llvm::endianness Endian);
 
   BinaryStreamRef(const BinaryStreamRef &Other) = default;
   BinaryStreamRef &operator=(const BinaryStreamRef &Other) = default;
@@ -181,16 +183,16 @@ class BinaryStreamRef
   /// \returns a success error code if the entire range of data is within the
   /// bounds of this BinaryStreamRef's view and the implementation could read
   /// the data, and an appropriate error code otherwise.
-  Error readBytes(uint64_t Offset, uint64_t Size,
-                  ArrayRef<uint8_t> &Buffer) const;
+  LLVM_ABI Error readBytes(uint64_t Offset, uint64_t Size,
+                           ArrayRef<uint8_t> &Buffer) const;
 
   /// Given an Offset into this BinaryStreamRef, return a reference to the
   /// largest buffer the stream could support without necessitating a copy.
   ///
   /// \returns a success error code if implementation could read the data,
   /// and an appropriate error code otherwise.
-  Error readLongestContiguousChunk(uint64_t Offset,
-                                   ArrayRef<uint8_t> &Buffer) const;
+  LLVM_ABI Error readLongestContiguousChunk(uint64_t Offset,
+                                            ArrayRef<uint8_t> &Buffer) const;
 };
 
 struct BinarySubstreamRef {
@@ -233,11 +235,12 @@ class WritableBinaryStreamRef
 
 public:
   WritableBinaryStreamRef() = default;
-  WritableBinaryStreamRef(WritableBinaryStream &Stream);
-  WritableBinaryStreamRef(WritableBinaryStream &Stream, uint64_t Offset,
-                          std::optional<uint64_t> Length);
-  explicit WritableBinaryStreamRef(MutableArrayRef<uint8_t> Data,
-                                   llvm::endianness Endian);
+  LLVM_ABI WritableBinaryStreamRef(WritableBinaryStream &Stream);
+  LLVM_ABI WritableBinaryStreamRef(WritableBinaryStream &Stream,
+                                   uint64_t Offset,
+                                   std::optional<uint64_t> Length);
+  LLVM_ABI explicit WritableBinaryStreamRef(MutableArrayRef<uint8_t> Data,
+                                            llvm::endianness Endian);
   WritableBinaryStreamRef(const WritableBinaryStreamRef &Other) = default;
   WritableBinaryStreamRef &
   operator=(const WritableBinaryStreamRef &Other) = default;
@@ -255,13 +258,13 @@ class WritableBinaryStreamRef
   /// \returns a success error code if the data could fit within the underlying
   /// stream at the specified location and the implementation could write the
   /// data, and an appropriate error code otherwise.
-  Error writeBytes(uint64_t Offset, ArrayRef<uint8_t> Data) const;
+  LLVM_ABI Error writeBytes(uint64_t Offset, ArrayRef<uint8_t> Data) const;
 
   /// Conver this WritableBinaryStreamRef to a read-only BinaryStreamRef.
-  operator BinaryStreamRef() const;
+  LLVM_ABI operator BinaryStreamRef() const;
 
   /// For buffered streams, commits changes to the backing store.
-  Error commit();
+  LLVM_ABI Error commit();
 };
 
 } // end namespace llvm
diff --git a/llvm/include/llvm/Support/BinaryStreamWriter.h b/llvm/include/llvm/Support/BinaryStreamWriter.h
index bc1d7949841d6..dddf53bd5483c 100644
--- a/llvm/include/llvm/Support/BinaryStreamWriter.h
+++ b/llvm/include/llvm/Support/BinaryStreamWriter.h
@@ -14,6 +14,7 @@
 #include "llvm/Support/BinaryStreamArray.h"
 #include "llvm/Support/BinaryStreamError.h"
 #include "llvm/Support/BinaryStreamRef.h"
+#include "llvm/Support/Compiler.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/Error.h"
 #include <cstdint>
@@ -30,10 +31,10 @@ namespace llvm {
 class BinaryStreamWriter {
 public:
   BinaryStreamWriter() = default;
-  explicit BinaryStreamWriter(WritableBinaryStreamRef Ref);
-  explicit BinaryStreamWriter(WritableBinaryStream &Stream);
-  explicit BinaryStreamWriter(MutableArrayRef<uint8_t> Data,
-                              llvm::endianness Endian);
+  LLVM_ABI explicit BinaryStreamWriter(WritableBinaryStreamRef Ref);
+  LLVM_ABI explicit BinaryStreamWriter(WritableBinaryStream &Stream);
+  LLVM_ABI explicit BinaryStreamWriter(MutableArrayRef<uint8_t> Data,
+                                       llvm::endianness Endian);
 
   BinaryStreamWriter(const BinaryStreamWriter &Other) = default;
 
@@ -47,7 +48,7 @@ class BinaryStreamWriter {
   ///
   /// \returns a success error code if the data was successfully written,
   /// otherwise returns an appropriate error code.
-  Error writeBytes(ArrayRef<uint8_t> Buffer);
+  LLVM_ABI Error writeBytes(ArrayRef<uint8_t> Buffer);
 
   /// Write the integer \p Value to the underlying stream in the
   /// specified endianness.  On success, updates the offset so that
@@ -77,14 +78,14 @@ class BinaryStreamWriter {
   ///
   /// \returns a success error code if the data was successfully written,
   /// otherwise returns an appropriate error code.
-  Error writeULEB128(uint64_t Value);
+  LLVM_ABI Error writeULEB128(uint64_t Value);
 
   /// Write the unsigned integer Value to the underlying stream using ULEB128
   /// encoding.
   ///
   /// \returns a success error code if the data was successfully written,
   /// otherwise returns an appropriate error code.
-  Error writeSLEB128(int64_t Value);
+  LLVM_ABI Error writeSLEB128(int64_t Value);
 
   /// Write the string \p Str to the underlying stream followed by a null
   /// terminator.  On success, updates the offset so that subsequent writes
@@ -93,7 +94,7 @@ class BinaryStreamWriter {
   ///
   /// \returns a success error code if the data was successfully written,
   /// otherwise returns an appropriate error code.
-  Error writeCString(StringRef Str);
+  LLVM_ABI Error writeCString(StringRef Str);
 
   /// Write the string \p Str to the underlying stream without a null
   /// terminator.  On success, updates the offset so that subsequent writes
@@ -101,7 +102,7 @@ class BinaryStreamWriter {
   ///
   /// \returns a success error code if the data was successfully written,
   /// otherwise returns an appropriate error code.
-  Error writeFixedString(StringRef Str);
+  LLVM_ABI Error writeFixedString(StringRef Str);
 
   /// Efficiently reads all data from \p Ref, and writes it to this stream.
   /// This operation will not invoke any copies of the source data, regardless
@@ -109,7 +110,7 @@ class BinaryStreamWriter {
   ///
   /// \returns a success error code if the data was successfully written,
   /// otherwise returns an appropriate error code.
-  Error writeStreamRef(BinaryStreamRef Ref);
+  LLVM_ABI Error writeStreamRef(BinaryStreamRef Ref);
 
   /// Efficiently reads \p Size bytes from \p Ref, and writes it to this stream.
   /// This operation will not invoke any copies of the source data, regardless
@@ -117,7 +118,7 @@ class BinaryStreamWriter {
   ///
   /// \returns a success error code if the data was successfully written,
   /// otherwise returns an appropriate error code.
-  Error writeStreamRef(BinaryStreamRef Ref, uint64_t Size);
+  LLVM_ABI Error writeStreamRef(BinaryStreamRef Ref, uint64_t Size);
 
   /// Writes the object \p Obj to the underlying stream, as if by using memcpy.
   /// It is up to the caller to ensure that type of \p Obj can be safely copied
@@ -171,13 +172,14 @@ class BinaryStreamWriter {
   }
 
   /// Splits the Writer into two Writers at a given offset.
-  std::pair<BinaryStreamWriter, BinaryStreamWriter> split(uint64_t Off) const;
+  LLVM_ABI std::pair<BinaryStreamWriter, BinaryStreamWriter>
+  split(uint64_t Off) const;
 
   void setOffset(uint64_t Off) { Offset = Off; }
   uint64_t getOffset() const { return Offset; }
   uint64_t getLength() const { return Stream.getLength(); }
   uint64_t bytesRemaining() const { return getLength() - getOffset(); }
-  Error padToAlignment(uint32_t Align);
+  LLVM_ABI Error padToAlignment(uint32_t Align);
 
 protected:
   WritableBinaryStreamRef Stream;
diff --git a/llvm/include/llvm/Support/BlockFrequency.h b/llvm/include/llvm/Support/BlockFrequency.h
index aeab99615a951..eb979af8aa376 100644
--- a/llvm/include/llvm/Support/BlockFrequency.h
+++ b/llvm/include/llvm/Support/BlockFrequency.h
@@ -13,6 +13,7 @@
 #ifndef LLVM_SUPPORT_BLOCKFREQUENCY_H
 #define LLVM_SUPPORT_BLOCKFREQUENCY_H
 
+#include "llvm/Support/Compiler.h"
 #include <cassert>
 #include <cstdint>
 #include <optional>
@@ -39,13 +40,13 @@ class BlockFrequency {
 
   /// Multiplies with a branch probability. The computation will never
   /// overflow.
-  BlockFrequency &operator*=(BranchProbability Prob);
-  BlockFrequency operator*(BranchProbability Prob) const;
+  LLVM_ABI BlockFrequency &operator*=(BranchProbability Prob);
+  LLVM_ABI BlockFrequency operator*(BranchProbability Prob) const;
 
   /// Divide by a non-zero branch probability using saturating
   /// arithmetic.
-  BlockFrequency &operator/=(BranchProbability Prob);
-  BlockFrequency operator/(BranchProbability Prob) const;
+  LLVM_ABI BlockFrequency &operator/=(BranchProbability Prob);
+  LLVM_ABI BlockFrequency operator/(BranchProbability Prob) const;
 
   /// Adds another block frequency using saturating arithmetic.
   BlockFrequency &operator+=(BlockFrequency Freq) {
@@ -80,7 +81,7 @@ class BlockFrequency {
   }
 
   /// Multiplies frequency with `Factor`. Returns `nullopt` in case of overflow.
-  std::optional<BlockFrequency> mul(uint64_t Factor) const;
+  LLVM_ABI std::optional<BlockFrequency> mul(uint64_t Factor) const;
 
   /// Shift block frequency to the right by count digits saturating to 1.
   BlockFrequency &operator>>=(const unsigned count) {
@@ -120,8 +121,8 @@ class BlockFrequency {
   }
 };
 
-void printRelativeBlockFreq(raw_ostream &OS, BlockFrequency EntryFreq,
-                            BlockFrequency Freq);
+LLVM_ABI void printRelativeBlockFreq(raw_ostream &OS, BlockFrequency EntryFreq,
+                                     BlockFrequency Freq);
 
 } // namespace llvm
 
diff --git a/llvm/include/llvm/Support/BranchProbability.h b/llvm/include/llvm/Support/BranchProbability.h
index 79d70cf611d41..90448...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/136014


More information about the llvm-commits mailing list