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

via libc-commits libc-commits at lists.llvm.org
Fri Oct 18 03:59:10 PDT 2024


Author: Shourya Goel
Date: 2024-10-18T16:29:07+05:30
New Revision: d5087012498a43ad8345dc75be229e2e924660c2

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

LOG: [libc][complex] add additonal header guards for CFP16 and CFP128 (#112879)

Fixes build errors due to #112594

Added: 
    

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

Removed: 
    


################################################################################
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


        


More information about the libc-commits mailing list