2017-01-01 13:07:43 +01:00
|
|
|
/* Copyright (C) 1989-2017 Free Software Foundation, Inc.
|
1999-09-23 20:02:55 +02:00
|
|
|
|
2003-03-13 03:58:40 +01:00
|
|
|
This file is part of GCC.
|
1999-09-23 20:02:55 +02:00
|
|
|
|
2003-03-13 03:58:40 +01:00
|
|
|
GCC is free software; you can redistribute it and/or modify
|
1999-09-23 20:02:55 +02:00
|
|
|
it under the terms of the GNU General Public License as published by
|
2009-04-09 17:00:19 +02:00
|
|
|
the Free Software Foundation; either version 3, or (at your option)
|
1999-09-23 20:02:55 +02:00
|
|
|
any later version.
|
|
|
|
|
2003-03-13 03:58:40 +01:00
|
|
|
GCC is distributed in the hope that it will be useful,
|
1999-09-23 20:02:55 +02:00
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
2009-04-09 17:00:19 +02:00
|
|
|
Under Section 7 of GPL version 3, you are granted additional
|
|
|
|
permissions described in the GCC Runtime Library Exception, version
|
|
|
|
3.1, as published by the Free Software Foundation.
|
1999-09-23 20:02:55 +02:00
|
|
|
|
2009-04-09 17:00:19 +02:00
|
|
|
You should have received a copy of the GNU General Public License and
|
|
|
|
a copy of the GCC Runtime Library Exception along with this program;
|
|
|
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
1999-09-23 20:02:55 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* ISO C Standard: 7.17 Common definitions <stddef.h>
|
|
|
|
*/
|
1996-10-28 13:36:05 +01:00
|
|
|
#if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \
|
|
|
|
&& !defined(__STDDEF_H__)) \
|
|
|
|
|| defined(__need_wchar_t) || defined(__need_size_t) \
|
|
|
|
|| defined(__need_ptrdiff_t) || defined(__need_NULL) \
|
|
|
|
|| defined(__need_wint_t)
|
1992-03-30 04:25:19 +02:00
|
|
|
|
|
|
|
/* Any one of these symbols __need_* means that GNU libc
|
|
|
|
wants us just to define one data type. So don't define
|
|
|
|
the symbols that indicate this file's entire job has been done. */
|
|
|
|
#if (!defined(__need_wchar_t) && !defined(__need_size_t) \
|
1996-05-17 13:39:59 +02:00
|
|
|
&& !defined(__need_ptrdiff_t) && !defined(__need_NULL) \
|
|
|
|
&& !defined(__need_wint_t))
|
1991-11-27 21:06:32 +01:00
|
|
|
#define _STDDEF_H
|
|
|
|
#define _STDDEF_H_
|
1992-10-15 09:05:45 +01:00
|
|
|
/* snaroff@next.com says the NeXT needs this. */
|
|
|
|
#define _ANSI_STDDEF_H
|
1992-03-30 04:25:19 +02:00
|
|
|
#endif
|
1991-11-27 21:06:32 +01:00
|
|
|
|
1993-09-20 21:24:39 +02:00
|
|
|
#ifndef __sys_stdtypes_h
|
|
|
|
/* This avoids lossage on SunOS but only if stdtypes.h comes first.
|
|
|
|
There's no way to win with the other order! Sun lossage. */
|
|
|
|
|
1992-10-31 22:27:50 +01:00
|
|
|
/* On 4.3bsd-net2, make sure ansi.h is included, so we have
|
|
|
|
one less case to deal with in the following. */
|
2002-10-04 23:16:07 +02:00
|
|
|
#if defined (__BSD_NET2__) || defined (____386BSD____) || (defined (__FreeBSD__) && (__FreeBSD__ < 5)) || defined(__NetBSD__)
|
1992-11-10 16:26:10 +01:00
|
|
|
#include <machine/ansi.h>
|
1992-10-31 22:27:50 +01:00
|
|
|
#endif
|
2002-10-04 23:16:07 +02:00
|
|
|
/* On FreeBSD 5, machine/ansi.h does not exist anymore... */
|
|
|
|
#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
|
|
|
|
#include <sys/_types.h>
|
|
|
|
#endif
|
1992-10-31 22:27:50 +01:00
|
|
|
|
|
|
|
/* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
|
1995-04-27 00:04:28 +02:00
|
|
|
defined if the corresponding type is *not* defined.
|
2011-01-29 23:15:52 +01:00
|
|
|
FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_.
|
|
|
|
NetBSD defines _I386_ANSI_H_ and _X86_64_ANSI_H_ instead of _ANSI_H_ */
|
|
|
|
#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) || defined(_X86_64_ANSI_H_) || defined(_I386_ANSI_H_)
|
1994-11-17 23:25:58 +01:00
|
|
|
#if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_)
|
1992-10-31 22:27:50 +01:00
|
|
|
#define _SIZE_T
|
|
|
|
#endif
|
1994-11-17 23:25:58 +01:00
|
|
|
#if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_)
|
1992-10-31 22:27:50 +01:00
|
|
|
#define _PTRDIFF_T
|
|
|
|
#endif
|
1994-08-02 00:52:34 +02:00
|
|
|
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
|
|
|
instead of _WCHAR_T_. */
|
1994-11-17 23:25:58 +01:00
|
|
|
#if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_)
|
1994-08-02 00:52:34 +02:00
|
|
|
#ifndef _BSD_WCHAR_T_
|
1992-10-31 22:27:50 +01:00
|
|
|
#define _WCHAR_T
|
|
|
|
#endif
|
1994-08-02 00:52:34 +02:00
|
|
|
#endif
|
1993-05-20 23:10:36 +02:00
|
|
|
/* Undef _FOO_T_ if we are supposed to define foo_t. */
|
1993-05-21 01:17:53 +02:00
|
|
|
#if defined (__need_ptrdiff_t) || defined (_STDDEF_H_)
|
1992-10-31 22:27:50 +01:00
|
|
|
#undef _PTRDIFF_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#undef _BSD_PTRDIFF_T_
|
1993-05-20 23:10:36 +02:00
|
|
|
#endif
|
1993-05-21 01:17:53 +02:00
|
|
|
#if defined (__need_size_t) || defined (_STDDEF_H_)
|
1992-11-10 16:26:10 +01:00
|
|
|
#undef _SIZE_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#undef _BSD_SIZE_T_
|
1993-05-20 23:10:36 +02:00
|
|
|
#endif
|
1993-05-21 01:17:53 +02:00
|
|
|
#if defined (__need_wchar_t) || defined (_STDDEF_H_)
|
1992-10-01 07:11:57 +01:00
|
|
|
#undef _WCHAR_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#undef _BSD_WCHAR_T_
|
1992-11-10 16:26:10 +01:00
|
|
|
#endif
|
2011-01-29 23:15:52 +01:00
|
|
|
#endif /* defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) || defined(_X86_64_ANSI_H_) || defined(_I386_ANSI_H_) */
|
1992-10-01 07:11:57 +01:00
|
|
|
|
1992-12-27 23:54:03 +01:00
|
|
|
/* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
|
|
|
|
Just ignore it. */
|
|
|
|
#if defined (__sequent__) && defined (_PTRDIFF_T_)
|
|
|
|
#undef _PTRDIFF_T_
|
|
|
|
#endif
|
|
|
|
|
1995-03-03 18:11:06 +01:00
|
|
|
/* On VxWorks, <type/vxTypesBase.h> may have defined macros like
|
|
|
|
_TYPE_size_t which will typedef size_t. fixincludes patched the
|
|
|
|
vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
|
|
|
|
not defined, and so that defining this macro defines _GCC_SIZE_T.
|
|
|
|
If we find that the macros are still defined at this point, we must
|
|
|
|
invoke them so that the type is defined as expected. */
|
1996-06-05 22:36:21 +02:00
|
|
|
#if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_))
|
1995-03-03 18:11:06 +01:00
|
|
|
_TYPE_ptrdiff_t;
|
|
|
|
#undef _TYPE_ptrdiff_t
|
|
|
|
#endif
|
|
|
|
#if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_))
|
|
|
|
_TYPE_size_t;
|
|
|
|
#undef _TYPE_size_t
|
|
|
|
#endif
|
|
|
|
#if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_))
|
|
|
|
_TYPE_wchar_t;
|
|
|
|
#undef _TYPE_wchar_t
|
|
|
|
#endif
|
|
|
|
|
1991-12-13 21:28:29 +01:00
|
|
|
/* In case nobody has defined these types, but we aren't running under
|
2001-08-27 22:23:37 +02:00
|
|
|
GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and
|
1991-12-13 21:28:29 +01:00
|
|
|
__WCHAR_TYPE__ have reasonable values. This can happen if the
|
|
|
|
parts of GCC is compiled by an older compiler, that actually
|
|
|
|
include gstddef.h, such as collect2. */
|
|
|
|
|
1991-11-27 21:06:32 +01:00
|
|
|
/* Signed type of difference of two pointers. */
|
|
|
|
|
1992-07-02 01:29:59 +02:00
|
|
|
/* Define this type if we are doing the whole job,
|
|
|
|
or if we want this type in particular. */
|
|
|
|
#if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
|
1991-11-27 21:06:32 +01:00
|
|
|
#ifndef _PTRDIFF_T /* in case <sys/types.h> has defined it. */
|
1992-03-18 06:21:50 +01:00
|
|
|
#ifndef _T_PTRDIFF_
|
1991-11-27 21:06:32 +01:00
|
|
|
#ifndef _T_PTRDIFF
|
|
|
|
#ifndef __PTRDIFF_T
|
|
|
|
#ifndef _PTRDIFF_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#ifndef _BSD_PTRDIFF_T_
|
1991-11-27 21:06:32 +01:00
|
|
|
#ifndef ___int_ptrdiff_t_h
|
1992-03-18 06:21:50 +01:00
|
|
|
#ifndef _GCC_PTRDIFF_T
|
2014-05-21 13:08:58 +02:00
|
|
|
#ifndef _PTRDIFF_T_DECLARED /* DragonFly */
|
1991-11-27 21:06:32 +01:00
|
|
|
#define _PTRDIFF_T
|
1992-03-18 06:21:50 +01:00
|
|
|
#define _T_PTRDIFF_
|
1991-11-27 21:06:32 +01:00
|
|
|
#define _T_PTRDIFF
|
|
|
|
#define __PTRDIFF_T
|
|
|
|
#define _PTRDIFF_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#define _BSD_PTRDIFF_T_
|
1991-11-27 21:06:32 +01:00
|
|
|
#define ___int_ptrdiff_t_h
|
1992-03-18 06:21:50 +01:00
|
|
|
#define _GCC_PTRDIFF_T
|
2014-05-21 13:08:58 +02:00
|
|
|
#define _PTRDIFF_T_DECLARED
|
1991-12-13 21:28:29 +01:00
|
|
|
#ifndef __PTRDIFF_TYPE__
|
|
|
|
#define __PTRDIFF_TYPE__ long int
|
|
|
|
#endif
|
1991-11-27 21:06:32 +01:00
|
|
|
typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
2014-05-21 13:08:58 +02:00
|
|
|
#endif /* _PTRDIFF_T_DECLARED */
|
1992-03-18 06:21:50 +01:00
|
|
|
#endif /* _GCC_PTRDIFF_T */
|
1991-11-27 21:06:32 +01:00
|
|
|
#endif /* ___int_ptrdiff_t_h */
|
1994-11-17 23:25:58 +01:00
|
|
|
#endif /* _BSD_PTRDIFF_T_ */
|
1991-11-27 21:06:32 +01:00
|
|
|
#endif /* _PTRDIFF_T_ */
|
|
|
|
#endif /* __PTRDIFF_T */
|
|
|
|
#endif /* _T_PTRDIFF */
|
1992-03-18 06:21:50 +01:00
|
|
|
#endif /* _T_PTRDIFF_ */
|
1991-11-27 21:06:32 +01:00
|
|
|
#endif /* _PTRDIFF_T */
|
|
|
|
|
1992-03-30 04:25:19 +02:00
|
|
|
/* If this symbol has done its job, get rid of it. */
|
|
|
|
#undef __need_ptrdiff_t
|
|
|
|
|
1992-07-02 01:29:59 +02:00
|
|
|
#endif /* _STDDEF_H or __need_ptrdiff_t. */
|
|
|
|
|
1991-11-27 21:06:32 +01:00
|
|
|
/* Unsigned type of `sizeof' something. */
|
|
|
|
|
1992-07-02 01:29:59 +02:00
|
|
|
/* Define this type if we are doing the whole job,
|
|
|
|
or if we want this type in particular. */
|
|
|
|
#if defined (_STDDEF_H) || defined (__need_size_t)
|
1997-12-12 07:36:11 +01:00
|
|
|
#ifndef __size_t__ /* BeOS */
|
2001-09-11 10:52:39 +02:00
|
|
|
#ifndef __SIZE_T__ /* Cray Unicos/Mk */
|
1991-11-27 21:06:32 +01:00
|
|
|
#ifndef _SIZE_T /* in case <sys/types.h> has defined it. */
|
1993-02-27 01:47:17 +01:00
|
|
|
#ifndef _SYS_SIZE_T_H
|
1992-03-18 06:21:50 +01:00
|
|
|
#ifndef _T_SIZE_
|
1991-11-27 21:06:32 +01:00
|
|
|
#ifndef _T_SIZE
|
|
|
|
#ifndef __SIZE_T
|
|
|
|
#ifndef _SIZE_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#ifndef _BSD_SIZE_T_
|
1994-10-08 00:27:46 +01:00
|
|
|
#ifndef _SIZE_T_DEFINED_
|
1995-02-22 00:53:57 +01:00
|
|
|
#ifndef _SIZE_T_DEFINED
|
2002-08-02 08:09:14 +02:00
|
|
|
#ifndef _BSD_SIZE_T_DEFINED_ /* Darwin */
|
2002-10-04 23:16:07 +02:00
|
|
|
#ifndef _SIZE_T_DECLARED /* FreeBSD 5 */
|
1991-11-27 21:06:32 +01:00
|
|
|
#ifndef ___int_size_t_h
|
1992-03-18 06:21:50 +01:00
|
|
|
#ifndef _GCC_SIZE_T
|
1992-03-27 22:25:33 +01:00
|
|
|
#ifndef _SIZET_
|
1993-09-19 15:44:59 +02:00
|
|
|
#ifndef __size_t
|
1997-12-12 07:36:11 +01:00
|
|
|
#define __size_t__ /* BeOS */
|
2001-09-11 10:52:39 +02:00
|
|
|
#define __SIZE_T__ /* Cray Unicos/Mk */
|
1991-11-27 21:06:32 +01:00
|
|
|
#define _SIZE_T
|
1993-02-27 01:47:17 +01:00
|
|
|
#define _SYS_SIZE_T_H
|
1992-03-18 06:21:50 +01:00
|
|
|
#define _T_SIZE_
|
1991-11-27 21:06:32 +01:00
|
|
|
#define _T_SIZE
|
|
|
|
#define __SIZE_T
|
|
|
|
#define _SIZE_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#define _BSD_SIZE_T_
|
1994-10-08 00:27:46 +01:00
|
|
|
#define _SIZE_T_DEFINED_
|
1995-02-22 00:53:57 +01:00
|
|
|
#define _SIZE_T_DEFINED
|
2002-08-02 08:09:14 +02:00
|
|
|
#define _BSD_SIZE_T_DEFINED_ /* Darwin */
|
2002-10-04 23:16:07 +02:00
|
|
|
#define _SIZE_T_DECLARED /* FreeBSD 5 */
|
1991-11-27 21:06:32 +01:00
|
|
|
#define ___int_size_t_h
|
1992-03-18 06:21:50 +01:00
|
|
|
#define _GCC_SIZE_T
|
1992-03-27 22:25:33 +01:00
|
|
|
#define _SIZET_
|
2012-02-12 02:06:04 +01:00
|
|
|
#if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
|
2014-05-21 13:08:58 +02:00
|
|
|
|| defined(__DragonFly__) \
|
2012-02-12 02:06:04 +01:00
|
|
|
|| defined(__FreeBSD_kernel__)
|
|
|
|
/* __size_t is a typedef on FreeBSD 5, must not trash it. */
|
2012-03-12 09:54:10 +01:00
|
|
|
#elif defined (__VMS__)
|
2012-03-09 14:03:58 +01:00
|
|
|
/* __size_t is also a typedef on VMS. */
|
2002-10-04 23:16:07 +02:00
|
|
|
#else
|
1993-09-19 15:44:59 +02:00
|
|
|
#define __size_t
|
2002-10-04 23:16:07 +02:00
|
|
|
#endif
|
1991-12-13 21:28:29 +01:00
|
|
|
#ifndef __SIZE_TYPE__
|
|
|
|
#define __SIZE_TYPE__ long unsigned int
|
|
|
|
#endif
|
1993-05-24 08:09:38 +02:00
|
|
|
#if !(defined (__GNUG__) && defined (size_t))
|
1991-11-27 21:06:32 +01:00
|
|
|
typedef __SIZE_TYPE__ size_t;
|
1997-12-12 07:36:11 +01:00
|
|
|
#ifdef __BEOS__
|
|
|
|
typedef long ssize_t;
|
|
|
|
#endif /* __BEOS__ */
|
1993-05-24 08:09:38 +02:00
|
|
|
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
1993-09-19 15:44:59 +02:00
|
|
|
#endif /* __size_t */
|
1992-03-27 22:25:33 +01:00
|
|
|
#endif /* _SIZET_ */
|
1992-03-18 06:21:50 +01:00
|
|
|
#endif /* _GCC_SIZE_T */
|
1991-11-27 21:06:32 +01:00
|
|
|
#endif /* ___int_size_t_h */
|
2002-10-04 23:16:07 +02:00
|
|
|
#endif /* _SIZE_T_DECLARED */
|
2002-08-02 08:09:14 +02:00
|
|
|
#endif /* _BSD_SIZE_T_DEFINED_ */
|
1995-02-22 00:53:57 +01:00
|
|
|
#endif /* _SIZE_T_DEFINED */
|
1994-10-08 00:27:46 +01:00
|
|
|
#endif /* _SIZE_T_DEFINED_ */
|
1994-11-17 23:25:58 +01:00
|
|
|
#endif /* _BSD_SIZE_T_ */
|
1991-11-27 21:06:32 +01:00
|
|
|
#endif /* _SIZE_T_ */
|
|
|
|
#endif /* __SIZE_T */
|
|
|
|
#endif /* _T_SIZE */
|
1992-03-18 06:21:50 +01:00
|
|
|
#endif /* _T_SIZE_ */
|
1993-02-27 01:47:17 +01:00
|
|
|
#endif /* _SYS_SIZE_T_H */
|
1991-11-27 21:06:32 +01:00
|
|
|
#endif /* _SIZE_T */
|
2001-09-11 10:52:39 +02:00
|
|
|
#endif /* __SIZE_T__ */
|
1997-12-12 07:36:11 +01:00
|
|
|
#endif /* __size_t__ */
|
1992-03-30 04:25:19 +02:00
|
|
|
#undef __need_size_t
|
1992-07-02 01:29:59 +02:00
|
|
|
#endif /* _STDDEF_H or __need_size_t. */
|
1991-11-27 21:06:32 +01:00
|
|
|
|
1992-03-30 04:25:19 +02:00
|
|
|
|
|
|
|
/* Wide character type.
|
|
|
|
Locale-writers should change this as necessary to
|
|
|
|
be big enough to hold unique values not between 0 and 127,
|
|
|
|
and not (wchar_t) -1, for each defined multibyte character. */
|
1991-11-27 21:06:32 +01:00
|
|
|
|
1992-07-02 01:29:59 +02:00
|
|
|
/* Define this type if we are doing the whole job,
|
|
|
|
or if we want this type in particular. */
|
|
|
|
#if defined (_STDDEF_H) || defined (__need_wchar_t)
|
1997-12-12 07:36:11 +01:00
|
|
|
#ifndef __wchar_t__ /* BeOS */
|
2001-09-11 10:52:39 +02:00
|
|
|
#ifndef __WCHAR_T__ /* Cray Unicos/Mk */
|
1991-11-27 21:06:32 +01:00
|
|
|
#ifndef _WCHAR_T
|
|
|
|
#ifndef _T_WCHAR_
|
1992-01-15 07:01:38 +01:00
|
|
|
#ifndef _T_WCHAR
|
1991-11-27 21:06:32 +01:00
|
|
|
#ifndef __WCHAR_T
|
|
|
|
#ifndef _WCHAR_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#ifndef _BSD_WCHAR_T_
|
2001-04-12 04:13:00 +02:00
|
|
|
#ifndef _BSD_WCHAR_T_DEFINED_ /* Darwin */
|
2002-08-02 08:09:14 +02:00
|
|
|
#ifndef _BSD_RUNE_T_DEFINED_ /* Darwin */
|
2002-10-04 23:16:07 +02:00
|
|
|
#ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */
|
1994-10-08 00:27:46 +01:00
|
|
|
#ifndef _WCHAR_T_DEFINED_
|
1995-02-22 00:53:57 +01:00
|
|
|
#ifndef _WCHAR_T_DEFINED
|
1993-07-27 09:10:41 +02:00
|
|
|
#ifndef _WCHAR_T_H
|
1991-11-27 21:06:32 +01:00
|
|
|
#ifndef ___int_wchar_t_h
|
1993-08-06 07:58:10 +02:00
|
|
|
#ifndef __INT_WCHAR_T_H
|
1992-03-18 06:21:50 +01:00
|
|
|
#ifndef _GCC_WCHAR_T
|
1997-12-12 07:36:11 +01:00
|
|
|
#define __wchar_t__ /* BeOS */
|
2001-09-11 10:52:39 +02:00
|
|
|
#define __WCHAR_T__ /* Cray Unicos/Mk */
|
1991-11-27 21:06:32 +01:00
|
|
|
#define _WCHAR_T
|
|
|
|
#define _T_WCHAR_
|
1992-01-15 07:01:38 +01:00
|
|
|
#define _T_WCHAR
|
1991-11-27 21:06:32 +01:00
|
|
|
#define __WCHAR_T
|
|
|
|
#define _WCHAR_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#define _BSD_WCHAR_T_
|
1994-10-08 00:27:46 +01:00
|
|
|
#define _WCHAR_T_DEFINED_
|
1995-02-22 00:53:57 +01:00
|
|
|
#define _WCHAR_T_DEFINED
|
1993-07-27 09:10:41 +02:00
|
|
|
#define _WCHAR_T_H
|
1991-11-27 21:06:32 +01:00
|
|
|
#define ___int_wchar_t_h
|
1993-08-06 07:58:10 +02:00
|
|
|
#define __INT_WCHAR_T_H
|
1992-03-18 06:21:50 +01:00
|
|
|
#define _GCC_WCHAR_T
|
2002-10-04 23:16:07 +02:00
|
|
|
#define _WCHAR_T_DECLARED
|
1994-08-02 00:52:34 +02:00
|
|
|
|
|
|
|
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
|
|
|
instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
|
|
|
|
symbols in the _FOO_T_ family, stays defined even after its
|
|
|
|
corresponding type is defined). If we define wchar_t, then we
|
|
|
|
must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if
|
|
|
|
we undef _WCHAR_T_, then we must also define rune_t, since
|
|
|
|
headers like runetype.h assume that if machine/ansi.h is included,
|
|
|
|
and _BSD_WCHAR_T_ is not defined, then rune_t is available.
|
|
|
|
machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of
|
|
|
|
the same type." */
|
|
|
|
#ifdef _BSD_WCHAR_T_
|
|
|
|
#undef _BSD_WCHAR_T_
|
|
|
|
#ifdef _BSD_RUNE_T_
|
|
|
|
#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
|
|
|
|
typedef _BSD_RUNE_T_ rune_t;
|
2002-01-09 05:56:25 +01:00
|
|
|
#define _BSD_WCHAR_T_DEFINED_
|
2002-08-02 08:09:14 +02:00
|
|
|
#define _BSD_RUNE_T_DEFINED_ /* Darwin */
|
2002-10-04 23:16:07 +02:00
|
|
|
#if defined (__FreeBSD__) && (__FreeBSD__ < 5)
|
2004-10-03 15:25:05 +02:00
|
|
|
/* Why is this file so hard to maintain properly? In contrast to
|
2000-02-15 22:04:53 +01:00
|
|
|
the comment above regarding BSD/386 1.1, on FreeBSD for as long
|
|
|
|
as the symbol has existed, _BSD_RUNE_T_ must not stay defined or
|
|
|
|
redundant typedefs will occur when stdlib.h is included after this file. */
|
|
|
|
#undef _BSD_RUNE_T_
|
|
|
|
#endif
|
1994-08-02 00:52:34 +02:00
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
2002-10-04 23:16:07 +02:00
|
|
|
/* FreeBSD 5 can't be handled well using "traditional" logic above
|
|
|
|
since it no longer defines _BSD_RUNE_T_ yet still desires to export
|
|
|
|
rune_t in some cases... */
|
|
|
|
#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
|
|
|
|
#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
|
|
|
|
#if __BSD_VISIBLE
|
|
|
|
#ifndef _RUNE_T_DECLARED
|
|
|
|
typedef __rune_t rune_t;
|
|
|
|
#define _RUNE_T_DECLARED
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
1994-08-02 00:52:34 +02:00
|
|
|
|
1991-12-13 21:28:29 +01:00
|
|
|
#ifndef __WCHAR_TYPE__
|
|
|
|
#define __WCHAR_TYPE__ int
|
|
|
|
#endif
|
1995-08-19 22:40:07 +02:00
|
|
|
#ifndef __cplusplus
|
1991-11-27 21:06:32 +01:00
|
|
|
typedef __WCHAR_TYPE__ wchar_t;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
1992-03-18 06:21:50 +01:00
|
|
|
#endif
|
1992-07-28 07:36:01 +02:00
|
|
|
#endif
|
2002-10-04 23:16:07 +02:00
|
|
|
#endif /* _WCHAR_T_DECLARED */
|
2002-08-02 08:09:14 +02:00
|
|
|
#endif /* _BSD_RUNE_T_DEFINED_ */
|
1993-07-27 09:10:41 +02:00
|
|
|
#endif
|
1993-08-06 07:58:10 +02:00
|
|
|
#endif
|
1994-10-08 00:27:46 +01:00
|
|
|
#endif
|
1994-11-17 23:25:58 +01:00
|
|
|
#endif
|
1995-02-22 00:53:57 +01:00
|
|
|
#endif
|
1995-08-19 22:40:07 +02:00
|
|
|
#endif
|
2001-04-12 04:13:00 +02:00
|
|
|
#endif
|
2001-09-11 10:52:39 +02:00
|
|
|
#endif /* __WCHAR_T__ */
|
1997-12-12 07:36:11 +01:00
|
|
|
#endif /* __wchar_t__ */
|
1992-06-11 21:08:00 +02:00
|
|
|
#undef __need_wchar_t
|
1992-07-02 01:29:59 +02:00
|
|
|
#endif /* _STDDEF_H or __need_wchar_t. */
|
1991-11-27 21:06:32 +01:00
|
|
|
|
2000-08-04 18:00:48 +02:00
|
|
|
#if defined (__need_wint_t)
|
1996-05-17 13:39:59 +02:00
|
|
|
#ifndef _WINT_T
|
|
|
|
#define _WINT_T
|
|
|
|
|
|
|
|
#ifndef __WINT_TYPE__
|
|
|
|
#define __WINT_TYPE__ unsigned int
|
|
|
|
#endif
|
|
|
|
typedef __WINT_TYPE__ wint_t;
|
|
|
|
#endif
|
1996-08-12 03:43:10 +02:00
|
|
|
#undef __need_wint_t
|
1996-05-17 13:39:59 +02:00
|
|
|
#endif
|
|
|
|
|
1992-10-31 22:27:50 +01:00
|
|
|
/* In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
|
1993-05-20 23:10:36 +02:00
|
|
|
are already defined. */
|
1999-10-15 11:04:53 +02:00
|
|
|
/* BSD/OS 3.1 and FreeBSD [23].x require the MACHINE_ANSI_H check here. */
|
2011-01-29 23:15:52 +01:00
|
|
|
/* NetBSD 5 requires the I386_ANSI_H and X86_64_ANSI_H checks here. */
|
|
|
|
#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) || defined(_X86_64_ANSI_H_) || defined(_I386_ANSI_H_)
|
1994-08-02 00:52:34 +02:00
|
|
|
/* The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_
|
1995-05-31 01:03:18 +02:00
|
|
|
are probably typos and should be removed before 2.8 is released. */
|
1993-05-20 23:10:36 +02:00
|
|
|
#ifdef _GCC_PTRDIFF_T_
|
1992-10-31 22:27:50 +01:00
|
|
|
#undef _PTRDIFF_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#undef _BSD_PTRDIFF_T_
|
1993-05-20 23:10:36 +02:00
|
|
|
#endif
|
|
|
|
#ifdef _GCC_SIZE_T_
|
1992-10-31 22:27:50 +01:00
|
|
|
#undef _SIZE_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#undef _BSD_SIZE_T_
|
1992-10-31 22:27:50 +01:00
|
|
|
#endif
|
1993-05-20 23:10:36 +02:00
|
|
|
#ifdef _GCC_WCHAR_T_
|
|
|
|
#undef _WCHAR_T_
|
1994-11-17 23:25:58 +01:00
|
|
|
#undef _BSD_WCHAR_T_
|
1992-11-10 16:26:10 +01:00
|
|
|
#endif
|
1994-08-02 00:52:34 +02:00
|
|
|
/* The following ones are the real ones. */
|
|
|
|
#ifdef _GCC_PTRDIFF_T
|
|
|
|
#undef _PTRDIFF_T_
|
1995-05-31 01:03:18 +02:00
|
|
|
#undef _BSD_PTRDIFF_T_
|
1994-08-02 00:52:34 +02:00
|
|
|
#endif
|
|
|
|
#ifdef _GCC_SIZE_T
|
|
|
|
#undef _SIZE_T_
|
1995-05-31 01:03:18 +02:00
|
|
|
#undef _BSD_SIZE_T_
|
1994-08-02 00:52:34 +02:00
|
|
|
#endif
|
|
|
|
#ifdef _GCC_WCHAR_T
|
|
|
|
#undef _WCHAR_T_
|
1995-05-31 01:03:18 +02:00
|
|
|
#undef _BSD_WCHAR_T_
|
1994-08-02 00:52:34 +02:00
|
|
|
#endif
|
2011-01-29 23:15:52 +01:00
|
|
|
#endif /* _ANSI_H_ || _MACHINE_ANSI_H_ || _X86_64_ANSI_H_ || _I386_ANSI_H_ */
|
1992-10-31 22:27:50 +01:00
|
|
|
|
1993-09-20 21:24:39 +02:00
|
|
|
#endif /* __sys_stdtypes_h */
|
|
|
|
|
1991-11-27 21:06:32 +01:00
|
|
|
/* A null pointer constant. */
|
|
|
|
|
1992-03-30 04:25:19 +02:00
|
|
|
#if defined (_STDDEF_H) || defined (__need_NULL)
|
1991-11-27 21:06:32 +01:00
|
|
|
#undef NULL /* in case <stdio.h> has defined it. */
|
1996-08-08 03:45:02 +02:00
|
|
|
#ifdef __GNUG__
|
|
|
|
#define NULL __null
|
|
|
|
#else /* G++ */
|
2000-06-25 00:19:46 +02:00
|
|
|
#ifndef __cplusplus
|
1991-11-27 21:06:32 +01:00
|
|
|
#define NULL ((void *)0)
|
2000-06-25 00:19:46 +02:00
|
|
|
#else /* C++ */
|
|
|
|
#define NULL 0
|
|
|
|
#endif /* C++ */
|
1996-08-08 03:45:02 +02:00
|
|
|
#endif /* G++ */
|
1992-03-30 04:25:19 +02:00
|
|
|
#endif /* NULL not defined and <stddef.h> or need NULL. */
|
|
|
|
#undef __need_NULL
|
|
|
|
|
|
|
|
#ifdef _STDDEF_H
|
1991-11-27 21:06:32 +01:00
|
|
|
|
2003-07-02 16:30:53 +02:00
|
|
|
/* Offset of member MEMBER in a struct of type TYPE. */
|
2004-06-01 17:12:23 +02:00
|
|
|
#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
|
|
|
|
|
gcc:
* c-decl.c (diagnose_mismatched_decls, grokdeclarator, grokfield)
(finish_struct): Refer to C11 in comments. Use flag_isoc11.
* c-parser.c (c_parser_static_assert_declaration)
(c_parser_static_assert_declaration_no_semi, c_parser_declspecs)
(c_parser_alignas_specifier, c_parser_alignof_expression): Refer
to C11 in comments. Use flag_isoc11.
* c-typeck.c (comptypes_check_different_types): Refer to C11 in
comment.
* doc/cpp.texi (Overview): Refer to -std=c11 instead of -std=c1x.
* doc/cppopts.texi (-std=c11, -std=gnu11): Document in preference
to -std=c1x and -std=gnu1x.
* doc/extend.texi (Inline, Alternate Keywords, Other Builtins)
(__builtin_complex, Unnamed Fields): Refer to -std=c11 and C11
instead of -std=c1x and C1X.
* doc/invoke.texi (-std=c11, -std=iso9899:2011): Document in
preference to -std=c1x.
(-std=gnu11): Document in preference to -std=gnu1x.
* doc/standards.texi: Document C11 instead of C1X. Document C11
as actual standard. Document headers required from freestanding
C11 implementations.
* ginclude/float.h, ginclude/stddef.h: Test __STDC_VERSION__ >=
201112L for C11. Update comments to refer to C11.
gcc/c-family:
* c-common.c (flag_isoc99): Update comment to refer to C11.
(flag_isoc1x): Change to flag_isoc11.
* c-common.h (flag_isoc99): Update comment to refer to C11.
(flag_isoc1x): Change to flag_isoc11.
* c-cppbuiltin.c (cpp_atomic_builtins): Change comment to refer to
C11.
* c-opts.c (set_std_c1x): Change to set_std_c11.
(c_common_handle_option): Handle OPT_std_c11 and OPT_std_gnu11.
Call set_std_c11.
(set_std_c89, set_std_c99, set_std_c11): Use flag_isoc11.
(set_std_c1): Use CLK_STDC11 and CLK_GNUC11.
* c.opt (std=c1x): Change to std=c11. Document as non-draft
standard.
(std=c1x, std=iso9899:2011): Add as aliases of std=c11.
(std=gnu1x): Change to std=gnu11. Refer to non-draft standard.
(std=gnu1x): Make alias of std=gnu11.
gcc/testsuite:
* gcc.dg/c11-version-1.c, gcc.dg/c11-version-2.c,
gcc.dg/c94-version-1.c, gcc.dg/c99-version-1.c,
gcc.dg/gnu11-version-1.c: New tests.
libcpp:
* include/cpplib.h (CLK_GNUC1X): Change to CLK_GNUC11.
(CLK_STDC1X): Change to CLK_STDC11.
* init.c (lang_defaults): Update comments.
(cpp_init_builtins): Update language tests. Use 201112L for C11
__STDC_VERSION__.
From-SVN: r182551
2011-12-20 21:44:13 +01:00
|
|
|
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) \
|
c-decl.c (shadow_tag_warned, [...]): Handle _Alignas specifiers.
* c-decl.c (shadow_tag_warned, grokdeclarator): Handle _Alignas
specifiers.
(build_null_declspecs): Initialize align_log and alignas_p fields.
(declspecs_add_alignas): New.
* c-parser.c (c_token_starts_declspecs): Handle RID_ALIGNAS.
(c_parser_declspecs): Handle _Alignas specifiers.
(c_parser_alignas_specifier): New.
(c_parser_alignof_expression): Diagnose alignof use for non-C1X.
Diagnose _Alignof (expression).
* c-tree.h (struct c_declspecs): Add align_log and alignas_p
fields.
(declspecs_add_alignas): Declare.
* ginclude/stddef.h (max_align_t): Define for C1X and C++11.
* ginclude/stdalign.h: New.
* Makefile.in (USER_H): Add stdalign.h.
c-family:
* c-common.c (c_common_reswords): Add _Alignas and _Alignof.
(c_sizeof_or_alignof_type): Diagnose alignof applied to a function
type.
(check_user_alignment): New. Split out of
handle_aligned_attribute. Disallow integer constants with
noninteger types. Conditionally allow zero.
(handle_aligned_attribute): Use check_user_alignment.
* c-common.h (RID_ALIGNAS, check_user_alignment): New.
testsuite:
* g++.dg/cpp0x/alignof3.C, gcc.dg/c1x-align-1.c,
gcc.dg/c1x-align-2.c, gcc.dg/c1x-align-3.c, gcc.dg/c1x-align-4.c,
gcc.dg/c90-align-1.c, gcc.dg/c99-align-1.c: New tests.
* gcc.dg/gnu89-const-expr-1.c, gcc.dg/gnu90-const-expr-1.c,
gcc.dg/gnu99-const-expr-1.c, gcc.dg/gnu99-static-1.c: Update
expected diagnostics.
From-SVN: r181048
2011-11-07 00:51:19 +01:00
|
|
|
|| (defined(__cplusplus) && __cplusplus >= 201103L)
|
|
|
|
#ifndef _GCC_MAX_ALIGN_T
|
|
|
|
#define _GCC_MAX_ALIGN_T
|
|
|
|
/* Type whose alignment is supported in every context and is at least
|
|
|
|
as great as that of any standard type not using alignment
|
|
|
|
specifiers. */
|
|
|
|
typedef struct {
|
|
|
|
long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
|
|
|
|
long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
|
Make max_align_t respect _Float128.
The _FloatN, _FloatNx, _DecimalN and _DecimalNx types are specified in
such a way that they are basic types, meaning that max_align_t must be
at least as aligned as those types.
On 32-bit x86, max_align_t is currently 8-byte aligned, but
_Decimal128 and _Float128 are 16-byte aligned, so the alignment of
max_align_t needs to increase to meet the standard requirements for
these types.
This patch implements such an increase. Because max_align_t needs to
be usable for C++ as well as for C, <stddef.h> can't actually refer to
_Float128, but needs to use __float128 (or some other notation for the
type) instead. And since __float128 is architecture-specific, there
isn't a preprocessor conditional that means "__float128 is available"
(whereas one could test __FLT128_MANT_DIG__ to see if _Float128 is
available; __SIZEOF_FLOAT128__ is available on x86 only). But I
believe the only case that actually has an alignment problem here is
32-bit x86, and <stddef.h> already has lots of conditional specific to
particular architectures or OSes, so this patch uses a conditional on
__i386__; that also is the minimal change that ensures neither size
nor alignment of max_align_t is changed in any case other than where
it is necessary. If any other architectures turn out to have such an
issue, it will show up as failures of one of the testcases added by
this patch.
Such an increase is of course an ABI change, but a reasonably safe
one, in that max_align_t doesn't tend to appear in library interfaces
(rather, it's something to use when writing allocators and similar
code; most matches found on codesearch.debian.net look like copies of
the gnulib stddef.h module rather than anything actually using
max_align_t at all).
max_align_t_align has a corresponding change (adding _Float128 to the
types considered).
(I think glibc malloc alignment should also increase to 16-byte on
32-bit x86 so it works for allocating objects of these types, which is
now straightforward given the fix made for 32-bit powerpc.)
Bootstrapped with no regressions on x86_64-pc-linux-gnu, and
spot-tested with -m32 that the new float128-align.c test now compiles
where previously it didn't.
gcc:
* ginclude/stddef.h (max_align_t) [__i386__]: Add __float128
element.
gcc/c-family:
* c-common.c (max_align_t_align): Also consider alignment of
float128_type_node.
gcc/testsuite:
* gcc.dg/float128-align.c, gcc.dg/float128x-align.c,
gcc.dg/float16-align.c, gcc.dg/float32-align.c,
gcc.dg/float32x-align.c, gcc.dg/float64-align.c,
gcc.dg/float64x-align.c, gcc.dg/floatn-align.h: New tests.
From-SVN: r240248
2016-09-19 23:51:56 +02:00
|
|
|
/* _Float128 is defined as a basic type, so max_align_t must be
|
|
|
|
sufficiently aligned for it. This code must work in C++, so we
|
|
|
|
use __float128 here; that is only available on some
|
|
|
|
architectures, but only on i386 is extra alignment needed for
|
|
|
|
__float128. */
|
|
|
|
#ifdef __i386__
|
|
|
|
__float128 __max_align_f128 __attribute__((__aligned__(__alignof(__float128))));
|
|
|
|
#endif
|
c-decl.c (shadow_tag_warned, [...]): Handle _Alignas specifiers.
* c-decl.c (shadow_tag_warned, grokdeclarator): Handle _Alignas
specifiers.
(build_null_declspecs): Initialize align_log and alignas_p fields.
(declspecs_add_alignas): New.
* c-parser.c (c_token_starts_declspecs): Handle RID_ALIGNAS.
(c_parser_declspecs): Handle _Alignas specifiers.
(c_parser_alignas_specifier): New.
(c_parser_alignof_expression): Diagnose alignof use for non-C1X.
Diagnose _Alignof (expression).
* c-tree.h (struct c_declspecs): Add align_log and alignas_p
fields.
(declspecs_add_alignas): Declare.
* ginclude/stddef.h (max_align_t): Define for C1X and C++11.
* ginclude/stdalign.h: New.
* Makefile.in (USER_H): Add stdalign.h.
c-family:
* c-common.c (c_common_reswords): Add _Alignas and _Alignof.
(c_sizeof_or_alignof_type): Diagnose alignof applied to a function
type.
(check_user_alignment): New. Split out of
handle_aligned_attribute. Disallow integer constants with
noninteger types. Conditionally allow zero.
(handle_aligned_attribute): Use check_user_alignment.
* c-common.h (RID_ALIGNAS, check_user_alignment): New.
testsuite:
* g++.dg/cpp0x/alignof3.C, gcc.dg/c1x-align-1.c,
gcc.dg/c1x-align-2.c, gcc.dg/c1x-align-3.c, gcc.dg/c1x-align-4.c,
gcc.dg/c90-align-1.c, gcc.dg/c99-align-1.c: New tests.
* gcc.dg/gnu89-const-expr-1.c, gcc.dg/gnu90-const-expr-1.c,
gcc.dg/gnu99-const-expr-1.c, gcc.dg/gnu99-static-1.c: Update
expected diagnostics.
From-SVN: r181048
2011-11-07 00:51:19 +01:00
|
|
|
} max_align_t;
|
|
|
|
#endif
|
gcc:
* c-decl.c (diagnose_mismatched_decls, grokdeclarator, grokfield)
(finish_struct): Refer to C11 in comments. Use flag_isoc11.
* c-parser.c (c_parser_static_assert_declaration)
(c_parser_static_assert_declaration_no_semi, c_parser_declspecs)
(c_parser_alignas_specifier, c_parser_alignof_expression): Refer
to C11 in comments. Use flag_isoc11.
* c-typeck.c (comptypes_check_different_types): Refer to C11 in
comment.
* doc/cpp.texi (Overview): Refer to -std=c11 instead of -std=c1x.
* doc/cppopts.texi (-std=c11, -std=gnu11): Document in preference
to -std=c1x and -std=gnu1x.
* doc/extend.texi (Inline, Alternate Keywords, Other Builtins)
(__builtin_complex, Unnamed Fields): Refer to -std=c11 and C11
instead of -std=c1x and C1X.
* doc/invoke.texi (-std=c11, -std=iso9899:2011): Document in
preference to -std=c1x.
(-std=gnu11): Document in preference to -std=gnu1x.
* doc/standards.texi: Document C11 instead of C1X. Document C11
as actual standard. Document headers required from freestanding
C11 implementations.
* ginclude/float.h, ginclude/stddef.h: Test __STDC_VERSION__ >=
201112L for C11. Update comments to refer to C11.
gcc/c-family:
* c-common.c (flag_isoc99): Update comment to refer to C11.
(flag_isoc1x): Change to flag_isoc11.
* c-common.h (flag_isoc99): Update comment to refer to C11.
(flag_isoc1x): Change to flag_isoc11.
* c-cppbuiltin.c (cpp_atomic_builtins): Change comment to refer to
C11.
* c-opts.c (set_std_c1x): Change to set_std_c11.
(c_common_handle_option): Handle OPT_std_c11 and OPT_std_gnu11.
Call set_std_c11.
(set_std_c89, set_std_c99, set_std_c11): Use flag_isoc11.
(set_std_c1): Use CLK_STDC11 and CLK_GNUC11.
* c.opt (std=c1x): Change to std=c11. Document as non-draft
standard.
(std=c1x, std=iso9899:2011): Add as aliases of std=c11.
(std=gnu1x): Change to std=gnu11. Refer to non-draft standard.
(std=gnu1x): Make alias of std=gnu11.
gcc/testsuite:
* gcc.dg/c11-version-1.c, gcc.dg/c11-version-2.c,
gcc.dg/c94-version-1.c, gcc.dg/c99-version-1.c,
gcc.dg/gnu11-version-1.c: New tests.
libcpp:
* include/cpplib.h (CLK_GNUC1X): Change to CLK_GNUC11.
(CLK_STDC1X): Change to CLK_STDC11.
* init.c (lang_defaults): Update comments.
(cpp_init_builtins): Update language tests. Use 201112L for C11
__STDC_VERSION__.
From-SVN: r182551
2011-12-20 21:44:13 +01:00
|
|
|
#endif /* C11 or C++11. */
|
c-decl.c (shadow_tag_warned, [...]): Handle _Alignas specifiers.
* c-decl.c (shadow_tag_warned, grokdeclarator): Handle _Alignas
specifiers.
(build_null_declspecs): Initialize align_log and alignas_p fields.
(declspecs_add_alignas): New.
* c-parser.c (c_token_starts_declspecs): Handle RID_ALIGNAS.
(c_parser_declspecs): Handle _Alignas specifiers.
(c_parser_alignas_specifier): New.
(c_parser_alignof_expression): Diagnose alignof use for non-C1X.
Diagnose _Alignof (expression).
* c-tree.h (struct c_declspecs): Add align_log and alignas_p
fields.
(declspecs_add_alignas): Declare.
* ginclude/stddef.h (max_align_t): Define for C1X and C++11.
* ginclude/stdalign.h: New.
* Makefile.in (USER_H): Add stdalign.h.
c-family:
* c-common.c (c_common_reswords): Add _Alignas and _Alignof.
(c_sizeof_or_alignof_type): Diagnose alignof applied to a function
type.
(check_user_alignment): New. Split out of
handle_aligned_attribute. Disallow integer constants with
noninteger types. Conditionally allow zero.
(handle_aligned_attribute): Use check_user_alignment.
* c-common.h (RID_ALIGNAS, check_user_alignment): New.
testsuite:
* g++.dg/cpp0x/alignof3.C, gcc.dg/c1x-align-1.c,
gcc.dg/c1x-align-2.c, gcc.dg/c1x-align-3.c, gcc.dg/c1x-align-4.c,
gcc.dg/c90-align-1.c, gcc.dg/c99-align-1.c: New tests.
* gcc.dg/gnu89-const-expr-1.c, gcc.dg/gnu90-const-expr-1.c,
gcc.dg/gnu99-const-expr-1.c, gcc.dg/gnu99-static-1.c: Update
expected diagnostics.
From-SVN: r181048
2011-11-07 00:51:19 +01:00
|
|
|
|
2012-10-07 00:44:12 +02:00
|
|
|
#if defined(__cplusplus) && __cplusplus >= 201103L
|
|
|
|
#ifndef _GXX_NULLPTR_T
|
|
|
|
#define _GXX_NULLPTR_T
|
|
|
|
typedef decltype(nullptr) nullptr_t;
|
|
|
|
#endif
|
|
|
|
#endif /* C++11. */
|
|
|
|
|
1992-03-30 04:25:19 +02:00
|
|
|
#endif /* _STDDEF_H was defined this time */
|
1992-10-17 05:41:39 +01:00
|
|
|
|
1996-10-28 13:36:05 +01:00
|
|
|
#endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__
|
|
|
|
|| __need_XXX was not defined before */
|