Created attachment 48608 [details] Testcase ipa_param_adjustments::modify_call does not properly account for extra arguments left over from clone materialization when recording debug info. Therefore, when the attached testcase is compiled with -O2 or higher and run in gdb with a breakpoint is set at line 20 where we examine the value of parameter i, it incorrectly reports 4, even though it should be 2.
The simplest fix which will make i reported as "optimized out" is the following. But I am testing a patch which can make gdb actually show the correct 4. Still, the following is usable for gcc 10 if the full patch is deemed too risky: diff --git a/gcc/ipa-param-manipulation.c b/gcc/ipa-param-manipulation.c index 978916057f0..2a04f7b3ce5 100644 --- a/gcc/ipa-param-manipulation.c +++ b/gcc/ipa-param-manipulation.c @@ -787,7 +787,12 @@ 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); + int index; + if (transitive_remapping) + index = index_map[i]; + else + index = i; + tree arg = gimple_call_arg (stmt, index); if (!useless_type_conversion_p (TREE_TYPE (origin), TREE_TYPE (arg))) {
(In reply to Martin Jambor from comment #1) > ...I am testing a patch which can make gdb actually show > the correct 4. I meant the correct value 2, of course.
I have proposed a patch series on the mailing list to address PR 93385 and the last patch in it also addresses this issue and allows gdb to print the correct value of the removed parameter: https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546705.html
The master branch has been updated by Martin Jambor <jamborm@gcc.gnu.org>: https://gcc.gnu.org/g:053c88093a45f175f446eda009f3312e4e508514 commit r11-1787-g053c88093a45f175f446eda009f3312e4e508514 Author: Martin Jambor <mjambor@suse.cz> Date: Thu Jul 2 14:30:50 2020 +0200 ipa-sra: Prevent constructing debug info from wrong argument 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 just that seem toocontroversial (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. gcc/ChangeLog: 2020-07-01 Martin Jambor <mjambor@suse.cz> PR debug/95343 * ipa-param-manipulation.c (ipa_param_adjustments::modify_call): Adjust argument index if necessary. gcc/testsuite/ChangeLog: 2020-07-01 Martin Jambor <mjambor@suse.cz> PR debug/95343 * gcc.dg/guality/pr95343.c: New test.
The releases/gcc-10 branch has been updated by Martin Jambor <jamborm@gcc.gnu.org>: https://gcc.gnu.org/g:61e4ee3f2c0e3d77602c87866cd5c0cfb81d5da2 commit r10-8421-g61e4ee3f2c0e3d77602c87866cd5c0cfb81d5da2 Author: Martin Jambor <mjambor@suse.cz> Date: Fri Jul 3 14:51:02 2020 +0200 ipa-sra: Prevent constructing debug info from wrong argument 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 just that seem toocontroversial (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. gcc/ChangeLog: 2020-07-01 Martin Jambor <mjambor@suse.cz> PR debug/95343 * ipa-param-manipulation.c (ipa_param_adjustments::modify_call): Adjust argument index if necessary. gcc/testsuite/ChangeLog: 2020-07-01 Martin Jambor <mjambor@suse.cz> PR debug/95343 * gcc.dg/guality/pr95343.c: New test. (cherry picked from commit 053c88093a45f175f446eda009f3312e4e508514)
This bug is fixed, the debug info is no longer wrong, just also missing in cases where we could actually provide it. But that is a different thing, so let me close this one.