Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Move __STDC_* predefined macros from features.h to stdc-predef.h.
  • Loading branch information
Joseph Myers committed Feb 22, 2012
1 parent ef0aab3 commit ff3b3d8
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 19 deletions.
13 changes: 6 additions & 7 deletions CONFORMANCE
Expand Up @@ -134,13 +134,12 @@ Compiler limitations
====================

The macros __STDC_IEC_559__, __STDC_IEC_559_COMPLEX__ and
__STDC_ISO_10646__ are properly supposed to be defined by the
compiler, and to be constant throughout the translation unit (before
and after any library headers are included). However, they mainly
relate to library features, and the necessary magic has yet to be
implemented for GCC to predefine them to the correct values for the
library in use, so glibc defines them in <features.h>. Programs that
test them before including any standard headers may misbehave.
__STDC_ISO_10646__ are properly supposed to be constant throughout the
translation unit (before and after any library headers are included).
However, they mainly relate to library features, and GCC only knows to
preinclude <stdc-predef.h> to get their definitions in version 4.8 and
later. Programs that test them before including any standard headers
may misbehave with older compilers.

GCC doesn't support the optional imaginary types. Nor does it
understand the keyword _Complex before GCC 3.0. This has the
Expand Down
8 changes: 8 additions & 0 deletions ChangeLog
@@ -1,3 +1,11 @@
2012-02-22 Joseph Myers <joseph@codesourcery.com>

[BZ #10110]
* include/stdc-predef.h: New file. Extracted from features.h.
* include/features.h: Include stdc-predef.h.
* Makefile (headers): Add stdc-predef.h.
* CONFORMANCE (Compiler limitations): Update.

2012-02-22 Joseph Myers <joseph@codesourcery.com>

* manual/libc.texinfo (VERSION, UPDATED): Revert.
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Expand Up @@ -60,7 +60,7 @@ endif # $(AUTOCONF) = no
$(addprefix install-, no-libc.a bin lib data headers others)

headers := limits.h values.h features.h gnu-versions.h bits/libc-lock.h \
bits/xopen_lim.h gnu/libc-version.h
bits/xopen_lim.h gnu/libc-version.h stdc-predef.h

echo-headers: subdir_echo-headers

Expand Down
6 changes: 3 additions & 3 deletions NEWS
Expand Up @@ -10,9 +10,9 @@ Version 2.16
* The following bugs are resolved with this release:

174, 350, 411, 3335, 4026, 4596, 4822, 5077, 5805, 5993, 6884, 6907, 9739,
9902, 10140, 10210, 11174, 11322, 11494, 12047, 13058, 13525, 13526,
13527, 13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552,
13553, 13555, 13559, 13583, 13618, 13695, 13704
9902, 10110, 10140, 10210, 11174, 11322, 11494, 12047, 13058, 13525,
13526, 13527, 13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551,
13552, 13553, 13555, 13559, 13583, 13618, 13695, 13704

* ISO C11 support:

Expand Down
12 changes: 4 additions & 8 deletions include/features.h
@@ -1,5 +1,4 @@
/* Copyright (C) 1991-1993,1995-2007,2009,2010,2011
Free Software Foundation, Inc.
/* Copyright (C) 1991-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
Expand Down Expand Up @@ -337,12 +336,9 @@
# define __USE_FORTIFY_LEVEL 0
#endif

/* We do support the IEC 559 math functionality, real and complex. */
#define __STDC_IEC_559__ 1
#define __STDC_IEC_559_COMPLEX__ 1

/* wchar_t uses ISO 10646-1 (2nd ed., published 2000-09-15) / Unicode 3.1. */
#define __STDC_ISO_10646__ 200009L
/* Get definitions of __STDC_* predefined macros, if the compiler has
not preincluded this header automatically. */
#include <stdc-predef.h>

/* This macro indicates that the installed library is the GNU C Library.
For historic reasons the value now is 6 and this will stay from now
Expand Down
36 changes: 36 additions & 0 deletions include/stdc-predef.h
@@ -0,0 +1,36 @@
/* Copyright (C) 1991-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */

#ifndef _STDC_PREDEF_H
#define _STDC_PREDEF_H 1

/* This header is separate from features.h so that the compiler can
include it implicitly at the start of every compilation. It must
not itself include <features.h> or any other header that includes
<features.h> because the implicit include comes before any feature
test macros that may be defined in a source file before it first
explicitly includes a system header. GCC knows the name of this
header in order to preinclude it. */

/* We do support the IEC 559 math functionality, real and complex. */
#define __STDC_IEC_559__ 1
#define __STDC_IEC_559_COMPLEX__ 1

/* wchar_t uses ISO 10646-1 (2nd ed., published 2000-09-15) / Unicode 3.1. */
#define __STDC_ISO_10646__ 200009L

#endif

0 comments on commit ff3b3d8

Please sign in to comment.