track_expr_p has:
4496 /* If this expression is really a debug alias of some other declaration,
we
4497 don't need to track this expression if the ultimate declaration is
4498 ignored. */
4499 realdecl = expr;
4500 if (DECL_DEBUG_EXPR_IS_FROM (realdecl) && DECL_DEBUG_EXPR (realdecl))
4501 {
4502 realdecl = DECL_DEBUG_EXPR (realdecl);
4503 /* ??? We don't yet know how to emit DW_OP_piece for variable
4504 that has been SRA'ed. */
4505 if (!DECL_P (realdecl))
4506 return 0;
4507 }
I'd say if the DECL_DEBUG_EXPR is a COMPONENT_REF, ARRAY_REF etc. from a
reasonably short type, the easiest thing would be just to let var-tracking
track the individual vars and let dwarf2out_var_location assemble them
together.
--
Summary: var-tracking needlessly throws away location info for
SRAed vars
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: debug
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: jakub at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43983