On Wed, Jul 1, 2020 at 11:59 PM Martin Jambor <mjam...@suse.cz> wrote: > > Hi, > > the mechanism generating debug info for removed parameters did not > adjust index of the argument in the call statement to take into > account extra arguments IPA-SRA might have produced when splitting a > strucutre. This patch addresses that omission and stops gdb from > showing incorrect value for the removed parameter and says "value > optimized out" instead. The guality testcase will end up as > UNSUPPORTED in the results which is how Richi told me on IRC we deal > with this. > > It is possible to generate debug info to actually show the value of the > removed parameter but so far my approaches to do that seem too > controversial > (https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546705.html), so > before I come up with something better I'd like to push this to master > and the gcc-10 branch in time for the GCC 10.2 release. > > Bootstrapped and tested on master on x86_64-linux, bootstrap on top of > the gcc-10 branch is underway? OK for both if it passes?
OK. Thanks, Richard. > Thanks, > > Martin > > > gcc/ChangeLog: > > 2020-07-01 Martin Jambor <mjam...@suse.cz> > > PR guality/95343 > * ipa-param-manipulation.c (ipa_param_adjustments::modify_call): > Adjust > argument index if necessary. > > gcc/testsuite/ChangeLog: > > 2020-07-01 Martin Jambor <mjam...@suse.cz> > > PR guality/95343 > * gcc.dg/guality/pr95343.c: New test. > --- > gcc/ipa-param-manipulation.c | 6 +++- > gcc/testsuite/gcc.dg/guality/pr95343.c | 45 ++++++++++++++++++++++++++ > 2 files changed, 50 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.dg/guality/pr95343.c > > diff --git a/gcc/ipa-param-manipulation.c b/gcc/ipa-param-manipulation.c > index 2cc4bc79dc1..5fc0de56556 100644 > --- a/gcc/ipa-param-manipulation.c > +++ b/gcc/ipa-param-manipulation.c > @@ -790,7 +790,11 @@ ipa_param_adjustments::modify_call (gcall *stmt, > if (!is_gimple_reg (old_parm) || kept[i]) > continue; > tree origin = DECL_ORIGIN (old_parm); > - tree arg = gimple_call_arg (stmt, i); > + tree arg; > + if (transitive_remapping) > + arg = gimple_call_arg (stmt, index_map[i]); > + else > + arg = gimple_call_arg (stmt, i); > > if (!useless_type_conversion_p (TREE_TYPE (origin), TREE_TYPE > (arg))) > { > diff --git a/gcc/testsuite/gcc.dg/guality/pr95343.c > b/gcc/testsuite/gcc.dg/guality/pr95343.c > new file mode 100644 > index 00000000000..a3e57decda8 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/guality/pr95343.c > @@ -0,0 +1,45 @@ > +/* { dg-do run } */ > +/* { dg-options "-g -fno-ipa-icf" } */ > + > +volatile int v; > + > +int __attribute__((noipa)) > +get_val0 (void) {return 0;} > +int __attribute__((noipa)) > +get_val2 (void) {return 2;} > + > +struct S > +{ > + int a, b, c; > +}; > + > +static int __attribute__((noinline)) > +bar (struct S s, int x, int y, int z, int i) > +{ > + int r; > + v = s.a + s.b; /* { dg-final { gdb-test . "i+1" "3" } } */ > + return r; > +} > + > +static int __attribute__((noinline)) > +foo (struct S s, int i) > +{ > + int r; > + r = bar (s, 3, 4, 5, i); > + return r; > +} > + > + > +int > +main (void) > +{ > + struct S s; > + int i; > + i = get_val2 (); > + s.a = get_val0 (); > + s.b = get_val0 (); > + s.c = get_val0 (); > + int r = foo (s, i); > + v = r + i; > + return 0; > +} > -- > 2.27.0 >