diff options
Diffstat (limited to 'lib/stddef.in.h')
| -rw-r--r-- | lib/stddef.in.h | 78 | 
1 files changed, 72 insertions, 6 deletions
| diff --git a/lib/stddef.in.h b/lib/stddef.in.h index 5c9a747d..fa8998d9 100644 --- a/lib/stddef.in.h +++ b/lib/stddef.in.h @@ -1,6 +1,6 @@  /* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -18,7 +18,7 @@  /* Written by Eric Blake.  */  /* - * POSIX 2008 <stddef.h> for platforms that have issues. + * POSIX 2008 and ISO C 23 <stddef.h> for platforms that have issues.   * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html>   */ @@ -37,9 +37,9 @@     remember if special invocation has ever been used to obtain wint_t,     in which case we need to clean up NULL yet again.  */ -# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) +# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _@GUARD_PREFIX@_STDDEF_WINT_T)  #  ifdef __need_wint_t -#   define _GL_STDDEF_WINT_T +#   define _@GUARD_PREFIX@_STDDEF_WINT_T  #  endif  #  @INCLUDE_NEXT@ @NEXT_STDDEF_H@     /* On TinyCC, make sure that the macros that indicate the special invocation @@ -58,7 +58,7 @@  /* On AIX 7.2, with xlc in 64-bit mode, <stddef.h> defines max_align_t to a     type with alignment 4, but 'long' has alignment 8.  */ -#  if defined _AIX && defined __LP64__ +#  if defined _AIX && defined __LP64__ && !@HAVE_MAX_ALIGN_T@  #   if !GNULIB_defined_max_align_t  #    ifdef _MAX_ALIGN_T  /* /usr/include/stddef.h has already defined max_align_t.  Override it.  */ @@ -69,6 +69,7 @@ typedef long rpl_max_align_t;  typedef long max_align_t;  #     define _MAX_ALIGN_T  #    endif +#    define __CLANG_MAX_ALIGN_T_DEFINED  #    define GNULIB_defined_max_align_t 1  #   endif  #  endif @@ -79,7 +80,7 @@ typedef long max_align_t;  /* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */  #  if (@REPLACE_NULL@ \ -       && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) +       && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _@GUARD_PREFIX@_STDDEF_WINT_T))  #   undef NULL  #   ifdef __cplusplus     /* ISO C++ says that the macro NULL must expand to an integer constant @@ -100,6 +101,33 @@ typedef long max_align_t;  #  ifndef _@GUARD_PREFIX@_STDDEF_H  #   define _@GUARD_PREFIX@_STDDEF_H +/* This file uses _Noreturn, _GL_ATTRIBUTE_NOTHROW.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 +#   if __cplusplus >= 201103L +#    define _GL_ATTRIBUTE_NOTHROW noexcept (true) +#   else +#    define _GL_ATTRIBUTE_NOTHROW throw () +#   endif +#  else +#   define _GL_ATTRIBUTE_NOTHROW +#  endif +# else +#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +#  else +#   define _GL_ATTRIBUTE_NOTHROW +#  endif +# endif +#endif +  /* Some platforms lack wchar_t.  */  #if !@HAVE_WCHAR_T@  # define wchar_t int @@ -137,11 +165,49 @@ typedef union    long int __i _GL_STDDEF_ALIGNAS (long int);  } rpl_max_align_t;  #   define max_align_t rpl_max_align_t +#   define __CLANG_MAX_ALIGN_T_DEFINED  #   define GNULIB_defined_max_align_t 1  #  endif  # endif  #endif +/* ISO C 23 ยง 7.21.1 The unreachable macro  */ +#ifndef unreachable + +/* Code borrowed from verify.h.  */ +# ifndef _GL_HAS_BUILTIN_UNREACHABLE +#  if defined __clang_major__ && __clang_major__ < 5 +#   define _GL_HAS_BUILTIN_UNREACHABLE 0 +#  elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__) +#   define _GL_HAS_BUILTIN_UNREACHABLE 1 +#  elif defined __has_builtin +#   define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) +#  else +#   define _GL_HAS_BUILTIN_UNREACHABLE 0 +#  endif +# endif + +# if _GL_HAS_BUILTIN_UNREACHABLE +#  define unreachable() __builtin_unreachable () +# elif 1200 <= _MSC_VER +#  define unreachable() __assume (0) +# else +/* Declare abort(), without including <stdlib.h>.  */ +extern +#  if defined __cplusplus +"C" +#  endif +_Noreturn +void abort (void) +#  if defined __cplusplus && (__GLIBC__ >= 2) +_GL_ATTRIBUTE_NOTHROW +#  endif +; +#  define unreachable() abort () +# endif + +#endif +  #  endif /* _@GUARD_PREFIX@_STDDEF_H */  # endif /* _@GUARD_PREFIX@_STDDEF_H */  #endif /* __need_XXX */ | 
