[libc-commits] [libc] [libc] Implement CMPLX related macros (PR #156344)

Connector Switch via libc-commits libc-commits at lists.llvm.org
Thu Sep 4 09:35:53 PDT 2025


https://github.com/c8ef updated https://github.com/llvm/llvm-project/pull/156344

>From c276a35d6e3eaaf91626e21838153c362ae14912 Mon Sep 17 00:00:00 2001
From: c8ef <c8ef at outlook.com>
Date: Mon, 1 Sep 2025 23:24:33 +0800
Subject: [PATCH 1/7] [libc] Implement CMPLX related macros

---
 libc/docs/headers/complex.rst                  |  2 +-
 libc/include/llvm-libc-macros/CMakeLists.txt   | 14 ++++++++------
 libc/include/llvm-libc-macros/complex-macros.h | 14 ++++++++++++++
 libc/test/include/complex_test.cpp             |  9 +++++++++
 4 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/libc/docs/headers/complex.rst b/libc/docs/headers/complex.rst
index 272cf00c883bc..7195f2695457e 100644
--- a/libc/docs/headers/complex.rst
+++ b/libc/docs/headers/complex.rst
@@ -10,7 +10,7 @@ Macros
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
 | <Func>    | <Func_f> (float) | <Func> (double) | <Func_l> (long double) | <Func_f16> (float16) | <Func_f128> (float128) | C23 Definition Section | C23 Error Handling Section |
 +===========+==================+=================+========================+======================+========================+========================+============================+
-| CMPLX     |                  |                 |                        |                      |                        | 7.3.9.3                | N/A                        |
+| CMPLX     | |check|          | |check|         | |check|                | |check|              | |check|                | 7.3.9.3                | N/A                        |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
 
 Functions
diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt
index 7aa549ddc75d9..055e11f958e02 100644
--- a/libc/include/llvm-libc-macros/CMakeLists.txt
+++ b/libc/include/llvm-libc-macros/CMakeLists.txt
@@ -61,12 +61,6 @@ add_macro_header(
     fcntl-macros.h
 )
 
-add_macro_header(
-  complex_macros
-  HDR
-    complex-macros.h
-)
-
 add_macro_header(
   features_macros
   HDR
@@ -103,6 +97,14 @@ add_macro_header(
     float16-macros.h
 )
 
+add_macro_header(
+  complex_macros
+  HDR
+    complex-macros.h
+  DEPENDS
+    .float16_macros
+)
+
 add_macro_header(
   limits_macros
   HDR
diff --git a/libc/include/llvm-libc-macros/complex-macros.h b/libc/include/llvm-libc-macros/complex-macros.h
index 427c68d289e0b..fdcc9c7831dd1 100644
--- a/libc/include/llvm-libc-macros/complex-macros.h
+++ b/libc/include/llvm-libc-macros/complex-macros.h
@@ -9,6 +9,8 @@
 #ifndef __LLVM_LIBC_MACROS_COMPLEX_MACROS_H
 #define __LLVM_LIBC_MACROS_COMPLEX_MACROS_H
 
+#include "float16-macros.h"
+
 #ifndef __STDC_NO_COMPLEX__
 
 #define __STDC_VERSION_COMPLEX_H__ 202311L
@@ -19,6 +21,18 @@
 
 // TODO: Add imaginary macros once GCC or Clang support _Imaginary builtin-type.
 
+#define CMPLX(x, y) __builtin_complex((double)(x), (double)(y))
+#define CMPLXF(x, y) __builtin_complex((float)(x), (float)(y))
+#define CMPLXL(x, y) __builtin_complex((long double)(x), (long double)(y))
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+#define CMPLXF16(x, y) __builtin_complex((float16)(x), (float16)(y))
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_HAS_FLOAT128
+#define CMPLXF128(x, y) __builtin_complex((float128)(x), (float128)(y))
+#endif // LIBC_TYPES_HAS_FLOAT128
+
 #endif
 
 #endif // __LLVM_LIBC_MACROS_COMPLEX_MACROS_H
diff --git a/libc/test/include/complex_test.cpp b/libc/test/include/complex_test.cpp
index da833fb527381..869d2a935986e 100644
--- a/libc/test/include/complex_test.cpp
+++ b/libc/test/include/complex_test.cpp
@@ -17,3 +17,12 @@ TEST(LlvmLibcComplexTest, VersionMacro) {
 TEST(LlvmLibcComplexTest, IMacro) { EXPECT_CFP_EQ(1.0fi, I); }
 
 TEST(LlvmLibcComplexTest, _Complex_IMacro) { EXPECT_CFP_EQ(1.0fi, _Complex_I); }
+
+TEST(LlvmLibcComplexTest, CMPLXMacro) {
+  EXPECT_CFP_EQ(CMPLX(0, 1.0), I);
+  EXPECT_CFP_EQ(CMPLX(1.0, 0), 1.0);
+  EXPECT_CFP_EQ(CMPLXF(0, 1.0f), I);
+  EXPECT_CFP_EQ(CMPLXF(1.0f, 0), 1.0f);
+  EXPECT_CFP_EQ(CMPLXL(0, 1.0l), I);
+  EXPECT_CFP_EQ(CMPLXL(1.0l, 0), 1.0l);
+}

>From 65edd0ba245d51a7f67df2cd36420076f140a58d Mon Sep 17 00:00:00 2001
From: c8ef <c8ef at outlook.com>
Date: Tue, 2 Sep 2025 22:14:51 +0800
Subject: [PATCH 2/7] [libc] Implement CMPLX related macros

---
 libc/test/include/complex_test.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/libc/test/include/complex_test.cpp b/libc/test/include/complex_test.cpp
index 869d2a935986e..b14423dd89828 100644
--- a/libc/test/include/complex_test.cpp
+++ b/libc/test/include/complex_test.cpp
@@ -25,4 +25,9 @@ TEST(LlvmLibcComplexTest, CMPLXMacro) {
   EXPECT_CFP_EQ(CMPLXF(1.0f, 0), 1.0f);
   EXPECT_CFP_EQ(CMPLXL(0, 1.0l), I);
   EXPECT_CFP_EQ(CMPLXL(1.0l, 0), 1.0l);
+
+#ifdef LIBC_TYPES_HAS_FLOAT128
+  EXPECT_CFP_EQ(CMPLXF128(0, 1.0), I);
+  EXPECT_CFP_EQ(CMPLXF128(1.0, 0), 1.0);
+#endif // LIBC_TYPES_HAS_FLOAT128
 }

>From 3904794bcfd5dec6e97943bf0f128d1051f4b533 Mon Sep 17 00:00:00 2001
From: c8ef <c8ef at outlook.com>
Date: Tue, 2 Sep 2025 22:24:52 +0800
Subject: [PATCH 3/7] [libc] Implement CMPLX related macros

---
 libc/test/include/complex_test.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libc/test/include/complex_test.cpp b/libc/test/include/complex_test.cpp
index b14423dd89828..55aca9d10194f 100644
--- a/libc/test/include/complex_test.cpp
+++ b/libc/test/include/complex_test.cpp
@@ -26,6 +26,12 @@ TEST(LlvmLibcComplexTest, CMPLXMacro) {
   EXPECT_CFP_EQ(CMPLXL(0, 1.0l), I);
   EXPECT_CFP_EQ(CMPLXL(1.0l, 0), 1.0l);
 
+// TODO: Uncomment these after issues#156463 is resolved.
+// #ifdef LIBC_TYPES_HAS_FLOAT16
+//   EXPECT_CFP_EQ(CMPLXF16(0, 1.0), I);
+//   EXPECT_CFP_EQ(CMPLXF16(1.0, 0), 1.0);
+// #endif // LIBC_TYPES_HAS_FLOAT16
+
 #ifdef LIBC_TYPES_HAS_FLOAT128
   EXPECT_CFP_EQ(CMPLXF128(0, 1.0), I);
   EXPECT_CFP_EQ(CMPLXF128(1.0, 0), 1.0);

>From 008cd98bc25abad09b7eae384512d319fa89b35a Mon Sep 17 00:00:00 2001
From: c8ef <c8ef at outlook.com>
Date: Tue, 2 Sep 2025 22:28:39 +0800
Subject: [PATCH 4/7] [libc] Implement CMPLX related macros

---
 libc/test/include/complex_test.cpp | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/libc/test/include/complex_test.cpp b/libc/test/include/complex_test.cpp
index 55aca9d10194f..9ad67a895e2ae 100644
--- a/libc/test/include/complex_test.cpp
+++ b/libc/test/include/complex_test.cpp
@@ -26,11 +26,11 @@ TEST(LlvmLibcComplexTest, CMPLXMacro) {
   EXPECT_CFP_EQ(CMPLXL(0, 1.0l), I);
   EXPECT_CFP_EQ(CMPLXL(1.0l, 0), 1.0l);
 
-// TODO: Uncomment these after issues#156463 is resolved.
-// #ifdef LIBC_TYPES_HAS_FLOAT16
-//   EXPECT_CFP_EQ(CMPLXF16(0, 1.0), I);
-//   EXPECT_CFP_EQ(CMPLXF16(1.0, 0), 1.0);
-// #endif // LIBC_TYPES_HAS_FLOAT16
+  // TODO: Uncomment these after issues#156463 is resolved.
+  // #ifdef LIBC_TYPES_HAS_FLOAT16
+  //   EXPECT_CFP_EQ(CMPLXF16(0, 1.0), I);
+  //   EXPECT_CFP_EQ(CMPLXF16(1.0, 0), 1.0);
+  // #endif // LIBC_TYPES_HAS_FLOAT16
 
 #ifdef LIBC_TYPES_HAS_FLOAT128
   EXPECT_CFP_EQ(CMPLXF128(0, 1.0), I);

>From 7421d37bca6e9271abad631542ec468fc4336e25 Mon Sep 17 00:00:00 2001
From: c8ef <c8ef at outlook.com>
Date: Fri, 5 Sep 2025 00:28:28 +0800
Subject: [PATCH 5/7] address review comments

---
 libc/include/llvm-libc-macros/CMakeLists.txt  | 29 +++++++++----
 .../llvm-libc-macros/cfloat128-macros.h       | 41 +++++++++++++++++++
 .../llvm-libc-macros/cfloat16-macros.h        | 20 +++++++++
 .../include/llvm-libc-macros/complex-macros.h | 20 +++++----
 libc/include/llvm-libc-types/CMakeLists.txt   |  9 +++-
 libc/include/llvm-libc-types/cfloat128.h      | 34 +++------------
 libc/include/llvm-libc-types/cfloat16.h       | 11 ++---
 libc/test/CMakeLists.txt                      | 12 +++---
 libc/test/include/complex_test.cpp            | 13 +++---
 9 files changed, 124 insertions(+), 65 deletions(-)
 create mode 100644 libc/include/llvm-libc-macros/cfloat128-macros.h
 create mode 100644 libc/include/llvm-libc-macros/cfloat16-macros.h

diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt
index 055e11f958e02..f71540313f0b3 100644
--- a/libc/include/llvm-libc-macros/CMakeLists.txt
+++ b/libc/include/llvm-libc-macros/CMakeLists.txt
@@ -61,6 +61,27 @@ add_macro_header(
     fcntl-macros.h
 )
 
+add_macro_header(
+  cfloat128_macros
+  HDR
+    cfloat128-macros.h
+)
+
+add_macro_header(
+  cfloat16_macros
+  HDR
+    cfloat16-macros.h
+)
+
+add_macro_header(
+  complex_macros
+  HDR
+    complex-macros.h
+  DEPENDS
+    .cfloat128_macros
+    .cfloat16_macros
+)
+
 add_macro_header(
   features_macros
   HDR
@@ -97,14 +118,6 @@ add_macro_header(
     float16-macros.h
 )
 
-add_macro_header(
-  complex_macros
-  HDR
-    complex-macros.h
-  DEPENDS
-    .float16_macros
-)
-
 add_macro_header(
   limits_macros
   HDR
diff --git a/libc/include/llvm-libc-macros/cfloat128-macros.h b/libc/include/llvm-libc-macros/cfloat128-macros.h
new file mode 100644
index 0000000000000..5f28cfa21aaee
--- /dev/null
+++ b/libc/include/llvm-libc-macros/cfloat128-macros.h
@@ -0,0 +1,41 @@
+//===-- Detection of _Complex _Float128 compiler builtin type -------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_MACROS_CFLOAT128_MACROS_H
+#define LLVM_LIBC_MACROS_CFLOAT128_MACROS_H
+
+#include "float-macros.h" // LDBL_MANT_DIG
+
+// Currently, the complex variant of C23 `_Float128` type is only defined as a
+// built-in type in GCC 7 or later, for C and in GCC 13 or later, for C++. For
+// clang, the complex variant of `__float128` is defined instead, and only on
+// x86-64 targets for clang 11 or later.
+//
+// TODO: Update the complex variant of C23 `_Float128` type detection again when
+// clang supports it.
+#ifdef __clang__
+#if (__clang_major__ >= 11) &&                                                 \
+    (defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__))
+// Use _Complex __float128 type. clang uses __SIZEOF_FLOAT128__ or __FLOAT128__
+// macro to notify the availability of __float128 type:
+// https://reviews.llvm.org/D15120
+#define LIBC_TYPES_HAS_CFLOAT128
+#endif
+#elif defined(__GNUC__)
+#if (defined(__STDC_IEC_60559_COMPLEX__) || defined(__SIZEOF_FLOAT128__)) &&   \
+    (__GNUC__ >= 13 || (!defined(__cplusplus)))
+#define LIBC_TYPES_HAS_CFLOAT128
+#endif
+#endif
+
+#if !defined(LIBC_TYPES_HAS_CFLOAT128) && (LDBL_MANT_DIG == 113)
+#define LIBC_TYPES_HAS_CFLOAT128
+#define LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE
+#endif
+
+#endif // LLVM_LIBC_MACROS_CFLOAT128_MACROS_H
diff --git a/libc/include/llvm-libc-macros/cfloat16-macros.h b/libc/include/llvm-libc-macros/cfloat16-macros.h
new file mode 100644
index 0000000000000..1f10adf3e3f2d
--- /dev/null
+++ b/libc/include/llvm-libc-macros/cfloat16-macros.h
@@ -0,0 +1,20 @@
+//===-- Detection of _Complex _Float16 compiler builtin type --------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_MACROS_CFLOAT16_MACROS_H
+#define LLVM_LIBC_MACROS_CFLOAT16_MACROS_H
+
+#if defined(__FLT16_MANT_DIG__) &&                                             \
+    (!defined(__GNUC__) || __GNUC__ >= 13 ||                                   \
+     (defined(__clang__) && __clang_major__ >= 14)) &&                         \
+    !defined(__arm__) && !defined(_M_ARM) && !defined(__riscv) &&              \
+    !defined(_WIN32)
+#define LIBC_TYPES_HAS_CFLOAT16
+#endif
+
+#endif // LLVM_LIBC_MACROS_CFLOAT16_MACROS_H
diff --git a/libc/include/llvm-libc-macros/complex-macros.h b/libc/include/llvm-libc-macros/complex-macros.h
index fdcc9c7831dd1..d98c6fdb306c8 100644
--- a/libc/include/llvm-libc-macros/complex-macros.h
+++ b/libc/include/llvm-libc-macros/complex-macros.h
@@ -9,7 +9,8 @@
 #ifndef __LLVM_LIBC_MACROS_COMPLEX_MACROS_H
 #define __LLVM_LIBC_MACROS_COMPLEX_MACROS_H
 
-#include "float16-macros.h"
+#include "cfloat128-macros.h"
+#include "cfloat16-macros.h"
 
 #ifndef __STDC_NO_COMPLEX__
 
@@ -25,14 +26,19 @@
 #define CMPLXF(x, y) __builtin_complex((float)(x), (float)(y))
 #define CMPLXL(x, y) __builtin_complex((long double)(x), (long double)(y))
 
-#ifdef LIBC_TYPES_HAS_FLOAT16
-#define CMPLXF16(x, y) __builtin_complex((float16)(x), (float16)(y))
-#endif // LIBC_TYPES_HAS_FLOAT16
+#ifdef LIBC_TYPES_HAS_CFLOAT16
+#if !defined(__clang__) || (__clang_major__ >= 22 && __clang_minor__ > 0)
+#define CMPLXF16(x, y) __builtin_complex((_Float16)(x), (_Float16)(y))
+#else
+#define CMPLXF16(x, y)                                                         \
+  ((complex _Float16)(__builtin_complex((float)(x), (float)(y))))
+#endif
+#endif // LIBC_TYPES_HAS_CFLOAT16
 
-#ifdef LIBC_TYPES_HAS_FLOAT128
+#ifdef LIBC_TYPES_HAS_CFLOAT128
 #define CMPLXF128(x, y) __builtin_complex((float128)(x), (float128)(y))
-#endif // LIBC_TYPES_HAS_FLOAT128
+#endif // LIBC_TYPES_HAS_CFLOAT128
 
-#endif
+#endif // __STDC_NO_COMPLEX__
 
 #endif // __LLVM_LIBC_MACROS_COMPLEX_MACROS_H
diff --git a/libc/include/llvm-libc-types/CMakeLists.txt b/libc/include/llvm-libc-types/CMakeLists.txt
index 451beae6f1e6f..dd373b9b1e259 100644
--- a/libc/include/llvm-libc-types/CMakeLists.txt
+++ b/libc/include/llvm-libc-types/CMakeLists.txt
@@ -149,9 +149,14 @@ add_header(
   HDR
     cfloat128.h
   DEPENDS
-    libc.include.llvm-libc-macros.float_macros
+    libc.include.llvm-libc-macros.cfloat128_macros
+)
+add_header(cfloat16
+  HDR
+    cfloat16.h
+  DEPENDS
+    libc.include.llvm-libc-macros.cfloat16_macros
 )
-add_header(cfloat16 HDR cfloat16.h)
 add_header(fsblkcnt_t HDR fsblkcnt_t.h)
 add_header(fsfilcnt_t HDR fsfilcnt_t.h)
 add_header(
diff --git a/libc/include/llvm-libc-types/cfloat128.h b/libc/include/llvm-libc-types/cfloat128.h
index 83fad87910137..25b4cc7345a30 100644
--- a/libc/include/llvm-libc-types/cfloat128.h
+++ b/libc/include/llvm-libc-types/cfloat128.h
@@ -9,36 +9,14 @@
 #ifndef LLVM_LIBC_TYPES_CFLOAT128_H
 #define LLVM_LIBC_TYPES_CFLOAT128_H
 
-#include "../llvm-libc-macros/float-macros.h" // LDBL_MANT_DIG
+#include "../llvm-libc-macros/cfloat128-macros.h"
 
-// Currently, the complex variant of C23 `_Float128` type is only defined as a
-// built-in type in GCC 7 or later, for C and in GCC 13 or later, for C++. For
-// clang, the complex variant of `__float128` is defined instead, and only on
-// x86-64 targets for clang 11 or later.
-//
-// TODO: Update the complex variant of C23 `_Float128` type detection again when
-// clang supports it.
-#ifdef __clang__
-#if (__clang_major__ >= 11) &&                                                 \
-    (defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__))
-// Use _Complex __float128 type. clang uses __SIZEOF_FLOAT128__ or __FLOAT128__
-// macro to notify the availability of __float128 type:
-// https://reviews.llvm.org/D15120
-#define LIBC_TYPES_HAS_CFLOAT128
+#ifdef LIBC_TYPES_HAS_CFLOAT128
+#ifndef LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE
 typedef _Complex __float128 cfloat128;
-#endif
-#elif defined(__GNUC__)
-#if (defined(__STDC_IEC_60559_COMPLEX__) || defined(__SIZEOF_FLOAT128__)) &&   \
-    (__GNUC__ >= 13 || (!defined(__cplusplus)))
-#define LIBC_TYPES_HAS_CFLOAT128
-typedef _Complex _Float128 cfloat128;
-#endif
-#endif
-
-#if !defined(LIBC_TYPES_HAS_CFLOAT128) && (LDBL_MANT_DIG == 113)
-#define LIBC_TYPES_HAS_CFLOAT128
-#define LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE
+#else
 typedef _Complex long double cfloat128;
-#endif
+#endif // LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE
+#endif // LIBC_TYPES_HAS_CFLOAT128
 
 #endif // LLVM_LIBC_TYPES_CFLOAT128_H
diff --git a/libc/include/llvm-libc-types/cfloat16.h b/libc/include/llvm-libc-types/cfloat16.h
index 2d4cef7562720..644a6469f0592 100644
--- a/libc/include/llvm-libc-types/cfloat16.h
+++ b/libc/include/llvm-libc-types/cfloat16.h
@@ -9,13 +9,10 @@
 #ifndef LLVM_LIBC_TYPES_CFLOAT16_H
 #define LLVM_LIBC_TYPES_CFLOAT16_H
 
-#if defined(__FLT16_MANT_DIG__) &&                                             \
-    (!defined(__GNUC__) || __GNUC__ >= 13 ||                                   \
-     (defined(__clang__) && __clang_major__ >= 14)) &&                         \
-    !defined(__arm__) && !defined(_M_ARM) && !defined(__riscv) &&              \
-    !defined(_WIN32)
-#define LIBC_TYPES_HAS_CFLOAT16
+#include "../llvm-libc-macros/cfloat16-macros.h"
+
+#ifdef LIBC_TYPES_HAS_CFLOAT16
 typedef _Complex _Float16 cfloat16;
-#endif
+#endif // LIBC_TYPES_HAS_CFLOAT16
 
 #endif // LLVM_LIBC_TYPES_CFLOAT16_H
diff --git a/libc/test/CMakeLists.txt b/libc/test/CMakeLists.txt
index 011ad6aeb34b7..74438946d5417 100644
--- a/libc/test/CMakeLists.txt
+++ b/libc/test/CMakeLists.txt
@@ -18,13 +18,13 @@ if(LIBC_TARGET_OS_IS_GPU)
   endif()
 endif()
 
-add_subdirectory(src)
-add_subdirectory(utils)
-add_subdirectory(shared)
+# add_subdirectory(src)
+# add_subdirectory(utils)
+# add_subdirectory(shared)
 
-if(NOT LLVM_LIBC_FULL_BUILD)
-  return()
-endif()
+# if(NOT LLVM_LIBC_FULL_BUILD)
+#   return()
+# endif()
 
 add_subdirectory(include)
 
diff --git a/libc/test/include/complex_test.cpp b/libc/test/include/complex_test.cpp
index 9ad67a895e2ae..6f900aa4fb674 100644
--- a/libc/test/include/complex_test.cpp
+++ b/libc/test/include/complex_test.cpp
@@ -26,14 +26,13 @@ TEST(LlvmLibcComplexTest, CMPLXMacro) {
   EXPECT_CFP_EQ(CMPLXL(0, 1.0l), I);
   EXPECT_CFP_EQ(CMPLXL(1.0l, 0), 1.0l);
 
-  // TODO: Uncomment these after issues#156463 is resolved.
-  // #ifdef LIBC_TYPES_HAS_FLOAT16
-  //   EXPECT_CFP_EQ(CMPLXF16(0, 1.0), I);
-  //   EXPECT_CFP_EQ(CMPLXF16(1.0, 0), 1.0);
-  // #endif // LIBC_TYPES_HAS_FLOAT16
+#ifdef LIBC_TYPES_HAS_CFLOAT16
+  EXPECT_CFP_EQ(CMPLXF16(0, 1.0), I);
+  EXPECT_CFP_EQ(CMPLXF16(1.0, 0), 1.0);
+#endif // LIBC_TYPES_HAS_CFLOAT16
 
-#ifdef LIBC_TYPES_HAS_FLOAT128
+#ifdef LIBC_TYPES_HAS_CFLOAT128
   EXPECT_CFP_EQ(CMPLXF128(0, 1.0), I);
   EXPECT_CFP_EQ(CMPLXF128(1.0, 0), 1.0);
-#endif // LIBC_TYPES_HAS_FLOAT128
+#endif // LIBC_TYPES_HAS_CFLOAT128
 }

>From 1a69c77a84bec43539b4b5750e50c6c6b27ce4e1 Mon Sep 17 00:00:00 2001
From: c8ef <c8ef at outlook.com>
Date: Fri, 5 Sep 2025 00:30:08 +0800
Subject: [PATCH 6/7] address review comments

---
 libc/test/CMakeLists.txt | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/libc/test/CMakeLists.txt b/libc/test/CMakeLists.txt
index 74438946d5417..011ad6aeb34b7 100644
--- a/libc/test/CMakeLists.txt
+++ b/libc/test/CMakeLists.txt
@@ -18,13 +18,13 @@ if(LIBC_TARGET_OS_IS_GPU)
   endif()
 endif()
 
-# add_subdirectory(src)
-# add_subdirectory(utils)
-# add_subdirectory(shared)
+add_subdirectory(src)
+add_subdirectory(utils)
+add_subdirectory(shared)
 
-# if(NOT LLVM_LIBC_FULL_BUILD)
-#   return()
-# endif()
+if(NOT LLVM_LIBC_FULL_BUILD)
+  return()
+endif()
 
 add_subdirectory(include)
 

>From c1cb3cb42976001104bc1a285f32aa64724b120f Mon Sep 17 00:00:00 2001
From: c8ef <c8ef at outlook.com>
Date: Fri, 5 Sep 2025 00:35:38 +0800
Subject: [PATCH 7/7] format cmake

---
 libc/include/llvm-libc-types/CMakeLists.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libc/include/llvm-libc-types/CMakeLists.txt b/libc/include/llvm-libc-types/CMakeLists.txt
index dd373b9b1e259..e9ed99cddb33f 100644
--- a/libc/include/llvm-libc-types/CMakeLists.txt
+++ b/libc/include/llvm-libc-types/CMakeLists.txt
@@ -151,7 +151,8 @@ add_header(
   DEPENDS
     libc.include.llvm-libc-macros.cfloat128_macros
 )
-add_header(cfloat16
+add_header(
+  cfloat16
   HDR
     cfloat16.h
   DEPENDS



More information about the libc-commits mailing list