Skip to content

[libc][complex] add additonal header guards for CFP16 and CFP128 #112879

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 18, 2024

Conversation

Sh0g0-1758
Copy link
Member

Fixes build errors due to #112594

@llvmbot
Copy link
Member

llvmbot commented Oct 18, 2024

@llvm/pr-subscribers-libc

Author: Shourya Goel (Sh0g0-1758)

Changes

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

@Sh0g0-1758 Sh0g0-1758 merged commit d508701 into llvm:main Oct 18, 2024
7 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants