[libc-commits] [libc] [libc] Fix undefined behavior in BitsFxTest.h (PR #152347)

via libc-commits libc-commits at lists.llvm.org
Wed Aug 6 11:12:39 PDT 2025


https://github.com/lntue updated https://github.com/llvm/llvm-project/pull/152347

>From 648d0621370e8fffa5843c7ac45911a1fe22f625 Mon Sep 17 00:00:00 2001
From: Tue Ly <lntue.h at gmail.com>
Date: Wed, 6 Aug 2025 17:33:14 +0000
Subject: [PATCH 1/2] [libc] Fix undefined behavior in BitsFxTest.h

---
 libc/test/src/stdfix/BitsFxTest.h | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/libc/test/src/stdfix/BitsFxTest.h b/libc/test/src/stdfix/BitsFxTest.h
index eca6ab1bb28ab..2dcb55f686ada 100644
--- a/libc/test/src/stdfix/BitsFxTest.h
+++ b/libc/test/src/stdfix/BitsFxTest.h
@@ -63,9 +63,11 @@ class BitsFxTest : public LIBC_NAMESPACE::testing::Test {
       if constexpr (FXRep::SIGN_LEN > 0) {
         if (min <= -11 && FXRep::FRACTION_LEN >= kMinFbits) {
           // (-10.71875)_10 = (-1010.1011100)_2
-          constexpr long long kExpected = -1372;
-          EXPECT_EQ(static_cast<XType>(kExpected
-                                       << (FXRep::FRACTION_LEN - kMinFbits)),
+          constexpr long long kExpected =
+              static_cast<long long>(static_cast<unsigned long long>(-1372)
+                                     << (FXRep::FRACTION_LEN - kMinFbits));
+
+          EXPECT_EQ(static_cast<XType>(kExpected),
                     func(negative_special_num_t));
         }
       }

>From 1dbc06d402e4938303597697b425e646a4f42775 Mon Sep 17 00:00:00 2001
From: Tue Ly <lntue.h at gmail.com>
Date: Wed, 6 Aug 2025 18:12:11 +0000
Subject: [PATCH 2/2] Change to fixed size integer types.

---
 libc/test/src/stdfix/BitsFxTest.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libc/test/src/stdfix/BitsFxTest.h b/libc/test/src/stdfix/BitsFxTest.h
index 2dcb55f686ada..cdb363f07053b 100644
--- a/libc/test/src/stdfix/BitsFxTest.h
+++ b/libc/test/src/stdfix/BitsFxTest.h
@@ -54,7 +54,7 @@ class BitsFxTest : public LIBC_NAMESPACE::testing::Test {
 
       if (max >= 11 && FXRep::FRACTION_LEN >= kMinFbits) {
         // (10.71875)_10 = (1010.1011100)_2
-        constexpr long long kExpected = 1372;
+        constexpr int64_t kExpected = 1372;
         EXPECT_EQ(
             static_cast<XType>(kExpected << (FXRep::FRACTION_LEN - kMinFbits)),
             func(special_num_t));
@@ -63,9 +63,9 @@ class BitsFxTest : public LIBC_NAMESPACE::testing::Test {
       if constexpr (FXRep::SIGN_LEN > 0) {
         if (min <= -11 && FXRep::FRACTION_LEN >= kMinFbits) {
           // (-10.71875)_10 = (-1010.1011100)_2
-          constexpr long long kExpected =
-              static_cast<long long>(static_cast<unsigned long long>(-1372)
-                                     << (FXRep::FRACTION_LEN - kMinFbits));
+          constexpr int64_t kExpected =
+              static_cast<int64_t>(static_cast<uint64_t>(-1372)
+                                   << (FXRep::FRACTION_LEN - kMinFbits));
 
           EXPECT_EQ(static_cast<XType>(kExpected),
                     func(negative_special_num_t));



More information about the libc-commits mailing list