summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2009-10-19 07:39:43 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2009-10-19 07:39:43 +0000
commit5bd7119308139d314a65d3be8584cdefa0e26b4c (patch)
tree06314543c91eececa6bcd3808dfbc85a49ff743d
parentacce2cad855e27432126f780cc36516bce91181e (diff)
downloadppe42-gcc-5bd7119308139d314a65d3be8584cdefa0e26b4c.tar.gz
ppe42-gcc-5bd7119308139d314a65d3be8584cdefa0e26b4c.zip
* cfgexpand.c (expand_debug_expr): Fail if bitpos < 0 for non-MEM
op0. * gcc.dg/debug/vta-3.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@152972 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cfgexpand.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/debug/vta-3.c17
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 706052de662..a8f7148419a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,9 @@
-2009-10-17 Andy Hutchinson <hutchinsonandy@gcc.gnu.org>
+2009-10-19 Jakub Jelinek <jakub@redhat.com>
+
+ * cfgexpand.c (expand_debug_expr): Fail if bitpos < 0 for non-MEM
+ op0.
+
+2009-10-17 Andy Hutchinson <hutchinsonandy@gcc.gnu.org>
PR middle-end/41738
* optabs.c (expand_binop): Make mode of shift count expression mode
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index acd70c13869..8c7c881ea6c 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -2593,6 +2593,9 @@ expand_debug_expr (tree exp)
if (bitpos == 0 && mode == GET_MODE (op0))
return op0;
+ if (bitpos < 0)
+ return NULL;
+
if ((bitpos % BITS_PER_UNIT) == 0
&& bitsize == GET_MODE_BITSIZE (mode1))
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 168123f813a..d4d46529f5c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2009-10-19 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/debug/vta-3.c: New test.
+
2009-10-17 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/nested_proc.adb: Rename into...
diff --git a/gcc/testsuite/gcc.dg/debug/vta-3.c b/gcc/testsuite/gcc.dg/debug/vta-3.c
new file mode 100644
index 00000000000..7d014f1bc1e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/vta-3.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+
+int
+foo (void)
+{
+ union { char e[8]; int i; } a, b;
+ char *c, *d;
+ unsigned int i;
+ c = a.e;
+ d = &b.e[sizeof (int) - 1];
+ for (i = 0; i < sizeof (int); i++)
+ {
+ *d = *c++;
+ --d;
+ }
+ return b.i;
+}
OpenPOWER on IntegriCloud