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
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions libc/include/llvm-libc-types/cfloat128.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 2 additions & 1 deletion libc/include/llvm-libc-types/cfloat16.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading