aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-02-11 09:27:30 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2012-02-11 09:27:30 +0100
commitbd0ba05d4c778a42c0199f7868c36975431edcb2 (patch)
treebb87848447f8e6ff40a6fd32e7bd31ce08f32fc7
parent28f7ff45ec593f6a2f5f76e16f32c682564794e4 (diff)
downloadgcc-bd0ba05d4c778a42c0199f7868c36975431edcb2.zip
gcc-bd0ba05d4c778a42c0199f7868c36975431edcb2.tar.gz
gcc-bd0ba05d4c778a42c0199f7868c36975431edcb2.tar.bz2
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/reg-stack.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr52132.c18
4 files changed, 31 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f0056d8..bad4a05 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-02-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/52132
+ * reg-stack.c (subst_stack_regs_in_debug_insn): Don't use
+ get_true_reg.
+
2012-02-11 Uros Bizjak <ubizjak@gmail.com>
* compare-elim.c (find_comparisons_in_bb): Eliminate only compares
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c
index da7fe72..ce29fdc 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 bd91d58..0cd6876 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/52132
+ * gcc.dg/pr52132.c: New test.
+
2012-02-10 Eric Botcazou <ebotcazou@adacore.com>
* 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 0000000..8374994
--- /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 ();
+}