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