[Bug debug/98656] New: switchlower_O0 drops line number of switch
vries at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jan 13 09:42:16 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98656
Bug ID: 98656
Summary: switchlower_O0 drops line number of switch
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: debug
Assignee: unassigned at gcc dot gnu.org
Reporter: vries at gcc dot gnu.org
Target Milestone: ---
[ Originally filed as gdb PR at
https://sourceware.org/bugzilla/show_bug.cgi?id=27179 ]
Consider test-case small.c.
...
$ cat -n small.c
1 #include <stdio.h>
2
3 void foo (int x, int y)
4 {
5 switch (x) {
6 case 0: break;
7 case 1: break;
8 case 2: break;
9 case 3:
10 for (int z = 0; z < ({ if (y) break; 5; }); z++)
11 break;
12 case 4: break;
13 default: break;
14 }
15 }
16
17 int main ()
18 {
19 foo (1, 1); // L1
20 foo (2, 1); // L2
21 printf("hello world!"); // L3
22 return 0;
23 }
...
With gcc-8, we have a .loc with line number 5 representing the switch
statement:
...
$ gcc-8 -O0 -g small.c -save-temps
$ cat small.s
foo:
.LFB0:
.file 1 "small.c"
.loc 1 4 1
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl %edi, -20(%rbp)
movl %esi, -24(%rbp)
.loc 1 5 3
cmpl $4, -20(%rbp)
ja .L13
...
With gcc-9 that .loc disappeared:
...
foo:
.LFB0:
.file 1 "small.c"
.loc 1 4 1
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl %edi, -20(%rbp)
movl %esi, -24(%rbp)
cmpl $4, -20(%rbp)
ja .L13
...
and that's still the case with gcc-11.
Culprit is switchlower_O0.
With this compilation:
...
$ rm -f *.c.*; gcc-11 -O0 -g small.c -fdump-tree-all-lineno -save-temps
...
we have at a-small.c.234t.cplxlower0:
...
<bb 2> :
[small.c:5:3] switch (x_1(D)) <[small.c:13:2] default: <L10> [INV],
[small.c:6:5] case 0: <L0> [INV], [small.c:7:5] case 1: <L1> [INV],
[small.c:8:5] case 2: <L2> [INV], [small.c:9:5] case 3: <L3> [INV],
[small.c:12:5] case 4: <L8> [INV]>
...
and at a-small.c.236t.switchlower_O0:
...
<bb 2> :
switch (x_1(D)) <[small.c:13:2] default: <L10> [0.00%], [small.c:6:5] case 0:
<L0> [20.00%], [small.c:7:5] case 1: <L1> [20.00%], [small.c:8:5] case 2: <L2>
[20.00%], [small.c:9:5] case 3: <L3> [20.00%], [small.c:12:5] case 4: <L8>
[20.00%]>
...
Note the dropped "[small.c:5:3]" in front of "switch".
More information about the Gcc-bugs
mailing list