LCOV - code coverage report
Current view: top level - gcc - system.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 100.0 % 10 10
Test Date: 2026-07-11 15:47:05 Functions: 100.0 % 2 2
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* Get common system includes and various definitions and declarations based
       2              :    on autoconf macros.
       3              :    Copyright (C) 1998-2026 Free Software Foundation, Inc.
       4              : 
       5              : This file is part of GCC.
       6              : 
       7              : GCC is free software; you can redistribute it and/or modify it under
       8              : the terms of the GNU General Public License as published by the Free
       9              : Software Foundation; either version 3, or (at your option) any later
      10              : version.
      11              : 
      12              : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      13              : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      14              : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      15              : for more details.
      16              : 
      17              : You should have received a copy of the GNU General Public License
      18              : along with GCC; see the file COPYING3.  If not see
      19              : <http://www.gnu.org/licenses/>.  */
      20              : 
      21              : 
      22              : #ifndef GCC_SYSTEM_H
      23              : #define GCC_SYSTEM_H
      24              : 
      25              : /* Define this so that inttypes.h defines the PRI?64 macros even
      26              :    when compiling with a C++ compiler.  Define it here so in the
      27              :    event inttypes.h gets pulled in by another header it is already
      28              :    defined.  */
      29              : #define __STDC_FORMAT_MACROS
      30              : 
      31              : /* We must include stdarg.h before stdio.h.  */
      32              : #include <stdarg.h>
      33              : 
      34              : #ifndef va_copy
      35              : # ifdef __va_copy
      36              : #   define va_copy(d,s)  __va_copy (d, s)
      37              : # else
      38              : #   define va_copy(d,s)  ((d) = (s))
      39              : # endif
      40              : #endif
      41              : 
      42              : #ifdef HAVE_STDDEF_H
      43              : # include <stddef.h>
      44              : #endif
      45              : 
      46              : #include <stdio.h>
      47              : 
      48              : /* Define a generic NULL if one hasn't already been defined.  */
      49              : #ifndef NULL
      50              : #define NULL 0
      51              : #endif
      52              : 
      53              : /* Use the unlocked open routines from libiberty.  */
      54              : 
      55              : /* Some of these are #define on some systems, e.g. on AIX to redirect
      56              :    the names to 64bit capable functions for LARGE_FILES support. These
      57              :    redefs are pointless here so we can override them.  */
      58              : 
      59              : #undef fopen
      60              : #undef freopen
      61              : 
      62              : #define fopen(PATH, MODE) fopen_unlocked (PATH, MODE)
      63              : #define fdopen(FILDES, MODE) fdopen_unlocked (FILDES, MODE)
      64              : #define freopen(PATH, MODE, STREAM) freopen_unlocked (PATH, MODE, STREAM)
      65              : 
      66              : /* The compiler is not a multi-threaded application and therefore we
      67              :    do not have to use the locking functions.  In fact, using the locking
      68              :    functions can cause the compiler to be significantly slower under
      69              :    I/O bound conditions (such as -g -O0 on very large source files).
      70              : 
      71              :    HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio
      72              :    code is multi-thread safe by default.  If it is set to 0, then do
      73              :    not worry about using the _unlocked functions.
      74              : 
      75              :    fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are
      76              :    extensions and need to be prototyped by hand (since we do not
      77              :    define _GNU_SOURCE).  */
      78              : 
      79              : #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED
      80              : 
      81              : # ifdef HAVE_PUTC_UNLOCKED
      82              : #  undef putc
      83              : #  define putc(C, Stream) putc_unlocked (C, Stream)
      84              : # endif
      85              : # ifdef HAVE_PUTCHAR_UNLOCKED
      86              : #  undef putchar
      87              : #  define putchar(C) putchar_unlocked (C)
      88              : # endif
      89              : # ifdef HAVE_GETC_UNLOCKED
      90              : #  undef getc
      91              : #  define getc(Stream) getc_unlocked (Stream)
      92              : # endif
      93              : # ifdef HAVE_GETCHAR_UNLOCKED
      94              : #  undef getchar
      95              : #  define getchar() getchar_unlocked ()
      96              : # endif
      97              : # ifdef HAVE_FPUTC_UNLOCKED
      98              : #  undef fputc
      99              : #  define fputc(C, Stream) fputc_unlocked (C, Stream)
     100              : # endif
     101              : 
     102              : #ifdef __cplusplus
     103              : extern "C" {
     104              : #endif
     105              : 
     106              : # ifdef HAVE_CLEARERR_UNLOCKED
     107              : #  undef clearerr
     108              : #  define clearerr(Stream) clearerr_unlocked (Stream)
     109              : #  if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED
     110              : extern void clearerr_unlocked (FILE *);
     111              : #  endif
     112              : # endif
     113              : # ifdef HAVE_FEOF_UNLOCKED
     114              : #  undef feof
     115              : #  define feof(Stream) feof_unlocked (Stream)
     116              : #  if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED
     117              : extern int feof_unlocked (FILE *);
     118              : #  endif
     119              : # endif
     120              : # ifdef HAVE_FILENO_UNLOCKED
     121              : #  undef fileno
     122              : #  define fileno(Stream) fileno_unlocked (Stream)
     123              : #  if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED
     124              : extern int fileno_unlocked (FILE *);
     125              : #  endif
     126              : # endif
     127              : # ifdef HAVE_FFLUSH_UNLOCKED
     128              : #  undef fflush
     129              : #  define fflush(Stream) fflush_unlocked (Stream)
     130              : #  if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED
     131              : extern int fflush_unlocked (FILE *);
     132              : #  endif
     133              : # endif
     134              : # ifdef HAVE_FGETC_UNLOCKED
     135              : #  undef fgetc
     136              : #  define fgetc(Stream) fgetc_unlocked (Stream)
     137              : #  if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED
     138              : extern int fgetc_unlocked (FILE *);
     139              : #  endif
     140              : # endif
     141              : # ifdef HAVE_FGETS_UNLOCKED
     142              : #  undef fgets
     143              : #  define fgets(S, n, Stream) fgets_unlocked (S, n, Stream)
     144              : #  if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED
     145              : extern char *fgets_unlocked (char *, int, FILE *);
     146              : #  endif
     147              : # endif
     148              : # ifdef HAVE_FPUTS_UNLOCKED
     149              : #  undef fputs
     150              : #  define fputs(String, Stream) fputs_unlocked (String, Stream)
     151              : #  if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
     152              : extern int fputs_unlocked (const char *, FILE *);
     153              : #  endif
     154              : # endif
     155              : # ifdef HAVE_FERROR_UNLOCKED
     156              : #  undef ferror
     157              : #  define ferror(Stream) ferror_unlocked (Stream)
     158              : #  if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED
     159              : extern int ferror_unlocked (FILE *);
     160              : #  endif
     161              : # endif
     162              : # ifdef HAVE_FREAD_UNLOCKED
     163              : #  undef fread
     164              : #  define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream)
     165              : #  if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED
     166              : extern size_t fread_unlocked (void *, size_t, size_t, FILE *);
     167              : #  endif
     168              : # endif
     169              : # ifdef HAVE_FWRITE_UNLOCKED
     170              : #  undef fwrite
     171              : #  define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream)
     172              : #  if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
     173              : extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *);
     174              : #  endif
     175              : # endif
     176              : # ifdef HAVE_FPRINTF_UNLOCKED
     177              : #  undef fprintf
     178              : /* We can't use a function-like macro here because we don't know if
     179              :    we have varargs macros.  */
     180              : #  define fprintf fprintf_unlocked
     181              : #  if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED
     182              : extern int fprintf_unlocked (FILE *, const char *, ...);
     183              : #  endif
     184              : # endif
     185              : 
     186              : #ifdef __cplusplus
     187              : }
     188              : #endif
     189              : 
     190              : #endif
     191              : 
     192              : /* ??? Glibc's fwrite/fread_unlocked macros cause
     193              :    "warning: signed and unsigned type in conditional expression".  */
     194              : #undef fread_unlocked
     195              : #undef fwrite_unlocked
     196              : 
     197              : /* Include C++ standard headers before "safe-ctype.h" to avoid GCC
     198              :    poisoning the ctype macros through safe-ctype.h */
     199              : 
     200              : #ifdef __cplusplus
     201              : #if defined (INCLUDE_ALGORITHM) || !defined (HAVE_SWAP_IN_UTILITY)
     202              : # include <algorithm>
     203              : #endif
     204              : #ifdef INCLUDE_DEQUE
     205              : # include <deque>
     206              : #endif
     207              : #ifdef INCLUDE_LIST
     208              : # include <list>
     209              : #endif
     210              : #ifdef INCLUDE_MAP
     211              : # include <map>
     212              : #endif
     213              : #ifdef INCLUDE_SET
     214              : # include <set>
     215              : #endif
     216              : #ifdef INCLUDE_STRING
     217              : # include <string>
     218              : #endif
     219              : #ifdef INCLUDE_VECTOR
     220              : # include <vector>
     221              : #endif
     222              : #ifdef INCLUDE_ARRAY
     223              : # include <array>
     224              : #endif
     225              : #ifdef INCLUDE_FUNCTIONAL
     226              : # include <functional>
     227              : #endif
     228              : #ifdef INCLUDE_SSTREAM
     229              : # include <sstream>
     230              : #endif
     231              : #ifdef INCLUDE_ITERATOR
     232              : # include <iterator>
     233              : #endif
     234              : # include <memory>
     235              : # include <cstring>
     236              : # include <initializer_list>
     237              : # include <new>
     238              : # include <utility>
     239              : # include <type_traits>
     240              : #endif
     241              : 
     242              : /* There are an extraordinary number of issues with <ctype.h>.
     243              :    The last straw is that it varies with the locale.  Use libiberty's
     244              :    replacement instead.  */
     245              : #include "safe-ctype.h"
     246              : 
     247              : #include <sys/types.h>
     248              : 
     249              : #include <errno.h>
     250              : 
     251              : #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO
     252              : extern int errno;
     253              : #endif
     254              : 
     255              : /* Some of glibc's string inlines cause warnings.  Plus we'd rather
     256              :    rely on (and therefore test) GCC's string builtins.  */
     257              : #define __NO_STRING_INLINES
     258              : 
     259              : #ifdef STRING_WITH_STRINGS
     260              : # include <string.h>
     261              : # include <strings.h>
     262              : #else
     263              : # ifdef HAVE_STRING_H
     264              : #  include <string.h>
     265              : # else
     266              : #  ifdef HAVE_STRINGS_H
     267              : #   include <strings.h>
     268              : #  endif
     269              : # endif
     270              : #endif
     271              : 
     272              : #ifdef HAVE_STDLIB_H
     273              : # include <stdlib.h>
     274              : #endif
     275              : 
     276              : /* When compiling C++ we need to include <cstdlib> as well as <stdlib.h> so
     277              :    that it is processed before we poison "malloc"; otherwise, if a source
     278              :    file uses a standard library header that includes <cstdlib>, we will get
     279              :    an error about 'using std::malloc'.  */
     280              : #ifdef __cplusplus
     281              : #include <cstdlib>
     282              : #endif
     283              : 
     284              : /* Undef vec_free from AIX stdlib.h header which conflicts with vec.h.  */
     285              : #undef vec_free
     286              : 
     287              : /* If we don't have an overriding definition, set SUCCESS_EXIT_CODE and
     288              :    FATAL_EXIT_CODE to EXIT_SUCCESS and EXIT_FAILURE respectively,
     289              :    or 0 and 1 if those macros are not defined.  */
     290              : #ifndef SUCCESS_EXIT_CODE
     291              : # ifdef EXIT_SUCCESS
     292              : #  define SUCCESS_EXIT_CODE EXIT_SUCCESS
     293              : # else
     294              : #  define SUCCESS_EXIT_CODE 0
     295              : # endif
     296              : #endif
     297              : 
     298              : #ifndef FATAL_EXIT_CODE
     299              : # ifdef EXIT_FAILURE
     300              : #  define FATAL_EXIT_CODE EXIT_FAILURE
     301              : # else
     302              : #  define FATAL_EXIT_CODE 1
     303              : # endif
     304              : #endif
     305              : 
     306              : #define ICE_EXIT_CODE 4
     307              : 
     308              : #ifdef HAVE_UNISTD_H
     309              : # include <unistd.h>
     310              : #endif
     311              : 
     312              : #ifdef HAVE_SYS_PARAM_H
     313              : # include <sys/param.h>
     314              : /* We use these identifiers later and they appear in some vendor param.h's.  */
     315              : # undef PREFETCH
     316              : # undef m_slot
     317              : #endif
     318              : 
     319              : #if HAVE_LIMITS_H
     320              : # include <limits.h>
     321              : #endif
     322              : 
     323              : /* A macro to determine whether a VALUE lies inclusively within a
     324              :    certain range without evaluating the VALUE more than once.  This
     325              :    macro won't warn if the VALUE is unsigned and the LOWER bound is
     326              :    zero, as it would e.g. with "VALUE >= 0 && ...".  Note the LOWER
     327              :    bound *is* evaluated twice, and LOWER must not be greater than
     328              :    UPPER.  However the bounds themselves can be either positive or
     329              :    negative.  */
     330              : #define IN_RANGE(VALUE, LOWER, UPPER) \
     331              :   ((unsigned HOST_WIDE_INT) (VALUE) - (unsigned HOST_WIDE_INT) (LOWER) \
     332              :    <= (unsigned HOST_WIDE_INT) (UPPER) - (unsigned HOST_WIDE_INT) (LOWER))
     333              : 
     334              : /* Infrastructure for defining missing _MAX and _MIN macros.  Note that
     335              :    macros defined with these cannot be used in #if.  */
     336              : 
     337              : /* The extra casts work around common compiler bugs.  */
     338              : #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))
     339              : /* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
     340              :    It is necessary at least when t == time_t.  */
     341              : #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \
     342              :                             ? (t) 1 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
     343              : #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t)))
     344              : 
     345              : /* Use that infrastructure to provide a few constants.  */
     346              : #ifndef UCHAR_MAX
     347              : # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char)
     348              : #endif
     349              : 
     350              : #ifdef TIME_WITH_SYS_TIME
     351              : # include <sys/time.h>
     352              : # include <time.h>
     353              : #else
     354              : # if HAVE_SYS_TIME_H
     355              : #  include <sys/time.h>
     356              : # else
     357              : #  ifdef HAVE_TIME_H
     358              : #   include <time.h>
     359              : #  endif
     360              : # endif
     361              : #endif
     362              : 
     363              : #ifdef HAVE_FCNTL_H
     364              : # include <fcntl.h>
     365              : #else
     366              : # ifdef HAVE_SYS_FILE_H
     367              : #  include <sys/file.h>
     368              : # endif
     369              : #endif
     370              : 
     371              : #ifdef HAVE_SYS_LOCKING_H
     372              : # include <sys/locking.h>
     373              : #endif
     374              : 
     375              : #ifndef SEEK_SET
     376              : # define SEEK_SET 0
     377              : # define SEEK_CUR 1
     378              : # define SEEK_END 2
     379              : #endif
     380              : #ifndef F_OK
     381              : # define F_OK 0
     382              : # define X_OK 1
     383              : # define W_OK 2
     384              : # define R_OK 4
     385              : #endif
     386              : #ifndef O_RDONLY
     387              : # define O_RDONLY 0
     388              : #endif
     389              : #ifndef O_WRONLY
     390              : # define O_WRONLY 1
     391              : #endif
     392              : #ifndef O_BINARY
     393              : # define O_BINARY 0
     394              : #endif
     395              : 
     396              : /* Some systems define these in, e.g., param.h.  We undefine these names
     397              :    here to avoid the warnings.  We prefer to use our definitions since we
     398              :    know they are correct.  */
     399              : 
     400              : #undef MIN
     401              : #undef MAX
     402              : #define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
     403              : #define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
     404              : 
     405              : /* Returns the least number N such that N * Y >= X.  */
     406              : #define CEIL(x,y) (((x) + (y) - 1) / (y))
     407              : 
     408              : /* This macro rounds x up to the y boundary.  */
     409              : #define ROUND_UP(x,y) (((x) + (y) - 1) & ~((y) - 1))
     410              : 
     411              : /* This macro rounds x down to the y boundary.  */
     412              : #define ROUND_DOWN(x,y) ((x) & ~((y) - 1))
     413              : 
     414              : #ifdef HAVE_SYS_WAIT_H
     415              : #include <sys/wait.h>
     416              : #endif
     417              : 
     418              : #ifndef WIFSIGNALED
     419              : #define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f)
     420              : #endif
     421              : #ifndef WTERMSIG
     422              : #define WTERMSIG(S) ((S) & 0x7f)
     423              : #endif
     424              : #ifndef WIFEXITED
     425              : #define WIFEXITED(S) (((S) & 0xff) == 0)
     426              : #endif
     427              : #ifndef WEXITSTATUS
     428              : #define WEXITSTATUS(S) (((S) & 0xff00) >> 8)
     429              : #endif
     430              : #ifndef WSTOPSIG
     431              : #define WSTOPSIG WEXITSTATUS
     432              : #endif
     433              : #ifndef WCOREDUMP
     434              : #define WCOREDUMP(S) ((S) & WCOREFLG)
     435              : #endif
     436              : #ifndef WCOREFLG
     437              : #define WCOREFLG 0200
     438              : #endif
     439              : 
     440              : #include <signal.h>
     441              : #if !defined (SIGCHLD) && defined (SIGCLD)
     442              : # define SIGCHLD SIGCLD
     443              : #endif
     444              : 
     445              : #ifdef HAVE_SYS_MMAN_H
     446              : # include <sys/mman.h>
     447              : #endif
     448              : 
     449              : #ifndef MAP_FAILED
     450              : # define MAP_FAILED ((void *)-1)
     451              : #endif
     452              : 
     453              : #if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
     454              : # define MAP_ANONYMOUS MAP_ANON
     455              : #endif
     456              : 
     457              : #ifdef HAVE_SYS_RESOURCE_H
     458              : # include <sys/resource.h>
     459              : #endif
     460              : 
     461              : #ifdef HAVE_SYS_TIMES_H
     462              : # include <sys/times.h>
     463              : #endif
     464              : 
     465              : /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1.  If they
     466              :    are defined to 0 then we must provide the relevant declaration
     467              :    here.  These checks will be in the undefined state while configure
     468              :    is running so be careful to test "defined (HAVE_DECL_*)".  */
     469              : 
     470              : #ifdef __cplusplus
     471              : extern "C" {
     472              : #endif
     473              : 
     474              : #if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF
     475              : extern double atof (const char *);
     476              : #endif
     477              : 
     478              : #if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL
     479              : extern long atol (const char *);
     480              : #endif
     481              : 
     482              : #if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE
     483              : extern void free (void *);
     484              : #endif
     485              : 
     486              : #if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD
     487              : extern char *getcwd (char *, size_t);
     488              : #endif
     489              : 
     490              : #if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV
     491              : extern char *getenv (const char *);
     492              : #endif
     493              : 
     494              : #if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT
     495              : extern int getopt (int, char * const *, const char *);
     496              : #endif
     497              : 
     498              : #if defined (HAVE_DECL_GETPAGESIZE) && !HAVE_DECL_GETPAGESIZE
     499              : extern int getpagesize (void);
     500              : #endif
     501              : 
     502              : #if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD
     503              : extern char *getwd (char *);
     504              : #endif
     505              : 
     506              : #if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK
     507              : extern void *sbrk (int);
     508              : #endif
     509              : 
     510              : #if defined (HAVE_DECL_SETENV) && !HAVE_DECL_SETENV
     511              : int setenv(const char *, const char *, int);
     512              : #endif
     513              : 
     514              : #if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR
     515              : extern char *strstr (const char *, const char *);
     516              : #endif
     517              : 
     518              : #if defined (HAVE_DECL_STPCPY) && !HAVE_DECL_STPCPY
     519              : extern char *stpcpy (char *, const char *);
     520              : #endif
     521              : 
     522              : #if defined (HAVE_DECL_UNSETENV) && !HAVE_DECL_UNSETENV
     523              : int unsetenv(const char *);
     524              : #endif
     525              : 
     526              : #if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC
     527              : extern void *malloc (size_t);
     528              : #endif
     529              : 
     530              : #if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC
     531              : extern void *calloc (size_t, size_t);
     532              : #endif
     533              : 
     534              : #if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC
     535              : extern void *realloc (void *, size_t);
     536              : #endif
     537              : 
     538              : #ifdef __cplusplus
     539              : }
     540              : #endif
     541              : 
     542              : #ifdef HAVE_STDINT_H
     543              : #include <stdint.h>
     544              : #endif
     545              : 
     546              : #ifdef HAVE_INTTYPES_H
     547              : #include <inttypes.h>
     548              : #endif
     549              : 
     550              : #ifndef SIZE_MAX
     551              : # define SIZE_MAX INTTYPE_MAXIMUM (size_t)
     552              : #endif
     553              : 
     554              : #ifdef __cplusplus
     555              : extern "C" {
     556              : #endif
     557              : 
     558              : /* If the system doesn't provide strsignal, we get it defined in
     559              :    libiberty but no declaration is supplied.  */
     560              : #if !defined (HAVE_STRSIGNAL) \
     561              :     || (defined (HAVE_DECL_STRSIGNAL) && !HAVE_DECL_STRSIGNAL)
     562              : # ifndef strsignal
     563              : extern const char *strsignal (int);
     564              : # endif
     565              : #endif
     566              : 
     567              : #ifdef HAVE_GETRLIMIT
     568              : # if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT
     569              : #  ifndef getrlimit
     570              : struct rlimit;
     571              : extern int getrlimit (int, struct rlimit *);
     572              : #  endif
     573              : # endif
     574              : #endif
     575              : 
     576              : #ifdef HAVE_SETRLIMIT
     577              : # if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT
     578              : #  ifndef setrlimit
     579              : struct rlimit;
     580              : extern int setrlimit (int, const struct rlimit *);
     581              : #  endif
     582              : # endif
     583              : #endif
     584              : 
     585              : #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT
     586              : extern void abort (void);
     587              : #endif
     588              : 
     589              : #if defined (HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF
     590              : extern int snprintf (char *, size_t, const char *, ...);
     591              : #endif
     592              : 
     593              : #if defined (HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
     594              : extern int vsnprintf (char *, size_t, const char *, va_list);
     595              : #endif
     596              : 
     597              : #ifdef __cplusplus
     598              : }
     599              : #endif
     600              : 
     601              : /* 1 if we have C99 designated initializers.  */
     602              : #if !defined(HAVE_DESIGNATED_INITIALIZERS)
     603              : #ifdef __cplusplus
     604              : #define HAVE_DESIGNATED_INITIALIZERS 0
     605              : #else
     606              : #define HAVE_DESIGNATED_INITIALIZERS \
     607              :   ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
     608              : #endif
     609              : #endif
     610              : 
     611              : #if !defined(HAVE_DESIGNATED_UNION_INITIALIZERS)
     612              : #ifdef __cplusplus
     613              : #define HAVE_DESIGNATED_UNION_INITIALIZERS (GCC_VERSION >= 4007)
     614              : #else
     615              : #define HAVE_DESIGNATED_UNION_INITIALIZERS \
     616              :   ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
     617              : #endif
     618              : #endif
     619              : 
     620              : #if HAVE_SYS_STAT_H
     621              : # include <sys/stat.h>
     622              : #endif
     623              : 
     624              : /* Test if something is a normal file.  */
     625              : #ifndef S_ISREG
     626              : #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
     627              : #endif
     628              : 
     629              : /* Test if something is a directory.  */
     630              : #ifndef S_ISDIR
     631              : #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
     632              : #endif
     633              : 
     634              : /* Test if something is a character special file.  */
     635              : #ifndef S_ISCHR
     636              : #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
     637              : #endif
     638              : 
     639              : /* Test if something is a block special file.  */
     640              : #ifndef S_ISBLK
     641              : #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
     642              : #endif
     643              : 
     644              : /* Test if something is a socket.  */
     645              : #ifndef S_ISSOCK
     646              : # ifdef S_IFSOCK
     647              : #   define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
     648              : # else
     649              : #   define S_ISSOCK(m) 0
     650              : # endif
     651              : #endif
     652              : 
     653              : /* Test if something is a FIFO.  */
     654              : #ifndef S_ISFIFO
     655              : # ifdef S_IFIFO
     656              : #  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
     657              : # else
     658              : #  define S_ISFIFO(m) 0
     659              : # endif
     660              : #endif
     661              : 
     662              : /* Define well known filenos if the system does not define them.  */
     663              : #ifndef STDIN_FILENO
     664              : # define STDIN_FILENO   0
     665              : #endif
     666              : #ifndef STDOUT_FILENO
     667              : # define STDOUT_FILENO  1
     668              : #endif
     669              : #ifndef STDERR_FILENO
     670              : # define STDERR_FILENO  2
     671              : #endif
     672              : 
     673              : /* Some systems have mkdir that takes a single argument.  */
     674              : #ifdef MKDIR_TAKES_ONE_ARG
     675              : # define mkdir(a,b) mkdir (a)
     676              : #endif
     677              : 
     678              : #ifndef HAVE_KILL
     679              : # define kill(p,s) raise (s)
     680              : #endif
     681              : 
     682              : /* Provide a way to print an address via printf.  */
     683              : #ifndef HOST_PTR_PRINTF
     684              : #define HOST_PTR_PRINTF "%p"
     685              : #endif /* ! HOST_PTR_PRINTF */
     686              : 
     687              : /* By default, colon separates directories in a path.  */
     688              : #ifndef PATH_SEPARATOR
     689              : #define PATH_SEPARATOR ':'
     690              : #endif
     691              : 
     692              : /* Filename handling macros.  */
     693              : #include "filenames.h"
     694              : 
     695              : /* These should be phased out in favor of IS_DIR_SEPARATOR, where possible.  */
     696              : #ifndef DIR_SEPARATOR
     697              : # define DIR_SEPARATOR '/'
     698              : # ifdef HAVE_DOS_BASED_FILE_SYSTEM
     699              : #  define DIR_SEPARATOR_2 '\\'
     700              : # endif
     701              : #endif
     702              : 
     703              : #if defined (INCLUDE_DLFCN_H) && defined (HAVE_DLFCN_H)
     704              : /* If plugin support is enabled, we could use libdl.  */
     705              : #include <dlfcn.h>
     706              : #endif
     707              : 
     708              : /* Do not introduce a gmp.h dependency on the build system.  */
     709              : #ifndef GENERATOR_FILE
     710              : #include <gmp.h>
     711              : 
     712              : class auto_mpz
     713              : {
     714              : public:
     715     20593653 :   auto_mpz () { mpz_init (m_mpz); }
     716     20593653 :   ~auto_mpz () { mpz_clear (m_mpz); }
     717              : 
     718     28804344 :   operator mpz_t& () { return m_mpz; }
     719              :   mpz_ptr operator-> () { return m_mpz; }
     720              : 
     721              :   auto_mpz (const auto_mpz &) = delete;
     722              :   auto_mpz &operator= (const auto_mpz &) = delete;
     723              : 
     724              : #if GCC_VERSION < 4008 || GCC_VERSION >= 5000
     725              :   /* GCC 4.8 and 4.9 don't support this, only fixed in PR62101 for 5.0.  */
     726              :   friend void mpz_clear (auto_mpz&) = delete;
     727              :   friend void mpz_init (auto_mpz&) = delete;
     728              : #endif
     729              : 
     730              : private:
     731              :   mpz_t m_mpz;
     732              : };
     733              : #endif
     734              : 
     735              : /* Get libiberty declarations.  */
     736              : #include "libiberty.h"
     737              : 
     738              : #undef FFS  /* Some systems predefine this symbol; don't let it interfere.  */
     739              : #undef FLOAT /* Likewise.  */
     740              : #undef ABS /* Likewise.  */
     741              : #undef PC /* Likewise.  */
     742              : 
     743              : /* Provide a default for the HOST_BIT_BUCKET.
     744              :    This suffices for POSIX-like hosts.  */
     745              : 
     746              : #ifndef HOST_BIT_BUCKET
     747              : #define HOST_BIT_BUCKET "/dev/null"
     748              : #endif
     749              : 
     750              : #ifndef offsetof
     751              : #define offsetof(TYPE, MEMBER)  ((size_t) &((TYPE *) 0)->MEMBER)
     752              : #endif
     753              : 
     754              : /* Various error reporting routines want to use __FUNCTION__.  */
     755              : #if (GCC_VERSION < 2007)
     756              : #ifndef __FUNCTION__
     757              : #define __FUNCTION__ "?"
     758              : #endif /* ! __FUNCTION__ */
     759              : #endif
     760              : 
     761              : /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that
     762              :    the most likely value of A is B.  This feature was added at some point
     763              :    between 2.95 and 3.0.  Let's use 3.0 as the lower bound for now.  */
     764              : #if (GCC_VERSION < 3000)
     765              : #define __builtin_expect(a, b) (a)
     766              : #endif
     767              : 
     768              : #define LIKELY(x) (__builtin_expect ((x), 1))
     769              : #define UNLIKELY(x) (__builtin_expect ((x), 0))
     770              : 
     771              : 
     772              : #ifdef INCLUDE_MUTEX
     773              : # include <mutex>
     774              : #endif
     775              : 
     776              : #ifdef INCLUDE_MALLOC_H
     777              : #if defined(HAVE_MALLINFO) || defined(HAVE_MALLINFO2)
     778              : #include <malloc.h>
     779              : #endif
     780              : #endif
     781              : 
     782              : #ifdef INCLUDE_ISL
     783              : #ifdef HAVE_isl
     784              : #include <isl/options.h>
     785              : #include <isl/ctx.h>
     786              : #include <isl/val.h>
     787              : #include <isl/set.h>
     788              : #include <isl/union_set.h>
     789              : #include <isl/map.h>
     790              : #include <isl/union_map.h>
     791              : #include <isl/aff.h>
     792              : #include <isl/constraint.h>
     793              : #include <isl/flow.h>
     794              : #include <isl/ilp.h>
     795              : #include <isl/schedule.h>
     796              : #include <isl/ast_build.h>
     797              : #include <isl/schedule_node.h>
     798              : #include <isl/id.h>
     799              : #include <isl/space.h>
     800              : #endif
     801              : #endif
     802              : 
     803              : /* Redefine 'abort' to report an internal error w/o coredump, and
     804              :    reporting the location of the error in the source file.
     805              :    Instead of directly calling 'abort' or 'fancy_abort', GCC code
     806              :    should normally call 'internal_error' with a specific message.  */
     807              : extern void fancy_abort (const char *, int, const char *)
     808              :                                          ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
     809              : #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
     810              : 
     811              : /* Use gcc_assert(EXPR) to test invariants.  */
     812              : #if ENABLE_ASSERT_CHECKING
     813              : #define gcc_assert(EXPR)                                                \
     814              :    ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
     815              : #elif (GCC_VERSION >= 4005)
     816              : #define gcc_assert(EXPR)                                                \
     817              :   ((void)(UNLIKELY (!(EXPR)) ? __builtin_unreachable (), 0 : 0))
     818              : #else
     819              : /* Include EXPR, so that unused variable warnings do not occur.  */
     820              : #define gcc_assert(EXPR) ((void)(0 && (EXPR)))
     821              : #endif
     822              : 
     823              : #if CHECKING_P
     824              : #define gcc_checking_assert(EXPR) gcc_assert (EXPR)
     825              : #else
     826              : /* N.B.: in release build EXPR is not evaluated.  */
     827              : #define gcc_checking_assert(EXPR) ((void)(0 && (EXPR)))
     828              : #endif
     829              : 
     830              : #if GCC_VERSION >= 4000
     831              : #define ALWAYS_INLINE inline __attribute__ ((always_inline))
     832              : #else
     833              : #define ALWAYS_INLINE inline
     834              : #endif
     835              : 
     836              : #if GCC_VERSION >= 3004
     837              : #define WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))
     838              : #else
     839              : #define WARN_UNUSED_RESULT
     840              : #endif
     841              : 
     842              : /* Use gcc_unreachable() to mark unreachable locations (like an
     843              :    unreachable default case of a switch.  Do not use gcc_assert(0).  */
     844              : #if (GCC_VERSION >= 4005) && !ENABLE_ASSERT_CHECKING
     845              : #define gcc_unreachable() __builtin_unreachable ()
     846              : #else
     847              : #define gcc_unreachable() (fancy_abort (__FILE__, __LINE__, __FUNCTION__))
     848              : #endif
     849              : 
     850              : #if GCC_VERSION >= 7000 && defined(__has_attribute)
     851              : # if __has_attribute(fallthrough)
     852              : #  define gcc_fallthrough() __attribute__((fallthrough))
     853              : # else
     854              : #  define gcc_fallthrough()
     855              : # endif
     856              : #else
     857              : # define gcc_fallthrough()
     858              : #endif
     859              : 
     860              : #if GCC_VERSION >= 3001
     861              : #define STATIC_CONSTANT_P(X) (__builtin_constant_p (X) && (X))
     862              : #else
     863              : #define STATIC_CONSTANT_P(X) (false && (X))
     864              : #endif
     865              : 
     866              : #ifdef __cplusplus
     867              : #define STATIC_ASSERT(X) \
     868              :   static_assert ((X), #X)
     869              : #else
     870              : #define STATIC_ASSERT(X) \
     871              :   typedef int assertion1[(X) ? 1 : -1] ATTRIBUTE_UNUSED
     872              : #endif
     873              : 
     874              : /* Provide a fake boolean type.  We make no attempt to use the
     875              :    C99 _Bool, as it may not be available in the bootstrap compiler,
     876              :    and even if it is, it is liable to be buggy.
     877              :    This must be after all inclusion of system headers, as some of
     878              :    them will mess us up.  */
     879              : 
     880              : #undef TRUE
     881              : #undef FALSE
     882              : 
     883              : #ifdef __cplusplus
     884              :   /* Obsolete.  */
     885              : # define TRUE true
     886              : # define FALSE false
     887              : #else /* !__cplusplus */
     888              : # undef bool
     889              : # undef true
     890              : # undef false
     891              : 
     892              : # define bool unsigned char
     893              : # define true 1
     894              : # define false 0
     895              : 
     896              :   /* Obsolete.  */
     897              : # define TRUE true
     898              : # define FALSE false
     899              : #endif /* !__cplusplus */
     900              : 
     901              : /* As the last action in this file, we poison the identifiers that
     902              :    shouldn't be used.  Note, luckily gcc-3.0's token-based integrated
     903              :    preprocessor won't trip on poisoned identifiers that arrive from
     904              :    the expansion of macros.  E.g. #define strrchr rindex, won't error
     905              :    if rindex is poisoned after this directive is issued and later on
     906              :    strrchr is called.
     907              : 
     908              :    Note: We define bypass macros for the few cases where we really
     909              :    want to use the libc memory allocation routines.  Otherwise we
     910              :    insist you use the "x" versions from libiberty.  */
     911              : 
     912              : #define really_call_malloc malloc
     913              : #define really_call_calloc calloc
     914              : #define really_call_realloc realloc
     915              : 
     916              : #if defined(FLEX_SCANNER) || defined(YYBISON) || defined(YYBYACC)
     917              : /* Flex and bison use malloc and realloc.  Yuk.  Note that this means
     918              :    really_call_* cannot be used in a .l or .y file.  */
     919              : #define malloc xmalloc
     920              : #define realloc xrealloc
     921              : #endif
     922              : 
     923              : #if (GCC_VERSION >= 3000)
     924              : 
     925              : /* Note autoconf checks for prototype declarations and includes
     926              :    system.h while doing so.  Only poison these tokens if actually
     927              :    compiling gcc, so that the autoconf declaration tests for malloc
     928              :    etc don't spuriously fail.  */
     929              : #ifdef IN_GCC
     930              : 
     931              : #undef calloc
     932              : #undef strdup
     933              : #undef strndup
     934              :  #pragma GCC poison calloc strdup strndup
     935              : 
     936              : #if !defined(FLEX_SCANNER) && !defined(YYBISON)
     937              : #undef malloc
     938              : #undef realloc
     939              :  #pragma GCC poison malloc realloc
     940              : #endif
     941              : 
     942              : /* The %m format should be used when GCC's main diagnostic functions
     943              :    supporting %m are available, and xstrerror from libiberty
     944              :    otherwise.  */
     945              : #undef strerror
     946              :  #pragma GCC poison strerror
     947              : 
     948              : /* loc_t is defined on some systems and too inviting for some
     949              :    programmers to avoid.  */
     950              : #undef loc_t
     951              :  #pragma GCC poison loc_t
     952              : 
     953              : /* Old target macros that have moved to the target hooks structure.  */
     954              :  #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN                      \
     955              :         FUNCTION_PROLOGUE FUNCTION_EPILOGUE                             \
     956              :         FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE                   \
     957              :         DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES  \
     958              :         VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE       \
     959              :         SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES         \
     960              :         MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES     \
     961              :         MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR       \
     962              :         ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC MAX_CHAR_TYPE_SIZE       \
     963              :         WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \
     964              :         ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL     \
     965              :         ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS     \
     966              :         ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END \
     967              :         ASM_SIMPLIFY_DWARF_ADDR INIT_TARGET_OPTABS INIT_SUBTARGET_OPTABS \
     968              :         INIT_GOFAST_OPTABS MULSI3_LIBCALL MULDI3_LIBCALL DIVSI3_LIBCALL \
     969              :         DIVDI3_LIBCALL UDIVSI3_LIBCALL UDIVDI3_LIBCALL MODSI3_LIBCALL   \
     970              :         MODDI3_LIBCALL UMODSI3_LIBCALL UMODDI3_LIBCALL BUILD_VA_LIST_TYPE \
     971              :         PRETEND_OUTGOING_VARARGS_NAMED STRUCT_VALUE_INCOMING_REGNUM     \
     972              :         ASM_OUTPUT_SECTION_NAME PROMOTE_FUNCTION_ARGS PROMOTE_FUNCTION_MODE \
     973              :         STRUCT_VALUE_INCOMING STRICT_ARGUMENT_NAMING                    \
     974              :         PROMOTE_FUNCTION_RETURN PROMOTE_PROTOTYPES STRUCT_VALUE_REGNUM  \
     975              :         SETUP_INCOMING_VARARGS EXPAND_BUILTIN_SAVEREGS                  \
     976              :         DEFAULT_SHORT_ENUMS SPLIT_COMPLEX_ARGS MD_ASM_CLOBBERS          \
     977              :         HANDLE_PRAGMA_REDEFINE_EXTNAME HANDLE_PRAGMA_EXTERN_PREFIX      \
     978              :         MUST_PASS_IN_STACK FUNCTION_ARG_PASS_BY_REFERENCE               \
     979              :         VECTOR_MODE_SUPPORTED_P TARGET_SUPPORTS_HIDDEN                  \
     980              :         FUNCTION_ARG_PARTIAL_NREGS ASM_OUTPUT_DWARF_DTPREL              \
     981              :         ALLOCATE_INITIAL_VALUE LEGITIMIZE_ADDRESS FRAME_POINTER_REQUIRED \
     982              :         CAN_ELIMINATE TRAMPOLINE_TEMPLATE INITIALIZE_TRAMPOLINE         \
     983              :         TRAMPOLINE_ADJUST_ADDRESS STATIC_CHAIN STATIC_CHAIN_INCOMING    \
     984              :         RETURN_POPS_ARGS UNITS_PER_SIMD_WORD OVERRIDE_OPTIONS           \
     985              :         OPTIMIZATION_OPTIONS CLASS_LIKELY_SPILLED_P                     \
     986              :         USING_SJLJ_EXCEPTIONS TARGET_UNWIND_INFO                        \
     987              :         CAN_DEBUG_WITHOUT_FP UNLIKELY_EXECUTED_TEXT_SECTION_NAME        \
     988              :         HOT_TEXT_SECTION_NAME LEGITIMATE_CONSTANT_P ALWAYS_STRIP_DOTDOT \
     989              :         OUTPUT_ADDR_CONST_EXTRA SMALL_REGISTER_CLASSES ASM_OUTPUT_IDENT \
     990              :         ASM_BYTE_OP MEMBER_TYPE_FORCES_BLK LIBGCC2_HAS_SF_MODE          \
     991              :         LIBGCC2_HAS_DF_MODE LIBGCC2_HAS_XF_MODE LIBGCC2_HAS_TF_MODE     \
     992              :         CLEAR_BY_PIECES_P MOVE_BY_PIECES_P SET_BY_PIECES_P              \
     993              :         STORE_BY_PIECES_P TARGET_FLT_EVAL_METHOD                        \
     994              :         HARD_REGNO_CALL_PART_CLOBBERED HARD_REGNO_MODE_OK               \
     995              :         MODES_TIEABLE_P FUNCTION_ARG_PADDING SLOW_UNALIGNED_ACCESS      \
     996              :         HARD_REGNO_NREGS SECONDARY_MEMORY_NEEDED_MODE                   \
     997              :         SECONDARY_MEMORY_NEEDED CANNOT_CHANGE_MODE_CLASS                \
     998              :         TRULY_NOOP_TRUNCATION FUNCTION_ARG_OFFSET CONSTANT_ALIGNMENT    \
     999              :         STARTING_FRAME_OFFSET FLOAT_TYPE_SIZE DOUBLE_TYPE_SIZE          \
    1000              :         LONG_DOUBLE_TYPE_SIZE
    1001              : 
    1002              : /* Target macros only used for code built for the target, that have
    1003              :    moved to libgcc-tm.h or have never been present elsewhere.  */
    1004              :  #pragma GCC poison DECLARE_LIBRARY_RENAMES LIBGCC2_GNU_PREFIX          \
    1005              :         MD_UNWIND_SUPPORT MD_FROB_UPDATE_CONTEXT ENABLE_EXECUTE_STACK   \
    1006              :         REG_VALUE_IN_UNWIND_CONTEXT ASSUME_EXTENDED_UNWIND_CONTEXT
    1007              : 
    1008              : /* Other obsolete target macros, or macros that used to be in target
    1009              :    headers and were not used, and may be obsolete or may never have
    1010              :    been used.  */
    1011              :  #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG CPP_PREDEFINES     \
    1012              :         ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT SMALL_STACK    \
    1013              :         DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \
    1014              :         OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR                      \
    1015              :         LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC      \
    1016              :         STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE          \
    1017              :         SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH   \
    1018              :         TRADITIONAL_RETURN_FLOAT NO_BUILTIN_SIZE_TYPE                      \
    1019              :         NO_BUILTIN_PTRDIFF_TYPE NO_BUILTIN_WCHAR_TYPE NO_BUILTIN_WINT_TYPE \
    1020              :         BLOCK_PROFILER BLOCK_PROFILER_CODE FUNCTION_BLOCK_PROFILER         \
    1021              :         FUNCTION_BLOCK_PROFILER_EXIT MACHINE_STATE_SAVE                    \
    1022              :         MACHINE_STATE_RESTORE SCCS_DIRECTIVE SECTION_ASM_OP BYTEORDER      \
    1023              :         ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL HOST_WORDS_BIG_ENDIAN    \
    1024              :         OBJC_PROLOGUE ALLOCATE_TRAMPOLINE HANDLE_PRAGMA ROUND_TYPE_SIZE    \
    1025              :         ROUND_TYPE_SIZE_UNIT CONST_SECTION_ASM_OP CRT_GET_RFIB_TEXT        \
    1026              :         INSN_CACHE_DEPTH INSN_CACHE_SIZE                                   \
    1027              :         INSN_CACHE_LINE_WIDTH INIT_SECTION_PREAMBLE NEED_ATEXIT ON_EXIT    \
    1028              :         EXIT_BODY OBJECT_FORMAT_ROSE MULTIBYTE_CHARS MAP_CHARACTER         \
    1029              :         LIBGCC_NEEDS_DOUBLE FINAL_PRESCAN_LABEL DEFAULT_CALLER_SAVES       \
    1030              :         LOAD_ARGS_REVERSED MAX_INTEGER_COMPUTATION_MODE                    \
    1031              :         CONVERT_HARD_REGISTER_TO_SSA_P ASM_OUTPUT_MAIN_SOURCE_FILENAME     \
    1032              :         FIRST_INSN_ADDRESS TEXT_SECTION SHARED_BSS_SECTION_ASM_OP          \
    1033              :         PROMOTED_MODE EXPAND_BUILTIN_VA_END                                \
    1034              :         LINKER_DOES_NOT_WORK_WITH_DWARF2 FUNCTION_ARG_KEEP_AS_REFERENCE    \
    1035              :         GIV_SORT_CRITERION MAX_LONG_TYPE_SIZE MAX_LONG_DOUBLE_TYPE_SIZE    \
    1036              :         MAX_WCHAR_TYPE_SIZE SHARED_SECTION_ASM_OP INTEGRATE_THRESHOLD      \
    1037              :         FINAL_REG_PARM_STACK_SPACE MAYBE_REG_PARM_STACK_SPACE              \
    1038              :         TRADITIONAL_PIPELINE_INTERFACE DFA_PIPELINE_INTERFACE              \
    1039              :         BUILTIN_SETJMP_FRAME_VALUE                                         \
    1040              :         SUNOS4_SHARED_LIBRARIES PROMOTE_FOR_CALL_ONLY                      \
    1041              :         SPACE_AFTER_L_OPTION NO_RECURSIVE_FUNCTION_CSE                     \
    1042              :         DEFAULT_MAIN_RETURN TARGET_MEM_FUNCTIONS EXPAND_BUILTIN_VA_ARG     \
    1043              :         COLLECT_PARSE_FLAG DWARF2_GENERATE_TEXT_SECTION_LABEL WINNING_GDB  \
    1044              :         ASM_OUTPUT_FILENAME ASM_OUTPUT_SOURCE_LINE FILE_NAME_JOINER        \
    1045              :         GDB_INV_REF_REGPARM_STABS_LETTER                                   \
    1046              :         PUT_SDB_SRC_FILE STABS_GCC_MARKER SDB_GENERATE_FAKE                \
    1047              :         NON_SAVING_SETJMP TARGET_LATE_RTL_PROLOGUE_EPILOGUE                \
    1048              :         CASE_DROPS_THROUGH TARGET_BELL TARGET_BS TARGET_CR TARGET_DIGIT0   \
    1049              :         TARGET_ESC TARGET_FF TARGET_NEWLINE TARGET_TAB TARGET_VT           \
    1050              :         LINK_LIBGCC_SPECIAL DONT_ACCESS_GBLS_AFTER_EPILOGUE                \
    1051              :         TARGET_OPTIONS TARGET_SWITCHES EXTRA_CC_MODES FINALIZE_PIC         \
    1052              :         PREDICATE_CODES SPECIAL_MODE_PREDICATES UNALIGNED_WORD_ASM_OP      \
    1053              :         EXTRA_SECTIONS EXTRA_SECTION_FUNCTIONS READONLY_DATA_SECTION       \
    1054              :         TARGET_ASM_EXCEPTION_SECTION TARGET_ASM_EH_FRAME_SECTION           \
    1055              :         SMALL_ARG_MAX ASM_OUTPUT_SHARED_BSS ASM_OUTPUT_SHARED_COMMON       \
    1056              :         ASM_OUTPUT_SHARED_LOCAL ASM_MAKE_LABEL_LINKONCE                    \
    1057              :         STACK_CHECK_PROBE_INTERVAL STACK_CHECK_PROBE_LOAD                  \
    1058              :         ORDER_REGS_FOR_LOCAL_ALLOC FUNCTION_OUTGOING_VALUE                 \
    1059              :         ASM_DECLARE_CONSTANT_NAME MODIFY_TARGET_NAME SWITCHES_NEED_SPACES  \
    1060              :         SWITCH_CURTAILS_COMPILATION SWITCH_TAKES_ARG WORD_SWITCH_TAKES_ARG \
    1061              :         TARGET_OPTION_TRANSLATE_TABLE HANDLE_PRAGMA_PACK_PUSH_POP          \
    1062              :         HANDLE_SYSV_PRAGMA HANDLE_PRAGMA_WEAK CONDITIONAL_REGISTER_USAGE   \
    1063              :         FUNCTION_ARG_BOUNDARY MUST_USE_SJLJ_EXCEPTIONS US_SOFTWARE_GOFAST  \
    1064              :         USING_SVR4_H SVR4_ASM_SPEC FUNCTION_ARG FUNCTION_ARG_ADVANCE       \
    1065              :         FUNCTION_INCOMING_ARG IRA_COVER_CLASSES TARGET_VERSION             \
    1066              :         MACHINE_TYPE TARGET_HAS_TARGETCM ASM_OUTPUT_BSS                    \
    1067              :         SETJMP_VIA_SAVE_AREA FORBIDDEN_INC_DEC_CLASSES                     \
    1068              :         PREFERRED_OUTPUT_RELOAD_CLASS SYSTEM_INCLUDE_DIR                   \
    1069              :         STANDARD_INCLUDE_DIR STANDARD_INCLUDE_COMPONENT                    \
    1070              :         LINK_ELIMINATE_DUPLICATE_LDIRECTORIES MIPS_DEBUGGING_INFO          \
    1071              :         IDENT_ASM_OP ALL_COP_ADDITIONAL_REGISTER_NAMES                     \
    1072              :         RANGE_TEST_NON_SHORT_CIRCUIT EXTENDED_SDB_BASIC_TYPES              \
    1073              :         REAL_VALUE_TRUNCATE REVERSE_CONDEXEC_PREDICATES_P                  \
    1074              :         TARGET_ALIGN_ANON_BITFIELDS TARGET_NARROW_VOLATILE_BITFIELDS       \
    1075              :         IDENT_ASM_OP UNALIGNED_SHORT_ASM_OP UNALIGNED_INT_ASM_OP           \
    1076              :         UNALIGNED_LONG_ASM_OP UNALIGNED_DOUBLE_INT_ASM_OP                  \
    1077              :         USE_COMMON_FOR_ONE_ONLY IFCVT_EXTRA_FIELDS IFCVT_INIT_EXTRA_FIELDS \
    1078              :         CASE_USE_BIT_TESTS FIXUNS_TRUNC_LIKE_FIX_TRUNC                     \
    1079              :         GO_IF_MODE_DEPENDENT_ADDRESS DELAY_SLOTS_FOR_EPILOGUE              \
    1080              :         ELIGIBLE_FOR_EPILOGUE_DELAY TARGET_C99_FUNCTIONS TARGET_HAS_SINCOS \
    1081              :         REG_CLASS_FROM_LETTER CONST_OK_FOR_LETTER_P                        \
    1082              :         CONST_DOUBLE_OK_FOR_LETTER_P EXTRA_CONSTRAINT                      \
    1083              :         REG_CLASS_FROM_CONSTRAINT REG_CLASS_FOR_CONSTRAINT                 \
    1084              :         EXTRA_CONSTRAINT_STR EXTRA_MEMORY_CONSTRAINT                       \
    1085              :         EXTRA_ADDRESS_CONSTRAINT CONST_DOUBLE_OK_FOR_CONSTRAINT_P          \
    1086              :         CALLER_SAVE_PROFITABLE LARGEST_EXPONENT_IS_NORMAL                  \
    1087              :         ROUND_TOWARDS_ZERO SF_SIZE DF_SIZE XF_SIZE TF_SIZE LIBGCC2_TF_CEXT \
    1088              :         LIBGCC2_LONG_DOUBLE_TYPE_SIZE STRUCT_VALUE                         \
    1089              :         EH_FRAME_IN_DATA_SECTION TARGET_FLT_EVAL_METHOD_NON_DEFAULT        \
    1090              :         JCR_SECTION_NAME TARGET_USE_JCR_SECTION SDB_DEBUGGING_INFO         \
    1091              :         SDB_DEBUG NO_IMPLICIT_EXTERN_C NOTICE_UPDATE_CC                    \
    1092              :         CC_STATUS_MDEP_INIT CC_STATUS_MDEP CC_STATUS SLOW_SHORT_ACCESS     \
    1093              :         WIDEST_HARDWARE_FP_SIZE ADA_LONG_TYPE_SIZE
    1094              : 
    1095              : /* Hooks that are no longer used.  */
    1096              :  #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE   \
    1097              :         LANG_HOOKS_MARK_TREE LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES \
    1098              :         LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS \
    1099              :         LANG_HOOKS_PUSHLEVEL LANG_HOOKS_SET_BLOCK \
    1100              :         LANG_HOOKS_MAYBE_BUILD_CLEANUP LANG_HOOKS_UPDATE_DECL_AFTER_SAVING \
    1101              :         LANG_HOOKS_POPLEVEL LANG_HOOKS_TRUTHVALUE_CONVERSION \
    1102              :         TARGET_PROMOTE_FUNCTION_ARGS TARGET_PROMOTE_FUNCTION_RETURN \
    1103              :         LANG_HOOKS_MISSING_ARGUMENT LANG_HOOKS_HASH_TYPES \
    1104              :         TARGET_HANDLE_OFAST TARGET_OPTION_OPTIMIZATION \
    1105              :         TARGET_IRA_COVER_CLASSES TARGET_HELP \
    1106              :         TARGET_HANDLE_PRAGMA_EXTERN_PREFIX \
    1107              :         TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN \
    1108              :         TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD \
    1109              :         TARGET_MD_ASM_CLOBBERS TARGET_RELAXED_ORDERING \
    1110              :         TARGET_INVALID_PARAMETER_TYPE \
    1111              :         TARGET_INVALID_RETURN_TYPE
    1112              : 
    1113              : /* Arrays that were deleted in favor of a functional interface.  */
    1114              :  #pragma GCC poison built_in_decls implicit_built_in_decls
    1115              : 
    1116              : /* Hooks into libgcc2.  */
    1117              :  #pragma GCC poison LIBGCC2_DOUBLE_TYPE_SIZE LIBGCC2_WORDS_BIG_ENDIAN \
    1118              :    LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
    1119              : 
    1120              : /* Miscellaneous macros that are no longer used.  */
    1121              :  #pragma GCC poison USE_MAPPED_LOCATION GET_ENVIRONMENT
    1122              : 
    1123              : /* Libiberty macros that are no longer used in GCC.  */
    1124              : #undef ANSI_PROTOTYPES
    1125              : #undef PTR_CONST
    1126              : #undef LONG_DOUBLE
    1127              : #undef VPARAMS
    1128              : #undef VA_OPEN
    1129              : #undef VA_FIXEDARG
    1130              : #undef VA_CLOSE
    1131              : #undef VA_START
    1132              :  #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \
    1133              :   VA_FIXEDARG VA_CLOSE VA_START
    1134              : #endif /* IN_GCC */
    1135              : 
    1136              : /* Front ends should never have to include middle-end headers.  Enforce
    1137              :    this by poisoning the header double-include protection defines.  */
    1138              : #ifdef IN_GCC_FRONTEND
    1139              : #pragma GCC poison GCC_RTL_H GCC_EXCEPT_H GCC_EXPR_H
    1140              : #endif
    1141              : 
    1142              : /* Note: not all uses of the `index' token (e.g. variable names and
    1143              :    structure members) have been eliminated.  */
    1144              : #undef bcopy
    1145              : #undef bzero
    1146              : #undef bcmp
    1147              : #undef rindex
    1148              :  #pragma GCC poison bcopy bzero bcmp rindex
    1149              : 
    1150              : /* Poison ENABLE_CHECKING macro that should be replaced with
    1151              :    'if (flag_checking)', or with CHECKING_P macro.  */
    1152              : #pragma GCC poison ENABLE_CHECKING
    1153              : 
    1154              : #endif /* GCC >= 3.0 */
    1155              : 
    1156              : /* Activate certain diagnostics as warnings (not errors via the
    1157              :    -Werror flag).  */
    1158              : #if GCC_VERSION >= 4003
    1159              : /* If asserts are disabled, activate -Wuninitialized as a warning (not
    1160              :    an error/-Werror).  */
    1161              : #ifndef ENABLE_ASSERT_CHECKING
    1162              : #pragma GCC diagnostic warning "-Wuninitialized"
    1163              : #endif
    1164              : #endif
    1165              : 
    1166              : #ifdef ENABLE_VALGRIND_ANNOTATIONS
    1167              : #include <valgrind/memcheck.h>
    1168              : #else
    1169              : /* VALGRIND_DISCARD unregisters the given block handle,
    1170              :    but our code misuses it for discarding annotations.  */
    1171              : #define VALGRIND_DISCARD(x)
    1172              : #endif
    1173              : 
    1174              : /* Macros to temporarily ignore some warnings.  */
    1175              : #if GCC_VERSION >= 6000
    1176              : #define GCC_DIAGNOSTIC_STRINGIFY(x) #x
    1177              : #define GCC_DIAGNOSTIC_PUSH_IGNORED(x) \
    1178              :   _Pragma ("GCC diagnostic push") \
    1179              :   _Pragma (GCC_DIAGNOSTIC_STRINGIFY (GCC diagnostic ignored #x))
    1180              : #define GCC_DIAGNOSTIC_POP _Pragma ("GCC diagnostic pop")
    1181              : #else
    1182              : #define GCC_DIAGNOSTIC_PUSH_IGNORED(x)
    1183              : #define GCC_DIAGNOSTIC_POP
    1184              : #endif
    1185              : 
    1186              : /* In LTO -fwhole-program build we still want to keep the debug functions available
    1187              :    for debugger.  Mark them as used to prevent removal.  */
    1188              : #if (GCC_VERSION > 4000)
    1189              : #define DEBUG_FUNCTION __attribute__ ((__used__))
    1190              : #define DEBUG_VARIABLE __attribute__ ((__used__))
    1191              : #else
    1192              : #define DEBUG_FUNCTION
    1193              : #define DEBUG_VARIABLE
    1194              : #endif
    1195              : 
    1196              : /* General macro to extract bit Y of X.  */
    1197              : #define TEST_BIT(X, Y) (((X) >> (Y)) & 1)
    1198              : 
    1199              : /* Get definitions of HOST_WIDE_INT.  */
    1200              : #include "hwint.h"
    1201              : 
    1202              : typedef int sort_r_cmp_fn (const void *, const void *, void *);
    1203              : void qsort_chk (void *, size_t, size_t, sort_r_cmp_fn *, void *);
    1204              : void gcc_sort_r (void *, size_t, size_t, sort_r_cmp_fn *, void *);
    1205              : void gcc_qsort (void *, size_t, size_t, int (*)(const void *, const void *));
    1206              : void gcc_stablesort (void *, size_t, size_t,
    1207              :                      int (*)(const void *, const void *));
    1208              : void gcc_stablesort_r (void *, size_t, size_t, sort_r_cmp_fn *, void *data);
    1209              : /* Redirect four-argument qsort calls to gcc_qsort; one-argument invocations
    1210              :    correspond to vec::qsort, and use C qsort internally.  */
    1211              : #define PP_5th(a1, a2, a3, a4, a5, ...) a5
    1212              : #undef qsort
    1213              : #define qsort(...) PP_5th (__VA_ARGS__, gcc_qsort, 3, 2, qsort, 0) (__VA_ARGS__)
    1214              : 
    1215              : #define ONE_K 1024
    1216              : #define ONE_M (ONE_K * ONE_K)
    1217              : #define ONE_G (ONE_K * ONE_M)
    1218              : 
    1219              : /* Display a number as an integer multiple of either:
    1220              :    - 1024, if said integer is >= to 10 K (in base 2)
    1221              :    - 1024 * 1024, if said integer is >= 10 M in (base 2)
    1222              :  */
    1223              : #define SIZE_SCALE(x) (((x) < 10 * ONE_K \
    1224              :                         ? (x) \
    1225              :                         : ((x) < 10 * ONE_M \
    1226              :                            ? (x) / ONE_K \
    1227              :                            : (x) / ONE_M)))
    1228              : 
    1229              : /* For a given integer, display either:
    1230              :    - the character 'k', if the number is higher than 10 K (in base 2)
    1231              :      but strictly lower than 10 M (in base 2)
    1232              :    - the character 'M' if the number is higher than 10 M (in base2)
    1233              :    - the character ' ' if the number is strictly lower  than 10 K  */
    1234              : #define SIZE_LABEL(x) ((x) < 10 * ONE_K ? ' ' : ((x) < 10 * ONE_M ? 'k' : 'M'))
    1235              : 
    1236              : /* Display an integer amount as multiple of 1K or 1M (in base 2).
    1237              :    Display the correct unit (either k, M, or ' ') after the amount, as
    1238              :    well.  */
    1239              : #define SIZE_AMOUNT(size) (uint64_t)SIZE_SCALE (size), SIZE_LABEL (size)
    1240              : 
    1241              : /* Format string particle for printing a SIZE_AMOUNT with N being the width
    1242              :    of the number.  */
    1243              : #define PRsa(n) "%" #n PRIu64 "%c"
    1244              : 
    1245              : /* System headers may define NULL to be an integer (e.g. 0L), which cannot be
    1246              :    used safely in certain contexts (e.g. as sentinels).  Redefine NULL to
    1247              :    nullptr in order to make it safer.  Note that this might confuse system
    1248              :    headers, however, by convention they must not be included after this point.
    1249              : */
    1250              : #ifdef __cplusplus
    1251              : #undef NULL
    1252              : #define NULL nullptr
    1253              : #endif
    1254              : 
    1255              : /* Workaround clang on PowerPC which has vec_step as reserved keyword
    1256              :    rather than function-like macro defined in <altivec.h>.  See PR114369.  */
    1257              : #if defined(__clang__) && defined(__powerpc__)
    1258              : #define vec_step vec_step_
    1259              : #endif
    1260              : 
    1261              : /* Return true if STR string starts with PREFIX.  */
    1262              : 
    1263              : inline bool
    1264   1934855280 : startswith (const char *str, const char *prefix)
    1265              : {
    1266   1934855280 :   return strncmp (str, prefix, strlen (prefix)) == 0;
    1267              : }
    1268              : 
    1269              : /* Return true if STR string ends with SUFFIX.  */
    1270              : 
    1271              : inline bool
    1272          277 : endswith (const char *str, const char *suffix)
    1273              : {
    1274          277 :   size_t str_len = strlen (str);
    1275          277 :   size_t suffix_len = strlen (suffix);
    1276          277 :   if (str_len < suffix_len)
    1277              :     return false;
    1278              : 
    1279          277 :   return memcmp (str + str_len - suffix_len, suffix, suffix_len) == 0;
    1280              : }
    1281              : 
    1282              : #endif /* ! GCC_SYSTEM_H */
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.