Message ID | YmA/byg8CdYQAG6u@tucnak |
---|---|
State | New |
Headers | show |
Series | opts: Disable -gstatement-frontiers by default [PR103788] | expand |
> 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 <jakub@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 >
--- 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]; }); +}