]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/ginclude/stddef.h
Update copyright years.
[thirdparty/gcc.git] / gcc / ginclude / stddef.h
CommitLineData
8d9254fc 1/* Copyright (C) 1989-2020 Free Software Foundation, Inc.
fe1dbf6c 2
e531258e 3This file is part of GCC.
fe1dbf6c 4
e531258e 5GCC is free software; you can redistribute it and/or modify
fe1dbf6c 6it under the terms of the GNU General Public License as published by
748086b7 7the Free Software Foundation; either version 3, or (at your option)
fe1dbf6c
ZW
8any later version.
9
e531258e 10GCC is distributed in the hope that it will be useful,
fe1dbf6c
ZW
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
748086b7
JJ
15Under Section 7 of GPL version 3, you are granted additional
16permissions described in the GCC Runtime Library Exception, version
173.1, as published by the Free Software Foundation.
fe1dbf6c 18
748086b7
JJ
19You should have received a copy of the GNU General Public License and
20a copy of the GCC Runtime Library Exception along with this program;
21see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22<http://www.gnu.org/licenses/>. */
fe1dbf6c
ZW
23
24/*
25 * ISO C Standard: 7.17 Common definitions <stddef.h>
26 */
57bc5ea0
RK
27#if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \
28 && !defined(__STDDEF_H__)) \
29 || defined(__need_wchar_t) || defined(__need_size_t) \
30 || defined(__need_ptrdiff_t) || defined(__need_NULL) \
31 || defined(__need_wint_t)
77395be6
RS
32
33/* Any one of these symbols __need_* means that GNU libc
34 wants us just to define one data type. So don't define
35 the symbols that indicate this file's entire job has been done. */
36#if (!defined(__need_wchar_t) && !defined(__need_size_t) \
3464bdc4
RK
37 && !defined(__need_ptrdiff_t) && !defined(__need_NULL) \
38 && !defined(__need_wint_t))
301264e6
MM
39#define _STDDEF_H
40#define _STDDEF_H_
cac47212
RS
41/* snaroff@next.com says the NeXT needs this. */
42#define _ANSI_STDDEF_H
77395be6 43#endif
301264e6 44
da38c875
DE
45#ifndef __sys_stdtypes_h
46/* This avoids lossage on SunOS but only if stdtypes.h comes first.
47 There's no way to win with the other order! Sun lossage. */
48
ada818fd 49#if defined(__NetBSD__)
ca2ece1b 50#include <machine/ansi.h>
6be564d0 51#endif
0402566f
GP
52
53#if defined (__FreeBSD__)
081d6fb9
LR
54#include <sys/_types.h>
55#endif
6be564d0 56
ada818fd 57#if defined(__NetBSD__)
ec2c907a 58#if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_)
6be564d0
RS
59#define _SIZE_T
60#endif
ec2c907a 61#if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_)
6be564d0
RS
62#define _PTRDIFF_T
63#endif
73c8c157
RK
64/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
65 instead of _WCHAR_T_. */
ec2c907a 66#if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_)
73c8c157 67#ifndef _BSD_WCHAR_T_
6be564d0
RS
68#define _WCHAR_T
69#endif
73c8c157 70#endif
26afdb8e 71/* Undef _FOO_T_ if we are supposed to define foo_t. */
6de47384 72#if defined (__need_ptrdiff_t) || defined (_STDDEF_H_)
6be564d0 73#undef _PTRDIFF_T_
ec2c907a 74#undef _BSD_PTRDIFF_T_
26afdb8e 75#endif
6de47384 76#if defined (__need_size_t) || defined (_STDDEF_H_)
ca2ece1b 77#undef _SIZE_T_
ec2c907a 78#undef _BSD_SIZE_T_
26afdb8e 79#endif
6de47384 80#if defined (__need_wchar_t) || defined (_STDDEF_H_)
09dafdad 81#undef _WCHAR_T_
ec2c907a 82#undef _BSD_WCHAR_T_
ca2ece1b 83#endif
ada818fd 84#endif /* defined(__NetBSD__) */
09dafdad 85
6d68f08e
RS
86/* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
87 Just ignore it. */
88#if defined (__sequent__) && defined (_PTRDIFF_T_)
89#undef _PTRDIFF_T_
90#endif
91
3d356a8c
ILT
92/* On VxWorks, <type/vxTypesBase.h> may have defined macros like
93 _TYPE_size_t which will typedef size_t. fixincludes patched the
94 vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
95 not defined, and so that defining this macro defines _GCC_SIZE_T.
96 If we find that the macros are still defined at this point, we must
97 invoke them so that the type is defined as expected. */
25e0447f 98#if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_))
3d356a8c
ILT
99_TYPE_ptrdiff_t;
100#undef _TYPE_ptrdiff_t
101#endif
102#if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_))
103_TYPE_size_t;
104#undef _TYPE_size_t
105#endif
106#if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_))
107_TYPE_wchar_t;
108#undef _TYPE_wchar_t
109#endif
110
616f7d00 111/* In case nobody has defined these types, but we aren't running under
b7a0c86f 112 GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and
616f7d00
RS
113 __WCHAR_TYPE__ have reasonable values. This can happen if the
114 parts of GCC is compiled by an older compiler, that actually
115 include gstddef.h, such as collect2. */
116
301264e6
MM
117/* Signed type of difference of two pointers. */
118
c8b9d354
CH
119/* Define this type if we are doing the whole job,
120 or if we want this type in particular. */
121#if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
301264e6 122#ifndef _PTRDIFF_T /* in case <sys/types.h> has defined it. */
3308e40a 123#ifndef _T_PTRDIFF_
301264e6
MM
124#ifndef _T_PTRDIFF
125#ifndef __PTRDIFF_T
126#ifndef _PTRDIFF_T_
ec2c907a 127#ifndef _BSD_PTRDIFF_T_
301264e6 128#ifndef ___int_ptrdiff_t_h
3308e40a 129#ifndef _GCC_PTRDIFF_T
dbed5a9b 130#ifndef _PTRDIFF_T_DECLARED /* DragonFly */
301264e6 131#define _PTRDIFF_T
3308e40a 132#define _T_PTRDIFF_
301264e6
MM
133#define _T_PTRDIFF
134#define __PTRDIFF_T
135#define _PTRDIFF_T_
ec2c907a 136#define _BSD_PTRDIFF_T_
301264e6 137#define ___int_ptrdiff_t_h
3308e40a 138#define _GCC_PTRDIFF_T
dbed5a9b 139#define _PTRDIFF_T_DECLARED
616f7d00
RS
140#ifndef __PTRDIFF_TYPE__
141#define __PTRDIFF_TYPE__ long int
142#endif
301264e6 143typedef __PTRDIFF_TYPE__ ptrdiff_t;
dbed5a9b 144#endif /* _PTRDIFF_T_DECLARED */
3308e40a 145#endif /* _GCC_PTRDIFF_T */
301264e6 146#endif /* ___int_ptrdiff_t_h */
ec2c907a 147#endif /* _BSD_PTRDIFF_T_ */
301264e6
MM
148#endif /* _PTRDIFF_T_ */
149#endif /* __PTRDIFF_T */
150#endif /* _T_PTRDIFF */
3308e40a 151#endif /* _T_PTRDIFF_ */
301264e6
MM
152#endif /* _PTRDIFF_T */
153
77395be6
RS
154/* If this symbol has done its job, get rid of it. */
155#undef __need_ptrdiff_t
156
c8b9d354
CH
157#endif /* _STDDEF_H or __need_ptrdiff_t. */
158
301264e6
MM
159/* Unsigned type of `sizeof' something. */
160
c8b9d354
CH
161/* Define this type if we are doing the whole job,
162 or if we want this type in particular. */
163#if defined (_STDDEF_H) || defined (__need_size_t)
c55dcc7d 164#ifndef __size_t__ /* BeOS */
30102605 165#ifndef __SIZE_T__ /* Cray Unicos/Mk */
301264e6 166#ifndef _SIZE_T /* in case <sys/types.h> has defined it. */
b6126bf1 167#ifndef _SYS_SIZE_T_H
3308e40a 168#ifndef _T_SIZE_
301264e6
MM
169#ifndef _T_SIZE
170#ifndef __SIZE_T
171#ifndef _SIZE_T_
ec2c907a 172#ifndef _BSD_SIZE_T_
a1630124 173#ifndef _SIZE_T_DEFINED_
a2a8c03c 174#ifndef _SIZE_T_DEFINED
825abef4 175#ifndef _BSD_SIZE_T_DEFINED_ /* Darwin */
081d6fb9 176#ifndef _SIZE_T_DECLARED /* FreeBSD 5 */
301264e6 177#ifndef ___int_size_t_h
3308e40a 178#ifndef _GCC_SIZE_T
e2f08830 179#ifndef _SIZET_
de9f6f43 180#ifndef __size_t
c55dcc7d 181#define __size_t__ /* BeOS */
30102605 182#define __SIZE_T__ /* Cray Unicos/Mk */
301264e6 183#define _SIZE_T
b6126bf1 184#define _SYS_SIZE_T_H
3308e40a 185#define _T_SIZE_
301264e6
MM
186#define _T_SIZE
187#define __SIZE_T
188#define _SIZE_T_
ec2c907a 189#define _BSD_SIZE_T_
a1630124 190#define _SIZE_T_DEFINED_
a2a8c03c 191#define _SIZE_T_DEFINED
825abef4 192#define _BSD_SIZE_T_DEFINED_ /* Darwin */
081d6fb9 193#define _SIZE_T_DECLARED /* FreeBSD 5 */
301264e6 194#define ___int_size_t_h
3308e40a 195#define _GCC_SIZE_T
e2f08830 196#define _SIZET_
0402566f 197#if defined (__FreeBSD__) \
dbed5a9b 198 || defined(__DragonFly__) \
9bc6f25d
MR
199 || defined(__FreeBSD_kernel__) \
200 || defined(__VMS__)
201/* __size_t is a typedef, must not trash it. */
081d6fb9 202#else
de9f6f43 203#define __size_t
081d6fb9 204#endif
616f7d00
RS
205#ifndef __SIZE_TYPE__
206#define __SIZE_TYPE__ long unsigned int
207#endif
e38ba83a 208#if !(defined (__GNUG__) && defined (size_t))
301264e6 209typedef __SIZE_TYPE__ size_t;
c55dcc7d
FF
210#ifdef __BEOS__
211typedef long ssize_t;
212#endif /* __BEOS__ */
e38ba83a 213#endif /* !(defined (__GNUG__) && defined (size_t)) */
de9f6f43 214#endif /* __size_t */
e2f08830 215#endif /* _SIZET_ */
3308e40a 216#endif /* _GCC_SIZE_T */
301264e6 217#endif /* ___int_size_t_h */
081d6fb9 218#endif /* _SIZE_T_DECLARED */
825abef4 219#endif /* _BSD_SIZE_T_DEFINED_ */
a2a8c03c 220#endif /* _SIZE_T_DEFINED */
a1630124 221#endif /* _SIZE_T_DEFINED_ */
ec2c907a 222#endif /* _BSD_SIZE_T_ */
301264e6
MM
223#endif /* _SIZE_T_ */
224#endif /* __SIZE_T */
225#endif /* _T_SIZE */
3308e40a 226#endif /* _T_SIZE_ */
b6126bf1 227#endif /* _SYS_SIZE_T_H */
301264e6 228#endif /* _SIZE_T */
30102605 229#endif /* __SIZE_T__ */
c55dcc7d 230#endif /* __size_t__ */
77395be6 231#undef __need_size_t
c8b9d354 232#endif /* _STDDEF_H or __need_size_t. */
301264e6 233
77395be6
RS
234
235/* Wide character type.
236 Locale-writers should change this as necessary to
237 be big enough to hold unique values not between 0 and 127,
238 and not (wchar_t) -1, for each defined multibyte character. */
301264e6 239
c8b9d354
CH
240/* Define this type if we are doing the whole job,
241 or if we want this type in particular. */
242#if defined (_STDDEF_H) || defined (__need_wchar_t)
c55dcc7d 243#ifndef __wchar_t__ /* BeOS */
30102605 244#ifndef __WCHAR_T__ /* Cray Unicos/Mk */
301264e6
MM
245#ifndef _WCHAR_T
246#ifndef _T_WCHAR_
b125a5a8 247#ifndef _T_WCHAR
301264e6
MM
248#ifndef __WCHAR_T
249#ifndef _WCHAR_T_
ec2c907a 250#ifndef _BSD_WCHAR_T_
ee890fe2 251#ifndef _BSD_WCHAR_T_DEFINED_ /* Darwin */
825abef4 252#ifndef _BSD_RUNE_T_DEFINED_ /* Darwin */
081d6fb9 253#ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */
a1630124 254#ifndef _WCHAR_T_DEFINED_
a2a8c03c 255#ifndef _WCHAR_T_DEFINED
7a0b14b8 256#ifndef _WCHAR_T_H
301264e6 257#ifndef ___int_wchar_t_h
fda59a9a 258#ifndef __INT_WCHAR_T_H
3308e40a 259#ifndef _GCC_WCHAR_T
c55dcc7d 260#define __wchar_t__ /* BeOS */
30102605 261#define __WCHAR_T__ /* Cray Unicos/Mk */
301264e6
MM
262#define _WCHAR_T
263#define _T_WCHAR_
b125a5a8 264#define _T_WCHAR
301264e6
MM
265#define __WCHAR_T
266#define _WCHAR_T_
ec2c907a 267#define _BSD_WCHAR_T_
a1630124 268#define _WCHAR_T_DEFINED_
a2a8c03c 269#define _WCHAR_T_DEFINED
7a0b14b8 270#define _WCHAR_T_H
301264e6 271#define ___int_wchar_t_h
fda59a9a 272#define __INT_WCHAR_T_H
3308e40a 273#define _GCC_WCHAR_T
081d6fb9 274#define _WCHAR_T_DECLARED
73c8c157
RK
275
276/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
277 instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
278 symbols in the _FOO_T_ family, stays defined even after its
279 corresponding type is defined). If we define wchar_t, then we
280 must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if
281 we undef _WCHAR_T_, then we must also define rune_t, since
282 headers like runetype.h assume that if machine/ansi.h is included,
283 and _BSD_WCHAR_T_ is not defined, then rune_t is available.
284 machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of
285 the same type." */
286#ifdef _BSD_WCHAR_T_
287#undef _BSD_WCHAR_T_
288#ifdef _BSD_RUNE_T_
289#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
290typedef _BSD_RUNE_T_ rune_t;
5cb265ec 291#define _BSD_WCHAR_T_DEFINED_
825abef4 292#define _BSD_RUNE_T_DEFINED_ /* Darwin */
081d6fb9 293#if defined (__FreeBSD__) && (__FreeBSD__ < 5)
d3471d77 294/* Why is this file so hard to maintain properly? In contrast to
17eb7951
LR
295 the comment above regarding BSD/386 1.1, on FreeBSD for as long
296 as the symbol has existed, _BSD_RUNE_T_ must not stay defined or
297 redundant typedefs will occur when stdlib.h is included after this file. */
298#undef _BSD_RUNE_T_
299#endif
73c8c157
RK
300#endif
301#endif
302#endif
081d6fb9
LR
303/* FreeBSD 5 can't be handled well using "traditional" logic above
304 since it no longer defines _BSD_RUNE_T_ yet still desires to export
305 rune_t in some cases... */
306#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
307#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
308#if __BSD_VISIBLE
309#ifndef _RUNE_T_DECLARED
310typedef __rune_t rune_t;
311#define _RUNE_T_DECLARED
312#endif
313#endif
314#endif
315#endif
73c8c157 316
616f7d00
RS
317#ifndef __WCHAR_TYPE__
318#define __WCHAR_TYPE__ int
319#endif
cfeda197 320#ifndef __cplusplus
301264e6
MM
321typedef __WCHAR_TYPE__ wchar_t;
322#endif
323#endif
324#endif
325#endif
326#endif
3308e40a 327#endif
84b18070 328#endif
081d6fb9 329#endif /* _WCHAR_T_DECLARED */
825abef4 330#endif /* _BSD_RUNE_T_DEFINED_ */
7a0b14b8 331#endif
fda59a9a 332#endif
a1630124 333#endif
ec2c907a 334#endif
a2a8c03c 335#endif
cfeda197 336#endif
ee890fe2 337#endif
30102605 338#endif /* __WCHAR_T__ */
c55dcc7d 339#endif /* __wchar_t__ */
590f7e64 340#undef __need_wchar_t
c8b9d354 341#endif /* _STDDEF_H or __need_wchar_t. */
301264e6 342
c5ab7f91 343#if defined (__need_wint_t)
3464bdc4
RK
344#ifndef _WINT_T
345#define _WINT_T
346
347#ifndef __WINT_TYPE__
348#define __WINT_TYPE__ unsigned int
349#endif
3464bdc4
RK
350typedef __WINT_TYPE__ wint_t;
351#endif
3e2b54f5 352#undef __need_wint_t
3464bdc4 353#endif
3464bdc4 354
ada818fd 355#if defined(__NetBSD__)
73c8c157 356/* The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_
a0ab0422 357 are probably typos and should be removed before 2.8 is released. */
26afdb8e 358#ifdef _GCC_PTRDIFF_T_
6be564d0 359#undef _PTRDIFF_T_
ec2c907a 360#undef _BSD_PTRDIFF_T_
26afdb8e
RS
361#endif
362#ifdef _GCC_SIZE_T_
6be564d0 363#undef _SIZE_T_
ec2c907a 364#undef _BSD_SIZE_T_
6be564d0 365#endif
26afdb8e
RS
366#ifdef _GCC_WCHAR_T_
367#undef _WCHAR_T_
ec2c907a 368#undef _BSD_WCHAR_T_
ca2ece1b 369#endif
73c8c157
RK
370/* The following ones are the real ones. */
371#ifdef _GCC_PTRDIFF_T
372#undef _PTRDIFF_T_
a0ab0422 373#undef _BSD_PTRDIFF_T_
73c8c157
RK
374#endif
375#ifdef _GCC_SIZE_T
376#undef _SIZE_T_
a0ab0422 377#undef _BSD_SIZE_T_
73c8c157
RK
378#endif
379#ifdef _GCC_WCHAR_T
380#undef _WCHAR_T_
a0ab0422 381#undef _BSD_WCHAR_T_
73c8c157 382#endif
ada818fd 383#endif /* __NetBSD__ */
6be564d0 384
da38c875
DE
385#endif /* __sys_stdtypes_h */
386
301264e6
MM
387/* A null pointer constant. */
388
77395be6 389#if defined (_STDDEF_H) || defined (__need_NULL)
301264e6 390#undef NULL /* in case <stdio.h> has defined it. */
7a389b48
JM
391#ifdef __GNUG__
392#define NULL __null
393#else /* G++ */
be78ffb2 394#ifndef __cplusplus
301264e6 395#define NULL ((void *)0)
be78ffb2
JM
396#else /* C++ */
397#define NULL 0
398#endif /* C++ */
7a389b48 399#endif /* G++ */
77395be6
RS
400#endif /* NULL not defined and <stddef.h> or need NULL. */
401#undef __need_NULL
402
403#ifdef _STDDEF_H
301264e6 404
300e89a2 405/* Offset of member MEMBER in a struct of type TYPE. */
7a3ea201
RH
406#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
407
48b0b196 408#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) \
d19fa6b5
JM
409 || (defined(__cplusplus) && __cplusplus >= 201103L)
410#ifndef _GCC_MAX_ALIGN_T
411#define _GCC_MAX_ALIGN_T
412/* Type whose alignment is supported in every context and is at least
413 as great as that of any standard type not using alignment
414 specifiers. */
415typedef struct {
416 long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
417 long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
63012d9a
JM
418 /* _Float128 is defined as a basic type, so max_align_t must be
419 sufficiently aligned for it. This code must work in C++, so we
420 use __float128 here; that is only available on some
421 architectures, but only on i386 is extra alignment needed for
422 __float128. */
423#ifdef __i386__
424 __float128 __max_align_f128 __attribute__((__aligned__(__alignof(__float128))));
425#endif
d19fa6b5
JM
426} max_align_t;
427#endif
48b0b196 428#endif /* C11 or C++11. */
d19fa6b5 429
21c278c9
PC
430#if defined(__cplusplus) && __cplusplus >= 201103L
431#ifndef _GXX_NULLPTR_T
432#define _GXX_NULLPTR_T
433 typedef decltype(nullptr) nullptr_t;
434#endif
435#endif /* C++11. */
436
77395be6 437#endif /* _STDDEF_H was defined this time */
8328559d 438
57bc5ea0
RK
439#endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__
440 || __need_XXX was not defined before */