[libc-commits] [libc] [libc][complex] add additonal header guards for CFP16 and CFP128 (PR #112879)
via libc-commits
libc-commits at lists.llvm.org
Fri Oct 18 03:52:14 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libc
Author: Shourya Goel (Sh0g0-1758)
<details>
<summary>Changes</summary>
Fixes build errors due to #<!-- -->112594
---
Full diff: https://github.com/llvm/llvm-project/pull/112879.diff
2 Files Affected:
- (modified) libc/include/llvm-libc-types/cfloat128.h (+13-10)
- (modified) libc/include/llvm-libc-types/cfloat16.h (+2-1)
``````````diff
diff --git a/libc/include/llvm-libc-types/cfloat128.h b/libc/include/llvm-libc-types/cfloat128.h
index 0cc8ed3041d6f0..a371671cf62353 100644
--- a/libc/include/llvm-libc-types/cfloat128.h
+++ b/libc/include/llvm-libc-types/cfloat128.h
@@ -12,21 +12,24 @@
#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;
diff --git a/libc/include/llvm-libc-types/cfloat16.h b/libc/include/llvm-libc-types/cfloat16.h
index e7e5631e025074..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__)) && \
+ (!defined(__GNUC__) || __GNUC__ >= 13 || \
+ (defined(__clang__) && __clang_major__ >= 14)) && \
!defined(__arm__) && !defined(_M_ARM) && !defined(__riscv) && \
!defined(_WIN32)
#define LIBC_TYPES_HAS_CFLOAT16
``````````
</details>
https://github.com/llvm/llvm-project/pull/112879
More information about the libc-commits
mailing list