Commit e80691a0 by Jakub Jelinek Committed by Jakub Jelinek

var-tracking.c (emit_note_insn_var_location): For one part notes with offset 0,…

var-tracking.c (emit_note_insn_var_location): For one part notes with offset 0, don't add EXPR_LIST around the location.

	* var-tracking.c (emit_note_insn_var_location): For one part
	notes with offset 0, don't add EXPR_LIST around the location.
	* dwarf2out.c (loc_descriptor, dw_loc_list_1,
	add_location_or_const_value_attribute): Adjust for that change.

From-SVN: r157763
parent 89245ef2
2010-03-26 Jakub Jelinek <jakub@redhat.com> 2010-03-26 Jakub Jelinek <jakub@redhat.com>
* var-tracking.c (emit_note_insn_var_location): For one part
notes with offset 0, don't add EXPR_LIST around the location.
* dwarf2out.c (loc_descriptor, dw_loc_list_1,
add_location_or_const_value_attribute): Adjust for that change.
PR debug/43540 PR debug/43540
* dwarf2out.c (reg_save): For DW_CFA_expression put regnum * dwarf2out.c (reg_save): For DW_CFA_expression put regnum
into first operand and location into second. into first operand and location into second.
......
...@@ -13731,10 +13731,12 @@ loc_descriptor (rtx rtl, enum machine_mode mode, ...@@ -13731,10 +13731,12 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
case VAR_LOCATION: case VAR_LOCATION:
/* Single part. */ /* Single part. */
if (GET_CODE (XEXP (rtl, 1)) != PARALLEL) if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
{ {
loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0), mode, rtx loc = PAT_VAR_LOCATION_LOC (rtl);
initialized); if (GET_CODE (loc) == EXPR_LIST)
loc = XEXP (loc, 0);
loc_result = loc_descriptor (loc, mode, initialized);
break; break;
} }
...@@ -13986,9 +13988,11 @@ dw_loc_list_1 (tree loc, rtx varloc, int want_address, ...@@ -13986,9 +13988,11 @@ dw_loc_list_1 (tree loc, rtx varloc, int want_address,
{ {
gcc_assert (GET_CODE (varloc) == VAR_LOCATION); gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
/* Single part. */ /* Single part. */
if (GET_CODE (XEXP (varloc, 1)) != PARALLEL) if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
{ {
varloc = XEXP (XEXP (varloc, 1), 0); varloc = PAT_VAR_LOCATION_LOC (varloc);
if (GET_CODE (varloc) == EXPR_LIST)
varloc = XEXP (varloc, 0);
mode = GET_MODE (varloc); mode = GET_MODE (varloc);
if (MEM_P (varloc)) if (MEM_P (varloc))
{ {
...@@ -15891,7 +15895,7 @@ add_location_or_const_value_attribute (dw_die_ref die, tree decl, ...@@ -15891,7 +15895,7 @@ add_location_or_const_value_attribute (dw_die_ref die, tree decl,
node = loc_list->first; node = loc_list->first;
rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note); rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note);
if (GET_CODE (rtl) != PARALLEL) if (GET_CODE (rtl) == EXPR_LIST)
rtl = XEXP (rtl, 0); rtl = XEXP (rtl, 0);
if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING) if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
&& add_const_value_attribute (die, rtl)) && add_const_value_attribute (die, rtl))
......
...@@ -7099,8 +7099,12 @@ emit_note_insn_var_location (void **varp, void *data) ...@@ -7099,8 +7099,12 @@ emit_note_insn_var_location (void **varp, void *data)
(int) initialized); (int) initialized);
else if (n_var_parts == 1) else if (n_var_parts == 1)
{ {
rtx expr_list rtx expr_list;
= gen_rtx_EXPR_LIST (VOIDmode, loc[0], GEN_INT (offsets[0]));
if (offsets[0] || GET_CODE (loc[0]) == PARALLEL)
expr_list = gen_rtx_EXPR_LIST (VOIDmode, loc[0], GEN_INT (offsets[0]));
else
expr_list = loc[0];
note_vl = gen_rtx_VAR_LOCATION (VOIDmode, decl, expr_list, note_vl = gen_rtx_VAR_LOCATION (VOIDmode, decl, expr_list,
(int) initialized); (int) initialized);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment