re PR middle-end/89412 (gcc ICE in simplify_subreg, at simplify-rtx.c:6273 on i686-linux-gnu)
PR middle-end/89412 * expr.c (expand_assignment): If result is a MEM, use change_address instead of simplify_gen_subreg. * gcc.c-torture/compile/pr89412.c: New test. From-SVN: r269057
This commit is contained in:
parent
cd56fb7957
commit
37d7267f80
|
@ -1,3 +1,9 @@
|
|||
2019-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/89412
|
||||
* expr.c (expand_assignment): If result is a MEM, use change_address
|
||||
instead of simplify_gen_subreg.
|
||||
|
||||
2019-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||
David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
|
|
10
gcc/expr.c
10
gcc/expr.c
|
@ -5211,9 +5211,13 @@ expand_assignment (tree to, tree from, bool nontemporal)
|
|||
}
|
||||
else
|
||||
{
|
||||
rtx from_rtx
|
||||
= simplify_gen_subreg (to_mode, result,
|
||||
TYPE_MODE (TREE_TYPE (from)), 0);
|
||||
rtx from_rtx;
|
||||
if (MEM_P (result))
|
||||
from_rtx = change_address (result, to_mode, NULL_RTX);
|
||||
else
|
||||
from_rtx
|
||||
= simplify_gen_subreg (to_mode, result,
|
||||
TYPE_MODE (TREE_TYPE (from)), 0);
|
||||
if (from_rtx)
|
||||
{
|
||||
emit_move_insn (XEXP (to_rtx, 0),
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2019-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/89412
|
||||
* gcc.c-torture/compile/pr89412.c: New test.
|
||||
|
||||
2019-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||
David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
/* PR middle-end/89412 */
|
||||
|
||||
struct S { double a, b; } d;
|
||||
int e;
|
||||
double f;
|
||||
|
||||
void
|
||||
foo ()
|
||||
{
|
||||
_Complex double h;
|
||||
while (e)
|
||||
{
|
||||
f = h;
|
||||
*(struct S *) &h = d;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue