~vcs-imports/gawk/master

« back to all changes in this revision

Viewing changes to support/cdefs.h

  • Committer: Arnold D. Robbins
  • Date: 2020-09-18 10:04:27 UTC
  • Revision ID: git-v1:154592f9db7af78cfa31ad6d64134ca89eed13b0
Update support files from GNULIB.

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
#undef  __P
35
35
#undef  __PMT
36
36
 
37
 
#ifdef __GNUC__
 
37
/* Compilers that are not clang may object to
 
38
       #if defined __clang__ && __has_attribute(...)
 
39
   even though they do not need to evaluate the right-hand side of the &&.  */
 
40
#if defined __clang__ && defined __has_attribute
 
41
# define __glibc_clang_has_attribute(name) __has_attribute (name)
 
42
#else
 
43
# define __glibc_clang_has_attribute(name) 0
 
44
#endif
 
45
 
 
46
/* Compilers that are not clang may object to
 
47
       #if defined __clang__ && __has_builtin(...)
 
48
   even though they do not need to evaluate the right-hand side of the &&.  */
 
49
#if defined __clang__ && defined __has_builtin
 
50
# define __glibc_clang_has_builtin(name) __has_builtin (name)
 
51
#else
 
52
# define __glibc_clang_has_builtin(name) 0
 
53
#endif
 
54
 
 
55
/* Compilers that are not clang may object to
 
56
       #if defined __clang__ && __has_extension(...)
 
57
   even though they do not need to evaluate the right-hand side of the &&.  */
 
58
#if defined __clang__ && defined __has_extension
 
59
# define __glibc_clang_has_extension(ext) __has_extension (ext)
 
60
#else
 
61
# define __glibc_clang_has_extension(ext) 0
 
62
#endif
 
63
 
 
64
#if defined __GNUC__ || defined __clang__
38
65
 
39
66
/* All functions, except those with callbacks or those that
40
67
   synchronize memory, are leaf functions.  */
48
75
 
49
76
/* GCC can always grok prototypes.  For C++ programs we add throw()
50
77
   to help it optimize the function calls.  But this works only with
51
 
   gcc 2.8.x and egcs.  For gcc 3.2 and up we even mark C functions
 
78
   gcc 2.8.x and egcs.  For gcc 3.4 and up we even mark C functions
52
79
   as non-throwing using a function attribute since programs can use
53
80
   the -fexceptions options for C code as well.  */
54
 
# if !defined __cplusplus && __GNUC_PREREQ (3, 3)
 
81
# if !defined __cplusplus \
 
82
     && (__GNUC_PREREQ (3, 4) || __glibc_clang_has_attribute (__nothrow__))
55
83
#  define __THROW       __attribute__ ((__nothrow__ __LEAF))
56
84
#  define __THROWNL     __attribute__ ((__nothrow__))
57
85
#  define __NTH(fct)    __attribute__ ((__nothrow__ __LEAF)) fct
58
86
#  define __NTHNL(fct)  __attribute__ ((__nothrow__)) fct
59
87
# else
60
 
#  if defined __cplusplus && __GNUC_PREREQ (2,8)
 
88
#  if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4)
61
89
#   define __THROW      throw ()
62
90
#   define __THROWNL    throw ()
63
91
#   define __NTH(fct)   __LEAF_ATTR fct throw ()
70
98
#  endif
71
99
# endif
72
100
 
73
 
#else   /* Not GCC.  */
 
101
#else   /* Not GCC or clang.  */
74
102
 
75
103
# if (defined __cplusplus                                               \
76
104
      || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
83
111
# define __THROWNL
84
112
# define __NTH(fct)     fct
85
113
 
86
 
#endif  /* GCC.  */
87
 
 
88
 
/* Compilers that are not clang may object to
89
 
       #if defined __clang__ && __has_extension(...)
90
 
   even though they do not need to evaluate the right-hand side of the &&.  */
91
 
#if defined __clang__ && defined __has_extension
92
 
# define __glibc_clang_has_extension(ext) __has_extension (ext)
93
 
#else
94
 
# define __glibc_clang_has_extension(ext) 0
95
 
#endif
 
114
#endif  /* GCC || clang.  */
96
115
 
97
116
/* These two macros are not used in glibc anymore.  They are kept here
98
117
   only because some other projects expect the macros to be defined.  */
129
148
# define __warnattr(msg) __attribute__((__warning__ (msg)))
130
149
# define __errordecl(name, msg) \
131
150
  extern void name (void) __attribute__((__error__ (msg)))
 
151
#elif __glibc_clang_has_attribute (__diagnose_if__) && 0
 
152
/* These definitions are not enabled, because they produce bogus warnings
 
153
   in the glibc Fortify functions.  These functions are written in a style
 
154
   that works with GCC.  In order to work with clang, these functions would
 
155
   need to be modified.  */
 
156
# define __warndecl(name, msg) \
 
157
  extern void name (void) __attribute__((__diagnose_if__ (1, msg, "warning")))
 
158
# define __warnattr(msg) __attribute__((__diagnose_if__ (1, msg, "warning")))
 
159
# define __errordecl(name, msg) \
 
160
  extern void name (void) __attribute__((__diagnose_if__ (1, msg, "error")))
132
161
#else
133
162
# define __warndecl(name, msg) extern void name (void)
134
163
# define __warnattr(msg)
142
171
#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc
143
172
# define __flexarr      []
144
173
# define __glibc_c99_flexarr_available 1
145
 
#elif __GNUC_PREREQ (2,97)
146
 
/* GCC 2.97 supports C99 flexible array members as an extension,
 
174
#elif __GNUC_PREREQ (2,97) || defined __clang__
 
175
/* GCC 2.97 and clang support C99 flexible array members as an extension,
147
176
   even when in C89 mode or compiling C++ (any version).  */
148
177
# define __flexarr      []
149
178
# define __glibc_c99_flexarr_available 1
169
198
   Example:
170
199
   int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
171
200
 
172
 
#if defined __GNUC__ && __GNUC__ >= 2
 
201
#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4)
173
202
 
174
203
# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
175
204
# ifdef __cplusplus
194
223
*/
195
224
#endif
196
225
 
197
 
/* GCC has various useful declarations that can be made with the
198
 
   `__attribute__' syntax.  All of the ways we use this do fine if
199
 
   they are omitted for compilers that don't understand it. */
200
 
#if !defined __GNUC__ || __GNUC__ < 2
 
226
/* GCC and clang have various useful declarations that can be made with
 
227
   the '__attribute__' syntax.  All of the ways we use this do fine if
 
228
   they are omitted for compilers that don't understand it.  */
 
229
#if !(defined __GNUC__ || defined __clang__)
201
230
# define __attribute__(xyz)     /* Ignore */
202
231
#endif
203
232
 
204
233
/* At some point during the gcc 2.96 development the `malloc' attribute
205
234
   for functions was introduced.  We don't want to use it unconditionally
206
235
   (although this would be possible) since it generates warnings.  */
207
 
#if __GNUC_PREREQ (2,96)
 
236
#if __GNUC_PREREQ (2,96) || __glibc_clang_has_attribute (__malloc__)
208
237
# define __attribute_malloc__ __attribute__ ((__malloc__))
209
238
#else
210
239
# define __attribute_malloc__ /* Ignore */
222
251
/* At some point during the gcc 2.96 development the `pure' attribute
223
252
   for functions was introduced.  We don't want to use it unconditionally
224
253
   (although this would be possible) since it generates warnings.  */
225
 
#if __GNUC_PREREQ (2,96)
 
254
#if __GNUC_PREREQ (2,96) || __glibc_clang_has_attribute (__pure__)
226
255
# define __attribute_pure__ __attribute__ ((__pure__))
227
256
#else
228
257
# define __attribute_pure__ /* Ignore */
229
258
#endif
230
259
 
231
260
/* This declaration tells the compiler that the value is constant.  */
232
 
#if __GNUC_PREREQ (2,5)
 
261
#if __GNUC_PREREQ (2,5) || __glibc_clang_has_attribute (__const__)
233
262
# define __attribute_const__ __attribute__ ((__const__))
234
263
#else
235
264
# define __attribute_const__ /* Ignore */
238
267
/* At some point during the gcc 3.1 development the `used' attribute
239
268
   for functions was introduced.  We don't want to use it unconditionally
240
269
   (although this would be possible) since it generates warnings.  */
241
 
#if __GNUC_PREREQ (3,1)
 
270
#if __GNUC_PREREQ (3,1) || __glibc_clang_has_attribute (__used__)
242
271
# define __attribute_used__ __attribute__ ((__used__))
243
272
# define __attribute_noinline__ __attribute__ ((__noinline__))
244
273
#else
247
276
#endif
248
277
 
249
278
/* Since version 3.2, gcc allows marking deprecated functions.  */
250
 
#if __GNUC_PREREQ (3,2)
 
