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.

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
>

Reply via email to