From a148c4b2645a213a99d26056ed942fcec918bc42 Mon Sep 17 00:00:00 2001 From: Senthil Kumar Selvaraj Date: Thu, 5 Jun 2014 18:34:43 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/cfgexpand.c | 7 ++----- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.target/avr/pr52472.c | 16 ++++++++++++++++ 4 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/avr/pr52472.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 94a30d45e8ba..1e2c4f3a6175 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-05 Senthil Kumar Selvaraj + + 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 PR tree-optimization/61289 diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 8b0e466a52f2..e161cb76f2e6 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 5fb5103deb85..06b1e334090c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-06-05 Senthil Kumar Selvaraj + + PR target/52472 + * gcc.target/avr/pr52472.c: New test. + + 2014-06-05 Jeff Law 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 000000000000..701cfb42a253 --- /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); +} -- 2.47.3