diff options
author | lntue <35648136+lntue@users.noreply.github.com> | 2024-01-24 16:08:56 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-24 16:08:56 -0500 |
commit | 72ce6294157964042b7ed5576ce2c99257eeea9d (patch) | |
tree | d68a30e06ad848ba10be6f4ceb7af42324da14bf /libc/include | |
parent | fe9f3903f2d61bc67bfee66b44872339c8c767bb (diff) | |
download | llvm-72ce6294157964042b7ed5576ce2c99257eeea9d.zip llvm-72ce6294157964042b7ed5576ce2c99257eeea9d.tar.gz llvm-72ce6294157964042b7ed5576ce2c99257eeea9d.tar.bz2 |
[libc] Add C23 limits.h header. (#78887)
Diffstat (limited to 'libc/include')
-rw-r--r-- | libc/include/CMakeLists.txt | 8 | ||||
-rw-r--r-- | libc/include/limits.h.def | 14 | ||||
-rw-r--r-- | libc/include/llvm-libc-macros/CMakeLists.txt | 6 | ||||
-rw-r--r-- | libc/include/llvm-libc-macros/float-macros.h | 12 | ||||
-rw-r--r-- | libc/include/llvm-libc-macros/limits-macros.h | 226 |
5 files changed, 266 insertions, 0 deletions
diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt index cec8b86..89fffd1 100644 --- a/libc/include/CMakeLists.txt +++ b/libc/include/CMakeLists.txt @@ -84,6 +84,14 @@ add_gen_header( ) add_gen_header( + limits + DEF_FILE limits.h.def + GEN_HDR limits.h + DEPENDS + .llvm-libc-macros.limits_macros +) + +add_gen_header( math DEF_FILE math.h.def GEN_HDR math.h diff --git a/libc/include/limits.h.def b/libc/include/limits.h.def new file mode 100644 index 0000000..de5f349 --- /dev/null +++ b/libc/include/limits.h.def @@ -0,0 +1,14 @@ +//===-- C standard library header limits.h --------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_LIMITS_H +#define LLVM_LIBC_LIMITS_H + +#include <llvm-libc-macros/limits-macros.h> + +#endif // LLVM_LIBC_LIMITS_H diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt index d965a6a..96ee29d 100644 --- a/libc/include/llvm-libc-macros/CMakeLists.txt +++ b/libc/include/llvm-libc-macros/CMakeLists.txt @@ -74,6 +74,12 @@ add_macro_header( ) add_macro_header( + limits_macros + HDR + limits-macros.h +) + +add_macro_header( math_macros HDR math-macros.h diff --git a/libc/include/llvm-libc-macros/float-macros.h b/libc/include/llvm-libc-macros/float-macros.h index 8e4b91b..86ec493 100644 --- a/libc/include/llvm-libc-macros/float-macros.h +++ b/libc/include/llvm-libc-macros/float-macros.h @@ -9,8 +9,20 @@ #ifndef __LLVM_LIBC_MACROS_FLOAT_MACROS_H #define __LLVM_LIBC_MACROS_FLOAT_MACROS_H +// Suppress `#include_next is a language extension` warnings. +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu-include-next" +#else // gcc +#pragma GCC system_header +#endif //__clang__ + #include_next <float.h> +#ifdef __clang__ +#pragma clang diagnostic pop +#endif //__clang__ + #ifndef FLT_RADIX #define FLT_RADIX __FLT_RADIX__ #endif // FLT_RADIX diff --git a/libc/include/llvm-libc-macros/limits-macros.h b/libc/include/llvm-libc-macros/limits-macros.h new file mode 100644 index 0000000..fc21d13 --- /dev/null +++ b/libc/include/llvm-libc-macros/limits-macros.h @@ -0,0 +1,226 @@ +//===-- Definition of macros from limits.h --------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef __LLVM_LIBC_MACROS_LIMITS_MACROS_H +#define __LLVM_LIBC_MACROS_LIMITS_MACROS_H + +// Define all C23 macro constants of limits.h + +#ifndef CHAR_BIT +#ifdef __CHAR_BIT__ +#define CHAR_BIT __CHAR_BIT__ +#else +#define CHAR_BIT 8 +#endif // __CHAR_BIT__ +#endif // CHAR_BIT + +// TODO: https://github.com/llvm/llvm-project/issues/79358 +// Define MB_LEN_MAX if missing. +// clang: MB_LEN_MAX = 1 - +// https://github.com/llvm/llvm-project/blob/main/clang/lib/Headers/limits.h#L64 +// glibc: MB_LEN_MAX = 16 - +// https://github.com/bminor/glibc/blob/master/include/limits.h#L32 + +// *_WIDTH macros + +#ifndef CHAR_WIDTH +#define CHAR_WIDTH CHAR_BIT +#endif // CHAR_WIDTH + +#ifndef SCHAR_WIDTH +#define SCHAR_WIDTH CHAR_BIT +#endif // SCHAR_WIDTH + +#ifndef UCHAR_WIDTH +#define UCHAR_WIDTH CHAR_BIT +#endif // UCHAR_WIDTH + +#ifndef SHRT_WIDTH +#ifdef __SHRT_WIDTH__ +#define SHRT_WIDTH __SHRT_WIDTH__ +#else +#define SHRT_WIDTH 16 +#endif // __SHRT_WIDTH__ +#endif // SHRT_WIDTH + +#ifndef USHRT_WIDTH +#define USHRT_WIDTH SHRT_WIDTH +#endif // USHRT_WIDTH + +#ifndef INT_WIDTH +#ifdef __INT_WIDTH__ +#define INT_WIDTH __INT_WIDTH__ +#else +#define INT_WIDTH 32 +#endif // __INT_WIDTH__ +#endif // INT_WIDTH + +#ifndef UINT_WIDTH +#define UINT_WIDTH INT_WIDTH +#endif // UINT_WIDTH + +#ifndef LONG_WIDTH +#ifdef __LONG_WIDTH__ +#define LONG_WIDTH __LONG_WIDTH__ +#elif defined(__WORDSIZE) +#define LONG_WIDTH __WORDSIZE +#else +#error "Unknown WORDSIZE to define LONG_WIDTH." +#endif // __LONG_WIDTH__ +#endif // LONG_WIDTH + +#ifndef ULONG_WIDTH +#define ULONG_WIDTH LONG_WIDTH +#endif // ULONG_WIDTH + +#ifndef LLONG_WIDTH +#ifdef __LLONG_WIDTH__ +#define LLONG_WIDTH __LLONG_WIDTH__ +#else +#define LLONG_WIDTH 64 +#endif // __LLONG_WIDTH__ +#endif // LLONG_WIDTH + +#ifndef ULLONG_WIDTH +#define ULLONG_WIDTH LLONG_WIDTH +#endif // ULLONG_WIDTH + +#ifndef BOOL_WIDTH +#ifdef __BOOL_WIDTH__ +#define BOOL_WIDTH __BOOL_WIDTH__ +#else +#define BOOL_WIDTH 1 +#endif // __BOOL_WIDTH__ +#endif // BOOL_WIDTH + +// *_MAX macros + +#ifndef SCHAR_MAX +#ifdef __SCHAR_MAX__ +#define SCHAR_MAX __SCHAR_MAX__ +#else +#define SCHAR_MAX 0x7f +#endif // __SCHAR_MAX__ +#endif // SCHAR_MAX + +#ifndef UCHAR_MAX +#define UCHAR_MAX (SCHAR_MAX * 2 + 1) +#endif // UCHAR_MAX + +// Check if char is unsigned. +#if !defined(__CHAR_UNSIGNED__) && ('\xff' > 0) +#define __CHAR_UNSIGNED__ +#endif + +#ifndef CHAR_MAX +#ifdef __CHAR_UNSIGNED__ +#define CHAR_MAX UCHAR_MAX +#else +#define CHAR_MAX SCHAR_MAX +#endif // __CHAR_UNSIGNED__ +#endif // CHAR_MAX + +#ifndef SHRT_MAX +#ifdef __SHRT_MAX__ +#define SHRT_MAX __SHRT_MAX__ +#else +#define SHRT_MAX 0x7fff +#endif // __SHRT_MAX__ +#endif // SHRT_MAX + +#ifndef USHRT_MAX +#define USHRT_MAX (SHRT_MAX * 2U + 1U) +#endif // USHRT_MAX + +#ifndef INT_MAX +#ifdef __INT_MAX__ +#define INT_MAX __INT_MAX__ +#else +#define INT_MAX (0 ^ (1 << (INT_WIDTH - 1))) +#endif // __INT_MAX__ +#endif // INT_MAX + +#ifndef UINT_MAX +#define UINT_MAX (~0U) +#endif // UINT_MAX + +#ifndef LONG_MAX +#ifdef __LONG_MAX__ +#define LONG_MAX __LONG_MAX__ +#else +#define LONG_MAX (0L ^ (1L << (LONG_WIDTH - 1))) +#endif // __LONG_MAX__ +#endif // LONG_MAX + +#ifndef ULONG_MAX +#define ULONG_MAX (~0UL) +#endif // ULONG_MAX + +#ifndef LLONG_MAX +#ifdef __LONG_LONG_MAX__ +#define LLONG_MAX __LONG_LONG_MAX__ +#else +#define LLONG_MAX (0LL ^ (1LL << (LLONG_WIDTH - 1))) +#endif // __LONG_LONG_MAX__ +#endif // LLONG_MAX + +#ifndef ULLONG_MAX +#define ULLONG_MAX (~0ULL) +#endif // ULLONG_MAX + +// *_MIN macros + +#ifndef SCHAR_MIN +#define SCHAR_MIN (-SCHAR_MAX - 1) +#endif // SCHAR_MIN + +#ifndef UCHAR_MIN +#define UCHAR_MIN 0 +#endif // UCHAR_MIN + +#ifndef CHAR_MIN +#ifdef __CHAR_UNSIGNED__ +#define CHAR_MIN UCHAR_MIN +#else +#define CHAR_MIN SCHAR_MIN +#endif // __CHAR_UNSIGNED__ +#endif // CHAR_MIN + +#ifndef SHRT_MIN +#define SHRT_MIN (-SHRT_MAX - 1) +#endif // SHRT_MIN + +#ifndef USHRT_MIN +#define USHRT_MIN 0U +#endif // USHRT_MIN + +#ifndef INT_MIN +#define INT_MIN (-INT_MAX - 1) +#endif // INT_MIN + +#ifndef UINT_MIN +#define UINT_MIN 0U +#endif // UINT_MIN + +#ifndef LONG_MIN +#define LONG_MIN (-LONG_MAX - 1L) +#endif // LONG_MIN + +#ifndef ULONG_MIN +#define ULONG_MIN 0UL +#endif // ULONG_MIN + +#ifndef LLONG_MIN +#define LLONG_MIN (-LLONG_MAX - 1LL) +#endif // LLONG_MIN + +#ifndef ULLONG_MIN +#define ULLONG_MIN 0ULL +#endif // ULLONG_MIN + +#endif // __LLVM_LIBC_MACROS_LIMITS_MACROS_H |