This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[Patch]: Fix ICE by expand_expr_addr_expr_1
- From: Tristan Gingold <gingold at adacore dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 15 May 2012 10:59:53 +0200
- Subject: [Patch]: Fix ICE by expand_expr_addr_expr_1
Hi,
I got ICE in plus_constant (after the assertions were added) due to expand_expr_addr_expr_1 during build on ia64/Openvms.
This function is called with TMODE == SImode (32 bit pointers) but EXP designating a variable on the frame (whose register is DImode).
Hence the ICE.
Fixed by the following patch.
No regression on x86-64 GNU/Linux.
Ok for trunk ?
Tristan.
2012-05-15 Tristan Gingold <gingold@adacore.com>
* expr.c (expand_expr_addr_expr_1): Call
convert_memory_address_addr_space.
diff --git a/gcc/expr.c b/gcc/expr.c
index 3edb4a2..1b0ad8d 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -7600,6 +7600,7 @@ expand_expr_addr_expr_1 (tree exp, rtx target, enum machin
TYPE_USER_ALIGN (TREE_TYPE (inner)) = 1;
}
result = expand_expr_addr_expr_1 (inner, subtarget, tmode, modifier, as);
+ result = convert_memory_address_addr_space (tmode, result, as);
if (offset)
{