On Sun, Oct 16, 2022 at 10:25 PM Eugene Rozenfeld via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > With -gstatement-frontiers we may end up with different IR > coming from the front end with and without debug information turned on. > See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100733 for details. > That may result in differences in discriminator values and -fcompare-debug > failures. > > This patch disables printing of discriminators when the dump is intended > for -fcompare-debug comparison and reverses the workaround in a test.
I don't think this is the correct approach. -gstatement-frontiers is known to be prone to these issues and is the one to blame here. I think the bugs should be SUSPENDED until -gstatement-frontiers is fixed or at least disabled by default (IIRC Jakub tried that but failed last time) > Tested on x86_64-pc-linux-gnu. > > gcc/ChangeLog: > PR debug/107231 > PR debug/107169 > * print-rtl.cc (print_rtx_operand_code_i): Don't print discriminators > for -fdebug-compare. > > gcc/testsuite/ChangeLog: > > * c-c++-common/ubsan/pr85213.c: Reverse the workaround for > discriminators. > --- > gcc/print-rtl.cc | 13 ++++++++++--- > gcc/testsuite/c-c++-common/ubsan/pr85213.c | 7 +------ > 2 files changed, 11 insertions(+), 9 deletions(-) > > diff --git a/gcc/print-rtl.cc b/gcc/print-rtl.cc > index e115f987173..0476f3d7e79 100644 > --- a/gcc/print-rtl.cc > +++ b/gcc/print-rtl.cc > @@ -453,10 +453,17 @@ rtx_writer::print_rtx_operand_code_i (const_rtx in_rtx, > int idx) > expanded_location xloc = insn_location (in_insn); > fprintf (m_outfile, " \"%s\":%i:%i", xloc.file, xloc.line, > xloc.column); > - int discriminator = insn_discriminator (in_insn); > - if (discriminator) > - fprintf (m_outfile, " discrim %d", discriminator); > > + /* Don't print discriminators for -fcompare-debug since the IR > + coming from the front end may be different with and without > + debug information turned on. That may result in different > + discriminator values. */ > + if (!(dump_flags & TDF_COMPARE_DEBUG)) > + { > + int discriminator = insn_discriminator (in_insn); > + if (discriminator) > + fprintf (m_outfile, " discrim %d", discriminator); > + } > } > #endif > } > diff --git a/gcc/testsuite/c-c++-common/ubsan/pr85213.c > b/gcc/testsuite/c-c++-common/ubsan/pr85213.c > index e903e976f2c..8a6be81d20f 100644 > --- a/gcc/testsuite/c-c++-common/ubsan/pr85213.c > +++ b/gcc/testsuite/c-c++-common/ubsan/pr85213.c > @@ -1,11 +1,6 @@ > /* PR sanitizer/85213 */ > /* { dg-do compile } */ > -/* Pass -gno-statement-frontiers to work around > - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100733 : > - without it the IR coming from the front end may be different with and > without > - debug information turned on. That may cause e.g., different discriminator > values > - and -fcompare-debug failures. */ > -/* { dg-options "-O1 -fsanitize=undefined -fcompare-debug > -gno-statement-frontiers" } */ > +/* { dg-options "-O1 -fsanitize=undefined -fcompare-debug" } */ > > int > foo (int x) > -- > 2.25.1