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: 2024-03-23 14:05:01 Functions: 100.0 % 2 2
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

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

Generated by: LCOV version 2.0-1

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.