From 63ef585d4b80a960087e016badde1e14460e235f Mon Sep 17 00:00:00 2001 From: Benjamin Hall Date: Tue, 24 Oct 2023 00:35:13 -0400 Subject: [PATCH] [wpiutil] Fix compilation of MathExtras.h on Windows with /sdl (#5809) Fix copied from the LLVM main branch. --- ...-of-MathExtras.h-on-Windows-with-sdl.patch | 26 +++++++++++++++++++ upstream_utils/update_llvm.py | 1 + .../thirdparty/llvm/include/wpi/MathExtras.h | 5 +++- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 upstream_utils/llvm_patches/0032-Fix-compilation-of-MathExtras.h-on-Windows-with-sdl.patch diff --git a/upstream_utils/llvm_patches/0032-Fix-compilation-of-MathExtras.h-on-Windows-with-sdl.patch b/upstream_utils/llvm_patches/0032-Fix-compilation-of-MathExtras.h-on-Windows-with-sdl.patch new file mode 100644 index 0000000000..52956f95ba --- /dev/null +++ b/upstream_utils/llvm_patches/0032-Fix-compilation-of-MathExtras.h-on-Windows-with-sdl.patch @@ -0,0 +1,26 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Benjamin Hall +Date: Mon, 23 Oct 2023 21:36:40 -0400 +Subject: [PATCH 32/32] Fix compilation of MathExtras.h on Windows with /sdl + +See https://github.com/llvm/llvm-project/pull/68978 +--- + llvm/include/llvm/Support/MathExtras.h | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/llvm/include/llvm/Support/MathExtras.h b/llvm/include/llvm/Support/MathExtras.h +index 5f034b694989d8ef24e0b249abd12a5c20146b97..03db6e4d92cb3b62ac3d8b3cbd97783817c6326b 100644 +--- a/llvm/include/llvm/Support/MathExtras.h ++++ b/llvm/include/llvm/Support/MathExtras.h +@@ -356,7 +356,10 @@ inline uint64_t alignTo(uint64_t Value, uint64_t Align) { + inline uint64_t alignToPowerOf2(uint64_t Value, uint64_t Align) { + assert(Align != 0 && (Align & (Align - 1)) == 0 && + "Align must be a power of 2"); +- return (Value + Align - 1) & -Align; ++ // Replace unary minus to avoid compilation error on Windows: ++ // "unary minus operator applied to unsigned type, result still unsigned" ++ uint64_t negAlign = (~Align) + 1; ++ return (Value + Align - 1) & negAlign; + } + + /// If non-zero \p Skew is specified, the return value will be a minimal integer diff --git a/upstream_utils/update_llvm.py b/upstream_utils/update_llvm.py index 3414ec4deb..edbd3df716 100755 --- a/upstream_utils/update_llvm.py +++ b/upstream_utils/update_llvm.py @@ -209,6 +209,7 @@ def main(): "0029-Use-C-20-bit-header.patch", "0030-Remove-DenseMap-GTest-printer-test.patch", "0031-Replace-deprecated-std-aligned_storage_t.patch", + "0032-Fix-compilation-of-MathExtras.h-on-Windows-with-sdl.patch", ]: git_am( os.path.join(wpilib_root, "upstream_utils/llvm_patches", f), diff --git a/wpiutil/src/main/native/thirdparty/llvm/include/wpi/MathExtras.h b/wpiutil/src/main/native/thirdparty/llvm/include/wpi/MathExtras.h index b77cce7bd9..ed3b2b1efc 100644 --- a/wpiutil/src/main/native/thirdparty/llvm/include/wpi/MathExtras.h +++ b/wpiutil/src/main/native/thirdparty/llvm/include/wpi/MathExtras.h @@ -356,7 +356,10 @@ inline uint64_t alignTo(uint64_t Value, uint64_t Align) { inline uint64_t alignToPowerOf2(uint64_t Value, uint64_t Align) { assert(Align != 0 && (Align & (Align - 1)) == 0 && "Align must be a power of 2"); - return (Value + Align - 1) & -Align; + // Replace unary minus to avoid compilation error on Windows: + // "unary minus operator applied to unsigned type, result still unsigned" + uint64_t negAlign = (~Align) + 1; + return (Value + Align - 1) & negAlign; } /// If non-zero \p Skew is specified, the return value will be a minimal integer