From bd0ba05d4c778a42c0199f7868c36975431edcb2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 11 Feb 2012 09:27:30 +0100 Subject: [PATCH] re PR debug/52132 (ICE in loc_descriptor) PR debug/52132 * reg-stack.c (subst_stack_regs_in_debug_insn): Don't use get_true_reg. * gcc.dg/pr52132.c: New test. From-SVN: r184126 --- gcc/ChangeLog | 6 ++++++ gcc/reg-stack.c | 8 ++------ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr52132.c | 18 ++++++++++++++++++ 4 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr52132.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f0056d844dc..bad4a057e7f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-02-11 Jakub Jelinek + + PR debug/52132 + * reg-stack.c (subst_stack_regs_in_debug_insn): Don't use + get_true_reg. + 2012-02-11 Uros Bizjak * compare-elim.c (find_comparisons_in_bb): Eliminate only compares diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index da7fe729be9..ce29fdcaf83 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -1,6 +1,6 @@ /* Register to Stack convert for GNU compiler. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012 Free Software Foundation, Inc. This file is part of GCC. @@ -1323,14 +1323,10 @@ compare_for_stack_reg (rtx insn, stack regstack, rtx pat_src) static int subst_stack_regs_in_debug_insn (rtx *loc, void *data) { - rtx *tloc = get_true_reg (loc); stack regstack = (stack)data; int hard_regno; - if (!STACK_REG_P (*tloc)) - return 0; - - if (tloc != loc) + if (!STACK_REG_P (*loc)) return 0; hard_regno = get_hard_regnum (regstack, *loc); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bd91d58cc6d..0cd68764224 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-02-11 Jakub Jelinek + + PR debug/52132 + * gcc.dg/pr52132.c: New test. + 2012-02-10 Eric Botcazou * gnat.dg/specs/aggr4.ads: New test. diff --git a/gcc/testsuite/gcc.dg/pr52132.c b/gcc/testsuite/gcc.dg/pr52132.c new file mode 100644 index 00000000000..8374994424a --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr52132.c @@ -0,0 +1,18 @@ +/* PR debug/52132 */ +/* { dg-do compile } */ +/* { dg-options "-std=c99 -O2 -g" } */ + +int l; +void bar (void); + +void +foo (int *x, float y) +{ + float b; + union { float f; int i; } u = { .f = y }; + u.i += 127 << 23; + u.f = ((-1.0f / 3) * u.f + 2) * u.f - 2.0f / 3; + b = 0.5 * (u.f + l); + if (b >= *x) + bar (); +}