On Thu, May 11, 2023 at 4:23 AM Eugene Rozenfeld <eugene.rozenf...@microsoft.com> wrote: > > I'm ok with disabling warnings as errors for autoprofiledbootstrap. What's > the proper way to do that? Searching for "--disable-werror" I see matches in > lib configure files but not in gcc files.
We have --with-build-config selecting things like bootstrap-O3 and configure then disables werror by default if the build config is anything other than the default or bootstrap-debug. Of course profiledbootstrap and autoprofiledbootstrap are not build configs but make targets - that makes it more difficult (or impossible) to use the --disable-werror machinery here. There is STAGE_CONFIGURE_FLAGS=@stage2_werror_flag@ so it might be possible to filter out --enable-werror-always from STAGEautofeedback_CONFIGURE_FLAGS? Richard. > Thanks, > > Eugene > > -----Original Message----- > From: Richard Biener <richard.guent...@gmail.com> > Sent: Tuesday, May 9, 2023 11:40 PM > To: Eugene Rozenfeld <eugene.rozenf...@microsoft.com> > Cc: gcc-patches@gcc.gnu.org > Subject: [EXTERNAL] Re: [PATCH] Fixes and workarounds for warnings during > autoprofiledbootstrap build > > On Wed, May 10, 2023 at 3:38 AM Eugene Rozenfeld via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > 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. > > Rather than this would it make sense to add --disable-werror to > autoprofiledbootstrap configs like we do for others? I also wonder how > "stable" the afdo bootstrap inlining decisions are, so applying these > workarounds may not be sustainable? > > > 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 > >