From: Jeff Law Date: Tue, 11 Feb 2014 13:58:46 +0000 (-0700) Subject: re PR middle-end/54041 (-mshort ICE in convert_memory_address_addr_space, at explow... X-Git-Tag: releases/gcc-4.9.0~966 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cddddfff5b66e27088a746554aaa6f6315022ce8;p=thirdparty%2Fgcc.git re PR middle-end/54041 (-mshort ICE in convert_memory_address_addr_space, at explow.c:327) PR middle-end/54041 * expr.c (expand_expr_addr_expr_1): Handle expand_expr returning an object with an undesirable mode. PR middle-end/54041 * gcc.target/m68k/pr54041.c: New test. From-SVN: r207689 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6458a9b5188e..b2d0f8370f55 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-02-11 Jeff Law + + PR middle-end/54041 + * expr.c (expand_expr_addr_expr_1): Handle expand_expr returning an + object with an undesirable mode. + 2014-02-11 Rainer Orth PR libgomp/60107 diff --git a/gcc/expr.c b/gcc/expr.c index c1f67f4e4a04..f6708da20d9e 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -7708,6 +7708,11 @@ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode, modifier == EXPAND_INITIALIZER ? EXPAND_INITIALIZER : EXPAND_NORMAL); + /* expand_expr is allowed to return an object in a mode other + than TMODE. If it did, we need to convert. */ + if (GET_MODE (tmp) != VOIDmode && tmode != GET_MODE (tmp)) + tmp = convert_modes (tmode, GET_MODE (tmp), + tmp, TYPE_UNSIGNED (TREE_TYPE (offset))); result = convert_memory_address_addr_space (tmode, result, as); tmp = convert_memory_address_addr_space (tmode, tmp, as); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ae66ff54c138..2333347dee05 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-02-11 Jeff Law + + PR middle-end/54041 + * gcc.target/m68k/pr54041.c: New test. + 2014-02-11 Jakub Jelinek PR target/59927 diff --git a/gcc/testsuite/gcc.target/m68k/pr54041.c b/gcc/testsuite/gcc.target/m68k/pr54041.c new file mode 100644 index 000000000000..645cb6d2380d --- /dev/null +++ b/gcc/testsuite/gcc.target/m68k/pr54041.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O -mshort" } */ + +extern int r[]; + +int *fn(int i) +{ + return &r[i]; +} +