re PR c/35526 (ICE on memcpy)

PR middle-end/35526
	* expr.c (store_expr): Call emit_block_move if the mode
	of "temp" RTX is BLKmode.

testsuite/ChangeLog:

	PR middle-end/35526
	* g++.dg/torture/pr35526.C: New test.

From-SVN: r133106
This commit is contained in:
Uros Bizjak 2008-03-11 13:47:29 +01:00
parent 2d3ca8b721
commit ab669042dc
4 changed files with 34 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2008-03-11 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/35526
* expr.c (store_expr): Call emit_block_move if the mode
of "temp" RTX is BLKmode.
2008-03-11 Andrew Pinski <andrew_pinski@playstation.sony.com>
Richard Guenther <rguenther@suse.de>

View File

@ -4654,7 +4654,8 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal)
temp = convert_to_mode (GET_MODE (target), temp, unsignedp);
emit_move_insn (target, temp);
}
else if (GET_MODE (target) == BLKmode)
else if (GET_MODE (target) == BLKmode
|| GET_MODE (temp) == BLKmode)
emit_block_move (target, temp, expr_size (exp),
(call_param_p
? BLOCK_OP_CALL_PARM

View File

@ -1,3 +1,8 @@
2008-03-11 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/35526
* g++.dg/torture/pr35526.C: New test.
2008-03-10 Jakub Jelinek <jakub@redhat.com>
PR c++/35328

View File

@ -0,0 +1,18 @@
/* { dg-do compile } */
extern void *memcpy (void *__dest, __const void *__src, __SIZE_TYPE__ __n);
char internal_crash_read_ip[] = { 0xb8 };
struct u_internal_crash_read_t
{
char ip[sizeof (internal_crash_read_ip)];
}
u_internal_crash_read;
void
gSignalHandler (int psignalNr, int pinfo, int pctx)
{
memcpy (u_internal_crash_read.ip, internal_crash_read_ip,
sizeof (internal_crash_read_ip));
}