[Bug debug/95098] Out of scope variable visible during debugging at Og
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed May 13 06:43:16 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95098
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |aoliva at gcc dot gnu.org,
| |edlinger at gcc dot gnu.org,
| |rguenth at gcc dot gnu.org
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Don't see this with gdb:
(gdb) start
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Temporary breakpoint 4 at 0x4004bd: file z.c, line 11.
Starting program: /home/rguenther/obj/gcc/a.out
Temporary breakpoint 4, main () at z.c:11
11 int main() { b(); }
(gdb) s
Breakpoint 3, b () at z.c:4
4 for (g_2 = 21; (g_2 < (-27)); g_2 = 0)
(gdb) p l_9
No symbol "l_9" in current context.
(gdb) info locals
l_10 = <optimized out>
note there _is_ l_9 in the DWARF, even with a location:
<2><ba>: Abbrev Number: 8 (DW_TAG_lexical_block)
<bb> DW_AT_low_pc : 0xa
<c3> DW_AT_high_pc : 0x0
<3><cb>: Abbrev Number: 9 (DW_TAG_variable)
<cc> DW_AT_name : l_9
<d0> DW_AT_decl_file : 1
<d1> DW_AT_decl_line : 7
<d2> DW_AT_decl_column : 7
<d3> DW_AT_type : <0xeb>
<d7> DW_AT_location : 10 byte block: 3 0 0 0 0 0 0 0 0 9f
(DW_OP_addr: 0; DW_OP_stack_value)
but
0000000000000000 <b>:
0: c7 05 00 00 00 00 15 movl $0x15,0x0(%rip) # a <b+0xa>
7: 00 00 00
a: c3 retq
and certainly the DW_AT_high_pc of the lexical block looks "odd" - the
block is not existent. Assembly:
b:
.LFB0:
.file 1 "z.c"
.loc 1 2 9 view -0
.cfi_startproc
.loc 1 3 5 view .LVU1
.loc 1 4 5 view .LVU2
.loc 1 4 14 is_stmt 0 view .LVU3
movl $21, g_2(%rip)
.loc 1 4 20 is_stmt 1 view .LVU4
.LBB2:
.loc 1 7 2 view .LVU5
.LVL0:
.loc 1 8 2 view .LVU6
.LBE2:
.loc 1 10 1 is_stmt 0 view .LVU7
ret
so you can see .LBB2 to .LBE2 do not contain any actual instructions.
GIMPLE we expand from:
b ()
{
<bb 2> [local count: 1073741824]:
[z.c:3:5] # DEBUG BEGIN_STMT
[z.c:4:5] # DEBUG BEGIN_STMT
[z.c:4:14] g_2 = 21;
[z.c:4:20] # DEBUG BEGIN_STMT
[z.c:7:2] # DEBUG BEGIN_STMT
[z.c:7:7] # DEBUG l_9 => [z.c:7:13] &a
[z.c:8:2] # DEBUG BEGIN_STMT
[z.c:8:2] return;
does lldb try to interpret location views yet? I suppose it might get
confused about the is_stmt 0 on the movl and only stop at ret
even though the "last" location on that is line 10 (but is_stmt 0 again).
It's difficult to produce a meaningful line-number program for the
resulting assembler ;)
More information about the Gcc-bugs
mailing list