[libc-commits] [libc] [libc][complex] check that cfloat128 is not defined as _Complex long double (PR #119324)

Shourya Goel via libc-commits libc-commits at lists.llvm.org
Mon Dec 9 21:47:08 PST 2024


https://github.com/Sh0g0-1758 updated https://github.com/llvm/llvm-project/pull/119324

>From 8f3e7c3fb0552fcfffcf22e74761291e5c21d748 Mon Sep 17 00:00:00 2001
From: Sh0g0-1758 <shouryagoel10000 at gmail.com>
Date: Tue, 10 Dec 2024 10:37:43 +0530
Subject: [PATCH 1/2] fix: check that cfloat128 is not defined _Complex long
 double

---
 libc/src/__support/complex_type.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libc/src/__support/complex_type.h b/libc/src/__support/complex_type.h
index 4c861b05bc752c..7d9f21229fa94e 100644
--- a/libc/src/__support/complex_type.h
+++ b/libc/src/__support/complex_type.h
@@ -37,10 +37,12 @@ template <> struct make_complex<float16> {
 };
 #endif
 #if defined(LIBC_TYPES_HAS_CFLOAT128)
+#if (LDBL_MANT_DIG != 113)
 template <> struct make_complex<float128> {
   using type = cfloat128;
 };
 #endif
+#endif
 
 template <typename T> using make_complex_t = typename make_complex<T>::type;
 
@@ -62,10 +64,12 @@ template <> struct make_real<cfloat16> {
 };
 #endif
 #if defined(LIBC_TYPES_HAS_CFLOAT128)
+#if (LDBL_MANT_DIG != 113)
 template <> struct make_real<cfloat128> {
   using type = float128;
 };
 #endif
+#endif
 
 template <typename T> using make_real_t = typename make_real<T>::type;
 

>From c3185c371d48fe1a8fb973e5ff5aa396e43f1d2a Mon Sep 17 00:00:00 2001
From: Sh0g0-1758 <shouryagoel10000 at gmail.com>
Date: Tue, 10 Dec 2024 11:16:51 +0530
Subject: [PATCH 2/2] nit

---
 libc/include/llvm-libc-types/cfloat128.h | 1 +
 libc/src/__support/complex_type.h        | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/libc/include/llvm-libc-types/cfloat128.h b/libc/include/llvm-libc-types/cfloat128.h
index a371671cf62353..f76a0c1c2f5af5 100644
--- a/libc/include/llvm-libc-types/cfloat128.h
+++ b/libc/include/llvm-libc-types/cfloat128.h
@@ -35,6 +35,7 @@ typedef _Complex _Float128 cfloat128;
 typedef _Complex __float128 cfloat128;
 #elif (LDBL_MANT_DIG == 113)
 #define LIBC_TYPES_HAS_CFLOAT128
+#define LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE
 typedef _Complex long double cfloat128;
 #endif
 
diff --git a/libc/src/__support/complex_type.h b/libc/src/__support/complex_type.h
index 7d9f21229fa94e..88239886f983b5 100644
--- a/libc/src/__support/complex_type.h
+++ b/libc/src/__support/complex_type.h
@@ -37,7 +37,7 @@ template <> struct make_complex<float16> {
 };
 #endif
 #if defined(LIBC_TYPES_HAS_CFLOAT128)
-#if (LDBL_MANT_DIG != 113)
+#if !(LIBC_TYPES_LONG_DOUBLE_IS_FLOAT128)
 template <> struct make_complex<float128> {
   using type = cfloat128;
 };
@@ -64,7 +64,7 @@ template <> struct make_real<cfloat16> {
 };
 #endif
 #if defined(LIBC_TYPES_HAS_CFLOAT128)
-#if (LDBL_MANT_DIG != 113)
+#if !(LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE)
 template <> struct make_real<cfloat128> {
   using type = float128;
 };



More information about the libc-commits mailing list