xref: /openbsd-src/gnu/gcc/libcpp/system.h (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
1*404b540aSrobert /* Get common system includes and various definitions and declarations based
2*404b540aSrobert    on autoconf macros.
3*404b540aSrobert    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
4*404b540aSrobert    Free Software Foundation, Inc.
5*404b540aSrobert 
6*404b540aSrobert This file is part of libcpp (aka cpplib).
7*404b540aSrobert 
8*404b540aSrobert GCC is free software; you can redistribute it and/or modify it under
9*404b540aSrobert the terms of the GNU General Public License as published by the Free
10*404b540aSrobert Software Foundation; either version 2, or (at your option) any later
11*404b540aSrobert version.
12*404b540aSrobert 
13*404b540aSrobert GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14*404b540aSrobert WARRANTY; without even the implied warranty of MERCHANTABILITY or
15*404b540aSrobert FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16*404b540aSrobert for more details.
17*404b540aSrobert 
18*404b540aSrobert You should have received a copy of the GNU General Public License
19*404b540aSrobert along with GCC; see the file COPYING.  If not, write to the Free
20*404b540aSrobert Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21*404b540aSrobert 02110-1301, USA.  */
22*404b540aSrobert 
23*404b540aSrobert 
24*404b540aSrobert #ifndef LIBCPP_SYSTEM_H
25*404b540aSrobert #define LIBCPP_SYSTEM_H
26*404b540aSrobert 
27*404b540aSrobert /* We must include stdarg.h before stdio.h.  */
28*404b540aSrobert #include <stdarg.h>
29*404b540aSrobert 
30*404b540aSrobert #ifdef HAVE_STDDEF_H
31*404b540aSrobert # include <stddef.h>
32*404b540aSrobert #endif
33*404b540aSrobert 
34*404b540aSrobert #include <stdio.h>
35*404b540aSrobert 
36*404b540aSrobert /* Define a generic NULL if one hasn't already been defined.  */
37*404b540aSrobert #ifndef NULL
38*404b540aSrobert #define NULL 0
39*404b540aSrobert #endif
40*404b540aSrobert 
41*404b540aSrobert /* Use the unlocked open routines from libiberty.  */
42*404b540aSrobert #define fopen(PATH,MODE) fopen_unlocked(PATH,MODE)
43*404b540aSrobert #define fdopen(FILDES,MODE) fdopen_unlocked(FILDES,MODE)
44*404b540aSrobert #define freopen(PATH,MODE,STREAM) freopen_unlocked(PATH,MODE,STREAM)
45*404b540aSrobert 
46*404b540aSrobert /* The compiler is not a multi-threaded application and therefore we
47*404b540aSrobert    do not have to use the locking functions.  In fact, using the locking
48*404b540aSrobert    functions can cause the compiler to be significantly slower under
49*404b540aSrobert    I/O bound conditions (such as -g -O0 on very large source files).
50*404b540aSrobert 
51*404b540aSrobert    HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio
52*404b540aSrobert    code is multi-thread safe by default.  If it is set to 0, then do
53*404b540aSrobert    not worry about using the _unlocked functions.
54*404b540aSrobert 
55*404b540aSrobert    fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are
56*404b540aSrobert    extensions and need to be prototyped by hand (since we do not
57*404b540aSrobert    define _GNU_SOURCE).  */
58*404b540aSrobert 
59*404b540aSrobert #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED
60*404b540aSrobert 
61*404b540aSrobert # ifdef HAVE_PUTC_UNLOCKED
62*404b540aSrobert #  undef putc
63*404b540aSrobert #  define putc(C, Stream) putc_unlocked (C, Stream)
64*404b540aSrobert # endif
65*404b540aSrobert # ifdef HAVE_PUTCHAR_UNLOCKED
66*404b540aSrobert #  undef putchar
67*404b540aSrobert #  define putchar(C) putchar_unlocked (C)
68*404b540aSrobert # endif
69*404b540aSrobert # ifdef HAVE_GETC_UNLOCKED
70*404b540aSrobert #  undef getc
71*404b540aSrobert #  define getc(Stream) getc_unlocked (Stream)
72*404b540aSrobert # endif
73*404b540aSrobert # ifdef HAVE_GETCHAR_UNLOCKED
74*404b540aSrobert #  undef getchar
75*404b540aSrobert #  define getchar() getchar_unlocked ()
76*404b540aSrobert # endif
77*404b540aSrobert # ifdef HAVE_FPUTC_UNLOCKED
78*404b540aSrobert #  undef fputc
79*404b540aSrobert #  define fputc(C, Stream) fputc_unlocked (C, Stream)
80*404b540aSrobert # endif
81*404b540aSrobert 
82*404b540aSrobert # ifdef HAVE_CLEARERR_UNLOCKED
83*404b540aSrobert #  undef clearerr
84*404b540aSrobert #  define clearerr(Stream) clearerr_unlocked (Stream)
85*404b540aSrobert #  if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED
86*404b540aSrobert extern void clearerr_unlocked (FILE *);
87*404b540aSrobert #  endif
88*404b540aSrobert # endif
89*404b540aSrobert # ifdef HAVE_FEOF_UNLOCKED
90*404b540aSrobert #  undef feof
91*404b540aSrobert #  define feof(Stream) feof_unlocked (Stream)
92*404b540aSrobert #  if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED
93*404b540aSrobert extern int feof_unlocked (FILE *);
94*404b540aSrobert #  endif
95*404b540aSrobert # endif
96*404b540aSrobert # ifdef HAVE_FILENO_UNLOCKED
97*404b540aSrobert #  undef fileno
98*404b540aSrobert #  define fileno(Stream) fileno_unlocked (Stream)
99*404b540aSrobert #  if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED
100*404b540aSrobert extern int fileno_unlocked (FILE *);
101*404b540aSrobert #  endif
102*404b540aSrobert # endif
103*404b540aSrobert # ifdef HAVE_FFLUSH_UNLOCKED
104*404b540aSrobert #  undef fflush
105*404b540aSrobert #  define fflush(Stream) fflush_unlocked (Stream)
106*404b540aSrobert #  if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED
107*404b540aSrobert extern int fflush_unlocked (FILE *);
108*404b540aSrobert #  endif
109*404b540aSrobert # endif
110*404b540aSrobert # ifdef HAVE_FGETC_UNLOCKED
111*404b540aSrobert #  undef fgetc
112*404b540aSrobert #  define fgetc(Stream) fgetc_unlocked (Stream)
113*404b540aSrobert #  if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED
114*404b540aSrobert extern int fgetc_unlocked (FILE *);
115*404b540aSrobert #  endif
116*404b540aSrobert # endif
117*404b540aSrobert # ifdef HAVE_FGETS_UNLOCKED
118*404b540aSrobert #  undef fgets
119*404b540aSrobert #  define fgets(S, n, Stream) fgets_unlocked (S, n, Stream)
120*404b540aSrobert #  if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED
121*404b540aSrobert extern char *fgets_unlocked (char *, int, FILE *);
122*404b540aSrobert #  endif
123*404b540aSrobert # endif
124*404b540aSrobert # ifdef HAVE_FPUTS_UNLOCKED
125*404b540aSrobert #  undef fputs
126*404b540aSrobert #  define fputs(String, Stream) fputs_unlocked (String, Stream)
127*404b540aSrobert #  if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
128*404b540aSrobert extern int fputs_unlocked (const char *, FILE *);
129*404b540aSrobert #  endif
130*404b540aSrobert # endif
131*404b540aSrobert # ifdef HAVE_FERROR_UNLOCKED
132*404b540aSrobert #  undef ferror
133*404b540aSrobert #  define ferror(Stream) ferror_unlocked (Stream)
134*404b540aSrobert #  if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED
135*404b540aSrobert extern int ferror_unlocked (FILE *);
136*404b540aSrobert #  endif
137*404b540aSrobert # endif
138*404b540aSrobert # ifdef HAVE_FREAD_UNLOCKED
139*404b540aSrobert #  undef fread
140*404b540aSrobert #  define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream)
141*404b540aSrobert #  if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED
142*404b540aSrobert extern size_t fread_unlocked (void *, size_t, size_t, FILE *);
143*404b540aSrobert #  endif
144*404b540aSrobert # endif
145*404b540aSrobert # ifdef HAVE_FWRITE_UNLOCKED
146*404b540aSrobert #  undef fwrite
147*404b540aSrobert #  define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream)
148*404b540aSrobert #  if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
149*404b540aSrobert extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *);
150*404b540aSrobert #  endif
151*404b540aSrobert # endif
152*404b540aSrobert # ifdef HAVE_FPRINTF_UNLOCKED
153*404b540aSrobert #  undef fprintf
154*404b540aSrobert /* We can't use a function-like macro here because we don't know if
155*404b540aSrobert    we have varargs macros.  */
156*404b540aSrobert #  define fprintf fprintf_unlocked
157*404b540aSrobert #  if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED
158*404b540aSrobert extern int fprintf_unlocked (FILE *, const char *, ...);
159*404b540aSrobert #  endif
160*404b540aSrobert # endif
161*404b540aSrobert 
162*404b540aSrobert #endif
163*404b540aSrobert 
164*404b540aSrobert /* ??? Glibc's fwrite/fread_unlocked macros cause
165*404b540aSrobert    "warning: signed and unsigned type in conditional expression".  */
166*404b540aSrobert #undef fread_unlocked
167*404b540aSrobert #undef fwrite_unlocked
168*404b540aSrobert 
169*404b540aSrobert #include <sys/types.h>
170*404b540aSrobert #include <errno.h>
171*404b540aSrobert 
172*404b540aSrobert #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO
173*404b540aSrobert extern int errno;
174*404b540aSrobert #endif
175*404b540aSrobert 
176*404b540aSrobert /* Some of glibc's string inlines cause warnings.  Plus we'd rather
177*404b540aSrobert    rely on (and therefore test) GCC's string builtins.  */
178*404b540aSrobert #define __NO_STRING_INLINES
179*404b540aSrobert 
180*404b540aSrobert #ifdef STRING_WITH_STRINGS
181*404b540aSrobert # include <string.h>
182*404b540aSrobert # include <strings.h>
183*404b540aSrobert #else
184*404b540aSrobert # ifdef HAVE_STRING_H
185*404b540aSrobert #  include <string.h>
186*404b540aSrobert # else
187*404b540aSrobert #  ifdef HAVE_STRINGS_H
188*404b540aSrobert #   include <strings.h>
189*404b540aSrobert #  endif
190*404b540aSrobert # endif
191*404b540aSrobert #endif
192*404b540aSrobert 
193*404b540aSrobert #ifdef HAVE_STDLIB_H
194*404b540aSrobert # include <stdlib.h>
195*404b540aSrobert #endif
196*404b540aSrobert 
197*404b540aSrobert #ifdef HAVE_UNISTD_H
198*404b540aSrobert # include <unistd.h>
199*404b540aSrobert #endif
200*404b540aSrobert 
201*404b540aSrobert #if HAVE_LIMITS_H
202*404b540aSrobert # include <limits.h>
203*404b540aSrobert #endif
204*404b540aSrobert 
205*404b540aSrobert /* Infrastructure for defining missing _MAX and _MIN macros.  Note that
206*404b540aSrobert    macros defined with these cannot be used in #if.  */
207*404b540aSrobert 
208*404b540aSrobert /* The extra casts work around common compiler bugs.  */
209*404b540aSrobert #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))
210*404b540aSrobert /* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
211*404b540aSrobert    It is necessary at least when t == time_t.  */
212*404b540aSrobert #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \
213*404b540aSrobert                              ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0))
214*404b540aSrobert #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t)))
215*404b540aSrobert 
216*404b540aSrobert /* Use that infrastructure to provide a few constants.  */
217*404b540aSrobert #ifndef UCHAR_MAX
218*404b540aSrobert # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char)
219*404b540aSrobert #endif
220*404b540aSrobert 
221*404b540aSrobert #ifdef TIME_WITH_SYS_TIME
222*404b540aSrobert # include <sys/time.h>
223*404b540aSrobert # include <time.h>
224*404b540aSrobert #else
225*404b540aSrobert # if HAVE_SYS_TIME_H
226*404b540aSrobert #  include <sys/time.h>
227*404b540aSrobert # else
228*404b540aSrobert #  ifdef HAVE_TIME_H
229*404b540aSrobert #   include <time.h>
230*404b540aSrobert #  endif
231*404b540aSrobert # endif
232*404b540aSrobert #endif
233*404b540aSrobert 
234*404b540aSrobert #ifdef HAVE_FCNTL_H
235*404b540aSrobert # include <fcntl.h>
236*404b540aSrobert #else
237*404b540aSrobert # ifdef HAVE_SYS_FILE_H
238*404b540aSrobert #  include <sys/file.h>
239*404b540aSrobert # endif
240*404b540aSrobert #endif
241*404b540aSrobert 
242*404b540aSrobert #ifdef HAVE_LOCALE_H
243*404b540aSrobert # include <locale.h>
244*404b540aSrobert #endif
245*404b540aSrobert 
246*404b540aSrobert #ifdef HAVE_LANGINFO_CODESET
247*404b540aSrobert # include <langinfo.h>
248*404b540aSrobert #endif
249*404b540aSrobert 
250*404b540aSrobert #ifndef HAVE_SETLOCALE
251*404b540aSrobert # define setlocale(category, locale) (locale)
252*404b540aSrobert #endif
253*404b540aSrobert 
254*404b540aSrobert #ifdef ENABLE_NLS
255*404b540aSrobert #include <libintl.h>
256*404b540aSrobert #else
257*404b540aSrobert /* Stubs.  */
258*404b540aSrobert # undef dgettext
259*404b540aSrobert # define dgettext(package, msgid) (msgid)
260*404b540aSrobert #endif
261*404b540aSrobert 
262*404b540aSrobert #ifndef _
263*404b540aSrobert # define _(msgid) dgettext (PACKAGE, msgid)
264*404b540aSrobert #endif
265*404b540aSrobert 
266*404b540aSrobert #ifndef N_
267*404b540aSrobert # define N_(msgid) msgid
268*404b540aSrobert #endif
269*404b540aSrobert 
270*404b540aSrobert /* Some systems define these in, e.g., param.h.  We undefine these names
271*404b540aSrobert    here to avoid the warnings.  We prefer to use our definitions since we
272*404b540aSrobert    know they are correct.  */
273*404b540aSrobert 
274*404b540aSrobert #undef MIN
275*404b540aSrobert #undef MAX
276*404b540aSrobert #define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
277*404b540aSrobert #define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
278*404b540aSrobert 
279*404b540aSrobert /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1.  If they
280*404b540aSrobert    are defined to 0 then we must provide the relevant declaration
281*404b540aSrobert    here.  These checks will be in the undefined state while configure
282*404b540aSrobert    is running so be careful to test "defined (HAVE_DECL_*)".  */
283*404b540aSrobert 
284*404b540aSrobert #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT
285*404b540aSrobert extern void abort (void);
286*404b540aSrobert #endif
287*404b540aSrobert 
288*404b540aSrobert #if HAVE_SYS_STAT_H
289*404b540aSrobert # include <sys/stat.h>
290*404b540aSrobert #endif
291*404b540aSrobert 
292*404b540aSrobert /* Test if something is a normal file.  */
293*404b540aSrobert #ifndef S_ISREG
294*404b540aSrobert #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
295*404b540aSrobert #endif
296*404b540aSrobert 
297*404b540aSrobert /* Test if something is a directory.  */
298*404b540aSrobert #ifndef S_ISDIR
299*404b540aSrobert #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
300*404b540aSrobert #endif
301*404b540aSrobert 
302*404b540aSrobert /* Test if something is a character special file.  */
303*404b540aSrobert #ifndef S_ISCHR
304*404b540aSrobert #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
305*404b540aSrobert #endif
306*404b540aSrobert 
307*404b540aSrobert /* Test if something is a block special file.  */
308*404b540aSrobert #ifndef S_ISBLK
309*404b540aSrobert #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
310*404b540aSrobert #endif
311*404b540aSrobert 
312*404b540aSrobert /* Test if something is a socket.  */
313*404b540aSrobert #ifndef S_ISSOCK
314*404b540aSrobert # ifdef S_IFSOCK
315*404b540aSrobert #   define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
316*404b540aSrobert # else
317*404b540aSrobert #   define S_ISSOCK(m) 0
318*404b540aSrobert # endif
319*404b540aSrobert #endif
320*404b540aSrobert 
321*404b540aSrobert /* Test if something is a FIFO.  */
322*404b540aSrobert #ifndef S_ISFIFO
323*404b540aSrobert # ifdef S_IFIFO
324*404b540aSrobert #  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
325*404b540aSrobert # else
326*404b540aSrobert #  define S_ISFIFO(m) 0
327*404b540aSrobert # endif
328*404b540aSrobert #endif
329*404b540aSrobert 
330*404b540aSrobert /* Approximate O_NOCTTY and O_BINARY.  */
331*404b540aSrobert #ifndef O_NOCTTY
332*404b540aSrobert #define O_NOCTTY 0
333*404b540aSrobert #endif
334*404b540aSrobert #ifndef O_BINARY
335*404b540aSrobert # define O_BINARY 0
336*404b540aSrobert #endif
337*404b540aSrobert 
338*404b540aSrobert /* Filename handling macros.  */
339*404b540aSrobert #include "filenames.h"
340*404b540aSrobert 
341*404b540aSrobert /* Get libiberty declarations.  */
342*404b540aSrobert #include "libiberty.h"
343*404b540aSrobert #include "safe-ctype.h"
344*404b540aSrobert 
345*404b540aSrobert /* 1 if we have C99 designated initializers.
346*404b540aSrobert 
347*404b540aSrobert    ??? C99 designated initializers are not supported by most C++
348*404b540aSrobert    compilers, including G++.  -- gdr, 2005-05-18  */
349*404b540aSrobert #if !defined(HAVE_DESIGNATED_INITIALIZERS)
350*404b540aSrobert #define HAVE_DESIGNATED_INITIALIZERS \
351*404b540aSrobert   ((!defined(__cplusplus) && (GCC_VERSION >= 2007)) \
352*404b540aSrobert    || (__STDC_VERSION__ >= 199901L))
353*404b540aSrobert #endif
354*404b540aSrobert 
355*404b540aSrobert /* Be conservative and only use enum bitfields with GCC.
356*404b540aSrobert    FIXME: provide a complete autoconf test for buggy enum bitfields.  */
357*404b540aSrobert 
358*404b540aSrobert #if (GCC_VERSION > 2000)
359*404b540aSrobert #define ENUM_BITFIELD(TYPE) __extension__ enum TYPE
360*404b540aSrobert #else
361*404b540aSrobert #define ENUM_BITFIELD(TYPE) unsigned int
362*404b540aSrobert #endif
363*404b540aSrobert 
364*404b540aSrobert #ifndef offsetof
365*404b540aSrobert #define offsetof(TYPE, MEMBER)	((size_t) &((TYPE *) 0)->MEMBER)
366*404b540aSrobert #endif
367*404b540aSrobert 
368*404b540aSrobert /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that
369*404b540aSrobert    the most likely value of A is B.  This feature was added at some point
370*404b540aSrobert    between 2.95 and 3.0.  Let's use 3.0 as the lower bound for now.  */
371*404b540aSrobert #if (GCC_VERSION < 3000)
372*404b540aSrobert #define __builtin_expect(a, b) (a)
373*404b540aSrobert #endif
374*404b540aSrobert 
375*404b540aSrobert /* Provide a fake boolean type.  We make no attempt to use the
376*404b540aSrobert    C99 _Bool, as it may not be available in the bootstrap compiler,
377*404b540aSrobert    and even if it is, it is liable to be buggy.
378*404b540aSrobert    This must be after all inclusion of system headers, as some of
379*404b540aSrobert    them will mess us up.  */
380*404b540aSrobert #undef bool
381*404b540aSrobert #undef true
382*404b540aSrobert #undef false
383*404b540aSrobert #undef TRUE
384*404b540aSrobert #undef FALSE
385*404b540aSrobert 
386*404b540aSrobert #ifndef __cplusplus
387*404b540aSrobert #define bool unsigned char
388*404b540aSrobert #endif
389*404b540aSrobert #define true 1
390*404b540aSrobert #define false 0
391*404b540aSrobert 
392*404b540aSrobert /* Some compilers do not allow the use of unsigned char in bitfields.  */
393*404b540aSrobert #define BOOL_BITFIELD unsigned int
394*404b540aSrobert 
395*404b540aSrobert /* Poison identifiers we do not want to use.  */
396*404b540aSrobert #if (GCC_VERSION >= 3000)
397*404b540aSrobert #undef calloc
398*404b540aSrobert #undef strdup
399*404b540aSrobert #undef malloc
400*404b540aSrobert #undef realloc
401*404b540aSrobert  #pragma GCC poison calloc strdup
402*404b540aSrobert  #pragma GCC poison malloc realloc
403*404b540aSrobert 
404*404b540aSrobert /* Libiberty macros that are no longer used in GCC.  */
405*404b540aSrobert #undef ANSI_PROTOTYPES
406*404b540aSrobert #undef PTR_CONST
407*404b540aSrobert #undef LONG_DOUBLE
408*404b540aSrobert #undef VPARAMS
409*404b540aSrobert #undef VA_OPEN
410*404b540aSrobert #undef VA_FIXEDARG
411*404b540aSrobert #undef VA_CLOSE
412*404b540aSrobert #undef VA_START
413*404b540aSrobert  #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \
414*404b540aSrobert   VA_FIXEDARG VA_CLOSE VA_START
415*404b540aSrobert 
416*404b540aSrobert /* Note: not all uses of the `index' token (e.g. variable names and
417*404b540aSrobert    structure members) have been eliminated.  */
418*404b540aSrobert #undef bcopy
419*404b540aSrobert #undef bzero
420*404b540aSrobert #undef bcmp
421*404b540aSrobert #undef rindex
422*404b540aSrobert  #pragma GCC poison bcopy bzero bcmp rindex
423*404b540aSrobert 
424*404b540aSrobert #endif /* GCC >= 3.0 */
425*404b540aSrobert #endif /* ! LIBCPP_SYSTEM_H */
426