This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug debug/42657] Missing debug info for a variable
- From: "jakub at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 8 Jan 2010 10:47:46 -0000
- Subject: [Bug debug/42657] Missing debug info for a variable
- References: <bug-42657-87@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #1 from jakub at gcc dot gnu dot org 2010-01-08 10:47 -------
Created an attachment (id=19506)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19506&action=view)
gcc45-pr42657.patch
Inliner fix I'm bootstrapping/regtesting ATM. Unfortunately this isn't enough
to fix the testcase.
While the debug stmts/insns are preserved until var-tracking - in compgotos we
have:
(debug_insn 13 10 14 2 rh552376.i:7 (var_location:SI a (reg:SI 0 ax [orig:58
D.2702 ] [58])) -1 (nil))
(debug_insn 14 13 15 2 rh552376.i:8 (var_location:DI var1 (reg/v/f:DI 3 bx
[orig:61 x ] [61])) -1 (nil))
(debug_insn 15 14 16 2 rh552376.i:9 (var_location:SI var2 (reg:SI 0 ax [orig:58
D.2702 ] [58])) -1 (nil))
(insn:TI 16 15 27 2 rh552376.i:10 (parallel [
(asm_operands/v ("/* %0 %1 */") ("") 0 [
(reg/v/f:DI 3 bx [orig:61 x ] [61])
(reg:SI 0 ax [orig:58 D.2702 ] [58])
]
[
(asm_input:DI ("r") (null):0)
(asm_input:SI ("r") (null):0)
]
[] rh552376.i:24)
(clobber (reg:QI 18 fpsr))
(clobber (reg:QI 17 flags))
]) -1 (expr_list:REG_DEAD (reg/v/f:DI 3 bx [orig:61 x ] [61])
(expr_list:REG_UNUSED (reg:QI 18 fpsr)
(expr_list:REG_UNUSED (reg:QI 17 flags)
(nil)))))
var-tracking only gives location for x and var1 and not a and var2:
(note/c 44 10 43 2 (var_location x (expr_list:REG_DEP_TRUE (reg/v/f:DI 3 bx
[orig:61 x ] [61])
(const_int 0 [0x0]))) NOTE_INSN_VAR_LOCATION)
(note/c 43 44 45 2 (var_location x (expr_list:REG_DEP_TRUE (reg/v/f:DI 3 bx
[orig:61 x ] [61])
(const_int 0 [0x0]))) NOTE_INSN_VAR_LOCATION)
(note 45 43 46 2 (var_location a (expr_list:REG_DEP_TRUE (reg:SI 0 ax [orig:58
D.2702 ] [58])
(const_int 0 [0x0]))) NOTE_INSN_VAR_LOCATION)
(note 46 45 48 2 (var_location var1 (expr_list:REG_DEP_TRUE (reg/v/f:DI 3 bx
[orig:61 x ] [61])
(const_int 0 [0x0]))) NOTE_INSN_VAR_LOCATION)
(note 48 46 47 2 (var_location var2 (nil)) NOTE_INSN_VAR_LOCATION)
(note 47 48 16 2 (var_location a (nil)) NOTE_INSN_VAR_LOCATION)
(insn:TI 16 47 27 2 rh552376.i:10 (parallel [
(asm_operands/v ("/* %0 %1 */") ("") 0 [
(reg/v/f:DI 3 bx [orig:61 x ] [61])
(reg:SI 0 ax [orig:58 D.2702 ] [58])
]
The patch actually makes things worse in this testcase, but only in the
vartrack phase - that's because compared to without the patch var-tracking now
adds both the note 48 and note 47, before that there was neither of these
notes.
Which means that not only it doesn't know where var2 lives (it didn't know it
before either), but doesn't know where a lives either, eventhough the a in %eax
was correct.
So we need to also fix var-tracking...
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42657