aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSenthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>2014-06-05 18:34:43 +0000
committerJeff Law <law@gcc.gnu.org>2014-06-05 12:34:43 -0600
commita148c4b2645a213a99d26056ed942fcec918bc42 (patch)
treef7ff5f5bcf5270f0634b04ac3d90cdcb69b10d38
parent64e13bcd19db627535a6309d9d5f7b24e5724453 (diff)
downloadgcc-a148c4b2645a213a99d26056ed942fcec918bc42.zip
gcc-a148c4b2645a213a99d26056ed942fcec918bc42.tar.gz
gcc-a148c4b2645a213a99d26056ed942fcec918bc42.tar.bz2
re PR debug/52472 (ICE: in convert_debug_memory_address, at cfgexpand.c:2491)
PR target/52472 * cfgexpand.c (expand_debug_expr): Use address space of nested TREE_TYPE for ADDR_EXPR and MEM_REF. PR target/52472 * gcc.target/avr/pr52472.c: New test. From-SVN: r211288
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgexpand.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/avr/pr52472.c16
4 files changed, 30 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 94a30d4..1e2c4f3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-05 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
+
+ PR target/52472
+ * cfgexpand.c (expand_debug_expr): Use address space of nested
+ TREE_TYPE for ADDR_EXPR and MEM_REF.
+
2014-06-05 Jeff Law <law@redhat.com>
PR tree-optimization/61289
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 8b0e466..e161cb7 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -3941,10 +3941,7 @@ expand_debug_expr (tree exp)
op0 = plus_constant (inner_mode, op0, INTVAL (op1));
}
- if (POINTER_TYPE_P (TREE_TYPE (exp)))
- as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)));
- else
- as = ADDR_SPACE_GENERIC;
+ as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0))));
op0 = convert_debug_memory_address (targetm.addr_space.address_mode (as),
op0, as);
@@ -4467,7 +4464,7 @@ expand_debug_expr (tree exp)
return NULL;
}
- as = TYPE_ADDR_SPACE (TREE_TYPE (exp));
+ as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)));
op0 = convert_debug_memory_address (mode, XEXP (op0, 0), as);
return op0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5fb5103..06b1e33 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-05 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
+
+ PR target/52472
+ * gcc.target/avr/pr52472.c: New test.
+
+
2014-06-05 Jeff Law <law@redhat.com>
PR tree-optimization/61289
diff --git a/gcc/testsuite/gcc.target/avr/pr52472.c b/gcc/testsuite/gcc.target/avr/pr52472.c
new file mode 100644
index 0000000..701cfb4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/pr52472.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-Os -g -Wno-pointer-to-int-cast" } */
+
+/* This testcase exposes PR52472. expand_debug_expr mistakenly
+ considers the address space of data to be generic, and
+ asserts that PSImode pointers aren't valid in the generic
+ address space. */
+
+extern const __memx unsigned data[][10];
+
+unsigned long ice (void)
+{
+ unsigned long addr32;
+
+ return addr32 = ((unsigned long) data);
+}