[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