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