Bug 95343 - IPA-SRA can result in wrong debug info about removed function arguments
Summary: IPA-SRA can result in wrong debug info about removed function arguments
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: debug (show other bugs)
Version: 10.0
: P3 normal
Target Milestone: ---
Assignee: Martin Jambor
URL:
Keywords: wrong-debug
Depends on:
Blocks:
 
Reported: 2020-05-26 18:25 UTC by Martin Jambor
Modified: 2021-02-17 16:23 UTC (History)
0 users

See Also:
Host: x86_64-linux
Target: x86_64-linux
Build:
Known to work:
Known to fail:
Last reconfirmed: 2020-05-26 00:00:00


Attachments
Testcase (302 bytes, text/x-csrc)
2020-05-26 18:25 UTC, Martin Jambor
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Martin Jambor 2020-05-26 18:25:11 UTC
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.
Comment 1 Martin Jambor 2020-05-26 18:28:32 UTC
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)))
            {
Comment 2 Martin Jambor 2020-05-26 18:36:36 UTC
(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.
Comment 3 Martin Jambor 2020-05-28 12:38:03 UTC
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
Comment 4 GCC Commits 2020-07-02 12:31:30 UTC
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.
Comment 5 GCC Commits 2020-07-03 12:51:38 UTC
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)
Comment 6 Martin Jambor 2021-02-17 16:23:57 UTC
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.