root/maint/gnulib/lib/cdefs.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /* Copyright (C) 1992-2021 Free Software Foundation, Inc.
   2    This file is part of the GNU C Library.
   3 
   4    The GNU C Library is free software; you can redistribute it and/or
   5    modify it under the terms of the GNU Lesser General Public
   6    License as published by the Free Software Foundation; either
   7    version 2.1 of the License, or (at your option) any later version.
   8 
   9    The GNU C Library is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12    Lesser General Public License for more details.
  13 
  14    You should have received a copy of the GNU Lesser General Public
  15    License along with the GNU C Library; if not, see
  16    <https://www.gnu.org/licenses/>.  */
  17 
  18 #ifndef _SYS_CDEFS_H
  19 #define _SYS_CDEFS_H    1
  20 
  21 /* We are almost always included from features.h. */
  22 #ifndef _FEATURES_H
  23 # include <features.h>
  24 #endif
  25 
  26 /* The GNU libc does not support any K&R compilers or the traditional mode
  27    of ISO C compilers anymore.  Check for some of the combinations not
  28    supported anymore.  */
  29 #if defined __GNUC__ && !defined __STDC__
  30 # error "You need a ISO C conforming compiler to use the glibc headers"
  31 #endif
  32 
  33 /* Some user header file might have defined this before.  */
  34 #undef  __P
  35 #undef  __PMT
  36 
  37 /* Compilers that lack __has_attribute may object to
  38        #if defined __has_attribute && __has_attribute (...)
  39    even though they do not need to evaluate the right-hand side of the &&.
  40    Similarly for __has_builtin, etc.  */
  41 #if (defined __has_attribute \
  42      && (!defined __clang_minor__ \
  43          || 3 < __clang_major__ + (5 <= __clang_minor__)))
  44 # define __glibc_has_attribute(attr) __has_attribute (attr)
  45 #else
  46 # define __glibc_has_attribute(attr) 0
  47 #endif
  48 #ifdef __has_builtin
  49 # define __glibc_has_builtin(name) __has_builtin (name)
  50 #else
  51 # define __glibc_has_builtin(name) 0
  52 #endif
  53 #ifdef __has_extension
  54 # define __glibc_has_extension(ext) __has_extension (ext)
  55 #else
  56 # define __glibc_has_extension(ext) 0
  57 #endif
  58 
  59 #if defined __GNUC__ || defined __clang__
  60 
  61 /* All functions, except those with callbacks or those that
  62    synchronize memory, are leaf functions.  */
  63 # if __GNUC_PREREQ (4, 6) && !defined _LIBC
  64 #  define __LEAF , __leaf__
  65 #  define __LEAF_ATTR __attribute__ ((__leaf__))
  66 # else
  67 #  define __LEAF
  68 #  define __LEAF_ATTR
  69 # endif
  70 
  71 /* GCC can always grok prototypes.  For C++ programs we add throw()
  72    to help it optimize the function calls.  But this only works with
  73    gcc 2.8.x and egcs.  For gcc 3.4 and up we even mark C functions
  74    as non-throwing using a function attribute since programs can use
  75    the -fexceptions options for C code as well.  */
  76 # if !defined __cplusplus \
  77      && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__))
  78 #  define __THROW       __attribute__ ((__nothrow__ __LEAF))
  79 #  define __THROWNL     __attribute__ ((__nothrow__))
  80 #  define __NTH(fct)    __attribute__ ((__nothrow__ __LEAF)) fct
  81 #  define __NTHNL(fct)  __attribute__ ((__nothrow__)) fct
  82 # else
  83 #  if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4)
  84 #   if __cplusplus >= 201103L
  85 #    define __THROW     noexcept (true)
  86 #   else
  87 #    define __THROW     throw ()
  88 #   endif
  89 #   define __THROWNL    __THROW
  90 #   define __NTH(fct)   __LEAF_ATTR fct __THROW
  91 #   define __NTHNL(fct) fct __THROW
  92 #  else
  93 #   define __THROW
  94 #   define __THROWNL
  95 #   define __NTH(fct)   fct
  96 #   define __NTHNL(fct) fct
  97 #  endif
  98 # endif
  99 
 100 #else   /* Not GCC or clang.  */
 101 
 102 # if (defined __cplusplus                                               \
 103       || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
 104 #  define __inline      inline
 105 # else
 106 #  define __inline              /* No inline functions.  */
 107 # endif
 108 
 109 # define __THROW
 110 # define __THROWNL
 111 # define __NTH(fct)     fct
 112 
 113 #endif  /* GCC || clang.  */
 114 
 115 /* These two macros are not used in glibc anymore.  They are kept here
 116    only because some other projects expect the macros to be defined.  */
 117 #define __P(args)       args
 118 #define __PMT(args)     args
 119 
 120 /* For these things, GCC behaves the ANSI way normally,
 121    and the non-ANSI way under -traditional.  */
 122 
 123 #define __CONCAT(x,y)   x ## y
 124 #define __STRING(x)     #x
 125 
 126 /* This is not a typedef so `const __ptr_t' does the right thing.  */
 127 #define __ptr_t void *
 128 
 129 
 130 /* C++ needs to know that types and declarations are C, not C++.  */
 131 #ifdef  __cplusplus
 132 # define __BEGIN_DECLS  extern "C" {
 133 # define __END_DECLS    }
 134 #else
 135 # define __BEGIN_DECLS
 136 # define __END_DECLS
 137 #endif
 138 
 139 
 140 /* Fortify support.  */
 141 #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
 142 #define __bos0(ptr) __builtin_object_size (ptr, 0)
 143 
 144 /* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available.  */
 145 #if __USE_FORTIFY_LEVEL == 3 && __glibc_clang_prereq (9, 0)
 146 # define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0)
 147 # define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1)
 148 #else
 149 # define __glibc_objsize0(__o) __bos0 (__o)
 150 # define __glibc_objsize(__o) __bos (__o)
 151 #endif
 152 
 153 #if __GNUC_PREREQ (4,3)
 154 # define __warnattr(msg) __attribute__((__warning__ (msg)))
 155 # define __errordecl(name, msg) \
 156   extern void name (void) __attribute__((__error__ (msg)))
 157 #else
 158 # define __warnattr(msg)
 159 # define __errordecl(name, msg) extern void name (void)
 160 #endif
 161 
 162 /* Support for flexible arrays.
 163    Headers that should use flexible arrays only if they're "real"
 164    (e.g. only if they won't affect sizeof()) should test
 165    #if __glibc_c99_flexarr_available.  */
 166 #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc
 167 # define __flexarr      []
 168 # define __glibc_c99_flexarr_available 1
 169 #elif __GNUC_PREREQ (2,97) || defined __clang__
 170 /* GCC 2.97 and clang support C99 flexible array members as an extension,
 171    even when in C89 mode or compiling C++ (any version).  */
 172 # define __flexarr      []
 173 # define __glibc_c99_flexarr_available 1
 174 #elif defined __GNUC__
 175 /* Pre-2.97 GCC did not support C99 flexible arrays but did have
 176    an equivalent extension with slightly different notation.  */
 177 # define __flexarr      [0]
 178 # define __glibc_c99_flexarr_available 1
 179 #else
 180 /* Some other non-C99 compiler.  Approximate with [1].  */
 181 # define __flexarr      [1]
 182 # define __glibc_c99_flexarr_available 0
 183 #endif
 184 
 185 
 186 /* __asm__ ("xyz") is used throughout the headers to rename functions
 187    at the assembly language level.  This is wrapped by the __REDIRECT
 188    macro, in order to support compilers that can do this some other
 189    way.  When compilers don't support asm-names at all, we have to do
 190    preprocessor tricks instead (which don't have exactly the right
 191    semantics, but it's the best we can do).
 192 
 193    Example:
 194    int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
 195 
 196 #if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4)
 197 
 198 # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
 199 # ifdef __cplusplus
 200 #  define __REDIRECT_NTH(name, proto, alias) \
 201      name proto __THROW __asm__ (__ASMNAME (#alias))
 202 #  define __REDIRECT_NTHNL(name, proto, alias) \
 203      name proto __THROWNL __asm__ (__ASMNAME (#alias))
 204 # else
 205 #  define __REDIRECT_NTH(name, proto, alias) \
 206      name proto __asm__ (__ASMNAME (#alias)) __THROW
 207 #  define __REDIRECT_NTHNL(name, proto, alias) \
 208      name proto __asm__ (__ASMNAME (#alias)) __THROWNL
 209 # endif
 210 # define __ASMNAME(cname)  __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
 211 # define __ASMNAME2(prefix, cname) __STRING (prefix) cname
 212 
 213 /*
 214 #elif __SOME_OTHER_COMPILER__
 215 
 216 # define __REDIRECT(name, proto, alias) name proto; \
 217         _Pragma("let " #name " = " #alias)
 218 */
 219 #endif
 220 
 221 /* GCC and clang have various useful declarations that can be made with
 222    the '__attribute__' syntax.  All of the ways we use this do fine if
 223    they are omitted for compilers that don't understand it.  */
 224 #if !(defined __GNUC__ || defined __clang__)
 225 # define __attribute__(xyz)     /* Ignore */
 226 #endif
 227 
 228 /* At some point during the gcc 2.96 development the `malloc' attribute
 229    for functions was introduced.  We don't want to use it unconditionally
 230    (although this would be possible) since it generates warnings.  */
 231 #if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__)
 232 # define __attribute_malloc__ __attribute__ ((__malloc__))
 233 #else
 234 # define __attribute_malloc__ /* Ignore */
 235 #endif
 236 
 237 /* Tell the compiler which arguments to an allocation function
 238    indicate the size of the allocation.  */
 239 #if __GNUC_PREREQ (4, 3)
 240 # define __attribute_alloc_size__(params) \
 241   __attribute__ ((__alloc_size__ params))
 242 #else
 243 # define __attribute_alloc_size__(params) /* Ignore.  */
 244 #endif
 245 
 246 /* At some point during the gcc 2.96 development the `pure' attribute
 247    for functions was introduced.  We don't want to use it unconditionally
 248    (although this would be possible) since it generates warnings.  */
 249 #if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__)
 250 # define __attribute_pure__ __attribute__ ((__pure__))
 251 #else
 252 # define __attribute_pure__ /* Ignore */
 253 #endif
 254 
 255 /* This declaration tells the compiler that the value is constant.  */
 256 #if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__)
 257 # define __attribute_const__ __attribute__ ((__const__))
 258 #else
 259 # define __attribute_const__ /* Ignore */
 260 #endif
 261 
 262 #if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__)
 263 # define __attribute_maybe_unused__ __attribute__ ((__unused__))
 264 #else
 265 # define __attribute_maybe_unused__ /* Ignore */
 266 #endif
 267 
 268 /* At some point during the gcc 3.1 development the `used' attribute
 269    for functions was introduced.  We don't want to use it unconditionally
 270    (although this would be possible) since it generates warnings.  */
 271 #if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__)
 272 # define __attribute_used__ __attribute__ ((__used__))
 273 # define __attribute_noinline__ __attribute__ ((__noinline__))
 274 #else
 275 # define __attribute_used__ __attribute__ ((__unused__))
 276 # define __attribute_noinline__ /* Ignore */
 277 #endif
 278 
 279 /* Since version 3.2, gcc allows marking deprecated functions.  */
 280 #if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__)
 281 # define __attribute_deprecated__ __attribute__ ((__deprecated__))
 282 #else
 283 # define __attribute_deprecated__ /* Ignore */
 284 #endif
 285 
 286 /* Since version 4.5, gcc also allows one to specify the message printed
 287    when a deprecated function is used.  clang claims to be gcc 4.2, but
 288    may also support this feature.  */
 289 #if __GNUC_PREREQ (4,5) \
 290     || __glibc_has_extension (__attribute_deprecated_with_message__)
 291 # define __attribute_deprecated_msg__(msg) \
 292          __attribute__ ((__deprecated__ (msg)))
 293 #else
 294 # define __attribute_deprecated_msg__(msg) __attribute_deprecated__
 295 #endif
 296 
 297 /* At some point during the gcc 2.8 development the `format_arg' attribute
 298    for functions was introduced.  We don't want to use it unconditionally
 299    (although this would be possible) since it generates warnings.
 300    If several `format_arg' attributes are given for the same function, in
 301    gcc-3.0 and older, all but the last one are ignored.  In newer gccs,
 302    all designated arguments are considered.  */
 303 #if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__)
 304 # define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
 305 #else
 306 # define __attribute_format_arg__(x) /* Ignore */
 307 #endif
 308 
 309 /* At some point during the gcc 2.97 development the `strfmon' format
 310    attribute for functions was introduced.  We don't want to use it
 311    unconditionally (although this would be possible) since it
 312    generates warnings.  */
 313 #if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__)
 314 # define __attribute_format_strfmon__(a,b) \
 315   __attribute__ ((__format__ (__strfmon__, a, b)))
 316 #else
 317 # define __attribute_format_strfmon__(a,b) /* Ignore */
 318 #endif
 319 
 320 /* The nonnull function attribute marks pointer parameters that
 321    must not be NULL.  This has the name __nonnull in glibc,
 322    and __attribute_nonnull__ in files shared with Gnulib to avoid
 323    collision with a different __nonnull in DragonFlyBSD 5.9.  */
 324 #ifndef __attribute_nonnull__
 325 # if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__)
 326 #  define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params))
 327 # else
 328 #  define __attribute_nonnull__(params)
 329 # endif
 330 #endif
 331 #ifndef __nonnull
 332 # define __nonnull(params) __attribute_nonnull__ (params)
 333 #endif
 334 
 335 /* The returns_nonnull function attribute marks the return type of the function
 336    as always being non-null.  */
 337 #ifndef __returns_nonnull
 338 # if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__)
 339 # define __returns_nonnull __attribute__ ((__returns_nonnull__))
 340 # else
 341 # define __returns_nonnull
 342 # endif
 343 #endif
 344 
 345 /* If fortification mode, we warn about unused results of certain
 346    function calls which can lead to problems.  */
 347 #if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__)
 348 # define __attribute_warn_unused_result__ \
 349    __attribute__ ((__warn_unused_result__))
 350 # if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0
 351 #  define __wur __attribute_warn_unused_result__
 352 # endif
 353 #else
 354 # define __attribute_warn_unused_result__ /* empty */
 355 #endif
 356 #ifndef __wur
 357 # define __wur /* Ignore */
 358 #endif
 359 
 360 /* Forces a function to be always inlined.  */
 361 #if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__)
 362 /* The Linux kernel defines __always_inline in stddef.h (283d7573), and
 363    it conflicts with this definition.  Therefore undefine it first to
 364    allow either header to be included first.  */
 365 # undef __always_inline
 366 # define __always_inline __inline __attribute__ ((__always_inline__))
 367 #else
 368 # undef __always_inline
 369 # define __always_inline __inline
 370 #endif
 371 
 372 /* Associate error messages with the source location of the call site rather
 373    than with the source location inside the function.  */
 374 #if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__)
 375 # define __attribute_artificial__ __attribute__ ((__artificial__))
 376 #else
 377 # define __attribute_artificial__ /* Ignore */
 378 #endif
 379 
 380 /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
 381    inline semantics, unless -fgnu89-inline is used.  Using __GNUC_STDC_INLINE__
 382    or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions
 383    older than 4.3 may define these macros and still not guarantee GNU inlining
 384    semantics.
 385 
 386    clang++ identifies itself as gcc-4.2, but has support for GNU inlining
 387    semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and
 388    __GNUC_GNU_INLINE__ macro definitions.  */
 389 #if (!defined __cplusplus || __GNUC_PREREQ (4,3) \
 390      || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \
 391                                || defined __GNUC_GNU_INLINE__)))
 392 # if defined __GNUC_STDC_INLINE__ || defined __cplusplus
 393 #  define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
 394 #  define __extern_always_inline \
 395   extern __always_inline __attribute__ ((__gnu_inline__))
 396 # else
 397 #  define __extern_inline extern __inline
 398 #  define __extern_always_inline extern __always_inline
 399 # endif
 400 #endif
 401 
 402 #ifdef __extern_always_inline
 403 # define __fortify_function __extern_always_inline __attribute_artificial__
 404 #endif
 405 
 406 /* GCC 4.3 and above allow passing all anonymous arguments of an
 407    __extern_always_inline function to some other vararg function.  */
 408 #if __GNUC_PREREQ (4,3)
 409 # define __va_arg_pack() __builtin_va_arg_pack ()
 410 # define __va_arg_pack_len() __builtin_va_arg_pack_len ()
 411 #endif
 412 
 413 /* It is possible to compile containing GCC extensions even if GCC is
 414    run in pedantic mode if the uses are carefully marked using the
 415    `__extension__' keyword.  But this is not generally available before
 416    version 2.8.  */
 417 #if !(__GNUC_PREREQ (2,8) || defined __clang__)
 418 # define __extension__          /* Ignore */
 419 #endif
 420 
 421 /* __restrict is known in EGCS 1.2 and above, and in clang.
 422    It works also in C++ mode (outside of arrays), but only when spelled
 423    as '__restrict', not 'restrict'.  */
 424 #if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3)
 425 # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
 426 #  define __restrict    restrict
 427 # else
 428 #  define __restrict    /* Ignore */
 429 # endif
 430 #endif
 431 
 432 /* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
 433      array_name[restrict]
 434    GCC 3.1 and clang support this.
 435    This syntax is not usable in C++ mode.  */
 436 #if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus
 437 # define __restrict_arr __restrict
 438 #else
 439 # ifdef __GNUC__
 440 #  define __restrict_arr        /* Not supported in old GCC.  */
 441 # else
 442 #  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
 443 #   define __restrict_arr       restrict
 444 #  else
 445 /* Some other non-C99 compiler.  */
 446 #   define __restrict_arr       /* Not supported.  */
 447 #  endif
 448 # endif
 449 #endif
 450 
 451 #if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect)
 452 # define __glibc_unlikely(cond) __builtin_expect ((cond), 0)
 453 # define __glibc_likely(cond)   __builtin_expect ((cond), 1)
 454 #else
 455 # define __glibc_unlikely(cond) (cond)
 456 # define __glibc_likely(cond)   (cond)
 457 #endif
 458 
 459 #if (!defined _Noreturn \
 460      && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
 461      &&  !(__GNUC_PREREQ (4,7) \
 462            || (3 < __clang_major__ + (5 <= __clang_minor__))))
 463 # if __GNUC_PREREQ (2,8)
 464 #  define _Noreturn __attribute__ ((__noreturn__))
 465 # else
 466 #  define _Noreturn
 467 # endif
 468 #endif
 469 
 470 #if __GNUC_PREREQ (8, 0)
 471 /* Describes a char array whose address can safely be passed as the first
 472    argument to strncpy and strncat, as the char array is not necessarily
 473    a NUL-terminated string.  */
 474 # define __attribute_nonstring__ __attribute__ ((__nonstring__))
 475 #else
 476 # define __attribute_nonstring__
 477 #endif
 478 
 479 /* Undefine (also defined in libc-symbols.h).  */
 480 #undef __attribute_copy__
 481 #if __GNUC_PREREQ (9, 0)
 482 /* Copies attributes from the declaration or type referenced by
 483    the argument.  */
 484 # define __attribute_copy__(arg) __attribute__ ((__copy__ (arg)))
 485 #else
 486 # define __attribute_copy__(arg)
 487 #endif
 488 
 489 #if (!defined _Static_assert && !defined __cplusplus \
 490      && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
 491      && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \
 492          || defined __STRICT_ANSI__))
 493 # define _Static_assert(expr, diagnostic) \
 494     extern int (*__Static_assert_function (void)) \
 495       [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]
 496 #endif
 497 
 498 /* Gnulib avoids including these, as they don't work on non-glibc or
 499    older glibc platforms.  */
 500 #ifndef __GNULIB_CDEFS
 501 # include <bits/wordsize.h>
 502 # include <bits/long-double.h>
 503 #endif
 504 
 505 #if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
 506 # ifdef __REDIRECT
 507 
 508 /* Alias name defined automatically.  */
 509 #  define __LDBL_REDIR(name, proto) ... unused__ldbl_redir
 510 #  define __LDBL_REDIR_DECL(name) \
 511   extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128"));
 512 
 513 /* Alias name defined automatically, with leading underscores.  */
 514 #  define __LDBL_REDIR2_DECL(name) \
 515   extern __typeof (__##name) __##name \
 516     __asm (__ASMNAME ("__" #name "ieee128"));
 517 
 518 /* Alias name defined manually.  */
 519 #  define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1
 520 #  define __LDBL_REDIR1_DECL(name, alias) \
 521   extern __typeof (name) name __asm (__ASMNAME (#alias));
 522 
 523 #  define __LDBL_REDIR1_NTH(name, proto, alias) \
 524   __REDIRECT_NTH (name, proto, alias)
 525 #  define __REDIRECT_NTH_LDBL(name, proto, alias) \
 526   __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128)
 527 
 528 /* Unused.  */
 529 #  define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl
 530 #  define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth
 531 
 532 # else
 533 _Static_assert (0, "IEEE 128-bits long double requires redirection on this platform");
 534 # endif
 535 #elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
 536 # define __LDBL_COMPAT 1
 537 # ifdef __REDIRECT
 538 #  define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias)
 539 #  define __LDBL_REDIR(name, proto) \
 540   __LDBL_REDIR1 (name, proto, __nldbl_##name)
 541 #  define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias)
 542 #  define __LDBL_REDIR_NTH(name, proto) \
 543   __LDBL_REDIR1_NTH (name, proto, __nldbl_##name)
 544 #  define __LDBL_REDIR2_DECL(name) \
 545   extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name));
 546 #  define __LDBL_REDIR1_DECL(name, alias) \
 547   extern __typeof (name) name __asm (__ASMNAME (#alias));
 548 #  define __LDBL_REDIR_DECL(name) \
 549   extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name));
 550 #  define __REDIRECT_LDBL(name, proto, alias) \
 551   __LDBL_REDIR1 (name, proto, __nldbl_##alias)
 552 #  define __REDIRECT_NTH_LDBL(name, proto, alias) \
 553   __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias)
 554 # endif
 555 #endif
 556 #if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \
 557     || !defined __REDIRECT
 558 # define __LDBL_REDIR1(name, proto, alias) name proto
 559 # define __LDBL_REDIR(name, proto) name proto
 560 # define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW
 561 # define __LDBL_REDIR_NTH(name, proto) name proto __THROW
 562 # define __LDBL_REDIR2_DECL(name)
 563 # define __LDBL_REDIR_DECL(name)
 564 # ifdef __REDIRECT
 565 #  define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias)
 566 #  define __REDIRECT_NTH_LDBL(name, proto, alias) \
 567   __REDIRECT_NTH (name, proto, alias)
 568 # endif
 569 #endif
 570 
 571 /* __glibc_macro_warning (MESSAGE) issues warning MESSAGE.  This is
 572    intended for use in preprocessor macros.
 573 
 574    Note: MESSAGE must be a _single_ string; concatenation of string
 575    literals is not supported.  */
 576 #if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5)
 577 # define __glibc_macro_warning1(message) _Pragma (#message)
 578 # define __glibc_macro_warning(message) \
 579   __glibc_macro_warning1 (GCC warning message)
 580 #else
 581 # define __glibc_macro_warning(msg)
 582 #endif
 583 
 584 /* Generic selection (ISO C11) is a C-only feature, available in GCC
 585    since version 4.9.  Previous versions do not provide generic
 586    selection, even though they might set __STDC_VERSION__ to 201112L,
 587    when in -std=c11 mode.  Thus, we must check for !defined __GNUC__
 588    when testing __STDC_VERSION__ for generic selection support.
 589    On the other hand, Clang also defines __GNUC__, so a clang-specific
 590    check is required to enable the use of generic selection.  */
 591 #if !defined __cplusplus \
 592     && (__GNUC_PREREQ (4, 9) \
 593         || __glibc_has_extension (c_generic_selections) \
 594         || (!defined __GNUC__ && defined __STDC_VERSION__ \
 595             && __STDC_VERSION__ >= 201112L))
 596 # define __HAVE_GENERIC_SELECTION 1
 597 #else
 598 # define __HAVE_GENERIC_SELECTION 0
 599 #endif
 600 
 601 #if __GNUC_PREREQ (10, 0)
 602 /* Designates a 1-based positional argument ref-index of pointer type
 603    that can be used to access size-index elements of the pointed-to
 604    array according to access mode, or at least one element when
 605    size-index is not provided:
 606      access (access-mode, <ref-index> [, <size-index>])  */
 607 #  define __attr_access(x) __attribute__ ((__access__ x))
 608 #  if __GNUC_PREREQ (11, 0)
 609 #    define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno)))
 610 #  else
 611 #    define __attr_access_none(argno)
 612 #  endif
 613 #else
 614 #  define __attr_access(x)
 615 #  define __attr_access_none(argno)
 616 #endif
 617 
 618 #if __GNUC_PREREQ (11, 0)
 619 /* Designates dealloc as a function to call to deallocate objects
 620    allocated by the declared function.  */
 621 # define __attr_dealloc(dealloc, argno) \
 622     __attribute__ ((__malloc__ (dealloc, argno)))
 623 # define __attr_dealloc_free __attr_dealloc (__builtin_free, 1)
 624 #else
 625 # define __attr_dealloc(dealloc, argno)
 626 # define __attr_dealloc_free
 627 #endif
 628 
 629 /* Specify that a function such as setjmp or vfork may return
 630    twice.  */
 631 #if __GNUC_PREREQ (4, 1)
 632 # define __attribute_returns_twice__ __attribute__ ((__returns_twice__))
 633 #else
 634 # define __attribute_returns_twice__ /* Ignore.  */
 635 #endif
 636 
 637 #endif   /* sys/cdefs.h */

/* [previous][next][first][last][top][bottom][index][help] */