From 5a9fbcf14adbf0aef998c7b205298a96a7bd8841 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Tue, 1 Nov 2011 02:09:00 +0000 Subject: [PATCH] re PR debug/50869 (ice in vt_expand_var_loc_chain) PR debug/50869 * cselib.c (cfa_base_preserved_regno): Initialize. (cselib_expand_value_rtx_1): Don't expand it. * var-tracking.c (vt_expand_var_loc_chain): Initialize depth. Check it's only zero if result is NULL. From-SVN: r180725 --- gcc/ChangeLog | 8 ++++++++ gcc/cselib.c | 7 ++++--- gcc/var-tracking.c | 4 +++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 821e0e5..d5f725b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-11-01 Alexandre Oliva + + PR debug/50869 + * cselib.c (cfa_base_preserved_regno): Initialize. + (cselib_expand_value_rtx_1): Don't expand it. + * var-tracking.c (vt_expand_var_loc_chain): Initialize depth. + Check it's only zero if result is NULL. + 2011-11-01 Jakub Jelinek * config/i386/sse.md (fixuns_trunc2): New diff --git a/gcc/cselib.c b/gcc/cselib.c index b96c0cd..ef397db 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -185,7 +185,7 @@ static cselib_val dummy_val; that is constant through the whole function and should never be eliminated. */ static cselib_val *cfa_base_preserved_val; -static unsigned int cfa_base_preserved_regno; +static unsigned int cfa_base_preserved_regno = INVALID_REGNUM; /* Used to list all values that contain memory reference. May or may not contain the useless values - the list is compacted @@ -1451,7 +1451,7 @@ cselib_expand_value_rtx_1 (rtx orig, struct expand_value_data *evd, if (GET_MODE (l->elt->val_rtx) == GET_MODE (orig)) { rtx result; - int regno = REGNO (orig); + unsigned regno = REGNO (orig); /* The only thing that we are not willing to do (this is requirement of dse and if others potential uses @@ -1471,7 +1471,8 @@ cselib_expand_value_rtx_1 (rtx orig, struct expand_value_data *evd, make the frame assumptions. */ if (regno == STACK_POINTER_REGNUM || regno == FRAME_POINTER_REGNUM - || regno == HARD_FRAME_POINTER_REGNUM) + || regno == HARD_FRAME_POINTER_REGNUM + || regno == cfa_base_preserved_regno) return orig; bitmap_set_bit (evd->regs_active, regno); diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 44bab38..11d4efd 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -7764,7 +7764,7 @@ vt_expand_var_loc_chain (variable var, bitmap regs, void *data, bool *pendrecp) bool pending_recursion; rtx loc_from = NULL; struct elt_loc_list *cloc = NULL; - int depth, saved_depth = elcd->depth; + int depth = 0, saved_depth = elcd->depth; /* Clear all backlinks pointing at this, so that we're not notified while we're active. */ @@ -7842,6 +7842,8 @@ vt_expand_var_loc_chain (variable var, bitmap regs, void *data, bool *pendrecp) VAR_LOC_FROM (var) = loc_from; VAR_LOC_DEPTH (var) = depth; + gcc_checking_assert (!depth == !result); + elcd->depth = update_depth (saved_depth, depth); /* Indicate whether any of the dependencies are pending recursion -- 2.7.4