xref: /netbsd-src/external/gpl3/gcc.old/dist/libcpp/system.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
136ac495dSmrg /* Get common system includes and various definitions and declarations based
236ac495dSmrg    on autoconf macros.
3*8feb0f0bSmrg    Copyright (C) 1998-2020 Free Software Foundation, Inc.
436ac495dSmrg 
536ac495dSmrg This file is part of GCC.
636ac495dSmrg 
736ac495dSmrg GCC is free software; you can redistribute it and/or modify it under
836ac495dSmrg the terms of the GNU General Public License as published by the Free
936ac495dSmrg Software Foundation; either version 3, or (at your option) any later
1036ac495dSmrg version.
1136ac495dSmrg 
1236ac495dSmrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
1336ac495dSmrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
1436ac495dSmrg FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1536ac495dSmrg for more details.
1636ac495dSmrg 
1736ac495dSmrg You should have received a copy of the GNU General Public License
1836ac495dSmrg along with GCC; see the file COPYING3.  If not see
1936ac495dSmrg <http://www.gnu.org/licenses/>.  */
2036ac495dSmrg 
2136ac495dSmrg 
2236ac495dSmrg #ifndef LIBCPP_SYSTEM_H
2336ac495dSmrg #define LIBCPP_SYSTEM_H
2436ac495dSmrg 
2536ac495dSmrg /* We must include stdarg.h before stdio.h.  */
2636ac495dSmrg #include <stdarg.h>
2736ac495dSmrg 
2836ac495dSmrg #ifdef HAVE_STDDEF_H
2936ac495dSmrg # include <stddef.h>
3036ac495dSmrg #endif
3136ac495dSmrg #ifdef HAVE_STDINT_H
3236ac495dSmrg # include <stdint.h>
3336ac495dSmrg #endif
3436ac495dSmrg #ifdef HAVE_INTTYPES_H
3536ac495dSmrg # include <inttypes.h>
3636ac495dSmrg #endif
3736ac495dSmrg 
3836ac495dSmrg #include <stdio.h>
3936ac495dSmrg 
40c0a68be4Smrg #ifdef __cplusplus
41c0a68be4Smrg #include <new>
42c0a68be4Smrg #endif
43c0a68be4Smrg 
4436ac495dSmrg /* Define a generic NULL if one hasn't already been defined.  */
4536ac495dSmrg #ifndef NULL
4636ac495dSmrg #define NULL 0
4736ac495dSmrg #endif
4836ac495dSmrg 
4936ac495dSmrg /* Use the unlocked open routines from libiberty.  */
5036ac495dSmrg 
5136ac495dSmrg /* Some of these are #define on some systems, e.g. on AIX to redirect
5236ac495dSmrg    the names to 64bit capable functions for LARGE_FILES support. These
5336ac495dSmrg    redefs are pointless here so we can override them.  */
5436ac495dSmrg 
5536ac495dSmrg #undef fopen
5636ac495dSmrg #undef freopen
5736ac495dSmrg 
5836ac495dSmrg #define fopen(PATH,MODE) fopen_unlocked(PATH,MODE)
5936ac495dSmrg #define fdopen(FILDES,MODE) fdopen_unlocked(FILDES,MODE)
6036ac495dSmrg #define freopen(PATH,MODE,STREAM) freopen_unlocked(PATH,MODE,STREAM)
6136ac495dSmrg 
6236ac495dSmrg /* The compiler is not a multi-threaded application and therefore we
6336ac495dSmrg    do not have to use the locking functions.  In fact, using the locking
6436ac495dSmrg    functions can cause the compiler to be significantly slower under
6536ac495dSmrg    I/O bound conditions (such as -g -O0 on very large source files).
6636ac495dSmrg 
6736ac495dSmrg    HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio
6836ac495dSmrg    code is multi-thread safe by default.  If it is set to 0, then do
6936ac495dSmrg    not worry about using the _unlocked functions.
7036ac495dSmrg 
7136ac495dSmrg    fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are
7236ac495dSmrg    extensions and need to be prototyped by hand (since we do not
7336ac495dSmrg    define _GNU_SOURCE).  */
7436ac495dSmrg 
7536ac495dSmrg #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED
7636ac495dSmrg 
7736ac495dSmrg # ifdef HAVE_PUTC_UNLOCKED
7836ac495dSmrg #  undef putc
7936ac495dSmrg #  define putc(C, Stream) putc_unlocked (C, Stream)
8036ac495dSmrg # endif
8136ac495dSmrg # ifdef HAVE_PUTCHAR_UNLOCKED
8236ac495dSmrg #  undef putchar
8336ac495dSmrg #  define putchar(C) putchar_unlocked (C)
8436ac495dSmrg # endif
8536ac495dSmrg # ifdef HAVE_GETC_UNLOCKED
8636ac495dSmrg #  undef getc
8736ac495dSmrg #  define getc(Stream) getc_unlocked (Stream)
8836ac495dSmrg # endif
8936ac495dSmrg # ifdef HAVE_GETCHAR_UNLOCKED
9036ac495dSmrg #  undef getchar
9136ac495dSmrg #  define getchar() getchar_unlocked ()
9236ac495dSmrg # endif
9336ac495dSmrg # ifdef HAVE_FPUTC_UNLOCKED
9436ac495dSmrg #  undef fputc
9536ac495dSmrg #  define fputc(C, Stream) fputc_unlocked (C, Stream)
9636ac495dSmrg # endif
9736ac495dSmrg 
9836ac495dSmrg #ifdef __cplusplus
9936ac495dSmrg extern "C" {
10036ac495dSmrg #endif
10136ac495dSmrg 
10236ac495dSmrg # ifdef HAVE_CLEARERR_UNLOCKED
10336ac495dSmrg #  undef clearerr
10436ac495dSmrg #  define clearerr(Stream) clearerr_unlocked (Stream)
10536ac495dSmrg #  if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED
10636ac495dSmrg extern void clearerr_unlocked (FILE *);
10736ac495dSmrg #  endif
10836ac495dSmrg # endif
10936ac495dSmrg # ifdef HAVE_FEOF_UNLOCKED
11036ac495dSmrg #  undef feof
11136ac495dSmrg #  define feof(Stream) feof_unlocked (Stream)
11236ac495dSmrg #  if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED
11336ac495dSmrg extern int feof_unlocked (FILE *);
11436ac495dSmrg #  endif
11536ac495dSmrg # endif
11636ac495dSmrg # ifdef HAVE_FILENO_UNLOCKED
11736ac495dSmrg #  undef fileno
11836ac495dSmrg #  define fileno(Stream) fileno_unlocked (Stream)
11936ac495dSmrg #  if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED
12036ac495dSmrg extern int fileno_unlocked (FILE *);
12136ac495dSmrg #  endif
12236ac495dSmrg # endif
12336ac495dSmrg # ifdef HAVE_FFLUSH_UNLOCKED
12436ac495dSmrg #  undef fflush
12536ac495dSmrg #  define fflush(Stream) fflush_unlocked (Stream)
12636ac495dSmrg #  if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED
12736ac495dSmrg extern int fflush_unlocked (FILE *);
12836ac495dSmrg #  endif
12936ac495dSmrg # endif
13036ac495dSmrg # ifdef HAVE_FGETC_UNLOCKED
13136ac495dSmrg #  undef fgetc
13236ac495dSmrg #  define fgetc(Stream) fgetc_unlocked (Stream)
13336ac495dSmrg #  if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED
13436ac495dSmrg extern int fgetc_unlocked (FILE *);
13536ac495dSmrg #  endif
13636ac495dSmrg # endif
13736ac495dSmrg # ifdef HAVE_FGETS_UNLOCKED
13836ac495dSmrg #  undef fgets
13936ac495dSmrg #  define fgets(S, n, Stream) fgets_unlocked (S, n, Stream)
14036ac495dSmrg #  if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED
14136ac495dSmrg extern char *fgets_unlocked (char *, int, FILE *);
14236ac495dSmrg #  endif
14336ac495dSmrg # endif
14436ac495dSmrg # ifdef HAVE_FPUTS_UNLOCKED
14536ac495dSmrg #  undef fputs
14636ac495dSmrg #  define fputs(String, Stream) fputs_unlocked (String, Stream)
14736ac495dSmrg #  if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
14836ac495dSmrg extern int fputs_unlocked (const char *, FILE *);
14936ac495dSmrg #  endif
15036ac495dSmrg # endif
15136ac495dSmrg # ifdef HAVE_FERROR_UNLOCKED
15236ac495dSmrg #  undef ferror
15336ac495dSmrg #  define ferror(Stream) ferror_unlocked (Stream)
15436ac495dSmrg #  if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED
15536ac495dSmrg extern int ferror_unlocked (FILE *);
15636ac495dSmrg #  endif
15736ac495dSmrg # endif
15836ac495dSmrg # ifdef HAVE_FREAD_UNLOCKED
15936ac495dSmrg #  undef fread
16036ac495dSmrg #  define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream)
16136ac495dSmrg #  if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED
16236ac495dSmrg extern size_t fread_unlocked (void *, size_t, size_t, FILE *);
16336ac495dSmrg #  endif
16436ac495dSmrg # endif
16536ac495dSmrg # ifdef HAVE_FWRITE_UNLOCKED
16636ac495dSmrg #  undef fwrite
16736ac495dSmrg #  define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream)
16836ac495dSmrg #  if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
16936ac495dSmrg extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *);
17036ac495dSmrg #  endif
17136ac495dSmrg # endif
17236ac495dSmrg # ifdef HAVE_FPRINTF_UNLOCKED
17336ac495dSmrg #  undef fprintf
17436ac495dSmrg /* We can't use a function-like macro here because we don't know if
17536ac495dSmrg    we have varargs macros.  */
17636ac495dSmrg #  define fprintf fprintf_unlocked
17736ac495dSmrg #  if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED
17836ac495dSmrg extern int fprintf_unlocked (FILE *, const char *, ...);
17936ac495dSmrg #  endif
18036ac495dSmrg # endif
18136ac495dSmrg 
18236ac495dSmrg #ifdef __cplusplus
18336ac495dSmrg }
18436ac495dSmrg #endif
18536ac495dSmrg 
18636ac495dSmrg #endif
18736ac495dSmrg 
18836ac495dSmrg /* ??? Glibc's fwrite/fread_unlocked macros cause
18936ac495dSmrg    "warning: signed and unsigned type in conditional expression".  */
19036ac495dSmrg #undef fread_unlocked
19136ac495dSmrg #undef fwrite_unlocked
19236ac495dSmrg 
19336ac495dSmrg #include <sys/types.h>
19436ac495dSmrg #include <errno.h>
19536ac495dSmrg 
19636ac495dSmrg #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO
19736ac495dSmrg extern int errno;
19836ac495dSmrg #endif
19936ac495dSmrg 
20036ac495dSmrg /* Some of glibc's string inlines cause warnings.  Plus we'd rather
20136ac495dSmrg    rely on (and therefore test) GCC's string builtins.  */
20236ac495dSmrg #define __NO_STRING_INLINES
20336ac495dSmrg 
20436ac495dSmrg #ifdef STRING_WITH_STRINGS
20536ac495dSmrg # include <string.h>
20636ac495dSmrg # include <strings.h>
20736ac495dSmrg #else
20836ac495dSmrg # ifdef HAVE_STRING_H
20936ac495dSmrg #  include <string.h>
21036ac495dSmrg # else
21136ac495dSmrg #  ifdef HAVE_STRINGS_H
21236ac495dSmrg #   include <strings.h>
21336ac495dSmrg #  endif
21436ac495dSmrg # endif
21536ac495dSmrg #endif
21636ac495dSmrg 
21736ac495dSmrg #ifdef HAVE_STDLIB_H
21836ac495dSmrg # include <stdlib.h>
21936ac495dSmrg #endif
22036ac495dSmrg 
22136ac495dSmrg #ifdef HAVE_UNISTD_H
22236ac495dSmrg # include <unistd.h>
22336ac495dSmrg #endif
22436ac495dSmrg 
22536ac495dSmrg #if HAVE_LIMITS_H
22636ac495dSmrg # include <limits.h>
22736ac495dSmrg #endif
22836ac495dSmrg 
22936ac495dSmrg /* Infrastructure for defining missing _MAX and _MIN macros.  Note that
23036ac495dSmrg    macros defined with these cannot be used in #if.  */
23136ac495dSmrg 
23236ac495dSmrg /* The extra casts work around common compiler bugs.  */
23336ac495dSmrg #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))
23436ac495dSmrg /* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
23536ac495dSmrg    It is necessary at least when t == time_t.  */
23636ac495dSmrg #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \
23736ac495dSmrg 			    ? (t) 1 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
23836ac495dSmrg #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t)))
23936ac495dSmrg 
24036ac495dSmrg /* Use that infrastructure to provide a few constants.  */
24136ac495dSmrg #ifndef UCHAR_MAX
24236ac495dSmrg # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char)
24336ac495dSmrg #endif
24436ac495dSmrg 
24536ac495dSmrg #ifdef TIME_WITH_SYS_TIME
24636ac495dSmrg # include <sys/time.h>
24736ac495dSmrg # include <time.h>
24836ac495dSmrg #else
24936ac495dSmrg # if HAVE_SYS_TIME_H
25036ac495dSmrg #  include <sys/time.h>
25136ac495dSmrg # else
25236ac495dSmrg #  ifdef HAVE_TIME_H
25336ac495dSmrg #   include <time.h>
25436ac495dSmrg #  endif
25536ac495dSmrg # endif
25636ac495dSmrg #endif
25736ac495dSmrg 
25836ac495dSmrg #ifdef HAVE_FCNTL_H
25936ac495dSmrg # include <fcntl.h>
26036ac495dSmrg #else
26136ac495dSmrg # ifdef HAVE_SYS_FILE_H
26236ac495dSmrg #  include <sys/file.h>
26336ac495dSmrg # endif
26436ac495dSmrg #endif
26536ac495dSmrg 
26636ac495dSmrg #ifdef HAVE_LOCALE_H
26736ac495dSmrg # include <locale.h>
26836ac495dSmrg #endif
26936ac495dSmrg 
27036ac495dSmrg #ifdef HAVE_LANGINFO_CODESET
27136ac495dSmrg # include <langinfo.h>
27236ac495dSmrg #endif
27336ac495dSmrg 
27436ac495dSmrg #ifndef HAVE_SETLOCALE
27536ac495dSmrg # define setlocale(category, locale) (locale)
27636ac495dSmrg #endif
27736ac495dSmrg 
27836ac495dSmrg #ifdef ENABLE_NLS
27936ac495dSmrg #include <libintl.h>
28036ac495dSmrg #else
28136ac495dSmrg /* Stubs.  */
28236ac495dSmrg # undef dgettext
28336ac495dSmrg # define dgettext(package, msgid) (msgid)
28436ac495dSmrg #endif
28536ac495dSmrg 
28636ac495dSmrg #ifndef _
28736ac495dSmrg # define _(msgid) dgettext (PACKAGE, msgid)
28836ac495dSmrg #endif
28936ac495dSmrg 
29036ac495dSmrg #ifndef N_
29136ac495dSmrg # define N_(msgid) msgid
29236ac495dSmrg #endif
29336ac495dSmrg 
29436ac495dSmrg /* Some systems define these in, e.g., param.h.  We undefine these names
29536ac495dSmrg    here to avoid the warnings.  We prefer to use our definitions since we
29636ac495dSmrg    know they are correct.  */
29736ac495dSmrg 
29836ac495dSmrg #undef MIN
29936ac495dSmrg #undef MAX
30036ac495dSmrg #define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
30136ac495dSmrg #define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
30236ac495dSmrg 
30336ac495dSmrg /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1.  If they
30436ac495dSmrg    are defined to 0 then we must provide the relevant declaration
30536ac495dSmrg    here.  These checks will be in the undefined state while configure
30636ac495dSmrg    is running so be careful to test "defined (HAVE_DECL_*)".  */
30736ac495dSmrg 
30836ac495dSmrg #ifdef __cplusplus
30936ac495dSmrg extern "C" {
31036ac495dSmrg #endif
31136ac495dSmrg 
31236ac495dSmrg #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT
31336ac495dSmrg extern void abort (void);
31436ac495dSmrg #endif
31536ac495dSmrg 
31636ac495dSmrg #ifdef __cplusplus
31736ac495dSmrg }
31836ac495dSmrg #endif
31936ac495dSmrg 
32036ac495dSmrg #if HAVE_SYS_STAT_H
32136ac495dSmrg # include <sys/stat.h>
32236ac495dSmrg #endif
32336ac495dSmrg 
32436ac495dSmrg /* Test if something is a normal file.  */
32536ac495dSmrg #ifndef S_ISREG
32636ac495dSmrg #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
32736ac495dSmrg #endif
32836ac495dSmrg 
32936ac495dSmrg /* Test if something is a directory.  */
33036ac495dSmrg #ifndef S_ISDIR
33136ac495dSmrg #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
33236ac495dSmrg #endif
33336ac495dSmrg 
33436ac495dSmrg /* Test if something is a character special file.  */
33536ac495dSmrg #ifndef S_ISCHR
33636ac495dSmrg #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
33736ac495dSmrg #endif
33836ac495dSmrg 
33936ac495dSmrg /* Test if something is a block special file.  */
34036ac495dSmrg #ifndef S_ISBLK
34136ac495dSmrg #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
34236ac495dSmrg #endif
34336ac495dSmrg 
34436ac495dSmrg /* Test if something is a socket.  */
34536ac495dSmrg #ifndef S_ISSOCK
34636ac495dSmrg # ifdef S_IFSOCK
34736ac495dSmrg #   define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
34836ac495dSmrg # else
34936ac495dSmrg #   define S_ISSOCK(m) 0
35036ac495dSmrg # endif
35136ac495dSmrg #endif
35236ac495dSmrg 
35336ac495dSmrg /* Test if something is a FIFO.  */
35436ac495dSmrg #ifndef S_ISFIFO
35536ac495dSmrg # ifdef S_IFIFO
35636ac495dSmrg #  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
35736ac495dSmrg # else
35836ac495dSmrg #  define S_ISFIFO(m) 0
35936ac495dSmrg # endif
36036ac495dSmrg #endif
36136ac495dSmrg 
36236ac495dSmrg /* Approximate O_NOCTTY and O_BINARY.  */
36336ac495dSmrg #ifndef O_NOCTTY
36436ac495dSmrg #define O_NOCTTY 0
36536ac495dSmrg #endif
36636ac495dSmrg #ifndef O_BINARY
36736ac495dSmrg # define O_BINARY 0
36836ac495dSmrg #endif
36936ac495dSmrg 
37036ac495dSmrg /* Filename handling macros.  */
37136ac495dSmrg #include "filenames.h"
37236ac495dSmrg 
37336ac495dSmrg /* Get libiberty declarations.  */
37436ac495dSmrg #include "libiberty.h"
37536ac495dSmrg #include "safe-ctype.h"
37636ac495dSmrg 
37736ac495dSmrg /* 1 if we have C99 designated initializers.
37836ac495dSmrg 
37936ac495dSmrg    ??? C99 designated initializers are not supported by most C++
38036ac495dSmrg    compilers, including G++.  -- gdr, 2005-05-18  */
38136ac495dSmrg #if !defined(HAVE_DESIGNATED_INITIALIZERS)
38236ac495dSmrg #ifdef __cplusplus
38336ac495dSmrg #define HAVE_DESIGNATED_INITIALIZERS 0
38436ac495dSmrg #else
38536ac495dSmrg #define HAVE_DESIGNATED_INITIALIZERS \
38636ac495dSmrg    ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
38736ac495dSmrg #endif
38836ac495dSmrg #endif
38936ac495dSmrg 
39036ac495dSmrg #ifndef offsetof
39136ac495dSmrg #define offsetof(TYPE, MEMBER)	((size_t) &((TYPE *) 0)->MEMBER)
39236ac495dSmrg #endif
39336ac495dSmrg 
39436ac495dSmrg /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that
39536ac495dSmrg    the most likely value of A is B.  This feature was added at some point
39636ac495dSmrg    between 2.95 and 3.0.  Let's use 3.0 as the lower bound for now.  */
39736ac495dSmrg #if (GCC_VERSION < 3000)
39836ac495dSmrg #define __builtin_expect(a, b) (a)
39936ac495dSmrg #endif
40036ac495dSmrg 
40136ac495dSmrg /* Redefine abort to report an internal error w/o coredump, and
40236ac495dSmrg    reporting the location of the error in the source file.  */
40336ac495dSmrg extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
40436ac495dSmrg #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
40536ac495dSmrg 
40636ac495dSmrg /* Use gcc_assert(EXPR) to test invariants.  */
40736ac495dSmrg #if ENABLE_ASSERT_CHECKING
40836ac495dSmrg #define gcc_assert(EXPR) 						\
40936ac495dSmrg    ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
41036ac495dSmrg #elif (GCC_VERSION >= 4005)
41136ac495dSmrg #define gcc_assert(EXPR) 						\
41236ac495dSmrg   ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0))
41336ac495dSmrg #else
41436ac495dSmrg /* Include EXPR, so that unused variable warnings do not occur.  */
41536ac495dSmrg #define gcc_assert(EXPR) ((void)(0 && (EXPR)))
41636ac495dSmrg #endif
41736ac495dSmrg 
41836ac495dSmrg #if CHECKING_P
41936ac495dSmrg #define gcc_checking_assert(EXPR) gcc_assert (EXPR)
42036ac495dSmrg #else
42136ac495dSmrg /* N.B.: in release build EXPR is not evaluated.  */
42236ac495dSmrg #define gcc_checking_assert(EXPR) ((void)(0 && (EXPR)))
42336ac495dSmrg #endif
42436ac495dSmrg 
42536ac495dSmrg /* Provide a fake boolean type.  We make no attempt to use the
42636ac495dSmrg    C99 _Bool, as it may not be available in the bootstrap compiler,
42736ac495dSmrg    and even if it is, it is liable to be buggy.
42836ac495dSmrg    This must be after all inclusion of system headers, as some of
42936ac495dSmrg    them will mess us up.  */
43036ac495dSmrg #undef bool
43136ac495dSmrg #undef true
43236ac495dSmrg #undef false
43336ac495dSmrg #undef TRUE
43436ac495dSmrg #undef FALSE
43536ac495dSmrg 
43636ac495dSmrg #ifndef __cplusplus
43736ac495dSmrg #define bool unsigned char
43836ac495dSmrg #endif
43936ac495dSmrg #define true 1
44036ac495dSmrg #define false 0
44136ac495dSmrg 
44236ac495dSmrg /* Some compilers do not allow the use of unsigned char in bitfields.  */
44336ac495dSmrg #define BOOL_BITFIELD unsigned int
44436ac495dSmrg 
44536ac495dSmrg /* Poison identifiers we do not want to use.  */
44636ac495dSmrg #if (GCC_VERSION >= 3000)
44736ac495dSmrg #undef calloc
44836ac495dSmrg #undef strdup
44936ac495dSmrg #undef malloc
45036ac495dSmrg #undef realloc
45136ac495dSmrg  #pragma GCC poison calloc strdup
45236ac495dSmrg  #pragma GCC poison malloc realloc
45336ac495dSmrg 
45436ac495dSmrg /* Libiberty macros that are no longer used in GCC.  */
45536ac495dSmrg #undef ANSI_PROTOTYPES
45636ac495dSmrg #undef PTR_CONST
45736ac495dSmrg #undef LONG_DOUBLE
45836ac495dSmrg #undef VPARAMS
45936ac495dSmrg #undef VA_OPEN
46036ac495dSmrg #undef VA_FIXEDARG
46136ac495dSmrg #undef VA_CLOSE
46236ac495dSmrg #undef VA_START
46336ac495dSmrg  #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \
46436ac495dSmrg   VA_FIXEDARG VA_CLOSE VA_START
46536ac495dSmrg 
46636ac495dSmrg /* Note: not all uses of the `index' token (e.g. variable names and
46736ac495dSmrg    structure members) have been eliminated.  */
46836ac495dSmrg #undef bcopy
46936ac495dSmrg #undef bzero
47036ac495dSmrg #undef bcmp
47136ac495dSmrg #undef rindex
47236ac495dSmrg  #pragma GCC poison bcopy bzero bcmp rindex
47336ac495dSmrg 
47436ac495dSmrg #endif /* GCC >= 3.0 */
47536ac495dSmrg #endif /* ! LIBCPP_SYSTEM_H */
476