On Thu, May 5, 2022 at 2:19 PM Martin Liška <mli...@suse.cz> wrote:
>
> Right now, the minimal required version of GCC is 4.8.x
> that is a version that well supports c++11.

Hmm, but we support C++11 host compilers that are not GCC but
may claim to be, with GCC_VERSION 4.2.x for example.  Are we sure
all those liars implement what we guard with the version checks?

I suppose to be "correct" we'd at least need to preserve
#if __GNUC__
in places where we might use the host compiler?  (if compilers then lie
it's their own fault)

Richard.

> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>
> Ready to be installed?
> Thanks,
> Martin
>
> gcc/ChangeLog:
>
>         * bitmap.cc (bitmap_popcount):
>         Fold GCC_VERSION >= $old_version to TRUE, otherwise to FALSE.
>         (bitmap_count_bits_in_word): Likewise.
>         (bitmap_single_bit_set_p): Likewise.
>         (bitmap_first_set_bit): Likewise.
>         (bitmap_last_set_bit): Likewise.
>         * bitmap.h (if): Likewise.
>         * config/ia64/ia64.cc (RWS_FIELD_TYPE): Likewise.
>         * config/rs6000/rs6000.h (if): Likewise.
>         * defaults.h: Likewise.
>         * diagnostic-core.h (if): Likewise.
>         (ATTRIBUTE_GCC_DIAG): Likewise.
>         * dwarf2cfi.cc (if): Likewise.
>         * dwarf2out.cc (if): Likewise.
>         (DWARF2_ASM_LINE_DEBUG_INFO): Likewise.
>         (DWARF2_ASM_VIEW_DEBUG_INFO): Likewise.
>         * gcc.cc (if): Likewise.
>         * genautomata.cc (struct state_ainsn_table): Likewise.
>         (regexp_mode_check_failed): Likewise.
>         (REGEXP_ONEOF): Likewise.
>         * genconditions.cc (write_header): Likewise.
>         (write_writer): Likewise.
>         * genmatch.cc: Likewise.
>         * genmodes.cc (GCC_INSN_MODES_INLINE_H): Likewise.
>         * genoutput.cc (output_insn_data): Likewise.
>         * ggc-page.cc (if): Likewise.
>         (prefetch): Likewise.
>         (ggc_internal_alloc): Likewise.
>         * ggc-tests.cc (test_finalization): Likewise.
>         * ggc.h (need_finalization_p): Likewise.
>         * hwint.cc (floor_log2): Likewise.
>         (ceil_log2): Likewise.
>         (exact_log2): Likewise.
>         (ctz_hwi): Likewise.
>         (clz_hwi): Likewise.
>         (ffs_hwi): Likewise.
>         (popcount_hwi): Likewise.
>         * hwint.h (HAVE_LONG_LONG): Likewise.
>         (SIZEOF_LONG_LONG): Likewise.
>         (sizeof_long_long_must_be_8[sizeof): Likewise.
>         (clz_hwi): Likewise.
>         (ctz_hwi): Likewise.
>         (ffs_hwi): Likewise.
>         (popcount_hwi): Likewise.
>         (exact_log2): Likewise.
>         (floor_log2): Likewise.
>         (ceil_log2): Likewise.
>         * ira-int.h: Likewise.
>         * machmode.h (mode_to_bytes): Likewise.
>         (mode_to_inner): Likewise.
>         (mode_to_unit_size): Likewise.
>         (mode_to_unit_precision): Likewise.
>         (mode_to_nunits): Likewise.
>         * output.h (ATTRIBUTE_ASM_FPRINTF): Likewise.
>         * pretty-print.h (ATTRIBUTE_GCC_PPDIAG): Likewise.
>         * rtl.cc (dump_rtx_statistics): Likewise.
>         * rtl.h (test): Likewise.
>         (RTX_FLAG): Likewise.
>         (enum label_kind): Likewise.
>         * sbitmap.cc (sbitmap_popcount): Likewise.
>         (bitmap_count_bits): Likewise.
>         * stringpool.h (get_identifier_with_length): Likewise.
>         * system.h (HAVE_DESIGNATED_INITIALIZERS): Likewise.
>         (HAVE_DESIGNATED_UNION_INITIALIZERS): Likewise.
>         (if): Likewise.
>         (__FUNCTION__): Likewise.
>         (__builtin_expect): Likewise.
>         (elif): Likewise.
>         (gcc_assert): Likewise.
>         (ALWAYS_INLINE): Likewise.
>         (WARN_UNUSED_RESULT): Likewise.
>         (STATIC_CONSTANT_P): Likewise.
>         (defined): Likewise.
>         (BROKEN_VALUE_INITIALIZATION): Likewise.
>         (DEBUG_FUNCTION): Likewise.
>         (DEBUG_VARIABLE): Likewise.
>         * tree-vrp.cc (vrp_asserts::find_switch_asserts): Likewise.
>         * tree.cc (get_file_function_name): Likewise.
>         * tree.h (as_internal_fn): Likewise.
>         (if): Likewise.
>         (DECL_RTL_KNOWN_SET): Likewise.
>         (prepare_target_option_nodes_for_pch): Likewise.
>         (tree_operand_length): Likewise.
>         (tree_to_poly_uint64): Likewise.
>         * var-tracking.cc (int_mem_offset): Likewise.
>         * vec.h (if): Likewise.
>         * wide-int.cc (defined): Likewise.
>         (if): Likewise.
>
> gcc/cp/ChangeLog:
>
>         * cp-tree.h (BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK):
>         Fold GCC_VERSION >= $old_version to TRUE, otherwise to FALSE.
>         (STRIP_TEMPLATE): Likewise.
>         * tree.cc (cp_tree_c_finish_parsing): Likewise.
>
> gcc/fortran/ChangeLog:
>
>         * gfortran.h (ATTRIBUTE_GCC_GFC):
>         Fold GCC_VERSION >= $old_version to TRUE, otherwise to FALSE.
>
> gcc/jit/ChangeLog:
>
>         * jit-common.h (GNU_PRINTF):
>         Fold GCC_VERSION >= $old_version to TRUE, otherwise to FALSE.
> ---
>  gcc/bitmap.cc              |  73 +-------------------------
>  gcc/bitmap.h               |  18 ++-----
>  gcc/config/ia64/ia64.cc    |   5 +-
>  gcc/config/rs6000/rs6000.h |   2 -
>  gcc/cp/cp-tree.h           |   4 +-
>  gcc/cp/tree.cc             |   2 +-
>  gcc/defaults.h             |   2 +-
>  gcc/diagnostic-core.h      |   4 --
>  gcc/dwarf2cfi.cc           |   4 +-
>  gcc/dwarf2out.cc           |  16 ++----
>  gcc/fortran/gfortran.h     |   4 --
>  gcc/gcc.cc                 |   2 -
>  gcc/genautomata.cc         |   6 +--
>  gcc/genconditions.cc       |   9 +---
>  gcc/genmatch.cc            |  12 -----
>  gcc/genmodes.cc            |   4 +-
>  gcc/genoutput.cc           |   2 +-
>  gcc/ggc-page.cc            |   9 ----
>  gcc/ggc-tests.cc           |   2 -
>  gcc/ggc.h                  |   4 --
>  gcc/hwint.cc               | 104 -------------------------------------
>  gcc/hwint.h                |  32 ++----------
>  gcc/ira-int.h              |   6 +--
>  gcc/jit/jit-common.h       |   4 --
>  gcc/machmode.h             |  20 -------
>  gcc/output.h               |   4 --
>  gcc/pretty-print.h         |   4 --
>  gcc/rtl.cc                 |   2 +-
>  gcc/rtl.h                  |   6 +--
>  gcc/sbitmap.cc             |  37 ++-----------
>  gcc/stringpool.h           |   2 -
>  gcc/system.h               |  62 +++-------------------
>  gcc/tree-vrp.cc            |   5 --
>  gcc/tree.cc                |   2 +-
>  gcc/tree.h                 |  20 ++-----
>  gcc/var-tracking.cc        |   2 +-
>  gcc/vec.h                  |   8 +--
>  gcc/wide-int.cc            |   2 +-
>  38 files changed, 52 insertions(+), 454 deletions(-)
>
> diff --git a/gcc/bitmap.cc b/gcc/bitmap.cc
> index 88c329f9325..a19d8cddea5 100644
> --- a/gcc/bitmap.cc
> +++ b/gcc/bitmap.cc
> @@ -1081,33 +1081,6 @@ bitmap_get_aligned_chunk (const_bitmap head, unsigned 
> int chunk,
>    return (ptr->bits[word_num] >> bit_num) & max_value;
>  }
>
> -#if GCC_VERSION < 3400
> -/* Table of number of set bits in a character, indexed by value of char.  */
> -static const unsigned char popcount_table[] =
> -{
> -    0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
> -    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
> -    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
> -    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
> -    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
> -    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
> -    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
> -    3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,
> -};
> -
> -static unsigned long
> -bitmap_popcount (BITMAP_WORD a)
> -{
> -  unsigned long ret = 0;
> -  unsigned i;
> -
> -  /* Just do this the table way for now  */
> -  for (i = 0; i < BITMAP_WORD_BITS; i+= 8)
> -    ret += popcount_table[(a >> i) & 0xff];
> -  return ret;
> -}
> -#endif
> -
>  /* Count and return the number of bits set in the bitmap word BITS.  */
>  static unsigned long
>  bitmap_count_bits_in_word (const BITMAP_WORD *bits)
> @@ -1116,13 +1089,9 @@ bitmap_count_bits_in_word (const BITMAP_WORD *bits)
>
>    for (unsigned ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
>      {
> -#if GCC_VERSION >= 3400
>        /* Note that popcountl matches BITMAP_WORD in type, so the actual size
>          of BITMAP_WORD is not material.  */
>        count += __builtin_popcountl (bits[ix]);
> -#else
> -      count += bitmap_popcount (bits[ix]);
> -#endif
>      }
>    return count;
>  }
> @@ -1201,13 +1170,9 @@ bitmap_single_bit_set_p (const_bitmap a)
>
>    for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
>      {
> -#if GCC_VERSION >= 3400
>        /* Note that popcountl matches BITMAP_WORD in type, so the actual size
>          of BITMAP_WORD is not material.  */
>        count += __builtin_popcountl (elt->bits[ix]);
> -#else
> -      count += bitmap_popcount (elt->bits[ix]);
> -#endif
>        if (count > 1)
>         return false;
>      }
> @@ -1244,31 +1209,9 @@ bitmap_first_set_bit (const_bitmap a)
>   found_bit:
>    bit_no += ix * BITMAP_WORD_BITS;
>
> -#if GCC_VERSION >= 3004
>    gcc_assert (sizeof (long) == sizeof (word));
>    bit_no += __builtin_ctzl (word);
> -#else
> -  /* Binary search for the first set bit.  */
> -#if BITMAP_WORD_BITS > 64
> -#error "Fill out the table."
> -#endif
> -#if BITMAP_WORD_BITS > 32
> -  if (!(word & 0xffffffff))
> -    word >>= 32, bit_no += 32;
> -#endif
> -  if (!(word & 0xffff))
> -    word >>= 16, bit_no += 16;
> -  if (!(word & 0xff))
> -    word >>= 8, bit_no += 8;
> -  if (!(word & 0xf))
> -    word >>= 4, bit_no += 4;
> -  if (!(word & 0x3))
> -    word >>= 2, bit_no += 2;
> -  if (!(word & 0x1))
> -    word >>= 1, bit_no += 1;
> -
> - gcc_checking_assert (word & 1);
> -#endif
> +
>   return bit_no;
>  }
>
> @@ -1302,22 +1245,8 @@ bitmap_last_set_bit (const_bitmap a)
>    gcc_assert (elt->bits[ix] != 0);
>   found_bit:
>    bit_no += ix * BITMAP_WORD_BITS;
> -#if GCC_VERSION >= 3004
>    gcc_assert (sizeof (long) == sizeof (word));
>    bit_no += BITMAP_WORD_BITS - __builtin_clzl (word) - 1;
> -#else
> -  /* Hopefully this is a twos-complement host...  */
> -  BITMAP_WORD x = word;
> -  x |= (x >> 1);
> -  x |= (x >> 2);
> -  x |= (x >> 4);
> -  x |= (x >> 8);
> -  x |= (x >> 16);
> -#if BITMAP_WORD_BITS > 32
> -  x |= (x >> 32);
> -#endif
> -  bit_no += bitmap_popcount (x) - 1;
> -#endif
>
>    return bit_no;
>  }
> diff --git a/gcc/bitmap.h b/gcc/bitmap.h
> index 7fba443aff1..e7bf67a5474 100644
> --- a/gcc/bitmap.h
> +++ b/gcc/bitmap.h
> @@ -708,20 +708,10 @@ bmp_iter_next (bitmap_iterator *bi, unsigned *bit_no)
>  static inline void
>  bmp_iter_next_bit (bitmap_iterator * bi, unsigned *bit_no)
>  {
> -#if (GCC_VERSION >= 3004)
> -  {
> -    unsigned int n = __builtin_ctzl (bi->bits);
> -    gcc_assert (sizeof (unsigned long) == sizeof (BITMAP_WORD));
> -    bi->bits >>= n;
> -    *bit_no += n;
> -  }
> -#else
> -  while (!(bi->bits & 1))
> -    {
> -      bi->bits >>= 1;
> -      *bit_no += 1;
> -    }
> -#endif
> +  unsigned int n = __builtin_ctzl (bi->bits);
> +  gcc_assert (sizeof (unsigned long) == sizeof (BITMAP_WORD));
> +  bi->bits >>= n;
> +  *bit_no += n;
>  }
>
>  /* Advance to the next nonzero bit of a single bitmap, we will have
> diff --git a/gcc/config/ia64/ia64.cc b/gcc/config/ia64/ia64.cc
> index f9fb681a36c..445a391f0f8 100644
> --- a/gcc/config/ia64/ia64.cc
> +++ b/gcc/config/ia64/ia64.cc
> @@ -6213,11 +6213,8 @@ ia64_safe_type (rtx_insn *insn)
>     If a predicate register is written by an AND.ORCM we set WRITTEN_BY_AND
>     to true; if it was written by an OR.ANDCM we set WRITTEN_BY_OR to true.  
> */
>
> -#if GCC_VERSION >= 4000
>  #define RWS_FIELD_TYPE __extension__ unsigned short
> -#else
> -#define RWS_FIELD_TYPE unsigned int
> -#endif
> +
>  struct reg_write_state
>  {
>    RWS_FIELD_TYPE write_count : 2;
> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
> index 523256a5c9d..4e83372a291 100644
> --- a/gcc/config/rs6000/rs6000.h
> +++ b/gcc/config/rs6000/rs6000.h
> @@ -2586,9 +2586,7 @@ typedef struct GTY(()) machine_function
>
>  #define TARGET_SUPPORTS_WIDE_INT 1
>
> -#if (GCC_VERSION >= 3000)
>  #pragma GCC poison TARGET_FLOAT128 OPTION_MASK_FLOAT128 MASK_FLOAT128
> -#endif
>
>  /* Whether a given VALUE is a valid 16 or 34-bit signed integer.  */
>  #define SIGNED_INTEGER_NBIT_P(VALUE, N)                                      
>   \
> diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
> index 663fe7a20fc..e9c3cf2bad0 100644
> --- a/gcc/cp/cp-tree.h
> +++ b/gcc/cp/cp-tree.h
> @@ -631,7 +631,7 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
>  #define BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK(NODE) \
>    TREE_CHECK(NODE,BOUND_TEMPLATE_TEMPLATE_PARM)
>
> -#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
> +#if defined ENABLE_TREE_CHECKING
>
>  /* Returns t iff the node can have a TEMPLATE_INFO field.  */
>
> @@ -2989,7 +2989,7 @@ struct GTY(()) lang_decl {
>  #define STRIP_TEMPLATE(NODE) \
>    (TREE_CODE (NODE) == TEMPLATE_DECL ? DECL_TEMPLATE_RESULT (NODE) : NODE)
>
> -#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
> +#if defined ENABLE_TREE_CHECKING
>
>  #define LANG_DECL_MIN_CHECK(NODE) __extension__                        \
>  ({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE);           \
> diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc
> index ed0d0d22950..98175bfeb11 100644
> --- a/gcc/cp/tree.cc
> +++ b/gcc/cp/tree.cc
> @@ -6129,7 +6129,7 @@ cp_tree_c_finish_parsing ()
>    deleted_copy_types = NULL;
>  }
>
> -#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
> +#if defined ENABLE_TREE_CHECKING
>  /* Complain that some language-specific thing hanging off a tree
>     node has been accessed improperly.  */
>
> diff --git a/gcc/defaults.h b/gcc/defaults.h
> index 7c7a80e596e..fbd4d8e5ae6 100644
> --- a/gcc/defaults.h
> +++ b/gcc/defaults.h
> @@ -949,7 +949,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  
> If not, see
>  #define DEFAULT_USE_CXA_ATEXIT 0
>  #endif
>
> -#if GCC_VERSION >= 3000 && defined IN_GCC
> +#ifdef IN_GCC
>  /* These old constraint macros shouldn't appear anywhere in a
>     configuration using MD constraint definitions.  */
>  #endif
> diff --git a/gcc/diagnostic-core.h b/gcc/diagnostic-core.h
> index 286954ac2f8..0df0c896406 100644
> --- a/gcc/diagnostic-core.h
> +++ b/gcc/diagnostic-core.h
> @@ -60,11 +60,7 @@ extern const char *trim_filename (const char *);
>  /* None of these functions are suitable for ATTRIBUTE_PRINTF, because
>     each language front end can extend them with its own set of format
>     specifiers.  We must use custom format checks.  */
> -#if (CHECKING_P && GCC_VERSION >= 4001) || GCC_VERSION == 
> BUILDING_GCC_VERSION
>  #define ATTRIBUTE_GCC_DIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, 
> m, n))) ATTRIBUTE_NONNULL(m)
> -#else
> -#define ATTRIBUTE_GCC_DIAG(m, n) ATTRIBUTE_NONNULL(m)
> -#endif
>  extern void internal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2)
>       ATTRIBUTE_NORETURN;
>  extern void internal_error_no_backtrace (const char *, ...)
> diff --git a/gcc/dwarf2cfi.cc b/gcc/dwarf2cfi.cc
> index ab7c5cc5b27..6aae3bdb5aa 100644
> --- a/gcc/dwarf2cfi.cc
> +++ b/gcc/dwarf2cfi.cc
> @@ -45,9 +45,7 @@ along with GCC; see the file COPYING3.  If not see
>     totally replaced in this file; make sure it stays that way.  */
>  #undef DWARF2_UNWIND_INFO
>  #undef DWARF2_FRAME_INFO
> -#if (GCC_VERSION >= 3000)
> - #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
> -#endif
> +#pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
>
>  #ifndef INCOMING_RETURN_ADDR_RTX
>  #define INCOMING_RETURN_ADDR_RTX  (gcc_unreachable (), NULL_RTX)
> diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc
> index 5681b01749a..d31818f999d 100644
> --- a/gcc/dwarf2out.cc
> +++ b/gcc/dwarf2out.cc
> @@ -133,9 +133,7 @@ int vms_file_stats_name (const char *, long long *, long 
> *, char *, int *);
>     totally replaced in this file; make sure it stays that way.  */
>  #undef DWARF2_UNWIND_INFO
>  #undef DWARF2_FRAME_INFO
> -#if (GCC_VERSION >= 3000)
> - #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
> -#endif
> +#pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
>
>  /* The size of the target's pointer type.  */
>  #ifndef PTR_SIZE
> @@ -3370,10 +3368,8 @@ bool
>  dwarf2out_default_as_loc_support (void)
>  {
>    return DWARF2_ASM_LINE_DEBUG_INFO;
> -#if (GCC_VERSION >= 3000)
> -# undef DWARF2_ASM_LINE_DEBUG_INFO
> -# pragma GCC poison DWARF2_ASM_LINE_DEBUG_INFO
> -#endif
> +#undef DWARF2_ASM_LINE_DEBUG_INFO
> +#pragma GCC poison DWARF2_ASM_LINE_DEBUG_INFO
>  }
>
>  /* Return true if GCC configure detected assembler support for views
> @@ -3383,10 +3379,8 @@ bool
>  dwarf2out_default_as_locview_support (void)
>  {
>    return DWARF2_ASM_VIEW_DEBUG_INFO;
> -#if (GCC_VERSION >= 3000)
> -# undef DWARF2_ASM_VIEW_DEBUG_INFO
> -# pragma GCC poison DWARF2_ASM_VIEW_DEBUG_INFO
> -#endif
> +#undef DWARF2_ASM_VIEW_DEBUG_INFO
> +#pragma GCC poison DWARF2_ASM_VIEW_DEBUG_INFO
>  }
>
>  /* A bit is set in ZERO_VIEW_P if we are using the assembler-supported
> diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
> index 7bf1d5a0452..7baab4bfceb 100644
> --- a/gcc/fortran/gfortran.h
> +++ b/gcc/fortran/gfortran.h
> @@ -1072,11 +1072,7 @@ typedef struct
>
>  /* In order for the "gfc" format checking to work correctly, you must
>     have declared a typedef locus first.  */
> -#if GCC_VERSION >= 4001
>  #define ATTRIBUTE_GCC_GFC(m, n) __attribute__ ((__format__ (__gcc_gfc__, m, 
> n))) ATTRIBUTE_NONNULL(m)
> -#else
> -#define ATTRIBUTE_GCC_GFC(m, n) ATTRIBUTE_NONNULL(m)
> -#endif
>
>
>  /* Suppress error messages or re-enable them.  */
> diff --git a/gcc/gcc.cc b/gcc/gcc.cc
> index bb07cc244e3..c5b92b380b2 100644
> --- a/gcc/gcc.cc
> +++ b/gcc/gcc.cc
> @@ -163,9 +163,7 @@ env_manager::restore ()
>  }
>
>  /* Forbid other uses of getenv and putenv.  */
> -#if (GCC_VERSION >= 3000)
>  #pragma GCC poison getenv putenv
> -#endif
>
>
>
> diff --git a/gcc/genautomata.cc b/gcc/genautomata.cc
> index e43314e4ea3..a290122f62c 100644
> --- a/gcc/genautomata.cc
> +++ b/gcc/genautomata.cc
> @@ -879,7 +879,7 @@ struct state_ainsn_table
>  /* Macros to access members of unions.  Use only them for access to
>     union members of declarations and regexps.  */
>
> -#if CHECKING_P && (GCC_VERSION >= 2007)
> +#if CHECKING_P
>
>  #define DECL_UNIT(d) __extension__                                     \
>  (({ __typeof (d) const _decl = (d);                                    \
> @@ -1070,7 +1070,7 @@ regexp_mode_check_failed (enum regexp_mode mode,
>    exit (1);
>  }
>
> -#else /* #if CHECKING_P && (GCC_VERSION >= 2007) */
> +#else /* #if CHECKING_P */
>
>  #define DECL_UNIT(d) (&(d)->decl.unit)
>  #define DECL_BYPASS(d) (&(d)->decl.bypass)
> @@ -1088,7 +1088,7 @@ regexp_mode_check_failed (enum regexp_mode mode,
>  #define REGEXP_ALLOF(r) (&(r)->regexp.allof)
>  #define REGEXP_ONEOF(r) (&(r)->regexp.oneof)
>
> -#endif /* #if CHECKING_P && (GCC_VERSION >= 2007) */
> +#endif /* #if CHECKING_P */
>
>  #define XCREATENODE(T) ((T *) create_node (sizeof (T)))
>  #define XCREATENODEVEC(T, N) ((T *) create_node (sizeof (T) * (N)))
> diff --git a/gcc/genconditions.cc b/gcc/genconditions.cc
> index f63a3f495c5..8845309fd91 100644
> --- a/gcc/genconditions.cc
> +++ b/gcc/genconditions.cc
> @@ -58,7 +58,6 @@ write_header (void)
>  /* It is necessary, but not entirely safe, to include the headers below\n\
>     in a generator program.  As a defensive measure, don't do so when the\n\
>     table isn't going to have anything in it.  */\n\
> -#if GCC_VERSION >= 3001\n\
>  \n\
>  /* Do not allow checking to confuse the issue.  */\n\
>  #undef CHECKING_P\n\
> @@ -108,8 +107,7 @@ write_header (void)
>  extern rtx_insn *insn;\n\
>  extern rtx ins1;\n\
>  extern rtx operands[];\n\
> -\n\
> -#endif /* gcc >= 3.0.1 */\n");
> +\n");
>  }
>
>  /* Write out one entry in the conditions table, using the data pointed
> @@ -170,12 +168,11 @@ struct c_test\n\
>     vary at run time.  It works in 3.0.1 and later; 3.0 only when not\n\
>     optimizing.  */\n\
>  \n\
> -#if GCC_VERSION >= 3001\n\
>  static const struct c_test insn_conditions[] = {\n");
>
>    traverse_c_tests (write_one_condition, 0);
>
> -  puts ("  { nullptr, -1 }\n};\n#endif /* gcc >= 3.0.1 */\n");
> +  puts ("  { nullptr, -1 }\n};\n");
>  }
>
>  /* Emit code which will convert the C-format table to a
> @@ -191,7 +188,6 @@ write_writer (void)
>         "  unsigned int i;\n"
>          "  const char *p;\n"
>          "  puts (\"(define_conditions [\");\n"
> -       "#if GCC_VERSION >= 3001\n"
>         "  for (i = 0; i < ARRAY_SIZE (insn_conditions) - 1; i++)\n"
>         "    {\n"
>         "      printf (\"  (%d \\\"\", insn_conditions[i].value);\n"
> @@ -207,7 +203,6 @@ write_writer (void)
>         "        }\n"
>          "      puts (\"\\\")\");\n"
>          "    }\n"
> -       "#endif /* gcc >= 3.0.1 */\n"
>         "  puts (\"])\");\n"
>          "  fflush (stdout);\n"
>          "return ferror (stdout) != 0 ? FATAL_EXIT_CODE : 
> SUCCESS_EXIT_CODE;\n"
> diff --git a/gcc/genmatch.cc b/gcc/genmatch.cc
> index 2eda7300821..a10a51b0c13 100644
> --- a/gcc/genmatch.cc
> +++ b/gcc/genmatch.cc
> @@ -70,9 +70,7 @@ linemap_client_expand_location_to_spelling_point 
> (location_t loc,
>  }
>
>  static bool
> -#if GCC_VERSION >= 4001
>  __attribute__((format (printf, 5, 0)))
> -#endif
>  diagnostic_cb (cpp_reader *, enum cpp_diagnostic_level errtype,
>                enum cpp_warning_reason, rich_location *richloc,
>                const char *msg, va_list *ap)
> @@ -115,9 +113,7 @@ notfound:
>  }
>
>  static void
> -#if GCC_VERSION >= 4001
>  __attribute__((format (printf, 2, 3)))
> -#endif
>  fatal_at (const cpp_token *tk, const char *msg, ...)
>  {
>    rich_location richloc (line_table, tk->src_loc);
> @@ -128,9 +124,7 @@ fatal_at (const cpp_token *tk, const char *msg, ...)
>  }
>
>  static void
> -#if GCC_VERSION >= 4001
>  __attribute__((format (printf, 2, 3)))
> -#endif
>  fatal_at (location_t loc, const char *msg, ...)
>  {
>    rich_location richloc (line_table, loc);
> @@ -141,9 +135,7 @@ fatal_at (location_t loc, const char *msg, ...)
>  }
>
>  static void
> -#if GCC_VERSION >= 4001
>  __attribute__((format (printf, 2, 3)))
> -#endif
>  warning_at (const cpp_token *tk, const char *msg, ...)
>  {
>    rich_location richloc (line_table, tk->src_loc);
> @@ -154,9 +146,7 @@ warning_at (const cpp_token *tk, const char *msg, ...)
>  }
>
>  static void
> -#if GCC_VERSION >= 4001
>  __attribute__((format (printf, 2, 3)))
> -#endif
>  warning_at (location_t loc, const char *msg, ...)
>  {
>    rich_location richloc (line_table, loc);
> @@ -169,9 +159,7 @@ warning_at (location_t loc, const char *msg, ...)
>  /* Like fprintf, but print INDENT spaces at the beginning.  */
>
>  static void
> -#if GCC_VERSION >= 4001
>  __attribute__((format (printf, 3, 4)))
> -#endif
>  fprintf_indent (FILE *f, unsigned int indent, const char *format, ...)
>  {
>    va_list ap;
> diff --git a/gcc/genmodes.cc b/gcc/genmodes.cc
> index 59850bb070a..0f4d746c157 100644
> --- a/gcc/genmodes.cc
> +++ b/gcc/genmodes.cc
> @@ -1399,13 +1399,13 @@ emit_insn_modes_inline_h (void)
>  #ifndef GCC_INSN_MODES_INLINE_H\n\
>  #define GCC_INSN_MODES_INLINE_H");
>
> -  puts ("\n#if !defined (USED_FOR_TARGET) && GCC_VERSION >= 4001\n");
> +  puts ("\n#if !defined (USED_FOR_TARGET)\n");
>    emit_mode_size_inline ();
>    emit_mode_nunits_inline ();
>    emit_mode_inner_inline ();
>    emit_mode_unit_size_inline ();
>    emit_mode_unit_precision_inline ();
> -  puts ("#endif /* GCC_VERSION >= 4001 */");
> +  puts ("#endif");
>
>    puts ("\
>  \n\
> diff --git a/gcc/genoutput.cc b/gcc/genoutput.cc
> index 6bb03e2864f..853bec0201d 100644
> --- a/gcc/genoutput.cc
> +++ b/gcc/genoutput.cc
> @@ -291,7 +291,7 @@ output_insn_data (void)
>         break;
>        }
>
> -  printf ("#if GCC_VERSION >= 2007\n__extension__\n#endif\n");
> +  printf ("\n__extension__\n");
>    printf ("\nconst struct insn_data_d insn_data[] = \n{\n");
>
>    for (d = idata; d; d = d->next)
> diff --git a/gcc/ggc-page.cc b/gcc/ggc-page.cc
> index 7a7a1b0901f..8fe07b80066 100644
> --- a/gcc/ggc-page.cc
> +++ b/gcc/ggc-page.cc
> @@ -568,11 +568,7 @@ push_by_depth (page_entry *p, unsigned long *s)
>    G.save_in_use[G.by_depth_in_use++] = s;
>  }
>
> -#if (GCC_VERSION < 3001)
> -#define prefetch(X) ((void) X)
> -#else
>  #define prefetch(X) __builtin_prefetch (X)
> -#endif
>
>  #define save_in_use_p_i(__i) \
>    (G.save_in_use[__i])
> @@ -1340,12 +1336,7 @@ ggc_internal_alloc (size_t size, void (*f)(void *), 
> size_t s, size_t n
>           while (~entry->in_use_p[word] == 0)
>             ++word;
>
> -#if GCC_VERSION >= 3004
>           bit = __builtin_ctzl (~entry->in_use_p[word]);
> -#else
> -         while ((entry->in_use_p[word] >> bit) & 1)
> -           ++bit;
> -#endif
>
>           hint = word * HOST_BITS_PER_LONG + bit;
>         }
> diff --git a/gcc/ggc-tests.cc b/gcc/ggc-tests.cc
> index 620989489b6..d028da339e6 100644
> --- a/gcc/ggc-tests.cc
> +++ b/gcc/ggc-tests.cc
> @@ -180,10 +180,8 @@ int test_struct_with_dtor::dtor_call_count;
>  static void
>  test_finalization ()
>  {
> -#if GCC_VERSION >= 4003
>    ASSERT_FALSE (need_finalization_p <test_struct> ());
>    ASSERT_TRUE (need_finalization_p <test_struct_with_dtor> ());
> -#endif
>
>    /* Create some garbage.  */
>    const int count = 10;
> diff --git a/gcc/ggc.h b/gcc/ggc.h
> index aeec1bafb9b..0f72f368a72 100644
> --- a/gcc/ggc.h
> +++ b/gcc/ggc.h
> @@ -170,11 +170,7 @@ template<typename T>
>  inline bool
>  need_finalization_p ()
>  {
> -#if GCC_VERSION >= 4003
>    return !__has_trivial_destructor (T);
> -#else
> -  return true;
> -#endif
>  }
>
>  template<typename T>
> diff --git a/gcc/hwint.cc b/gcc/hwint.cc
> index e53e0bf7906..fa2df400842 100644
> --- a/gcc/hwint.cc
> +++ b/gcc/hwint.cc
> @@ -21,110 +21,6 @@ along with GCC; see the file COPYING3.  If not see
>  #include "system.h"
>  #include "coretypes.h"
>
> -#if GCC_VERSION < 3004
> -
> -/* The functions clz_hwi, ctz_hwi, ffs_hwi, floor_log2, ceil_log2,
> -   and exact_log2 are defined as inline functions in hwint.h
> -   if GCC_VERSION >= 3004.
> -   The definitions here are used for older versions of GCC and
> -   non-GCC bootstrap compilers.  */
> -
> -/* Given X, an unsigned number, return the largest int Y such that 2**Y <= X.
> -   If X is 0, return -1.  */
> -
> -int
> -floor_log2 (unsigned HOST_WIDE_INT x)
> -{
> -  int t = 0;
> -
> -  if (x == 0)
> -    return -1;
> -
> -  if (HOST_BITS_PER_WIDE_INT > 64)
> -    if (x >= HOST_WIDE_INT_1U << (t + 64))
> -      t += 64;
> -  if (HOST_BITS_PER_WIDE_INT > 32)
> -    if (x >= HOST_WIDE_INT_1U << (t + 32))
> -      t += 32;
> -  if (x >= HOST_WIDE_INT_1U << (t + 16))
> -    t += 16;
> -  if (x >= HOST_WIDE_INT_1U << (t + 8))
> -    t += 8;
> -  if (x >= HOST_WIDE_INT_1U << (t + 4))
> -    t += 4;
> -  if (x >= HOST_WIDE_INT_1U << (t + 2))
> -    t += 2;
> -  if (x >= HOST_WIDE_INT_1U << (t + 1))
> -    t += 1;
> -
> -  return t;
> -}
> -
> -/* Given X, an unsigned number, return the least Y such that 2**Y >= X.  */
> -
> -int
> -ceil_log2 (unsigned HOST_WIDE_INT x)
> -{
> -  return x == 0 ? 0 : floor_log2 (x - 1) + 1;
> -}
> -
> -/* Return the logarithm of X, base 2, considering X unsigned,
> -   if X is a power of 2.  Otherwise, returns -1.  */
> -
> -int
> -exact_log2 (unsigned HOST_WIDE_INT x)
> -{
> -  if (!pow2p_hwi (x))
> -    return -1;
> -  return floor_log2 (x);
> -}
> -
> -/* Given X, an unsigned number, return the number of least significant bits
> -   that are zero.  When X == 0, the result is the word size.  */
> -
> -int
> -ctz_hwi (unsigned HOST_WIDE_INT x)
> -{
> -  return x ? floor_log2 (least_bit_hwi (x)) : HOST_BITS_PER_WIDE_INT;
> -}
> -
> -/* Similarly for most significant bits.  */
> -
> -int
> -clz_hwi (unsigned HOST_WIDE_INT x)
> -{
> -  return HOST_BITS_PER_WIDE_INT - 1 - floor_log2 (x);
> -}
> -
> -/* Similar to ctz_hwi, except that the least significant bit is numbered
> -   starting from 1, and X == 0 yields 0.  */
> -
> -int
> -ffs_hwi (unsigned HOST_WIDE_INT x)
> -{
> -  return 1 + floor_log2 (least_bit_hwi (x));
> -}
> -
> -/* Return the number of set bits in X.  */
> -
> -int
> -popcount_hwi (unsigned HOST_WIDE_INT x)
> -{
> -  int i, ret = 0;
> -  size_t bits = sizeof (x) * CHAR_BIT;
> -
> -  for (i = 0; i < bits; i += 1)
> -    {
> -      ret += x & 1;
> -      x >>= 1;
> -    }
> -
> -  return ret;
> -}
> -
> -#endif /* GCC_VERSION < 3004 */
> -
> -
>  /* Compute the greatest common divisor of two numbers A and B using
>     Euclid's algorithm.  */
>
> diff --git a/gcc/hwint.h b/gcc/hwint.h
> index c160bea0cb2..f3b5a779a65 100644
> --- a/gcc/hwint.h
> +++ b/gcc/hwint.h
> @@ -28,18 +28,16 @@
>  #define HOST_LONG_LONG_FORMAT "ll"
>  #endif
>
> -/* If HAVE_LONG_LONG and SIZEOF_LONG_LONG aren't defined, but
> -   GCC_VERSION >= 3000, assume this is the second or later stage of a
> +/* If HAVE_LONG_LONG and SIZEOF_LONG_LONG aren't defined
> +   assume this is the second or later stage of a
>     bootstrap, we do have long long, and it's 64 bits.  (This is
>     required by C99; we do have some ports that violate that assumption
>     but they're all cross-compile-only.)  Just in case, force a
>     constraint violation if that assumption is incorrect.  */
>  #if !defined HAVE_LONG_LONG
> -# if GCC_VERSION >= 3000
> -#  define HAVE_LONG_LONG 1
> -#  define SIZEOF_LONG_LONG 8
> +# define HAVE_LONG_LONG 1
> +# define SIZEOF_LONG_LONG 8
>  extern char sizeof_long_long_must_be_8[sizeof (long long) == 8 ? 1 : -1];
> -# endif
>  #endif
>
>  #ifdef HAVE_LONG_LONG
> @@ -160,26 +158,6 @@ pow2p_hwi (unsigned HOST_WIDE_INT x)
>    return x && pow2_or_zerop (x);
>  }
>
> -#if GCC_VERSION < 3004
> -
> -extern int clz_hwi (unsigned HOST_WIDE_INT x);
> -extern int ctz_hwi (unsigned HOST_WIDE_INT x);
> -extern int ffs_hwi (unsigned HOST_WIDE_INT x);
> -
> -/* Return the number of set bits in X.  */
> -extern int popcount_hwi (unsigned HOST_WIDE_INT x);
> -
> -/* Return log2, or -1 if not exact.  */
> -extern int exact_log2                  (unsigned HOST_WIDE_INT);
> -
> -/* Return floor of log2, with -1 for zero.  */
> -extern int floor_log2                  (unsigned HOST_WIDE_INT);
> -
> -/* Return the smallest n such that 2**n >= X.  */
> -extern int ceil_log2                   (unsigned HOST_WIDE_INT);
> -
> -#else /* GCC_VERSION >= 3004 */
> -
>  /* For convenience, define 0 -> word_size.  */
>  static inline int
>  clz_hwi (unsigned HOST_WIDE_INT x)
> @@ -251,8 +229,6 @@ exact_log2 (unsigned HOST_WIDE_INT x)
>    return pow2p_hwi (x) ? ctz_hwi (x) : -1;
>  }
>
> -#endif /* GCC_VERSION >= 3004 */
> -
>  #define HOST_WIDE_INT_MIN (HOST_WIDE_INT) \
>    (HOST_WIDE_INT_1U << (HOST_BITS_PER_WIDE_INT - 1))
>  #define HOST_WIDE_INT_MAX (~(HOST_WIDE_INT_MIN))
> diff --git a/gcc/ira-int.h b/gcc/ira-int.h
> index f42a314fa7f..76ce6b4d75c 100644
> --- a/gcc/ira-int.h
> +++ b/gcc/ira-int.h
> @@ -151,7 +151,7 @@ extern int ira_loop_tree_height;
>  extern ira_loop_tree_node_t ira_bb_nodes;
>
>  /* Two access macros to the nodes representing basic blocks.  */
> -#if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
> +#ifdef ENABLE_IRA_CHECKING
>  #define IRA_BB_NODE_BY_INDEX(index) __extension__                      \
>  (({ ira_loop_tree_node_t _node = (&ira_bb_nodes[index]);               \
>       if (_node->children != NULL || _node->loop != NULL || _node->bb == 
> NULL)\
> @@ -173,7 +173,7 @@ extern ira_loop_tree_node_t ira_bb_nodes;
>  extern ira_loop_tree_node_t ira_loop_nodes;
>
>  /* Two access macros to the nodes representing loops.  */
> -#if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
> +#ifdef ENABLE_IRA_CHECKING
>  #define IRA_LOOP_NODE_BY_INDEX(index) __extension__                    \
>  (({ ira_loop_tree_node_t const _node = (&ira_loop_nodes[index]);       \
>       if (_node->children == NULL || _node->bb != NULL                  \
> @@ -655,7 +655,7 @@ extern int ira_move_loops_num, ira_additional_jumps_num;
>  /* Set, clear or test bit number I in R, a bit vector of elements with
>     minimal index and maximal index equal correspondingly to MIN and
>     MAX.  */
> -#if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
> +#ifdef ENABLE_IRA_CHECKING
>
>  #define SET_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__               \
>    (({ int _min = (MIN), _max = (MAX), _i = (I);                              
>   \
> diff --git a/gcc/jit/jit-common.h b/gcc/jit/jit-common.h
> index 3ff7447fbf3..773a2d8df43 100644
> --- a/gcc/jit/jit-common.h
> +++ b/gcc/jit/jit-common.h
> @@ -29,11 +29,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "tree-iterator.h"
>
>  #ifdef GCC_VERSION
> -#if GCC_VERSION >= 4001
>  #define GNU_PRINTF(M, N) __attribute__ ((format (gnu_printf, (M), (N))))
> -#else
> -#define GNU_PRINTF(M, N)
> -#endif
>  #endif
>
>  const int NUM_GCC_JIT_TYPES = GCC_JIT_TYPE_INT128_T + 1;
> diff --git a/gcc/machmode.h b/gcc/machmode.h
> index 45df720df73..d84bdd5797d 100644
> --- a/gcc/machmode.h
> +++ b/gcc/machmode.h
> @@ -545,12 +545,8 @@ complex_mode::includes_p (machine_mode m)
>  ALWAYS_INLINE poly_uint16
>  mode_to_bytes (machine_mode mode)
>  {
> -#if GCC_VERSION >= 4001
>    return (__builtin_constant_p (mode)
>           ? mode_size_inline (mode) : mode_size[mode]);
> -#else
> -  return mode_size[mode];
> -#endif
>  }
>
>  /* Return the base GET_MODE_BITSIZE value for MODE.  */
> @@ -574,13 +570,9 @@ mode_to_precision (machine_mode mode)
>  ALWAYS_INLINE scalar_mode
>  mode_to_inner (machine_mode mode)
>  {
> -#if GCC_VERSION >= 4001
>    return scalar_mode::from_int (__builtin_constant_p (mode)
>                                 ? mode_inner_inline (mode)
>                                 : mode_inner[mode]);
> -#else
> -  return scalar_mode::from_int (mode_inner[mode]);
> -#endif
>  }
>
>  /* Return the base GET_MODE_UNIT_SIZE value for MODE.  */
> @@ -588,12 +580,8 @@ mode_to_inner (machine_mode mode)
>  ALWAYS_INLINE unsigned char
>  mode_to_unit_size (machine_mode mode)
>  {
> -#if GCC_VERSION >= 4001
>    return (__builtin_constant_p (mode)
>           ? mode_unit_size_inline (mode) : mode_unit_size[mode]);
> -#else
> -  return mode_unit_size[mode];
> -#endif
>  }
>
>  /* Return the base GET_MODE_UNIT_PRECISION value for MODE.  */
> @@ -601,12 +589,8 @@ mode_to_unit_size (machine_mode mode)
>  ALWAYS_INLINE unsigned short
>  mode_to_unit_precision (machine_mode mode)
>  {
> -#if GCC_VERSION >= 4001
>    return (__builtin_constant_p (mode)
>           ? mode_unit_precision_inline (mode) : mode_unit_precision[mode]);
> -#else
> -  return mode_unit_precision[mode];
> -#endif
>  }
>
>  /* Return the base GET_MODE_NUNITS value for MODE.  */
> @@ -614,12 +598,8 @@ mode_to_unit_precision (machine_mode mode)
>  ALWAYS_INLINE poly_uint16
>  mode_to_nunits (machine_mode mode)
>  {
> -#if GCC_VERSION >= 4001
>    return (__builtin_constant_p (mode)
>           ? mode_nunits_inline (mode) : mode_nunits[mode]);
> -#else
> -  return mode_nunits[mode];
> -#endif
>  }
>
>  /* Get the size in bytes of an object of mode MODE.  */
> diff --git a/gcc/output.h b/gcc/output.h
> index 6dea630913a..2fce8b5c19f 100644
> --- a/gcc/output.h
> +++ b/gcc/output.h
> @@ -115,11 +115,7 @@ extern void output_addr_const (FILE *, rtx);
>
>  /* Output a string of assembler code, substituting numbers, strings
>     and fixed syntactic prefixes.  */
> -#if GCC_VERSION >= 3004
>  #define ATTRIBUTE_ASM_FPRINTF(m, n) __attribute__ ((__format__ 
> (__asm_fprintf__, m, n))) ATTRIBUTE_NONNULL(m)
> -#else
> -#define ATTRIBUTE_ASM_FPRINTF(m, n) ATTRIBUTE_NONNULL(m)
> -#endif
>
>  extern void fprint_whex (FILE *, unsigned HOST_WIDE_INT);
>  extern void fprint_ul (FILE *, unsigned long);
> diff --git a/gcc/pretty-print.h b/gcc/pretty-print.h
> index fc588447460..425ae339ae0 100644
> --- a/gcc/pretty-print.h
> +++ b/gcc/pretty-print.h
> @@ -374,11 +374,7 @@ extern void pp_separate_with (pretty_printer *, char);
>
>  /* This header may be included before diagnostics-core.h, hence the duplicate
>     definitions to allow for GCC-specific formats.  */
> -#if GCC_VERSION >= 3005
>  #define ATTRIBUTE_GCC_PPDIAG(m, n) __attribute__ ((__format__ 
> (GCC_PPDIAG_STYLE, m ,n))) ATTRIBUTE_NONNULL(m)
> -#else
> -#define ATTRIBUTE_GCC_PPDIAG(m, n) ATTRIBUTE_NONNULL(m)
> -#endif
>  extern void pp_printf (pretty_printer *, const char *, ...)
>       ATTRIBUTE_GCC_PPDIAG(2,3);
>
> diff --git a/gcc/rtl.cc b/gcc/rtl.cc
> index 86c322b19ca..74be7342803 100644
> --- a/gcc/rtl.cc
> +++ b/gcc/rtl.cc
> @@ -869,7 +869,7 @@ dump_rtx_statistics (void)
>    fprintf (stderr, "-----------------------------------------------\n");
>  }
>
> -#if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007)
> +#ifdef ENABLE_RTL_CHECKING
>
>  /* Disable warnings about missing quoting in GCC diagnostics for
>     the internal_error calls.  Their format strings deliberately don't
> diff --git a/gcc/rtl.h b/gcc/rtl.h
> index 488016bb42a..5e77be2f024 100644
> --- a/gcc/rtl.h
> +++ b/gcc/rtl.h
> @@ -1076,7 +1076,7 @@ is_a_helper <rtx_note *>::test (rtx_insn *insn)
>
>  /* General accessor macros for accessing the fields of an rtx.  */
>
> -#if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007)
> +#if defined ENABLE_RTL_CHECKING
>  /* The bit with a star outside the statement expr and an & inside is
>     so that N can be evaluated only once.  */
>  #define RTL_CHECK1(RTX, N, C1) __extension__                           \
> @@ -1257,7 +1257,7 @@ extern void rtvec_check_failed_bounds (const_rtvec, 
> int, const char *, int,
>  /* Access an individual rtx flag, with no checking of any kind.  */
>  #define RTX_FLAG(RTX, FLAG)    ((RTX)->FLAG)
>
> -#if defined ENABLE_RTL_FLAG_CHECKING && (GCC_VERSION >= 2007)
> +#if defined ENABLE_RTL_FLAG_CHECKING
>  #define RTL_FLAG_CHECK1(NAME, RTX, C1) __extension__                   \
>  ({ __typeof (RTX) const _rtx = (RTX);                                  \
>     if (GET_CODE (_rtx) != C1)                                          \
> @@ -1823,7 +1823,7 @@ enum label_kind
>    LABEL_WEAK_ENTRY     /* alternate entry point, exported as weak symbol */
>  };
>
> -#if defined ENABLE_RTL_FLAG_CHECKING && (GCC_VERSION > 2007)
> +#if defined ENABLE_RTL_FLAG_CHECKING
>
>  /* Retrieve the kind of LABEL.  */
>  #define LABEL_KIND(LABEL) __extension__                                      
>   \
> diff --git a/gcc/sbitmap.cc b/gcc/sbitmap.cc
> index 5ac2b6d0f67..0a6fddadab8 100644
> --- a/gcc/sbitmap.cc
> +++ b/gcc/sbitmap.cc
> @@ -375,33 +375,6 @@ bitmap_bit_in_range_p (const_sbitmap bmap, unsigned int 
> start, unsigned int end)
>    return (bmap->elms[start_word] & mask) != 0;
>  }
>
> -#if GCC_VERSION < 3400
> -/* Table of number of set bits in a character, indexed by value of char.  */
> -static const unsigned char popcount_table[] =
> -{
> -    0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
> -    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
> -    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
> -    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
> -    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
> -    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
> -    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
> -    3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,
> -};
> -
> -static unsigned long
> -sbitmap_popcount (SBITMAP_ELT_TYPE a)
> -{
> -  unsigned long ret = 0;
> -  unsigned i;
> -
> -  /* Just do this the table way for now  */
> -  for (i = 0; i < HOST_BITS_PER_WIDEST_FAST_INT; i += 8)
> -    ret += popcount_table[(a >> i) & 0xff];
> -  return ret;
> -}
> -#endif
> -
>  /* Count and return the number of bits set in the bitmap BMAP.  */
>
>  unsigned int
> @@ -411,16 +384,12 @@ bitmap_count_bits (const_sbitmap bmap)
>    for (unsigned int i = 0; i < bmap->size; i++)
>      if (bmap->elms[i])
>        {
> -#if GCC_VERSION < 3400
> -       count += sbitmap_popcount (bmap->elms[i]);
> -#else
> -# if HOST_BITS_PER_WIDEST_FAST_INT == HOST_BITS_PER_LONG
> +#if HOST_BITS_PER_WIDEST_FAST_INT == HOST_BITS_PER_LONG
>         count += __builtin_popcountl (bmap->elms[i]);
> -# elif HOST_BITS_PER_WIDEST_FAST_INT == HOST_BITS_PER_LONGLONG
> +#elif HOST_BITS_PER_WIDEST_FAST_INT == HOST_BITS_PER_LONGLONG
>         count += __builtin_popcountll (bmap->elms[i]);
> -# else
> +#else
>         count += __builtin_popcount (bmap->elms[i]);
> -# endif
>  #endif
>        }
>    return count;
> diff --git a/gcc/stringpool.h b/gcc/stringpool.h
> index 5e301c6011b..b43110cc7a0 100644
> --- a/gcc/stringpool.h
> +++ b/gcc/stringpool.h
> @@ -33,11 +33,9 @@ extern tree maybe_get_identifier (const char *);
>     known.  */
>  extern tree get_identifier_with_length (const char *, size_t);
>
> -#if GCC_VERSION >= 3000
>  #define get_identifier(str) \
>    (__builtin_constant_p (str)                          \
>      ? get_identifier_with_length ((str), strlen (str))  \
>      : get_identifier (str))
> -#endif
>
>  #endif  // GCC_STRINGPOOL_H
> diff --git a/gcc/system.h b/gcc/system.h
> index c5562cc49a3..1688b763ef5 100644
> --- a/gcc/system.h
> +++ b/gcc/system.h
> @@ -596,17 +596,15 @@ extern int vsnprintf (char *, size_t, const char *, 
> va_list);
>  #ifdef __cplusplus
>  #define HAVE_DESIGNATED_INITIALIZERS 0
>  #else
> -#define HAVE_DESIGNATED_INITIALIZERS \
> -  ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
> +#define HAVE_DESIGNATED_INITIALIZERS 1
>  #endif
>  #endif
>
>  #if !defined(HAVE_DESIGNATED_UNION_INITIALIZERS)
>  #ifdef __cplusplus
> -#define HAVE_DESIGNATED_UNION_INITIALIZERS (GCC_VERSION >= 4007)
> +#define HAVE_DESIGNATED_UNION_INITIALIZERS 1
>  #else
> -#define HAVE_DESIGNATED_UNION_INITIALIZERS \
> -  ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
> +#define HAVE_DESIGNATED_UNION_INITIALIZERS 1
>  #endif
>  #endif
>
> @@ -722,20 +720,6 @@ extern int vsnprintf (char *, size_t, const char *, 
> va_list);
>  #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
>  #endif
>
> -/* Various error reporting routines want to use __FUNCTION__.  */
> -#if (GCC_VERSION < 2007)
> -#ifndef __FUNCTION__
> -#define __FUNCTION__ "?"
> -#endif /* ! __FUNCTION__ */
> -#endif
> -
> -/* __builtin_expect(A, B) evaluates to A, but notifies the compiler that
> -   the most likely value of A is B.  This feature was added at some point
> -   between 2.95 and 3.0.  Let's use 3.0 as the lower bound for now.  */
> -#if (GCC_VERSION < 3000)
> -#define __builtin_expect(a, b) (a)
> -#endif
> -
>  /* Some of the headers included by <memory> can use "abort" within a
>     namespace, e.g. "_VSTD::abort();", which fails after we use the
>     preprocessor to redefine "abort" as "fancy_abort" below.  */
> @@ -781,12 +765,9 @@ extern void fancy_abort (const char *, int, const char *)
>  #if ENABLE_ASSERT_CHECKING
>  #define gcc_assert(EXPR)                                               \
>     ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
> -#elif (GCC_VERSION >= 4005)
> +#else
>  #define gcc_assert(EXPR)                                               \
>    ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0))
> -#else
> -/* Include EXPR, so that unused variable warnings do not occur.  */
> -#define gcc_assert(EXPR) ((void)(0 && (EXPR)))
>  #endif
>
>  #if CHECKING_P
> @@ -796,21 +777,13 @@ extern void fancy_abort (const char *, int, const char 
> *)
>  #define gcc_checking_assert(EXPR) ((void)(0 && (EXPR)))
>  #endif
>
> -#if GCC_VERSION >= 4000
>  #define ALWAYS_INLINE inline __attribute__ ((always_inline))
> -#else
> -#define ALWAYS_INLINE inline
> -#endif
>
> -#if GCC_VERSION >= 3004
>  #define WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))
> -#else
> -#define WARN_UNUSED_RESULT
> -#endif
>
>  /* Use gcc_unreachable() to mark unreachable locations (like an
>     unreachable default case of a switch.  Do not use gcc_assert(0).  */
> -#if (GCC_VERSION >= 4005) && !ENABLE_ASSERT_CHECKING
> +#if !ENABLE_ASSERT_CHECKING
>  #define gcc_unreachable() __builtin_unreachable ()
>  #else
>  #define gcc_unreachable() (fancy_abort (__FILE__, __LINE__, __FUNCTION__))
> @@ -826,11 +799,7 @@ extern void fancy_abort (const char *, int, const char *)
>  # define gcc_fallthrough()
>  #endif
>
> -#if GCC_VERSION >= 3001
>  #define STATIC_CONSTANT_P(X) (__builtin_constant_p (X) && (X))
> -#else
> -#define STATIC_CONSTANT_P(X) (false && (X))
> -#endif
>
>  /* static_assert (COND, MESSAGE) is available in C++11 onwards.  */
>  #if __cplusplus >= 201103L
> @@ -871,12 +840,6 @@ extern void fancy_abort (const char *, int, const char *)
>  /* Some compilers do not allow the use of unsigned char in bitfields.  */
>  #define BOOL_BITFIELD unsigned int
>
> -/* GCC older than 4.4 have broken C++ value initialization handling, see
> -   PR11309, PR30111, PR33916, PR82939 and PR84405 for more details.  */
> -#if GCC_VERSION > 0 && GCC_VERSION < 4004 && !defined(__clang__)
> -# define BROKEN_VALUE_INITIALIZATION
> -#endif
> -
>  /* As the last action in this file, we poison the identifiers that
>     shouldn't be used.  Note, luckily gcc-3.0's token-based integrated
>     preprocessor won't trip on poisoned identifiers that arrive from
> @@ -899,8 +862,6 @@ extern void fancy_abort (const char *, int, const char *)
>  #define realloc xrealloc
>  #endif
>
> -#if (GCC_VERSION >= 3000)
> -
>  /* Note autoconf checks for prototype declarations and includes
>     system.h while doing so.  Only poison these tokens if actually
>     compiling gcc, so that the autoconf declaration tests for malloc
> @@ -1130,8 +1091,6 @@ extern void fancy_abort (const char *, int, const char 
> *)
>     'if (flag_checking)', or with CHECKING_P macro.  */
>  #pragma GCC poison ENABLE_CHECKING
>
> -#endif /* GCC >= 3.0 */
> -
>  /* This macro allows casting away const-ness to pass -Wcast-qual
>     warnings.  DO NOT USE THIS UNLESS YOU REALLY HAVE TO!  It should
>     only be used in certain specific cases.  One valid case is where
> @@ -1151,7 +1110,7 @@ extern void fancy_abort (const char *, int, const char 
> *)
>  #ifdef __cplusplus
>  #define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
>  #else
> -#if defined(__GNUC__) && GCC_VERSION > 4000
> +#ifdef __GNUC__
>  /* GCC 4.0.x has a bug where it may ICE on this expression,
>     so does GCC 3.4.x (PR17436).  */
>  #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; 
> TOTYPE _nq;})(X))._nq)
> @@ -1182,13 +1141,9 @@ helper_const_non_const_cast (const char *p)
>
>  /* Activate certain diagnostics as warnings (not errors via the
>     -Werror flag).  */
> -#if GCC_VERSION >= 4003
> -/* If asserts are disabled, activate -Wuninitialized as a warning (not
> -   an error/-Werror).  */
>  #ifndef ENABLE_ASSERT_CHECKING
>  #pragma GCC diagnostic warning "-Wuninitialized"
>  #endif
> -#endif
>
>  #ifdef ENABLE_VALGRIND_ANNOTATIONS
>  # ifdef HAVE_VALGRIND_MEMCHECK_H
> @@ -1229,13 +1184,8 @@ helper_const_non_const_cast (const char *p)
>
>  /* In LTO -fwhole-program build we still want to keep the debug functions 
> available
>     for debugger.  Mark them as used to prevent removal.  */
> -#if (GCC_VERSION > 4000)
>  #define DEBUG_FUNCTION __attribute__ ((__used__))
>  #define DEBUG_VARIABLE __attribute__ ((__used__))
> -#else
> -#define DEBUG_FUNCTION
> -#define DEBUG_VARIABLE
> -#endif
>
>  /* General macro to extract bit Y of X.  */
>  #define TEST_BIT(X, Y) (((X) >> (Y)) & 1)
> diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc
> index 0cbd9d369ca..436fafcaa0f 100644
> --- a/gcc/tree-vrp.cc
> +++ b/gcc/tree-vrp.cc
> @@ -2955,12 +2955,7 @@ vrp_asserts::find_switch_asserts (basic_block bb, 
> gswitch *last)
>    edge e;
>    struct case_info *ci;
>    size_t n = gimple_switch_num_labels (last);
> -#if GCC_VERSION >= 4000
>    unsigned int idx;
> -#else
> -  /* Work around GCC 3.4 bug (PR 37086).  */
> -  volatile unsigned int idx;
> -#endif
>
>    bsi = gsi_for_stmt (last);
>    op = gimple_switch_index (last);
> diff --git a/gcc/tree.cc b/gcc/tree.cc
> index 5e8876d2b38..22df459c53e 100644
> --- a/gcc/tree.cc
> +++ b/gcc/tree.cc
> @@ -8771,7 +8771,7 @@ get_file_function_name (const char *type)
>    return get_identifier (buf);
>  }
>
> -#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
> +#ifdef ENABLE_TREE_CHECKING
>
>  /* Complain that the tree code of NODE does not match the expected 0
>     terminated list of trailing codes. The trailing code list can be
> diff --git a/gcc/tree.h b/gcc/tree.h
> index 82eb8ba39d2..c53d34f6a47 100644
> --- a/gcc/tree.h
> +++ b/gcc/tree.h
> @@ -246,7 +246,7 @@ as_internal_fn (combined_fn code)
>
>  /* When checking is enabled, errors will be generated if a tree node
>     is accessed incorrectly. The macros die with a fatal error.  */
> -#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
> +#ifdef ENABLE_TREE_CHECKING
>
>  #define TREE_CHECK(T, CODE) \
>  (tree_check ((T), __FILE__, __LINE__, __FUNCTION__, (CODE)))
> @@ -2831,16 +2831,12 @@ extern void decl_value_expr_insert (tree, tree);
>  /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set.  */
>  #define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : 
> NULL)
>
> -#if (GCC_VERSION >= 2007)
>  #define DECL_RTL_KNOWN_SET(decl) __extension__                         \
>  ({  tree const __d = (decl);                                           \
>      gcc_checking_assert (DECL_RTL_SET_P (__d));                              
>   \
>      /* Dereference it so the compiler knows it can't be NULL even      \
>         without assertion checking.  */                                 \
>      &*DECL_RTL_IF_SET (__d); })
> -#else
> -#define DECL_RTL_KNOWN_SET(decl) (&*DECL_RTL_IF_SET (decl))
> -#endif
>
>  /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'.  */
>  #define DECL_REGISTER(NODE) (DECL_WRTL_CHECK (NODE)->decl_common.decl_flag_0)
> @@ -3448,7 +3444,7 @@ extern tree build_target_option_node (struct 
> gcc_options *opts,
>
>  extern void prepare_target_option_nodes_for_pch (void);
>
> -#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
> +#ifdef ENABLE_TREE_CHECKING
>
>  inline tree
>  tree_check (tree __t, const char *__f, int __l, const char *__g, tree_code 
> __c)
> @@ -3663,10 +3659,8 @@ tree_int_cst_elt_check (tree __t, int __i,
>
>  /* Workaround -Wstrict-overflow false positive during profiledbootstrap.  */
>
> -# if GCC_VERSION >= 4006
>  #pragma GCC diagnostic push
>  #pragma GCC diagnostic ignored "-Wstrict-overflow"
> -#endif
>
>  inline tree *
>  tree_vec_elt_check (tree __t, int __i,
> @@ -3679,9 +3673,7 @@ tree_vec_elt_check (tree __t, int __i,
>    return &CONST_CAST_TREE (__t)->vec.a[__i];
>  }
>
> -# if GCC_VERSION >= 4006
>  #pragma GCC diagnostic pop
> -#endif
>
>  inline tree *
>  omp_clause_elt_check (tree __t, int __i,
> @@ -3889,10 +3881,8 @@ non_type_check (const_tree __t, const char *__f, int 
> __l, const char *__g)
>    return __t;
>  }
>
> -# if GCC_VERSION >= 4006
>  #pragma GCC diagnostic push
>  #pragma GCC diagnostic ignored "-Wstrict-overflow"
> -#endif
>
>  inline const_tree *
>  tree_vec_elt_check (const_tree __t, int __i,
> @@ -3906,9 +3896,7 @@ tree_vec_elt_check (const_tree __t, int __i,
>    //return &__t->vec.a[__i];
>  }
>
> -# if GCC_VERSION >= 4006
>  #pragma GCC diagnostic pop
> -#endif
>
>  inline const_tree *
>  omp_clause_elt_check (const_tree __t, int __i,
> @@ -3945,7 +3933,7 @@ tree_operand_length (const_tree node)
>      return TREE_CODE_LENGTH (TREE_CODE (node));
>  }
>
> -#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
> +#ifdef ENABLE_TREE_CHECKING
>
>  /* Special checks for TREE_OPERANDs.  */
>  inline tree *
> @@ -4679,7 +4667,7 @@ extern unsigned HOST_WIDE_INT tree_to_uhwi (const_tree)
>    ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
>  extern poly_uint64 tree_to_poly_uint64 (const_tree)
>    ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
> -#if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003)
> +#ifndef ENABLE_TREE_CHECKING
>  extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
>  tree_to_shwi (const_tree t)
>  {
> diff --git a/gcc/var-tracking.cc b/gcc/var-tracking.cc
> index 7c3ad0a55bd..2a3a0684e97 100644
> --- a/gcc/var-tracking.cc
> +++ b/gcc/var-tracking.cc
> @@ -404,7 +404,7 @@ int_mem_offset (const_rtx mem)
>    return 0;
>  }
>
> -#if CHECKING_P && (GCC_VERSION >= 2007)
> +#if CHECKING_P
>
>  /* Access VAR's Ith part's offset, checking that it's not a one-part
>     variable.  */
> diff --git a/gcc/vec.h b/gcc/vec.h
> index 3ba7ea7edc2..3cb2772301c 100644
> --- a/gcc/vec.h
> +++ b/gcc/vec.h
> @@ -295,10 +295,8 @@ va_heap::reserve (vec<T, va_heap, vl_embed> *&v, 
> unsigned reserve, bool exact
>  }
>
>
> -#if GCC_VERSION >= 4007
>  #pragma GCC diagnostic push
>  #pragma GCC diagnostic ignored "-Wfree-nonheap-object"
> -#endif
>
>  /* Free the heap space allocated for vector V.  */
>
> @@ -317,9 +315,7 @@ va_heap::release (vec<T, va_heap, vl_embed> *&v)
>    v = NULL;
>  }
>
> -#if GCC_VERSION >= 4007
>  #pragma GCC diagnostic pop
> -#endif
>
>  /* Allocator type for GC vectors.  Notice that we need the structure
>     declaration even if GC is not enabled.  */
> @@ -2349,8 +2345,6 @@ make_array_slice (T *base, unsigned int size)
>    return array_slice<T> (base, size);
>  }
>
> -#if (GCC_VERSION >= 3000)
> -# pragma GCC poison m_vec m_vecpfx m_vecdata
> -#endif
> +#pragma GCC poison m_vec m_vecpfx m_vecdata
>
>  #endif // GCC_VEC_H
> diff --git a/gcc/wide-int.cc b/gcc/wide-int.cc
> index f61b9fefc13..ffd96e6b9d9 100644
> --- a/gcc/wide-int.cc
> +++ b/gcc/wide-int.cc
> @@ -37,7 +37,7 @@ along with GCC; see the file COPYING3.  If not see
>
>  #define W_TYPE_SIZE HOST_BITS_PER_WIDE_INT
>  /* Do not include longlong.h when compiler is clang-based. See PR61146.  */
> -#if GCC_VERSION >= 3000 && (W_TYPE_SIZE == 32 || defined 
> (__SIZEOF_INT128__)) && !defined(__clang__)
> +#if (W_TYPE_SIZE == 32 || defined (__SIZEOF_INT128__)) && !defined(__clang__)
>  typedef unsigned HOST_HALF_WIDE_INT UHWtype;
>  typedef unsigned HOST_WIDE_INT UWtype;
>  typedef unsigned int UQItype __attribute__ ((mode (QI)));
> --
> 2.36.0
>

Reply via email to