aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgexpand.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr46893.c13
4 files changed, 27 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d923821..7a64192 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/46893
+ * cfgexpand.c (expand_debug_expr): If GET_MODE (op0) is VOIDmode,
+ use TYPE_MODE (TREE_TYPE (tem)) instead of mode1.
+
2010-12-16 Chung-Lin Tang <cltang@codesourcery.com>
PR target/46883
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 6cc5d01..a3940d0 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -2703,7 +2703,7 @@ expand_debug_expr (tree exp)
enum machine_mode opmode = GET_MODE (op0);
if (opmode == VOIDmode)
- opmode = mode1;
+ opmode = TYPE_MODE (TREE_TYPE (tem));
/* This condition may hold if we're expanding the address
right past the end of an array that turned out not to
@@ -2724,7 +2724,8 @@ expand_debug_expr (tree exp)
? SIGN_EXTRACT
: ZERO_EXTRACT, mode,
GET_MODE (op0) != VOIDmode
- ? GET_MODE (op0) : mode1,
+ ? GET_MODE (op0)
+ : TYPE_MODE (TREE_TYPE (tem)),
op0, GEN_INT (bitsize), GEN_INT (bitpos));
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8645df9..df48e93 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-12-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/46893
+ * gcc.dg/pr46893.c: New test.
+
2010-12-16 H.J. Lu <hongjiu.lu@intel.com>
PR lto/46976
diff --git a/gcc/testsuite/gcc.dg/pr46893.c b/gcc/testsuite/gcc.dg/pr46893.c
new file mode 100644
index 0000000..ef97e2e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr46893.c
@@ -0,0 +1,13 @@
+/* PR debug/46893 */
+/* { dg-do compile } */
+/* { dg-options "-O -g" } */
+
+void
+foo (void)
+{
+ union { unsigned long long l; double d; } u = { 0x7ff0000000000000ULL };
+ double v = 0, w = -u.d;
+
+ if (w)
+ w = v;
+}