This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/65771] [5 Regression] ICE (in loc_list_from_tree, at dwarf2out.c:14964) on arm-linux-gnueabihf
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 16 Apr 2015 14:23:55 +0000
- Subject: [Bug target/65771] [5 Regression] ICE (in loc_list_from_tree, at dwarf2out.c:14964) on arm-linux-gnueabihf
- Auto-submitted: auto-generated
- References: <bug-65771-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65771
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target|arm-linux-gnueabihf |
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Happens on x86_64-linux too, started with r214899.
So, at *.optimized we have:
# DEBUG D#2 => b
# DEBUG D#1 => a[D#2].t
# DEBUG c => D#1
which is expanded as:
(debug_insn 5 2 6 2 (var_location:SI D#2 (mem/c:SI (symbol_ref:SI ("b") [flags
0x82] <var_decl 0x7f8953872990 b>) [0 b+0 S4 A32])) pr65771.c:8 -1
(nil))
(debug_insn 6 5 7 2 (var_location:SI D#1 (mem/j:SI (plus:SI (ashift:SI
(debug_expr:SI D#2)
(const_int 3 [0x3]))
(const:SI (plus:SI (symbol_ref:SI ("a") [flags 0xaa] <var_decl
0x7f8953872900 a>)
(const_int 4 [0x4])))) [0 a[D#2].t+0 S4 A32])) pr65771.c:8
-1
(nil))
(debug_insn 7 6 0 2 (var_location:SI c (debug_expr:SI D#1)) pr65771.c:8 -1
(nil))
and vartracking makes:
(note 15 2 14 2 (var_location c (mem/j:SI (plus:SI (ashift:SI (mem/c:SI
(symbol_ref:SI ("b") [flags 0x82] <var_decl 0x7f8953872990 b>) [0 b+0 S4 A
32])
(const_int 3 [0x3]))
(const:SI (plus:SI (symbol_ref:SI ("a") [flags 0xaa] <var_decl
0x7f8953872900 a>)
(const_int 4 [0x4])))) [0 a[D#2].t+0 S4 A32]))
NOTE_INSN_VAR_LOCATION)
out of this. Var-tracking for obvious reasons can only replace the
DEBUG_EXPR_DECLs when they appear in debug_expr RTL, because we track
DEBUG_EXPR_DECL values at RTL as RTL expressions, rather than tree. The
problem is I believe that we try to use the MEM_EXPR as a fallback and if it
contains DEBUG_EXPR_DECL, dwarf2out.c is upset.