> Am 20.04.2022 um 19:15 schrieb Jakub Jelinek via Gcc-patches 
> <gcc-patches@gcc.gnu.org>:
> 
> Hi!
> 
> As mentioned in those PRs and I think in others too, there are some long
> time unresolved -fcompare-debug issues with DEBUG_BEGIN_STMTs in the FEs and
> during gimplification, especially with statement expressions, where we end
> up with different code generation depending on whether there are
> DEBUG_BEGIN_STMTs (which force STATEMENT_LISTs) or not (in that case
> we often have just the single expression from the list).
> I've tried to fix that several times, but nothing worked.
> Furthermore, Alex mentioned in bugzilla that there are no consumers of the
> statement frontiers right now.
> 
> This patch turns -gstatement-frontiers off by default because of those
> 2 reasons, consumers for those can still be added (one can test with
> explicit -gstatement-frontiers) and if/once that happens, perhaps somebody
> will have some great idea how to resolve those -fcompare-debug issues.
> 
> Until then, can we go with this?
> 
> Bootstrapped/regtested on powerpc64le-linux, ok for trunk if it also passes
> bootstrap/regtest on x86_64-linux/i686-linux?

OK.

Richard.

> 2022-04-20  Jakub Jelinek  <ja...@redhat.com>
> 
>    PR debug/103788
>    PR middle-end/100733
>    PR debug/104180
>    * opts.cc (finish_options): Disable -gstatement-frontiers by default.
> 
>    * gcc.dg/pr103788.c: New test.
>    * c-c++-common/ubsan/pr100733.c: New test.
>    * g++.dg/debug/pr104180.C: New test.
> 
> --- gcc/opts.cc.jj    2022-04-06 17:42:03.084190238 +0200
> +++ gcc/opts.cc    2022-04-20 13:12:22.282322920 +0200
> @@ -1317,12 +1317,16 @@ finish_options (struct gcc_options *opts
>    debug_info_level = DINFO_LEVEL_NONE;
>     }
> 
> +  /* Don't enable -gstatement-frontiers by default until some consumers
> +     actually consume it and until the issues with DEBUG_BEGIN_STMTs
> +     affecting code generation e.g. for statement expressions are resolved.
> +     See PR103788, PR104180, PR100733.
>   if (!OPTION_SET_P (debug_nonbind_markers_p))
>     debug_nonbind_markers_p
>       = (optimize
>     && debug_info_level >= DINFO_LEVEL_NORMAL
>     && dwarf_debuginfo_p ()
> -     && !(flag_selective_scheduling || flag_selective_scheduling2));
> +     && !(flag_selective_scheduling || flag_selective_scheduling2));  */
> 
>   /* Note -fvar-tracking is enabled automatically with OPT_LEVELS_1_PLUS and
>      so we need to drop it if we are called from optimize attribute.  */
> --- gcc/testsuite/gcc.dg/pr103788.c.jj    2022-04-20 13:13:47.253141338 +0200
> +++ gcc/testsuite/gcc.dg/pr103788.c    2022-04-20 13:13:29.301390970 +0200
> @@ -0,0 +1,28 @@
> +/* PR debug/103788 */
> +/* { dg-do compile } */
> +/* { dg-options "-O1 -fcompare-debug" } */
> +
> +int
> +bar (void);
> +
> +int
> +foo (int x)
> +{
> +  int i;
> +
> +  for (i = 0; i <= __INT_MAX__; ++i)
> +    x += bar () < (x ? 2 : 1);
> +
> +  return x;
> +}
> +
> +int
> +baz (int x)
> +{
> +  int i;
> +
> +  for (i = 0; i <= __INT_MAX__; ++i)
> +    x += bar () < (
> +    x ? 2 : 1 );
> +  return x;
> +}
> --- gcc/testsuite/c-c++-common/ubsan/pr100733.c.jj    2022-04-20 
> 13:18:09.135499667 +0200
> +++ gcc/testsuite/c-c++-common/ubsan/pr100733.c    2022-04-20 
> 13:18:43.031028328 +0200
> @@ -0,0 +1,9 @@
> +/* PR middle-end/100733 */
> +/* { dg-do compile } */
> +/* { dg-options "-O1 -fsanitize=undefined -fcompare-debug 
> -fdisable-tree-phiopt2" } */
> +
> +int
> +foo (int x)
> +{
> +  return (__builtin_expect (({ x != 0; }) ? 0 : 1, 3) == 0) * -1 << 0;
> +}
> --- gcc/testsuite/g++.dg/debug/pr104180.C.jj    2022-04-20 13:14:51.468248383 
> +0200
> +++ gcc/testsuite/g++.dg/debug/pr104180.C    2022-04-20 13:15:17.856881425 
> +0200
> @@ -0,0 +1,14 @@
> +/* PR debug/104180 */
> +/* { dg-do compile } */
> +/* { dg-options "-O1 -fcompare-debug" } */
> +
> +int a[5];
> +
> +void
> +foo (void)
> +{
> +  unsigned int b;
> +
> +  for (b = 3; ; b--)
> +    a[b] = ({ a[b + 1]; });
> +}
> 
>    Jakub
> 

Reply via email to