re PR target/13889 (Assignment of an int to an int of different size in a struct gives ICE)

PR target/13889
	* cse.c (fold_rtx): Avoid substituting constants into unary
	convertion operations.

	* gcc.c-torture/compile/pr13889.c: New test case.

From-SVN: r79762
This commit is contained in:
Roger Sayle 2004-03-20 23:03:03 +00:00 committed by Roger Sayle
parent 05fe5c6724
commit 8cce3d04c4
4 changed files with 35 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2004-03-20 Roger Sayle <roger@eyesopen.com>
PR target/13889
* cse.c (fold_rtx): Avoid substituting constants into unary
convertion operations.
2004-03-20 Kazu Hirata <kazu@cs.umass.edu>
* fold-const.c (fold): Replace "expr" with "t".

View File

@ -3662,6 +3662,23 @@ fold_rtx (rtx x, rtx insn)
|| (new_cost == old_cost && CONSTANT_P (XEXP (x, i))))
break;
/* It's not safe to substitute the operand of a conversion
operator with a constant, as the conversion's identity
depends upon the mode of it's operand. This optimization
is handled by the call to simplify_unary_operation. */
if (GET_RTX_CLASS (code) == RTX_UNARY
&& GET_MODE (replacements[j]) != mode_arg0
&& (code == ZERO_EXTEND
|| code == SIGN_EXTEND
|| code == TRUNCATE
|| code == FLOAT_TRUNCATE
|| code == FLOAT_EXTEND
|| code == FLOAT
|| code == FIX
|| code == UNSIGNED_FLOAT
|| code == UNSIGNED_FIX))
continue;
if (validate_change (insn, &XEXP (x, i), replacements[j], 0))
break;

View File

@ -1,3 +1,8 @@
2004-03-20 Roger Sayle <roger@eyesopen.com>
PR target/13889
* gcc.c-torture/compile/pr13889.c: New test case.
2004-03-20 Joseph S. Myers <jsm@polyomino.org.uk>
PR c/14635

View File

@ -0,0 +1,7 @@
/* PR target/13889 */
struct { long long a; } *p;
void initNetFlowFunct(void) {
unsigned int b = (unsigned int)-1;
p->a = b;
}