[libc-commits] [libc] [libcxx] [libc] Workaround for GCC on `typedef` for `_Complex __float128` (PR #157010)
A. Jiang via libc-commits
libc-commits at lists.llvm.org
Thu Sep 4 22:10:03 PDT 2025
https://github.com/frederick-vs-ja updated https://github.com/llvm/llvm-project/pull/157010
>From f9c7f53549ef41cebe2a081521d8c316f2cabb29 Mon Sep 17 00:00:00 2001
From: "A. Jiang" <de34 at live.cn>
Date: Fri, 5 Sep 2025 12:26:48 +0800
Subject: [PATCH 1/2] [libc] Workaround for GCC on `typedef` for `_Complex
__float128`
Currently, GCC can't parse `typedef _Complex __float128 cfloat128;`,
although `__typeof__` can be used as a workaround. Reported
https://gcc.gnu.org/PR121799.
Some recent changes exposed it to GCC and then caused CI failure for
libc++. This patch adds a workaround for GCC.
---
libc/include/llvm-libc-types/cfloat128.h | 5 +++++
libcxx/include/__config | 2 ++
2 files changed, 7 insertions(+)
diff --git a/libc/include/llvm-libc-types/cfloat128.h b/libc/include/llvm-libc-types/cfloat128.h
index 25b4cc7345a30..78a3dacd2676c 100644
--- a/libc/include/llvm-libc-types/cfloat128.h
+++ b/libc/include/llvm-libc-types/cfloat128.h
@@ -13,7 +13,12 @@
#ifdef LIBC_TYPES_HAS_CFLOAT128
#ifndef LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE
+#if defined(__GNUC__) && !defined(__clang__)
+// Remove the workaround when https://gcc.gnu.org/PR121799 gets fixed.
+typedef __typeof__(_Complex __float128) cfloat128;
+#else // ^^^ workaround / no workaround vvv
typedef _Complex __float128 cfloat128;
+#endif // ^^^ workaround ^^^
#else
typedef _Complex long double cfloat128;
#endif // LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE
diff --git a/libcxx/include/__config b/libcxx/include/__config
index c197851f1c8fe..b1dff47b6aafd 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1265,3 +1265,5 @@ typedef __char32_t char32_t;
#endif // __cplusplus
#endif // _LIBCPP___CONFIG
+
+// triggering CI, will be reverted
>From 45a99a0e23613be91d5cd5a14d3d3056c694fea9 Mon Sep 17 00:00:00 2001
From: "A. Jiang" <de34 at live.cn>
Date: Fri, 5 Sep 2025 13:09:52 +0800
Subject: [PATCH 2/2] Update comment for the GCC bug report, revert temporary
change
---
libc/include/llvm-libc-types/cfloat128.h | 2 +-
libcxx/include/__config | 2 --
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/libc/include/llvm-libc-types/cfloat128.h b/libc/include/llvm-libc-types/cfloat128.h
index 78a3dacd2676c..838ef1cbd9ad5 100644
--- a/libc/include/llvm-libc-types/cfloat128.h
+++ b/libc/include/llvm-libc-types/cfloat128.h
@@ -14,7 +14,7 @@
#ifdef LIBC_TYPES_HAS_CFLOAT128
#ifndef LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE
#if defined(__GNUC__) && !defined(__clang__)
-// Remove the workaround when https://gcc.gnu.org/PR121799 gets fixed.
+// Remove the workaround when https://gcc.gnu.org/PR32187 gets fixed.
typedef __typeof__(_Complex __float128) cfloat128;
#else // ^^^ workaround / no workaround vvv
typedef _Complex __float128 cfloat128;
diff --git a/libcxx/include/__config b/libcxx/include/__config
index b1dff47b6aafd..c197851f1c8fe 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1265,5 +1265,3 @@ typedef __char32_t char32_t;
#endif // __cplusplus
#endif // _LIBCPP___CONFIG
-
-// triggering CI, will be reverted
More information about the libc-commits
mailing list