[libc-commits] [libc] [libc][complex] add additonal header guards for CFP16 and CFP128 (PR #112879)

Shourya Goel via libc-commits libc-commits at lists.llvm.org
Fri Oct 18 03:51:42 PDT 2024


https://github.com/Sh0g0-1758 created https://github.com/llvm/llvm-project/pull/112879

Fixes build errors due to #112594

>From 5ddd65c054917142f4f739b1fb115907c9f38ad1 Mon Sep 17 00:00:00 2001
From: Sh0g0-1758 <shouryagoel10000 at gmail.com>
Date: Fri, 18 Oct 2024 13:45:59 +0530
Subject: [PATCH 1/4] add clangv in header guard

---
 libc/include/llvm-libc-types/cfloat16.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libc/include/llvm-libc-types/cfloat16.h b/libc/include/llvm-libc-types/cfloat16.h
index e7e5631e025074..dfb0a747bc3c0f 100644
--- a/libc/include/llvm-libc-types/cfloat16.h
+++ b/libc/include/llvm-libc-types/cfloat16.h
@@ -10,7 +10,7 @@
 #define LLVM_LIBC_TYPES_CFLOAT16_H
 
 #if defined(__FLT16_MANT_DIG__) &&                                             \
-    (!defined(__GNUC__) || __GNUC__ >= 13 || defined(__clang__)) &&            \
+    (!defined(__GNUC__) || __GNUC__ >= 13 || (defined(__clang__) && __clang_major__ >= 14)) &&            \
     !defined(__arm__) && !defined(_M_ARM) && !defined(__riscv) &&              \
     !defined(_WIN32)
 #define LIBC_TYPES_HAS_CFLOAT16

>From 7855a5534d5bf22aea968c1c0fe8b8d0af48f9d7 Mon Sep 17 00:00:00 2001
From: Sh0g0-1758 <shouryagoel10000 at gmail.com>
Date: Fri, 18 Oct 2024 13:46:55 +0530
Subject: [PATCH 2/4] nit

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

diff --git a/libc/include/llvm-libc-types/cfloat16.h b/libc/include/llvm-libc-types/cfloat16.h
index dfb0a747bc3c0f..2d4cef75627202 100644
--- a/libc/include/llvm-libc-types/cfloat16.h
+++ b/libc/include/llvm-libc-types/cfloat16.h
@@ -10,7 +10,8 @@
 #define LLVM_LIBC_TYPES_CFLOAT16_H
 
 #if defined(__FLT16_MANT_DIG__) &&                                             \
-    (!defined(__GNUC__) || __GNUC__ >= 13 || (defined(__clang__) && __clang_major__ >= 14)) &&            \
+    (!defined(__GNUC__) || __GNUC__ >= 13 ||                                   \
+     (defined(__clang__) && __clang_major__ >= 14)) &&                         \
     !defined(__arm__) && !defined(_M_ARM) && !defined(__riscv) &&              \
     !defined(_WIN32)
 #define LIBC_TYPES_HAS_CFLOAT16

>From 7dcf156641d7f27333054c68cc6258bee7a40bf7 Mon Sep 17 00:00:00 2001
From: Sh0g0-1758 <shouryagoel10000 at gmail.com>
Date: Fri, 18 Oct 2024 16:18:59 +0530
Subject: [PATCH 3/4] fix CFP128

---
 libc/include/llvm-libc-types/cfloat128.h | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/libc/include/llvm-libc-types/cfloat128.h b/libc/include/llvm-libc-types/cfloat128.h
index 0cc8ed3041d6f0..a8090b98f61652 100644
--- a/libc/include/llvm-libc-types/cfloat128.h
+++ b/libc/include/llvm-libc-types/cfloat128.h
@@ -12,21 +12,23 @@
 #include "../llvm-libc-macros/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, and only for C.  For C++, or for clang,
-// the complex variant of `__float128` is defined instead, and only on x86-64
-// targets.
+// 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.
-//   https://github.com/llvm/llvm-project/issues/80195
-#if defined(__STDC_IEC_60559_COMPLEX__) && !defined(__clang__) &&              \
-    !defined(__cplusplus)
+#if defined(__STDC_IEC_60559_COMPLEX__) && !defined(__clang__)
+#if !defined(__cplusplus)
 #define LIBC_TYPES_HAS_CFLOAT128
 typedef _Complex _Float128 cfloat128;
-#elif defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)
-// Use _Complex __float128 type.  gcc and clang sometime use __SIZEOF_FLOAT128__
-// to notify the availability of __float128. clang also uses __FLOAT128__ macro
-// to notify the availability of __float128 type:
+#elif defined(__GNUC__) && __GNUC__ >= 13
+#define LIBC_TYPES_HAS_CFLOAT128
+typedef _Complex _Float128 cfloat128;
+#endif
+#elif __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
 typedef _Complex __float128 cfloat128;

>From 27254ebc1b23195a53e98680c8e697e39b108092 Mon Sep 17 00:00:00 2001
From: Sh0g0-1758 <shouryagoel10000 at gmail.com>
Date: Fri, 18 Oct 2024 16:19:23 +0530
Subject: [PATCH 4/4] fmt

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

diff --git a/libc/include/llvm-libc-types/cfloat128.h b/libc/include/llvm-libc-types/cfloat128.h
index a8090b98f61652..a371671cf62353 100644
--- a/libc/include/llvm-libc-types/cfloat128.h
+++ b/libc/include/llvm-libc-types/cfloat128.h
@@ -26,7 +26,8 @@ typedef _Complex _Float128 cfloat128;
 #define LIBC_TYPES_HAS_CFLOAT128
 typedef _Complex _Float128 cfloat128;
 #endif
-#elif __clang_major__ >= 11 && (defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__))
+#elif __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



More information about the libc-commits mailing list