From 40d16a92e39c2fd51d4c8962824bf04543da1d23 Mon Sep 17 00:00:00 2001 From: jakub Date: Mon, 13 Dec 2010 17:36:26 +0000 Subject: [PATCH] PR debug/46867 * var-tracking.c (emitted_notes, string_pointer_flags): Removed. (emit_note_insn_var_location): Remove ENABLE_RTL_CHECKING verification. (vt_emit_notes): Don't initialize and destroy emitted_notes. * gcc.dg/pr46867.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@167754 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 ++++++ gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gcc.dg/pr46867.c | 32 ++++++++++++++++++++++++ gcc/var-tracking.c | 56 ------------------------------------------ 4 files changed, 44 insertions(+), 56 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr46867.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ced6603f665..9a539a9420f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-12-13 Jakub Jelinek + + PR debug/46867 + * var-tracking.c (emitted_notes, string_pointer_flags): Removed. + (emit_note_insn_var_location): Remove ENABLE_RTL_CHECKING verification. + (vt_emit_notes): Don't initialize and destroy emitted_notes. + 2010-12-13 Jan Hubicka PR middle-end/45388 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d52333f4603..05882fac319 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-12-13 Jakub Jelinek + + PR debug/46867 + * gcc.dg/pr46867.c: New test. + 2010-12-13 Janus Weil PR fortran/46841 diff --git a/gcc/testsuite/gcc.dg/pr46867.c b/gcc/testsuite/gcc.dg/pr46867.c new file mode 100644 index 00000000000..9225bce42e4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr46867.c @@ -0,0 +1,32 @@ +/* PR debug/46867 */ +/* { dg-do compile } */ +/* { dg-options "-O -g" } */ + +typedef __PTRDIFF_TYPE__ ptrdiff_t; + +extern void *bar (void); + +void +foo (int x, char *r1, char *r2, __INTPTR_TYPE__ *rp, char *t) +{ + char *tx = tx; + char **cc = bar (); + ptrdiff_t rx = r1 - r2; + for (;;) + { + char *cp1 = (char *) *rp; + char *cp2 = t; + char *s; + ptrdiff_t len = cp1 - tx + rx * (cp2 - cp1); + while (len) + ; + for (s = tx; s; s++) + ; + while (s) + if (s == cc[s - r1]) + if (x) + bar (); + if (cp1) + tx = cp2; + } +} diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 35ca1cb35fc..44701be12e8 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -7095,24 +7095,6 @@ vt_expand_loc_dummy (rtx loc, htab_t vars, bool *pcur_loc_changed) return ret; } -#ifdef ENABLE_RTL_CHECKING -/* Used to verify that cur_loc_changed updating is safe. */ -static struct pointer_map_t *emitted_notes; - -/* Strip REG_POINTER from REGs and MEM_POINTER from MEMs in order to - avoid differences in commutative operand simplification. */ -static rtx -strip_pointer_flags (rtx x, const_rtx old_rtx ATTRIBUTE_UNUSED, - void *data ATTRIBUTE_UNUSED) -{ - if (REG_P (x) && REG_POINTER (x)) - return gen_rtx_REG (GET_MODE (x), REGNO (x)); - if (MEM_P (x) && MEM_POINTER (x)) - return gen_rtx_MEM (GET_MODE (x), XEXP (x, 0)); - return NULL_RTX; -} -#endif - /* Emit the NOTE_INSN_VAR_LOCATION for variable *VARP. DATA contains additional parameters: WHERE specifies whether the note shall be emitted before or after instruction INSN. */ @@ -7157,10 +7139,8 @@ emit_note_insn_var_location (void **varp, void *data) if (var->n_var_parts == 0) var->cur_loc_changed = true; } -#ifndef ENABLE_RTL_CHECKING if (!var->cur_loc_changed) goto clear; -#endif for (i = 0; i < var->n_var_parts; i++) { enum machine_mode mode, wider_mode; @@ -7302,36 +7282,6 @@ emit_note_insn_var_location (void **varp, void *data) parallel, (int) initialized); } -#ifdef ENABLE_RTL_CHECKING - if (note_vl) - { - void **note_slot = pointer_map_insert (emitted_notes, decl); - rtx pnote = (rtx) *note_slot; - if (!var->cur_loc_changed && (pnote || PAT_VAR_LOCATION_LOC (note_vl))) - { - rtx old_vl, new_vl; - gcc_assert (pnote); - old_vl = PAT_VAR_LOCATION_LOC (pnote); - new_vl = PAT_VAR_LOCATION_LOC (note_vl); - if (!rtx_equal_p (old_vl, new_vl)) - { - /* There might be differences caused by REG_POINTER - differences. REG_POINTER affects - swap_commutative_operands_p. */ - old_vl = simplify_replace_fn_rtx (old_vl, NULL_RTX, - strip_pointer_flags, NULL); - new_vl = simplify_replace_fn_rtx (new_vl, NULL_RTX, - strip_pointer_flags, NULL); - gcc_assert (rtx_equal_p (old_vl, new_vl)); - PAT_VAR_LOCATION_LOC (note_vl) = new_vl; - } - } - *note_slot = (void *) note_vl; - } - if (!var->cur_loc_changed) - goto clear; -#endif - if (where != EMIT_NOTE_BEFORE_INSN) { note = emit_note_after (NOTE_INSN_VAR_LOCATION, insn); @@ -7960,9 +7910,6 @@ vt_emit_notes (void) basic_block bb; dataflow_set cur; -#ifdef ENABLE_RTL_CHECKING - emitted_notes = pointer_map_create (); -#endif gcc_assert (!htab_elements (changed_variables)); /* Free memory occupied by the out hash tables, as they aren't used @@ -8022,9 +7969,6 @@ vt_emit_notes (void) VEC_free (rtx, heap, changed_values_stack); } -#ifdef ENABLE_RTL_CHECKING - pointer_map_destroy (emitted_notes); -#endif emit_notes = false; } -- 2.11.0