1 /* Get common system includes and various definitions and declarations based 2 on autoconf macros. 3 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 4 2009, 2010, 2011 5 Free Software Foundation, Inc. 6 7 This file is part of GCC. 8 9 GCC is free software; you can redistribute it and/or modify it under 10 the terms of the GNU General Public License as published by the Free 11 Software Foundation; either version 3, or (at your option) any later 12 version. 13 14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 15 WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17 for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with GCC; see the file COPYING3. If not see 21 <http://www.gnu.org/licenses/>. */ 22 23 24 #ifndef GCC_SYSTEM_H 25 #define GCC_SYSTEM_H 26 27 /* We must include stdarg.h before stdio.h. */ 28 #include <stdarg.h> 29 30 #ifndef va_copy 31 # ifdef __va_copy 32 # define va_copy(d,s) __va_copy((d),(s)) 33 # else 34 # define va_copy(d,s) ((d) = (s)) 35 # endif 36 #endif 37 38 #ifdef HAVE_STDDEF_H 39 # include <stddef.h> 40 #endif 41 42 #include <stdio.h> 43 44 /* Define a generic NULL if one hasn't already been defined. */ 45 #ifndef NULL 46 #define NULL 0 47 #endif 48 49 /* Use the unlocked open routines from libiberty. */ 50 51 /* Some of these are #define on some systems, e.g. on AIX to redirect 52 the names to 64bit capable functions for LARGE_FILES support. These 53 redefs are pointless here so we can override them. */ 54 55 #undef fopen 56 #undef freopen 57 58 #define fopen(PATH,MODE) fopen_unlocked(PATH,MODE) 59 #define fdopen(FILDES,MODE) fdopen_unlocked(FILDES,MODE) 60 #define freopen(PATH,MODE,STREAM) freopen_unlocked(PATH,MODE,STREAM) 61 62 /* The compiler is not a multi-threaded application and therefore we 63 do not have to use the locking functions. In fact, using the locking 64 functions can cause the compiler to be significantly slower under 65 I/O bound conditions (such as -g -O0 on very large source files). 66 67 HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio 68 code is multi-thread safe by default. If it is set to 0, then do 69 not worry about using the _unlocked functions. 70 71 fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are 72 extensions and need to be prototyped by hand (since we do not 73 define _GNU_SOURCE). */ 74 75 #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED 76 77 # ifdef HAVE_PUTC_UNLOCKED 78 # undef putc 79 # define putc(C, Stream) putc_unlocked (C, Stream) 80 # endif 81 # ifdef HAVE_PUTCHAR_UNLOCKED 82 # undef putchar 83 # define putchar(C) putchar_unlocked (C) 84 # endif 85 # ifdef HAVE_GETC_UNLOCKED 86 # undef getc 87 # define getc(Stream) getc_unlocked (Stream) 88 # endif 89 # ifdef HAVE_GETCHAR_UNLOCKED 90 # undef getchar 91 # define getchar() getchar_unlocked () 92 # endif 93 # ifdef HAVE_FPUTC_UNLOCKED 94 # undef fputc 95 # define fputc(C, Stream) fputc_unlocked (C, Stream) 96 # endif 97 98 #ifdef __cplusplus 99 extern "C" { 100 #endif 101 102 # ifdef HAVE_CLEARERR_UNLOCKED 103 # undef clearerr 104 # define clearerr(Stream) clearerr_unlocked (Stream) 105 # if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED 106 extern void clearerr_unlocked (FILE *); 107 # endif 108 # endif 109 # ifdef HAVE_FEOF_UNLOCKED 110 # undef feof 111 # define feof(Stream) feof_unlocked (Stream) 112 # if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED 113 extern int feof_unlocked (FILE *); 114 # endif 115 # endif 116 # ifdef HAVE_FILENO_UNLOCKED 117 # undef fileno 118 # define fileno(Stream) fileno_unlocked (Stream) 119 # if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED 120 extern int fileno_unlocked (FILE *); 121 # endif 122 # endif 123 # ifdef HAVE_FFLUSH_UNLOCKED 124 # undef fflush 125 # define fflush(Stream) fflush_unlocked (Stream) 126 # if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED 127 extern int fflush_unlocked (FILE *); 128 # endif 129 # endif 130 # ifdef HAVE_FGETC_UNLOCKED 131 # undef fgetc 132 # define fgetc(Stream) fgetc_unlocked (Stream) 133 # if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED 134 extern int fgetc_unlocked (FILE *); 135 # endif 136 # endif 137 # ifdef HAVE_FGETS_UNLOCKED 138 # undef fgets 139 # define fgets(S, n, Stream) fgets_unlocked (S, n, Stream) 140 # if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED 141 extern char *fgets_unlocked (char *, int, FILE *); 142 # endif 143 # endif 144 # ifdef HAVE_FPUTS_UNLOCKED 145 # undef fputs 146 # define fputs(String, Stream) fputs_unlocked (String, Stream) 147 # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED 148 extern int fputs_unlocked (const char *, FILE *); 149 # endif 150 # endif 151 # ifdef HAVE_FERROR_UNLOCKED 152 # undef ferror 153 # define ferror(Stream) ferror_unlocked (Stream) 154 # if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED 155 extern int ferror_unlocked (FILE *); 156 # endif 157 # endif 158 # ifdef HAVE_FREAD_UNLOCKED 159 # undef fread 160 # define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream) 161 # if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED 162 extern size_t fread_unlocked (void *, size_t, size_t, FILE *); 163 # endif 164 # endif 165 # ifdef HAVE_FWRITE_UNLOCKED 166 # undef fwrite 167 # define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) 168 # if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED 169 extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *); 170 # endif 171 # endif 172 # ifdef HAVE_FPRINTF_UNLOCKED 173 # undef fprintf 174 /* We can't use a function-like macro here because we don't know if 175 we have varargs macros. */ 176 # define fprintf fprintf_unlocked 177 # if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED 178 extern int fprintf_unlocked (FILE *, const char *, ...); 179 # endif 180 # endif 181 182 #ifdef __cplusplus 183 } 184 #endif 185 186 #endif 187 188 /* ??? Glibc's fwrite/fread_unlocked macros cause 189 "warning: signed and unsigned type in conditional expression". */ 190 #undef fread_unlocked 191 #undef fwrite_unlocked 192 193 /* There are an extraordinary number of issues with <ctype.h>. 194 The last straw is that it varies with the locale. Use libiberty's 195 replacement instead. */ 196 #include "safe-ctype.h" 197 198 #include <sys/types.h> 199 200 #include <errno.h> 201 202 #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO 203 extern int errno; 204 #endif 205 206 #ifdef __cplusplus 207 # include <cstring> 208 #endif 209 210 /* Some of glibc's string inlines cause warnings. Plus we'd rather 211 rely on (and therefore test) GCC's string builtins. */ 212 #define __NO_STRING_INLINES 213 214 #ifdef STRING_WITH_STRINGS 215 # include <string.h> 216 # include <strings.h> 217 #else 218 # ifdef HAVE_STRING_H 219 # include <string.h> 220 # else 221 # ifdef HAVE_STRINGS_H 222 # include <strings.h> 223 # endif 224 # endif 225 #endif 226 227 #ifdef HAVE_STDLIB_H 228 # include <stdlib.h> 229 #endif 230 231 /* If we don't have an overriding definition, set SUCCESS_EXIT_CODE and 232 FATAL_EXIT_CODE to EXIT_SUCCESS and EXIT_FAILURE respectively, 233 or 0 and 1 if those macros are not defined. */ 234 #ifndef SUCCESS_EXIT_CODE 235 # ifdef EXIT_SUCCESS 236 # define SUCCESS_EXIT_CODE EXIT_SUCCESS 237 # else 238 # define SUCCESS_EXIT_CODE 0 239 # endif 240 #endif 241 242 #ifndef FATAL_EXIT_CODE 243 # ifdef EXIT_FAILURE 244 # define FATAL_EXIT_CODE EXIT_FAILURE 245 # else 246 # define FATAL_EXIT_CODE 1 247 # endif 248 #endif 249 250 #define ICE_EXIT_CODE 4 251 252 #ifdef HAVE_UNISTD_H 253 # include <unistd.h> 254 #endif 255 256 #ifdef HAVE_SYS_PARAM_H 257 # include <sys/param.h> 258 /* We use this identifier later and it appears in some vendor param.h's. */ 259 # undef PREFETCH 260 #endif 261 262 #if HAVE_LIMITS_H 263 # include <limits.h> 264 #endif 265 266 /* Get definitions of HOST_WIDE_INT and HOST_WIDEST_INT. */ 267 #include "hwint.h" 268 269 /* A macro to determine whether a VALUE lies inclusively within a 270 certain range without evaluating the VALUE more than once. This 271 macro won't warn if the VALUE is unsigned and the LOWER bound is 272 zero, as it would e.g. with "VALUE >= 0 && ...". Note the LOWER 273 bound *is* evaluated twice, and LOWER must not be greater than 274 UPPER. However the bounds themselves can be either positive or 275 negative. */ 276 #define IN_RANGE(VALUE, LOWER, UPPER) \ 277 ((unsigned HOST_WIDE_INT) (VALUE) - (unsigned HOST_WIDE_INT) (LOWER) \ 278 <= (unsigned HOST_WIDE_INT) (UPPER) - (unsigned HOST_WIDE_INT) (LOWER)) 279 280 /* Infrastructure for defining missing _MAX and _MIN macros. Note that 281 macros defined with these cannot be used in #if. */ 282 283 /* The extra casts work around common compiler bugs. */ 284 #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1)) 285 /* The outer cast is needed to work around a bug in Cray C 5.0.3.0. 286 It is necessary at least when t == time_t. */ 287 #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \ 288 ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0)) 289 #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t))) 290 291 /* Use that infrastructure to provide a few constants. */ 292 #ifndef UCHAR_MAX 293 # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char) 294 #endif 295 296 #ifdef TIME_WITH_SYS_TIME 297 # include <sys/time.h> 298 # include <time.h> 299 #else 300 # if HAVE_SYS_TIME_H 301 # include <sys/time.h> 302 # else 303 # ifdef HAVE_TIME_H 304 # include <time.h> 305 # endif 306 # endif 307 #endif 308 309 #ifdef HAVE_FCNTL_H 310 # include <fcntl.h> 311 #else 312 # ifdef HAVE_SYS_FILE_H 313 # include <sys/file.h> 314 # endif 315 #endif 316 317 #ifndef SEEK_SET 318 # define SEEK_SET 0 319 # define SEEK_CUR 1 320 # define SEEK_END 2 321 #endif 322 #ifndef F_OK 323 # define F_OK 0 324 # define X_OK 1 325 # define W_OK 2 326 # define R_OK 4 327 #endif 328 #ifndef O_RDONLY 329 # define O_RDONLY 0 330 #endif 331 #ifndef O_WRONLY 332 # define O_WRONLY 1 333 #endif 334 #ifndef O_BINARY 335 # define O_BINARY 0 336 #endif 337 338 /* Some systems define these in, e.g., param.h. We undefine these names 339 here to avoid the warnings. We prefer to use our definitions since we 340 know they are correct. */ 341 342 #undef MIN 343 #undef MAX 344 #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) 345 #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) 346 347 /* Returns the least number N such that N * Y >= X. */ 348 #define CEIL(x,y) (((x) + (y) - 1) / (y)) 349 350 #ifdef HAVE_SYS_WAIT_H 351 #include <sys/wait.h> 352 #endif 353 354 #ifndef WIFSIGNALED 355 #define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f) 356 #endif 357 #ifndef WTERMSIG 358 #define WTERMSIG(S) ((S) & 0x7f) 359 #endif 360 #ifndef WIFEXITED 361 #define WIFEXITED(S) (((S) & 0xff) == 0) 362 #endif 363 #ifndef WEXITSTATUS 364 #define WEXITSTATUS(S) (((S) & 0xff00) >> 8) 365 #endif 366 #ifndef WSTOPSIG 367 #define WSTOPSIG WEXITSTATUS 368 #endif 369 #ifndef WCOREDUMP 370 #define WCOREDUMP(S) ((S) & WCOREFLG) 371 #endif 372 #ifndef WCOREFLG 373 #define WCOREFLG 0200 374 #endif 375 376 #include <signal.h> 377 #if !defined (SIGCHLD) && defined (SIGCLD) 378 # define SIGCHLD SIGCLD 379 #endif 380 381 #ifdef HAVE_SYS_MMAN_H 382 # include <sys/mman.h> 383 #endif 384 385 #ifndef MAP_FAILED 386 # define MAP_FAILED ((void *)-1) 387 #endif 388 389 #if !defined (MAP_ANONYMOUS) && defined (MAP_ANON) 390 # define MAP_ANONYMOUS MAP_ANON 391 #endif 392 393 #ifdef HAVE_SYS_RESOURCE_H 394 # include <sys/resource.h> 395 #endif 396 397 #ifdef HAVE_SYS_TIMES_H 398 # include <sys/times.h> 399 #endif 400 401 /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they 402 are defined to 0 then we must provide the relevant declaration 403 here. These checks will be in the undefined state while configure 404 is running so be careful to test "defined (HAVE_DECL_*)". */ 405 406 #ifdef __cplusplus 407 extern "C" { 408 #endif 409 410 #if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF 411 extern double atof (const char *); 412 #endif 413 414 #if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL 415 extern long atol (const char *); 416 #endif 417 418 #if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE 419 extern void free (void *); 420 #endif 421 422 #if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD 423 extern char *getcwd (char *, size_t); 424 #endif 425 426 #if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV 427 extern char *getenv (const char *); 428 #endif 429 430 #if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT 431 extern int getopt (int, char * const *, const char *); 432 #endif 433 434 #if defined (HAVE_DECL_GETPAGESIZE) && !HAVE_DECL_GETPAGESIZE 435 extern int getpagesize (void); 436 #endif 437 438 #if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD 439 extern char *getwd (char *); 440 #endif 441 442 #if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK 443 extern void *sbrk (int); 444 #endif 445 446 #if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR 447 extern char *strstr (const char *, const char *); 448 #endif 449 450 #if defined (HAVE_DECL_STPCPY) && !HAVE_DECL_STPCPY 451 extern char *stpcpy (char *, const char *); 452 #endif 453 454 #ifdef __cplusplus 455 } 456 #endif 457 458 #ifdef HAVE_MALLOC_H 459 #include <malloc.h> 460 #endif 461 462 #ifdef __cplusplus 463 extern "C" { 464 #endif 465 466 #if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC 467 extern void *malloc (size_t); 468 #endif 469 470 #if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC 471 extern void *calloc (size_t, size_t); 472 #endif 473 474 #if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC 475 extern void *realloc (void *, size_t); 476 #endif 477 478 #ifdef __cplusplus 479 } 480 #endif 481 482 #ifdef HAVE_STDINT_H 483 #include <stdint.h> 484 #endif 485 486 #ifdef HAVE_INTTYPES_H 487 #include <inttypes.h> 488 #endif 489 490 #ifdef __cplusplus 491 extern "C" { 492 #endif 493 494 /* If the system doesn't provide strsignal, we get it defined in 495 libiberty but no declaration is supplied. */ 496 #if !defined (HAVE_STRSIGNAL) \ 497 || (defined (HAVE_DECL_STRSIGNAL) && !HAVE_DECL_STRSIGNAL) 498 # ifndef strsignal 499 extern const char *strsignal (int); 500 # endif 501 #endif 502 503 #ifdef HAVE_GETRLIMIT 504 # if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT 505 # ifndef getrlimit 506 struct rlimit; 507 extern int getrlimit (int, struct rlimit *); 508 # endif 509 # endif 510 #endif 511 512 #ifdef HAVE_SETRLIMIT 513 # if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT 514 # ifndef setrlimit 515 struct rlimit; 516 extern int setrlimit (int, const struct rlimit *); 517 # endif 518 # endif 519 #endif 520 521 #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT 522 extern void abort (void); 523 #endif 524 525 #if defined (HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF 526 extern int snprintf (char *, size_t, const char *, ...); 527 #endif 528 529 #if defined (HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF 530 extern int vsnprintf(char *, size_t, const char *, va_list); 531 #endif 532 533 #ifdef __cplusplus 534 } 535 #endif 536 537 /* 1 if we have C99 designated initializers. */ 538 #if !defined(HAVE_DESIGNATED_INITIALIZERS) 539 #define HAVE_DESIGNATED_INITIALIZERS \ 540 (((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) \ 541 && !defined(__cplusplus)) 542 #endif 543 544 #if !defined(HAVE_DESIGNATED_UNION_INITIALIZERS) 545 #define HAVE_DESIGNATED_UNION_INITIALIZERS \ 546 (((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) \ 547 && (!defined(__cplusplus) || (GCC_VERSION >= 4007))) 548 #endif 549 550 #if HAVE_SYS_STAT_H 551 # include <sys/stat.h> 552 #endif 553 554 /* Test if something is a normal file. */ 555 #ifndef S_ISREG 556 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 557 #endif 558 559 /* Test if something is a directory. */ 560 #ifndef S_ISDIR 561 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 562 #endif 563 564 /* Test if something is a character special file. */ 565 #ifndef S_ISCHR 566 #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 567 #endif 568 569 /* Test if something is a block special file. */ 570 #ifndef S_ISBLK 571 #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 572 #endif 573 574 /* Test if something is a socket. */ 575 #ifndef S_ISSOCK 576 # ifdef S_IFSOCK 577 # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) 578 # else 579 # define S_ISSOCK(m) 0 580 # endif 581 #endif 582 583 /* Test if something is a FIFO. */ 584 #ifndef S_ISFIFO 585 # ifdef S_IFIFO 586 # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 587 # else 588 # define S_ISFIFO(m) 0 589 # endif 590 #endif 591 592 /* Define well known filenos if the system does not define them. */ 593 #ifndef STDIN_FILENO 594 # define STDIN_FILENO 0 595 #endif 596 #ifndef STDOUT_FILENO 597 # define STDOUT_FILENO 1 598 #endif 599 #ifndef STDERR_FILENO 600 # define STDERR_FILENO 2 601 #endif 602 603 /* Some systems have mkdir that takes a single argument. */ 604 #ifdef MKDIR_TAKES_ONE_ARG 605 # define mkdir(a,b) mkdir(a) 606 #endif 607 608 #ifndef HAVE_KILL 609 # define kill(p,s) raise(s) 610 #endif 611 612 /* Provide a way to print an address via printf. */ 613 #ifndef HOST_PTR_PRINTF 614 #define HOST_PTR_PRINTF "%p" 615 #endif /* ! HOST_PTR_PRINTF */ 616 617 /* By default, colon separates directories in a path. */ 618 #ifndef PATH_SEPARATOR 619 #define PATH_SEPARATOR ':' 620 #endif 621 622 /* Filename handling macros. */ 623 #include "filenames.h" 624 625 /* These should be phased out in favor of IS_DIR_SEPARATOR, where possible. */ 626 #ifndef DIR_SEPARATOR 627 # define DIR_SEPARATOR '/' 628 # ifdef HAVE_DOS_BASED_FILE_SYSTEM 629 # define DIR_SEPARATOR_2 '\\' 630 # endif 631 #endif 632 633 #if defined (ENABLE_PLUGIN) && defined (HAVE_DLFCN_H) 634 /* If plugin support is enabled, we could use libdl. */ 635 #include <dlfcn.h> 636 #endif 637 638 /* Get libiberty declarations. */ 639 #include "libiberty.h" 640 641 /* Provide a default for the HOST_BIT_BUCKET. 642 This suffices for POSIX-like hosts. */ 643 644 #ifndef HOST_BIT_BUCKET 645 #define HOST_BIT_BUCKET "/dev/null" 646 #endif 647 648 #ifndef offsetof 649 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) 650 #endif 651 652 /* Various error reporting routines want to use __FUNCTION__. */ 653 #if (GCC_VERSION < 2007) 654 #ifndef __FUNCTION__ 655 #define __FUNCTION__ "?" 656 #endif /* ! __FUNCTION__ */ 657 #endif 658 659 /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that 660 the most likely value of A is B. This feature was added at some point 661 between 2.95 and 3.0. Let's use 3.0 as the lower bound for now. */ 662 #if (GCC_VERSION < 3000) 663 #define __builtin_expect(a, b) (a) 664 #endif 665 666 /* Redefine abort to report an internal error w/o coredump, and 667 reporting the location of the error in the source file. */ 668 extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; 669 #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__) 670 671 /* Use gcc_assert(EXPR) to test invariants. */ 672 #if ENABLE_ASSERT_CHECKING 673 #define gcc_assert(EXPR) \ 674 ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0)) 675 #elif (GCC_VERSION >= 4005) 676 #define gcc_assert(EXPR) \ 677 ((void)(__builtin_expect(!(EXPR), 0) ? __builtin_unreachable(), 0 : 0)) 678 #else 679 /* Include EXPR, so that unused variable warnings do not occur. */ 680 #define gcc_assert(EXPR) ((void)(0 && (EXPR))) 681 #endif 682 683 #ifdef ENABLE_CHECKING 684 #define gcc_checking_assert(EXPR) gcc_assert (EXPR) 685 #else 686 #define gcc_checking_assert(EXPR) ((void)(0 && (EXPR))) 687 #endif 688 689 /* Use gcc_unreachable() to mark unreachable locations (like an 690 unreachable default case of a switch. Do not use gcc_assert(0). */ 691 #if (GCC_VERSION >= 4005) && !ENABLE_ASSERT_CHECKING 692 #define gcc_unreachable() __builtin_unreachable() 693 #else 694 #define gcc_unreachable() (fancy_abort (__FILE__, __LINE__, __FUNCTION__)) 695 #endif 696 697 /* Provide a fake boolean type. We make no attempt to use the 698 C99 _Bool, as it may not be available in the bootstrap compiler, 699 and even if it is, it is liable to be buggy. 700 This must be after all inclusion of system headers, as some of 701 them will mess us up. */ 702 703 #undef TRUE 704 #undef FALSE 705 706 #ifdef __cplusplus 707 /* Obsolete. */ 708 # define TRUE true 709 # define FALSE false 710 #else /* !__cplusplus */ 711 # undef bool 712 # undef true 713 # undef false 714 715 # define bool unsigned char 716 # define true 1 717 # define false 0 718 719 /* Obsolete. */ 720 # define TRUE true 721 # define FALSE false 722 #endif /* !__cplusplus */ 723 724 /* Some compilers do not allow the use of unsigned char in bitfields. */ 725 #define BOOL_BITFIELD unsigned int 726 727 /* As the last action in this file, we poison the identifiers that 728 shouldn't be used. Note, luckily gcc-3.0's token-based integrated 729 preprocessor won't trip on poisoned identifiers that arrive from 730 the expansion of macros. E.g. #define strrchr rindex, won't error 731 if rindex is poisoned after this directive is issued and later on 732 strrchr is called. 733 734 Note: We define bypass macros for the few cases where we really 735 want to use the libc memory allocation routines. Otherwise we 736 insist you use the "x" versions from libiberty. */ 737 738 #define really_call_malloc malloc 739 #define really_call_calloc calloc 740 #define really_call_realloc realloc 741 742 #if defined(FLEX_SCANNER) || defined(YYBISON) || defined(YYBYACC) 743 /* Flex and bison use malloc and realloc. Yuk. Note that this means 744 really_call_* cannot be used in a .l or .y file. */ 745 #define malloc xmalloc 746 #define realloc xrealloc 747 #endif 748 749 #if (GCC_VERSION >= 3000) 750 751 /* Note autoconf checks for prototype declarations and includes 752 system.h while doing so. Only poison these tokens if actually 753 compiling gcc, so that the autoconf declaration tests for malloc 754 etc don't spuriously fail. */ 755 #ifdef IN_GCC 756 #undef calloc 757 #undef strdup 758 #pragma GCC poison calloc strdup 759 760 #if !defined(FLEX_SCANNER) && !defined(YYBISON) 761 #undef malloc 762 #undef realloc 763 #pragma GCC poison malloc realloc 764 #endif 765 766 /* The %m format should be used when GCC's main diagnostic functions 767 supporting %m are available, and xstrerror from libiberty 768 otherwise. */ 769 #undef strerror 770 #pragma GCC poison strerror 771 772 /* Old target macros that have moved to the target hooks structure. */ 773 #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN \ 774 FUNCTION_PROLOGUE FUNCTION_EPILOGUE \ 775 FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE \ 776 DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES \ 777 VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE \ 778 SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES \ 779 MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES \ 780 MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR \ 781 ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC MAX_CHAR_TYPE_SIZE \ 782 WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \ 783 ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL \ 784 ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS \ 785 ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END \ 786 ASM_SIMPLIFY_DWARF_ADDR INIT_TARGET_OPTABS INIT_SUBTARGET_OPTABS \ 787 INIT_GOFAST_OPTABS MULSI3_LIBCALL MULDI3_LIBCALL DIVSI3_LIBCALL \ 788 DIVDI3_LIBCALL UDIVSI3_LIBCALL UDIVDI3_LIBCALL MODSI3_LIBCALL \ 789 MODDI3_LIBCALL UMODSI3_LIBCALL UMODDI3_LIBCALL BUILD_VA_LIST_TYPE \ 790 PRETEND_OUTGOING_VARARGS_NAMED STRUCT_VALUE_INCOMING_REGNUM \ 791 ASM_OUTPUT_SECTION_NAME PROMOTE_FUNCTION_ARGS PROMOTE_FUNCTION_MODE \ 792 STRUCT_VALUE_INCOMING STRICT_ARGUMENT_NAMING \ 793 PROMOTE_FUNCTION_RETURN PROMOTE_PROTOTYPES STRUCT_VALUE_REGNUM \ 794 SETUP_INCOMING_VARARGS EXPAND_BUILTIN_SAVEREGS \ 795 DEFAULT_SHORT_ENUMS SPLIT_COMPLEX_ARGS MD_ASM_CLOBBERS \ 796 HANDLE_PRAGMA_REDEFINE_EXTNAME HANDLE_PRAGMA_EXTERN_PREFIX \ 797 MUST_PASS_IN_STACK FUNCTION_ARG_PASS_BY_REFERENCE \ 798 VECTOR_MODE_SUPPORTED_P TARGET_SUPPORTS_HIDDEN \ 799 FUNCTION_ARG_PARTIAL_NREGS ASM_OUTPUT_DWARF_DTPREL \ 800 ALLOCATE_INITIAL_VALUE LEGITIMIZE_ADDRESS FRAME_POINTER_REQUIRED \ 801 CAN_ELIMINATE TRAMPOLINE_TEMPLATE INITIALIZE_TRAMPOLINE \ 802 TRAMPOLINE_ADJUST_ADDRESS STATIC_CHAIN STATIC_CHAIN_INCOMING \ 803 RETURN_POPS_ARGS UNITS_PER_SIMD_WORD OVERRIDE_OPTIONS \ 804 OPTIMIZATION_OPTIONS CLASS_LIKELY_SPILLED_P \ 805 USING_SJLJ_EXCEPTIONS TARGET_UNWIND_INFO \ 806 LABEL_ALIGN_MAX_SKIP LOOP_ALIGN_MAX_SKIP \ 807 LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP JUMP_ALIGN_MAX_SKIP \ 808 CAN_DEBUG_WITHOUT_FP UNLIKELY_EXECUTED_TEXT_SECTION_NAME \ 809 HOT_TEXT_SECTION_NAME LEGITIMATE_CONSTANT_P ALWAYS_STRIP_DOTDOT \ 810 OUTPUT_ADDR_CONST_EXTRA SMALL_REGISTER_CLASSES 811 812 /* Target macros only used for code built for the target, that have 813 moved to libgcc-tm.h or have never been present elsewhere. */ 814 #pragma GCC poison DECLARE_LIBRARY_RENAMES LIBGCC2_GNU_PREFIX \ 815 MD_UNWIND_SUPPORT MD_FROB_UPDATE_CONTEXT ENABLE_EXECUTE_STACK \ 816 REG_VALUE_IN_UNWIND_CONTEXT ASSUME_EXTENDED_UNWIND_CONTEXT 817 818 /* Other obsolete target macros, or macros that used to be in target 819 headers and were not used, and may be obsolete or may never have 820 been used. */ 821 #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG CPP_PREDEFINES \ 822 ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT SMALL_STACK \ 823 DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \ 824 OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR \ 825 LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC \ 826 STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE \ 827 SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH \ 828 TRADITIONAL_RETURN_FLOAT NO_BUILTIN_SIZE_TYPE \ 829 NO_BUILTIN_PTRDIFF_TYPE NO_BUILTIN_WCHAR_TYPE NO_BUILTIN_WINT_TYPE \ 830 BLOCK_PROFILER BLOCK_PROFILER_CODE FUNCTION_BLOCK_PROFILER \ 831 FUNCTION_BLOCK_PROFILER_EXIT MACHINE_STATE_SAVE \ 832 MACHINE_STATE_RESTORE SCCS_DIRECTIVE SECTION_ASM_OP BYTEORDER \ 833 ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL HOST_WORDS_BIG_ENDIAN \ 834 OBJC_PROLOGUE ALLOCATE_TRAMPOLINE HANDLE_PRAGMA ROUND_TYPE_SIZE \ 835 ROUND_TYPE_SIZE_UNIT CONST_SECTION_ASM_OP CRT_GET_RFIB_TEXT \ 836 DBX_LBRAC_FIRST DBX_OUTPUT_ENUM DBX_OUTPUT_SOURCE_FILENAME \ 837 DBX_WORKING_DIRECTORY INSN_CACHE_DEPTH INSN_CACHE_SIZE \ 838 INSN_CACHE_LINE_WIDTH INIT_SECTION_PREAMBLE NEED_ATEXIT ON_EXIT \ 839 EXIT_BODY OBJECT_FORMAT_ROSE MULTIBYTE_CHARS MAP_CHARACTER \ 840 LIBGCC_NEEDS_DOUBLE FINAL_PRESCAN_LABEL DEFAULT_CALLER_SAVES \ 841 LOAD_ARGS_REVERSED MAX_INTEGER_COMPUTATION_MODE \ 842 CONVERT_HARD_REGISTER_TO_SSA_P ASM_OUTPUT_MAIN_SOURCE_FILENAME \ 843 FIRST_INSN_ADDRESS TEXT_SECTION SHARED_BSS_SECTION_ASM_OP \ 844 PROMOTED_MODE EXPAND_BUILTIN_VA_END \ 845 LINKER_DOES_NOT_WORK_WITH_DWARF2 FUNCTION_ARG_KEEP_AS_REFERENCE \ 846 GIV_SORT_CRITERION MAX_LONG_TYPE_SIZE MAX_LONG_DOUBLE_TYPE_SIZE \ 847 MAX_WCHAR_TYPE_SIZE SHARED_SECTION_ASM_OP INTEGRATE_THRESHOLD \ 848 FINAL_REG_PARM_STACK_SPACE MAYBE_REG_PARM_STACK_SPACE \ 849 TRADITIONAL_PIPELINE_INTERFACE DFA_PIPELINE_INTERFACE \ 850 DBX_OUTPUT_STANDARD_TYPES BUILTIN_SETJMP_FRAME_VALUE \ 851 SUNOS4_SHARED_LIBRARIES PROMOTE_FOR_CALL_ONLY \ 852 SPACE_AFTER_L_OPTION NO_RECURSIVE_FUNCTION_CSE \ 853 DEFAULT_MAIN_RETURN TARGET_MEM_FUNCTIONS EXPAND_BUILTIN_VA_ARG \ 854 COLLECT_PARSE_FLAG DWARF2_GENERATE_TEXT_SECTION_LABEL WINNING_GDB \ 855 ASM_OUTPUT_FILENAME ASM_OUTPUT_SOURCE_LINE FILE_NAME_JOINER \ 856 GDB_INV_REF_REGPARM_STABS_LETTER DBX_MEMPARM_STABS_LETTER \ 857 PUT_SDB_SRC_FILE STABS_GCC_MARKER DBX_OUTPUT_FUNCTION_END \ 858 DBX_OUTPUT_GCC_MARKER DBX_FINISH_SYMBOL SDB_GENERATE_FAKE \ 859 NON_SAVING_SETJMP TARGET_LATE_RTL_PROLOGUE_EPILOGUE \ 860 CASE_DROPS_THROUGH TARGET_BELL TARGET_BS TARGET_CR TARGET_DIGIT0 \ 861 TARGET_ESC TARGET_FF TARGET_NEWLINE TARGET_TAB TARGET_VT \ 862 LINK_LIBGCC_SPECIAL DONT_ACCESS_GBLS_AFTER_EPILOGUE \ 863 TARGET_OPTIONS TARGET_SWITCHES EXTRA_CC_MODES FINALIZE_PIC \ 864 PREDICATE_CODES SPECIAL_MODE_PREDICATES UNALIGNED_WORD_ASM_OP \ 865 EXTRA_SECTIONS EXTRA_SECTION_FUNCTIONS READONLY_DATA_SECTION \ 866 TARGET_ASM_EXCEPTION_SECTION TARGET_ASM_EH_FRAME_SECTION \ 867 SMALL_ARG_MAX ASM_OUTPUT_SHARED_BSS ASM_OUTPUT_SHARED_COMMON \ 868 ASM_OUTPUT_SHARED_LOCAL ASM_MAKE_LABEL_LINKONCE \ 869 STACK_CHECK_PROBE_INTERVAL STACK_CHECK_PROBE_LOAD \ 870 ORDER_REGS_FOR_LOCAL_ALLOC FUNCTION_OUTGOING_VALUE \ 871 ASM_DECLARE_CONSTANT_NAME MODIFY_TARGET_NAME SWITCHES_NEED_SPACES \ 872 SWITCH_CURTAILS_COMPILATION SWITCH_TAKES_ARG WORD_SWITCH_TAKES_ARG \ 873 TARGET_OPTION_TRANSLATE_TABLE HANDLE_PRAGMA_PACK_PUSH_POP \ 874 HANDLE_SYSV_PRAGMA HANDLE_PRAGMA_WEAK CONDITIONAL_REGISTER_USAGE \ 875 FUNCTION_ARG_BOUNDARY MUST_USE_SJLJ_EXCEPTIONS US_SOFTWARE_GOFAST \ 876 USING_SVR4_H SVR4_ASM_SPEC FUNCTION_ARG FUNCTION_ARG_ADVANCE \ 877 FUNCTION_INCOMING_ARG IRA_COVER_CLASSES TARGET_VERSION \ 878 MACHINE_TYPE TARGET_HAS_TARGETCM ASM_OUTPUT_BSS \ 879 SETJMP_VIA_SAVE_AREA FORBIDDEN_INC_DEC_CLASSES \ 880 PREFERRED_OUTPUT_RELOAD_CLASS SYSTEM_INCLUDE_DIR \ 881 STANDARD_INCLUDE_DIR STANDARD_INCLUDE_COMPONENT 882 883 /* Hooks that are no longer used. */ 884 #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \ 885 LANG_HOOKS_MARK_TREE LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES \ 886 LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS \ 887 LANG_HOOKS_PUSHLEVEL LANG_HOOKS_SET_BLOCK \ 888 LANG_HOOKS_MAYBE_BUILD_CLEANUP LANG_HOOKS_UPDATE_DECL_AFTER_SAVING \ 889 LANG_HOOKS_POPLEVEL LANG_HOOKS_TRUTHVALUE_CONVERSION \ 890 TARGET_PROMOTE_FUNCTION_ARGS TARGET_PROMOTE_FUNCTION_RETURN \ 891 LANG_HOOKS_MISSING_ARGUMENT LANG_HOOKS_HASH_TYPES \ 892 TARGET_HANDLE_OFAST TARGET_OPTION_OPTIMIZATION \ 893 TARGET_IRA_COVER_CLASSES TARGET_HELP 894 895 /* Arrays that were deleted in favor of a functional interface. */ 896 #pragma GCC poison built_in_decls implicit_built_in_decls 897 898 /* Hooks into libgcc2. */ 899 #pragma GCC poison LIBGCC2_DOUBLE_TYPE_SIZE LIBGCC2_WORDS_BIG_ENDIAN \ 900 LIBGCC2_FLOAT_WORDS_BIG_ENDIAN 901 902 /* Miscellaneous macros that are no longer used. */ 903 #pragma GCC poison USE_MAPPED_LOCATION GET_ENVIRONMENT 904 905 /* Libiberty macros that are no longer used in GCC. */ 906 #undef ANSI_PROTOTYPES 907 #undef PTR_CONST 908 #undef LONG_DOUBLE 909 #undef VPARAMS 910 #undef VA_OPEN 911 #undef VA_FIXEDARG 912 #undef VA_CLOSE 913 #undef VA_START 914 #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \ 915 VA_FIXEDARG VA_CLOSE VA_START 916 #endif /* IN_GCC */ 917 918 /* Front ends should never have to include middle-end headers. Enforce 919 this by poisoning the header double-include protection defines. */ 920 #ifdef IN_GCC_FRONTEND 921 #pragma GCC poison GCC_RTL_H GCC_EXCEPT_H GCC_EXPR_H 922 #endif 923 924 /* Note: not all uses of the `index' token (e.g. variable names and 925 structure members) have been eliminated. */ 926 #undef bcopy 927 #undef bzero 928 #undef bcmp 929 #undef rindex 930 #pragma GCC poison bcopy bzero bcmp rindex 931 932 #endif /* GCC >= 3.0 */ 933 934 /* This macro allows casting away const-ness to pass -Wcast-qual 935 warnings. DO NOT USE THIS UNLESS YOU REALLY HAVE TO! It should 936 only be used in certain specific cases. One valid case is where 937 the C standard definitions or prototypes force you to. E.g. if you 938 need to free a const object, or if you pass a const string to 939 execv, et al. Another valid use would be in an allocation function 940 that creates const objects that need to be initialized. In some 941 cases we have non-const functions that return the argument 942 (e.g. next_nonnote_insn). Rather than create const shadow 943 functions, we can cast away const-ness in calling these interfaces 944 if we're careful to verify that the called function does indeed not 945 modify its argument and the return value is only used in a const 946 context. (This can be somewhat dangerous as these assumptions can 947 change after the fact). Beyond these uses, most other cases of 948 using this macro should be viewed with extreme caution. */ 949 950 #ifdef __cplusplus 951 #define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X)) 952 #else 953 #if defined(__GNUC__) && GCC_VERSION > 4000 954 /* GCC 4.0.x has a bug where it may ICE on this expression, 955 so does GCC 3.4.x (PR17436). */ 956 #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq) 957 #elif defined(__GNUC__) 958 static inline char * 959 helper_const_non_const_cast (const char *p) 960 { 961 union { 962 const char *const_c; 963 char *c; 964 } val; 965 val.const_c = p; 966 return val.c; 967 } 968 969 #define CONST_CAST2(TOTYPE,FROMTYPE,X) \ 970 ((TOTYPE) helper_const_non_const_cast ((const char *) (FROMTYPE) (X))) 971 #else 972 #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((TOTYPE)(FROMTYPE)(X)) 973 #endif 974 #endif 975 #define CONST_CAST(TYPE,X) CONST_CAST2(TYPE, const TYPE, (X)) 976 #define CONST_CAST_TREE(X) CONST_CAST(union tree_node *, (X)) 977 #define CONST_CAST_RTX(X) CONST_CAST(struct rtx_def *, (X)) 978 #define CONST_CAST_BB(X) CONST_CAST(struct basic_block_def *, (X)) 979 #define CONST_CAST_GIMPLE(X) CONST_CAST(union gimple_statement_d *, (X)) 980 981 /* Activate certain diagnostics as warnings (not errors via the 982 -Werror flag). */ 983 #if GCC_VERSION >= 4003 984 /* If asserts are disabled, activate -Wuninitialized as a warning (not 985 an error/-Werror). */ 986 #ifndef ENABLE_ASSERT_CHECKING 987 #pragma GCC diagnostic warning "-Wuninitialized" 988 #endif 989 #endif 990 991 #ifdef ENABLE_VALGRIND_CHECKING 992 # ifdef HAVE_VALGRIND_MEMCHECK_H 993 # include <valgrind/memcheck.h> 994 # elif defined HAVE_MEMCHECK_H 995 # include <memcheck.h> 996 # else 997 # include <valgrind.h> 998 # endif 999 /* Compatibility macros to let valgrind 3.1 work. */ 1000 # ifndef VALGRIND_MAKE_MEM_NOACCESS 1001 # define VALGRIND_MAKE_MEM_NOACCESS VALGRIND_MAKE_NOACCESS 1002 # endif 1003 # ifndef VALGRIND_MAKE_MEM_DEFINED 1004 # define VALGRIND_MAKE_MEM_DEFINED VALGRIND_MAKE_READABLE 1005 # endif 1006 # ifndef VALGRIND_MAKE_MEM_UNDEFINED 1007 # define VALGRIND_MAKE_MEM_UNDEFINED VALGRIND_MAKE_WRITABLE 1008 # endif 1009 #else 1010 /* Avoid #ifdef:s when we can help it. */ 1011 #define VALGRIND_DISCARD(x) 1012 #define VALGRIND_MALLOCLIKE_BLOCK(w,x,y,z) 1013 #define VALGRIND_FREELIKE_BLOCK(x,y) 1014 #endif 1015 1016 /* In LTO -fwhole-program build we still want to keep the debug functions available 1017 for debugger. Mark them as used to prevent removal. */ 1018 #if (GCC_VERSION > 4000) 1019 #define DEBUG_FUNCTION __attribute__ ((__used__)) 1020 #define DEBUG_VARIABLE __attribute__ ((__used__)) 1021 #else 1022 #define DEBUG_FUNCTION 1023 #define DEBUG_VARIABLE 1024 #endif 1025 1026 #endif /* ! GCC_SYSTEM_H */ 1027