From 0982dc3227d345de4beb9b00df5aca7af3141f67 Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Mon, 23 Jun 2025 08:56:52 -0700 Subject: [PATCH 1/3] [llvm] annotate remaining Support library interfaces for DLL export --- llvm/include/llvm/Support/ConvertUTF.h | 6 +++--- llvm/include/llvm/Support/KnownFPClass.h | 11 ++++++----- llvm/include/llvm/Support/ProgramStack.h | 7 ++++--- llvm/include/llvm/Support/TextEncoding.h | 5 +++-- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/llvm/include/llvm/Support/ConvertUTF.h b/llvm/include/llvm/Support/ConvertUTF.h index 3bb238e7df2ed..bb1723518a490 100644 --- a/llvm/include/llvm/Support/ConvertUTF.h +++ b/llvm/include/llvm/Support/ConvertUTF.h @@ -346,9 +346,9 @@ LLVM_ABI bool convertUTF32ToUTF8String(ArrayRef Src, std::string &Out); LLVM_ABI bool convertUTF8ToUTF16String(StringRef SrcUTF8, SmallVectorImpl &DstUTF16); -bool IsSingleCodeUnitUTF8Codepoint(unsigned); -bool IsSingleCodeUnitUTF16Codepoint(unsigned); -bool IsSingleCodeUnitUTF32Codepoint(unsigned); +LLVM_ABI bool IsSingleCodeUnitUTF8Codepoint(unsigned); +LLVM_ABI bool IsSingleCodeUnitUTF16Codepoint(unsigned); +LLVM_ABI bool IsSingleCodeUnitUTF32Codepoint(unsigned); #if defined(_WIN32) namespace sys { diff --git a/llvm/include/llvm/Support/KnownFPClass.h b/llvm/include/llvm/Support/KnownFPClass.h index 9ebdf260e0ec7..f2b58de4b867a 100644 --- a/llvm/include/llvm/Support/KnownFPClass.h +++ b/llvm/include/llvm/Support/KnownFPClass.h @@ -14,6 +14,7 @@ #ifndef LLVM_SUPPORT_KNOWNFPCLASS_H #define LLVM_SUPPORT_KNOWNFPCLASS_H +#include "llvm/Support/Compiler.h" #include "llvm/ADT/FloatingPointMode.h" #include @@ -78,13 +79,13 @@ struct KnownFPClass { /// Return true if it's know this can never be interpreted as a zero. This /// extends isKnownNeverZero to cover the case where the assumed /// floating-point mode for the function interprets denormals as zero. - bool isKnownNeverLogicalZero(DenormalMode Mode) const; + LLVM_ABI bool isKnownNeverLogicalZero(DenormalMode Mode) const; /// Return true if it's know this can never be interpreted as a negative zero. - bool isKnownNeverLogicalNegZero(DenormalMode Mode) const; + LLVM_ABI bool isKnownNeverLogicalNegZero(DenormalMode Mode) const; /// Return true if it's know this can never be interpreted as a positive zero. - bool isKnownNeverLogicalPosZero(DenormalMode Mode) const; + LLVM_ABI bool isKnownNeverLogicalPosZero(DenormalMode Mode) const; static constexpr FPClassTest OrderedLessThanZeroMask = fcNegSubnormal | fcNegNormal | fcNegInf; @@ -209,7 +210,7 @@ struct KnownFPClass { /// /// This assumes a copy-like operation and will replace any currently known /// information. - void propagateDenormal(const KnownFPClass &Src, DenormalMode Mode); + LLVM_ABI void propagateDenormal(const KnownFPClass &Src, DenormalMode Mode); /// Report known classes if \p Src is evaluated through a potentially /// canonicalizing operation. We can assume signaling nans will not be @@ -217,7 +218,7 @@ struct KnownFPClass { /// /// This assumes a copy-like operation and will replace any currently known /// information. - void propagateCanonicalizingSrc(const KnownFPClass &Src, DenormalMode Mode); + LLVM_ABI void propagateCanonicalizingSrc(const KnownFPClass &Src, DenormalMode Mode); void resetAll() { *this = KnownFPClass(); } }; diff --git a/llvm/include/llvm/Support/ProgramStack.h b/llvm/include/llvm/Support/ProgramStack.h index 55964c9779209..030583ca5b2d3 100644 --- a/llvm/include/llvm/Support/ProgramStack.h +++ b/llvm/include/llvm/Support/ProgramStack.h @@ -9,6 +9,7 @@ #ifndef LLVM_SUPPORT_PROGRAMSTACK_H #define LLVM_SUPPORT_PROGRAMSTACK_H +#include "llvm/Support/Compiler.h" #include "llvm/ADT/STLFunctionalExtras.h" // LLVM_HAS_SPLIT_STACKS is exposed in the header because CrashRecoveryContext @@ -28,12 +29,12 @@ namespace llvm { /// /// The value is not guaranteed to point to anything specific. It can be used to /// estimate how much stack space has been used since the previous call. -uintptr_t getStackPointer(); +LLVM_ABI uintptr_t getStackPointer(); /// \returns the default stack size for this platform. /// /// Based on \p RLIMIT_STACK or the equivalent. -unsigned getDefaultStackSize(); +LLVM_ABI unsigned getDefaultStackSize(); /// Runs Fn on a new stack of at least the given size. /// @@ -42,7 +43,7 @@ unsigned getDefaultStackSize(); /// /// The preferred implementation is split stacks on platforms that have a good /// debugging experience for them. On other platforms a new thread is used. -void runOnNewStack(unsigned StackSize, function_ref Fn); +LLVM_ABI void runOnNewStack(unsigned StackSize, function_ref Fn); template std::enable_if_t, R> diff --git a/llvm/include/llvm/Support/TextEncoding.h b/llvm/include/llvm/Support/TextEncoding.h index e204b95dd2dd7..5a6ddceb48417 100644 --- a/llvm/include/llvm/Support/TextEncoding.h +++ b/llvm/include/llvm/Support/TextEncoding.h @@ -15,6 +15,7 @@ #ifndef LLVM_SUPPORT_TEXT_ENCODING_H #define LLVM_SUPPORT_TEXT_ENCODING_H +#include "llvm/Support/Compiler.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" #include "llvm/Config/config.h" @@ -92,7 +93,7 @@ class TextEncodingConverter { /// \param[in] From the source character encoding /// \param[in] To the target character encoding /// \return a TextEncodingConverter instance or an error code - static ErrorOr create(TextEncoding From, + LLVM_ABI static ErrorOr create(TextEncoding From, TextEncoding To); /// Creates a TextEncodingConverter instance. @@ -101,7 +102,7 @@ class TextEncodingConverter { /// \param[in] From name of the source character encoding /// \param[in] To name of the target character encoding /// \return a TextEncodingConverter instance or an error code - static ErrorOr create(StringRef From, StringRef To); + LLVM_ABI static ErrorOr create(StringRef From, StringRef To); TextEncodingConverter(const TextEncodingConverter &) = delete; TextEncodingConverter &operator=(const TextEncodingConverter &) = delete; From 1fb42db2ab2815686457938f6c968f1d4dfc5597 Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Mon, 23 Jun 2025 08:58:41 -0700 Subject: [PATCH 2/3] [llvm] manual fix-ups to IDS codemod of remaining Support and ADT lib interfaces --- llvm/include/llvm/ADT/APFloat.h | 3 ++- llvm/include/llvm/ADT/APInt.h | 2 +- llvm/include/llvm/ADT/DynamicAPInt.h | 2 +- llvm/include/llvm/Support/Timer.h | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/llvm/include/llvm/ADT/APFloat.h b/llvm/include/llvm/ADT/APFloat.h index 300f83dcf9ef6..6aa62301580b5 100644 --- a/llvm/include/llvm/ADT/APFloat.h +++ b/llvm/include/llvm/ADT/APFloat.h @@ -672,7 +672,8 @@ class IEEEFloat final { integerPart addSignificand(const IEEEFloat &); integerPart subtractSignificand(const IEEEFloat &, integerPart); - lostFraction addOrSubtractSignificand(const IEEEFloat &, bool subtract); + // Exported for IEEEFloatUnitTestHelper. + LLVM_ABI lostFraction addOrSubtractSignificand(const IEEEFloat &, bool subtract); lostFraction multiplySignificand(const IEEEFloat &, IEEEFloat, bool ignoreAddend = false); lostFraction multiplySignificand(const IEEEFloat&); diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h index fe48c60466e96..295506393a1c4 100644 --- a/llvm/include/llvm/ADT/APInt.h +++ b/llvm/include/llvm/ADT/APInt.h @@ -561,7 +561,7 @@ class [[nodiscard]] APInt { } /// Overload to compute a hash_code for an APInt value. - friend hash_code hash_value(const APInt &Arg); + LLVM_ABI friend hash_code hash_value(const APInt &Arg); /// This function returns a pointer to the internal storage of the APInt. /// This is useful for writing out the APInt in binary form without any diff --git a/llvm/include/llvm/ADT/DynamicAPInt.h b/llvm/include/llvm/ADT/DynamicAPInt.h index 48c5c6eac9013..ca010f836de6f 100644 --- a/llvm/include/llvm/ADT/DynamicAPInt.h +++ b/llvm/include/llvm/ADT/DynamicAPInt.h @@ -212,7 +212,7 @@ class DynamicAPInt { friend DynamicAPInt operator/(int64_t A, const DynamicAPInt &B); friend DynamicAPInt operator%(int64_t A, const DynamicAPInt &B); - friend hash_code hash_value(const DynamicAPInt &x); // NOLINT + LLVM_ABI friend hash_code hash_value(const DynamicAPInt &x); // NOLINT LLVM_ABI void static_assert_layout(); // NOLINT diff --git a/llvm/include/llvm/Support/Timer.h b/llvm/include/llvm/Support/Timer.h index 36890c75a65e3..40709d49db011 100644 --- a/llvm/include/llvm/Support/Timer.h +++ b/llvm/include/llvm/Support/Timer.h @@ -258,7 +258,7 @@ class TimerGroup { private: friend class Timer; - friend void PrintStatisticsJSON(raw_ostream &OS); + LLVM_ABI friend void PrintStatisticsJSON(raw_ostream &OS); void addTimer(Timer &T); void removeTimer(Timer &T); void prepareToPrintList(bool reset_time = false); From 06378816edc9205f1bed1f4acc2db99908d35116 Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Mon, 23 Jun 2025 09:03:06 -0700 Subject: [PATCH 3/3] [llvm] clang-format changes --- llvm/include/llvm/ADT/APFloat.h | 3 ++- llvm/include/llvm/Support/KnownFPClass.h | 5 +++-- llvm/include/llvm/Support/ProgramStack.h | 2 +- llvm/include/llvm/Support/TextEncoding.h | 7 ++++--- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/llvm/include/llvm/ADT/APFloat.h b/llvm/include/llvm/ADT/APFloat.h index 6aa62301580b5..e1589544787cf 100644 --- a/llvm/include/llvm/ADT/APFloat.h +++ b/llvm/include/llvm/ADT/APFloat.h @@ -673,7 +673,8 @@ class IEEEFloat final { integerPart addSignificand(const IEEEFloat &); integerPart subtractSignificand(const IEEEFloat &, integerPart); // Exported for IEEEFloatUnitTestHelper. - LLVM_ABI lostFraction addOrSubtractSignificand(const IEEEFloat &, bool subtract); + LLVM_ABI lostFraction addOrSubtractSignificand(const IEEEFloat &, + bool subtract); lostFraction multiplySignificand(const IEEEFloat &, IEEEFloat, bool ignoreAddend = false); lostFraction multiplySignificand(const IEEEFloat&); diff --git a/llvm/include/llvm/Support/KnownFPClass.h b/llvm/include/llvm/Support/KnownFPClass.h index f2b58de4b867a..b3c18bcf6b34b 100644 --- a/llvm/include/llvm/Support/KnownFPClass.h +++ b/llvm/include/llvm/Support/KnownFPClass.h @@ -14,8 +14,8 @@ #ifndef LLVM_SUPPORT_KNOWNFPCLASS_H #define LLVM_SUPPORT_KNOWNFPCLASS_H -#include "llvm/Support/Compiler.h" #include "llvm/ADT/FloatingPointMode.h" +#include "llvm/Support/Compiler.h" #include namespace llvm { @@ -218,7 +218,8 @@ struct KnownFPClass { /// /// This assumes a copy-like operation and will replace any currently known /// information. - LLVM_ABI void propagateCanonicalizingSrc(const KnownFPClass &Src, DenormalMode Mode); + LLVM_ABI void propagateCanonicalizingSrc(const KnownFPClass &Src, + DenormalMode Mode); void resetAll() { *this = KnownFPClass(); } }; diff --git a/llvm/include/llvm/Support/ProgramStack.h b/llvm/include/llvm/Support/ProgramStack.h index 030583ca5b2d3..0dd8235b90c06 100644 --- a/llvm/include/llvm/Support/ProgramStack.h +++ b/llvm/include/llvm/Support/ProgramStack.h @@ -9,8 +9,8 @@ #ifndef LLVM_SUPPORT_PROGRAMSTACK_H #define LLVM_SUPPORT_PROGRAMSTACK_H -#include "llvm/Support/Compiler.h" #include "llvm/ADT/STLFunctionalExtras.h" +#include "llvm/Support/Compiler.h" // LLVM_HAS_SPLIT_STACKS is exposed in the header because CrashRecoveryContext // needs to know if it's running on another thread or not. diff --git a/llvm/include/llvm/Support/TextEncoding.h b/llvm/include/llvm/Support/TextEncoding.h index 5a6ddceb48417..8a304910aa5dd 100644 --- a/llvm/include/llvm/Support/TextEncoding.h +++ b/llvm/include/llvm/Support/TextEncoding.h @@ -15,10 +15,10 @@ #ifndef LLVM_SUPPORT_TEXT_ENCODING_H #define LLVM_SUPPORT_TEXT_ENCODING_H -#include "llvm/Support/Compiler.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" #include "llvm/Config/config.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/ErrorOr.h" #include @@ -94,7 +94,7 @@ class TextEncodingConverter { /// \param[in] To the target character encoding /// \return a TextEncodingConverter instance or an error code LLVM_ABI static ErrorOr create(TextEncoding From, - TextEncoding To); + TextEncoding To); /// Creates a TextEncodingConverter instance. /// Returns std::errc::invalid_argument in case the requested conversion is @@ -102,7 +102,8 @@ class TextEncodingConverter { /// \param[in] From name of the source character encoding /// \param[in] To name of the target character encoding /// \return a TextEncodingConverter instance or an error code - LLVM_ABI static ErrorOr create(StringRef From, StringRef To); + LLVM_ABI static ErrorOr create(StringRef From, + StringRef To); TextEncodingConverter(const TextEncodingConverter &) = delete; TextEncodingConverter &operator=(const TextEncodingConverter &) = delete;