[libc-commits] [libc] 33a583d - [libc] Workaround for GCC on `typedef` for `_Complex __float128` (#157010)

via libc-commits libc-commits at lists.llvm.org
Thu Sep 4 22:50:39 PDT 2025


Author: A. Jiang
Date: 2025-09-05T13:50:35+08:00
New Revision: 33a583d37795285553fde30c75a4fec3243e8bd0

URL: https://github.com/llvm/llvm-project/commit/33a583d37795285553fde30c75a4fec3243e8bd0
DIFF: https://github.com/llvm/llvm-project/commit/33a583d37795285553fde30c75a4fec3243e8bd0.diff

LOG: [libc] Workaround for GCC on `typedef` for `_Complex __float128` (#157010)

Currently, GCC can't parse `typedef _Complex __float128 cfloat128;`,
although `__typeof__` can be used as a workaround. Reported
https://gcc.gnu.org/PR121799 which was later considered as duplicate of
https://gcc.gnu.org/PR32187.

Some recent changes exposed it to GCC and then caused CI failure for
libc++. This patch adds a workaround for GCC.

Added: 
    

Modified: 
    libc/include/llvm-libc-types/cfloat128.h

Removed: 
    


################################################################################
diff  --git a/libc/include/llvm-libc-types/cfloat128.h b/libc/include/llvm-libc-types/cfloat128.h
index 25b4cc7345a30..838ef1cbd9ad5 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/PR32187 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


        


More information about the libc-commits mailing list