[compiler-rt] [MSVC] fix the build (PR #69634)

nicole mazzuca via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 19 12:47:13 PDT 2023


https://github.com/strega-nil created https://github.com/llvm/llvm-project/pull/69634

MSVC in C mode apparently doesn't consider `const int` to be sufficiently constant expression

This was broken in #66903.

>From 99b45599afd7b59ab4a1fc5833211d4fb7e4ce4f Mon Sep 17 00:00:00 2001
From: Nicole Mazzuca <nicole at strega-nil.co>
Date: Thu, 19 Oct 2023 12:45:56 -0700
Subject: [PATCH] [MSVC] fix the build

MSVC in C mode apparently doesn't consider `const int` to be
sufficiently constant expression
---
 compiler-rt/lib/builtins/int_to_fp.h        |  5 ++++-
 compiler-rt/lib/builtins/int_to_fp_impl.inc | 11 ++++++++---
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/compiler-rt/lib/builtins/int_to_fp.h b/compiler-rt/lib/builtins/int_to_fp.h
index 1adce097d7a8568..cbce49eed140c4c 100644
--- a/compiler-rt/lib/builtins/int_to_fp.h
+++ b/compiler-rt/lib/builtins/int_to_fp.h
@@ -44,7 +44,10 @@ static __inline int clzSrcT(usrc_t x) { return __clzti2(x); }
 typedef float dst_t;
 typedef uint32_t dst_rep_t;
 #define DST_REP_C UINT32_C
-static const int dstSigBits = 23;
+
+enum {
+  dstSigBits = 23,
+};
 
 #elif defined DST_DOUBLE
 typedef double dst_t;
diff --git a/compiler-rt/lib/builtins/int_to_fp_impl.inc b/compiler-rt/lib/builtins/int_to_fp_impl.inc
index 263ae85d3283ca0..51f76fd76d80350 100644
--- a/compiler-rt/lib/builtins/int_to_fp_impl.inc
+++ b/compiler-rt/lib/builtins/int_to_fp_impl.inc
@@ -17,10 +17,15 @@
 static __inline dst_t __floatXiYf__(src_t a) {
   if (a == 0)
     return 0.0;
-  const int dstMantDig = dstSigBits + 1;
-  const int srcBits = sizeof(src_t) * CHAR_BIT;
-  const int srcIsSigned = ((src_t)-1) < 0;
+
+  enum {
+    dstMantDig = dstSigBits + 1,
+    srcBits = sizeof(src_t) * CHAR_BIT,
+    srcIsSigned = ((src_t)-1) < 0,
+  };
+
   const src_t s = srcIsSigned ? a >> (srcBits - 1) : 0;
+
   a = (usrc_t)(a ^ s) - s;
   int sd = srcBits - clzSrcT(a);         // number of significant digits
   int e = sd - 1;                        // exponent



More information about the llvm-commits mailing list