autoprofiledbootstrap build produces new warnings since inlining decisions are different from other builds. This patch contains fixes and workarounds for those warnings.
Tested on x86_64-pc-linux-gnu. gcc/ChangeLog: * config/i386/i386-expand.cc (expand_vec_perm_interleave2): Work around -Wstringop-overflow false positive during autoprofiledbootstrap * ipa-devirt.cc (debug_tree_odr_name): Fix for -Wformat-overflow warning during autoprofiledbootstrap * lra-eliminations.cc (setup_can_eliminate): Work around -Wmaybe-uninitialized false positive during autoprofiledbootstrap * opts-common.cc (candidates_list_and_hint): Work around -Wstringop-overflow false positive during autoprofiledbootstrap * tree-ssa-ccp.cc (bit_value_unop): Work around -Wmaybe-uninitialized false positive during autoprofiledbootstrap * wide-int.h (wi::copy): Work around -Wmaybe-uninitialized false positive during autoprofiledbootstrap --- gcc/config/i386/i386-expand.cc | 11 +++++++++++ gcc/ipa-devirt.cc | 3 ++- gcc/lra-eliminations.cc | 11 +++++++++++ gcc/opts-common.cc | 1 + gcc/tree-ssa-ccp.cc | 11 +++++++++++ gcc/wide-int.h | 11 +++++++++++ 6 files changed, 47 insertions(+), 1 deletion(-) diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 634fe61ba79..be9f912775b 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -20419,6 +20419,13 @@ expand_vec_perm_pblendv (struct expand_vec_perm_d *d) static bool expand_vec_perm_interleave3 (struct expand_vec_perm_d *d); +/* Work around -Wstringop-overflow false positive during autoprofiledbootstrap. */ + +# if GCC_VERSION >= 7001 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-overflow" +#endif + /* A subroutine of ix86_expand_vec_perm_const_1. Try to simplify a two vector permutation into a single vector permutation by using an interleave operation to merge the vectors. */ @@ -20737,6 +20744,10 @@ expand_vec_perm_interleave2 (struct expand_vec_perm_d *d) return true; } +# if GCC_VERSION >= 7001 +#pragma GCC diagnostic pop +#endif + /* A subroutine of ix86_expand_vec_perm_const_1. Try to simplify a single vector cross-lane permutation into vpermq followed by any of the single insn permutations. */ diff --git a/gcc/ipa-devirt.cc b/gcc/ipa-devirt.cc index 819860258d1..36ea266e834 100644 --- a/gcc/ipa-devirt.cc +++ b/gcc/ipa-devirt.cc @@ -4033,7 +4033,8 @@ debug_tree_odr_name (tree type, bool demangle) odr = cplus_demangle (odr, opts); } - fprintf (stderr, "%s\n", odr); + if (odr != NULL) + fprintf (stderr, "%s\n", odr); } /* Register ODR enum so we later stream record about its values. */ diff --git a/gcc/lra-eliminations.cc b/gcc/lra-eliminations.cc index 42206366669..05e2a7e0d68 100644 --- a/gcc/lra-eliminations.cc +++ b/gcc/lra-eliminations.cc @@ -138,6 +138,13 @@ lra_debug_elim_table (void) print_elim_table (stderr); } +/* Work around -Wmaybe-uninitialized false positive during autoprofiledbootstrap. */ + +# if GCC_VERSION >= 4007 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif + /* Setup possibility of elimination in elimination table element EP to VALUE. Setup FRAME_POINTER_NEEDED if elimination from frame pointer to stack pointer is not possible anymore. */ @@ -152,6 +159,10 @@ setup_can_eliminate (class lra_elim_table *ep, bool value) REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = 0; } +# if GCC_VERSION >= 4007 +#pragma GCC diagnostic pop +#endif + /* Map: eliminable "from" register -> its current elimination, or NULL if none. The elimination table may contain more than one elimination for the same hard register, but this map specifies diff --git a/gcc/opts-common.cc b/gcc/opts-common.cc index 23ddcaa3b55..0bb8e34e2b0 100644 --- a/gcc/opts-common.cc +++ b/gcc/opts-common.cc @@ -1388,6 +1388,7 @@ candidates_list_and_hint (const char *arg, char *&str, p[len] = ' '; p += len + 1; } + gcc_assert(p > str); p[-1] = '\0'; return find_closest_string (arg, &candidates); } diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 03a984f2adf..a54e5a90464 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -1976,6 +1976,13 @@ bit_value_binop (enum tree_code code, signop sgn, int width, } } +/* Work around -Wmaybe-uninitialized false positive during autoprofiledbootstrap. */ + +# if GCC_VERSION >= 4007 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif + /* Return the propagation value when applying the operation CODE to the value RHS yielding type TYPE. */ @@ -2011,6 +2018,10 @@ bit_value_unop (enum tree_code code, tree type, tree rhs) return val; } +# if GCC_VERSION >= 4007 +#pragma GCC diagnostic pop +#endif + /* Return the propagation value when applying the operation CODE to the values RHS1 and RHS2 yielding type TYPE. */ diff --git a/gcc/wide-int.h b/gcc/wide-int.h index 6be343c0eb5..9c50dd869b6 100644 --- a/gcc/wide-int.h +++ b/gcc/wide-int.h @@ -1806,6 +1806,13 @@ wi::get_binary_precision (const T1 &x, const T2 &y) get_binary_result (x, y)); } +/* Work around -Wmaybe-uninitialized false positive during autoprofiledbootstrap. */ + +# if GCC_VERSION >= 4007 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif + /* Copy the contents of Y to X, but keeping X's current precision. */ template <typename T1, typename T2> inline void @@ -1821,6 +1828,10 @@ wi::copy (T1 &x, const T2 &y) x.set_len (len, y.is_sign_extended); } +# if GCC_VERSION >= 4007 +#pragma GCC diagnostic pop +#endif + /* Return true if X fits in a HOST_WIDE_INT with no loss of precision. */ template <typename T> inline bool -- 2.25.1