https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121093
Bug ID: 121093
Summary: Missed location of inlined function
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: debug
Assignee: unassigned at gcc dot gnu.org
Reporter: hubicka at gcc dot gnu.org
Target Milestone: ---
In this testcase
static int p1(int a)
{
return a+1;
}
static int p2(int a)
{
return a+2;
}
int p3 (int a)
{
return p1(p2(a));
}
We optimize the two additions into +3. At optimized dump we have:
int p3 (int a)
{
int _3;
<bb 2> [local count: 1073741824]:
[m.c:11:2] # DEBUG BEGIN_STMT
[m.c:11:9] # DEBUG a => [m.c:7:10] a_2(D) + 2
[m.c:1:12] # DEBUG INLINE_ENTRY p1
[m.c:3:2] # DEBUG BEGIN_STMT
[m.c:3:10] _3 = a_2(D) + 3;
[m.c:11:9 discrim 1] # DEBUG a => NULL
[m.c:11:9 discrim 3] return _3;
}
notice that p1 is present a INLINE_ENRY and corresponding debug stmt with
location m.c:3, but p2 is gone. It is taken away by clear_unused_block_pointer
since after combining the computations we no longer see an non-debug statement
associated with it.
auto-fdo would be happier if we output also location for m.c:7 and it would
make it possible to breakpoint in p2.