279
#if __GNUC_PREREQ (3,2) || __glibc_clang_has_attribute (__deprecated__)
251
280
# define __attribute_deprecated__ __attribute__ ((__deprecated__))
252
281
#else
253
282
# define __attribute_deprecated__ /* Ignore */
270
299
   If several `format_arg' attributes are given for the same function, in
271
300
   gcc-3.0 and older, all but the last one are ignored.  In newer gccs,
272
301
   all designated arguments are considered.  */
273
 
#if __GNUC_PREREQ (2,8)
 
302
#if __GNUC_PREREQ (2,8) || __glibc_clang_has_attribute (__format_arg__)
274
303
# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
275
304
#else
276
305
# define __attribute_format_arg__(x) /* Ignore */
280
309
   attribute for functions was introduced.  We don't want to use it
281
310
   unconditionally (although this would be possible) since it
282
311
   generates warnings.  */
283
 
#if __GNUC_PREREQ (2,97)
 
312
#if __GNUC_PREREQ (2,97) || __glibc_clang_has_attribute (__format__)
284
313
# define __attribute_format_strfmon__(a,b) \
285
314
  __attribute__ ((__format__ (__strfmon__, a, b)))
286
315
#else
291
320
   must not be NULL.  Do not define __nonnull if it is already defined,
292
321
   for portability when this file is used in Gnulib.  */
293
322
#ifndef __nonnull
294
 
# if __GNUC_PREREQ (3,3)
 
323
# if __GNUC_PREREQ (3,3) || __glibc_clang_has_attribute (__nonnull__)
295
324
#  define __nonnull(params) __attribute__ ((__nonnull__ params))
296
325
# else
297
326
#  define __nonnull(params)
300
329
 
301
330
/* If fortification mode, we warn about unused results of certain
302
331
   function calls which can lead to problems.  */
303
 
#if __GNUC_PREREQ (3,4)
 
332
#if __GNUC_PREREQ (3,4) || __glibc_clang_has_attribute (__warn_unused_result__)
304
333
# define __attribute_warn_unused_result__ \
305
334
   __attribute__ ((__warn_unused_result__))
306
335
# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0
314
343
#endif
315
344
 
316
345
/* Forces a function to be always inlined.  */
317
 
#if __GNUC_PREREQ (3,2)
 
346
#if __GNUC_PREREQ (3,2) || __glibc_clang_has_attribute (__always_inline__)
318
347
/* The Linux kernel defines __always_inline in stddef.h (283d7573), and
319
348
   it conflicts with this definition.  Therefore undefine it first to
320
349
   allow either header to be included first.  */
327
356
 
328
357
/* Associate error messages with the source location of the call site rather
329
358
   than with the source location inside the function.  */
330
 
#if __GNUC_PREREQ (4,3)
 
359
#if __GNUC_PREREQ (4,3) || __glibc_clang_has_attribute (__artificial__)
331
360
# define __attribute_artificial__ __attribute__ ((__artificial__))
332
361
#else
333
362
# define __attribute_artificial__ /* Ignore */
370
399
   run in pedantic mode if the uses are carefully marked using the
371
400
   `__extension__' keyword.  But this is not generally available before
372
401
   version 2.8.  */
373
 
#if !__GNUC_PREREQ (2,8)
 
402
#if !(__GNUC_PREREQ (2,8) || defined __clang__)
374
403
# define __extension__          /* Ignore */
375
404
#endif
376
405
 
377
 
/* __restrict is known in EGCS 1.2 and above. */
378
 
#if !__GNUC_PREREQ (2,92)
 
406
/* __restrict is known in EGCS 1.2 and above, and in clang.
 
407
   It works also in C++ mode (outside of arrays), but only when spelled
 
408
   as '__restrict', not 'restrict'.  */
 
409
#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3)
379
410
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
380
411
#  define __restrict    restrict
381
412
# else
385
416
 
386
417
/* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
387
418
     array_name[restrict]
388
 
   GCC 3.1 supports this.  */
389
 
#if __GNUC_PREREQ (3,1) && !defined __GNUG__
 
419
   GCC 3.1 and clang support this.
 
420
   This syntax is not usable in C++ mode.  */
 
421
#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus
390
422
# define __restrict_arr __restrict
391
423
#else
392
424
# ifdef __GNUC__
401
433
# endif
402
434
#endif
403
435
 
404
 
#if __GNUC__ >= 3
 
436
#if (__GNUC__ >= 3) || __glibc_clang_has_builtin (__builtin_expect)
405
437
# define __glibc_unlikely(cond) __builtin_expect ((cond), 0)
406
438
# define __glibc_likely(cond)   __builtin_expect ((cond), 1)
407
439
#else
417
449
 
418
450
#if (!defined _Noreturn \
419
451
     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
420
 
     &&  !__GNUC_PREREQ (4,7))
 
452
     &&  !(__GNUC_PREREQ (4,7) \
 
453
           || (3 < __clang_major__ + (5 <= __clang_minor__))))
421
454
# if __GNUC_PREREQ (2,8)
422
455
#  define _Noreturn __attribute__ ((__noreturn__))
423
456
# else
436
469
 
437
470
#if (!defined _Static_assert && !defined __cplusplus \
438
471
     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
439
 
     && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__))
 
472
     && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \
 
473
         || defined __STRICT_ANSI__))
440
474
# define _Static_assert(expr, diagnostic) \
441
475
    extern int (*__Static_assert_function (void)) \
442
476
      [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]