Commit b7785654 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/38422 (union/bitfield causes cc1/cc1plus to run out of memory.)

	PR middle-end/38422
	* fold-const.c (fold_unary) <CASE_CONVERT>: Don't convert MULT_EXPR
	operands to mult_type if it isn't narrower than op0's type.

	* gcc.c-torture/execute/pr38422.c: New test.

From-SVN: r142521
parent fb7ca5a7
2008-12-06 Jakub Jelinek <jakub@redhat.com>
PR middle-end/38422
* fold-const.c (fold_unary) <CASE_CONVERT>: Don't convert MULT_EXPR
operands to mult_type if it isn't narrower than op0's type.
2008-12-06 Jan Hubicka <jh@suse.cz>
Jakub Jelinek <jakub@redhat.com>
......@@ -8351,11 +8351,16 @@ fold_unary (enum tree_code code, tree type, tree op0)
mult_type = type;
else
mult_type = unsigned_type_for (type);
tem = fold_build2 (MULT_EXPR, mult_type,
fold_convert (mult_type, TREE_OPERAND (op0, 0)),
fold_convert (mult_type, TREE_OPERAND (op0, 1)));
return fold_convert (type, tem);
if (TYPE_PRECISION (mult_type) < TYPE_PRECISION (TREE_TYPE (op0)))
{
tem = fold_build2 (MULT_EXPR, mult_type,
fold_convert (mult_type,
TREE_OPERAND (op0, 0)),
fold_convert (mult_type,
TREE_OPERAND (op0, 1)));
return fold_convert (type, tem);
}
}
tem = fold_convert_const (code, type, op0);
......
2008-12-06 Jakub Jelinek <jakub@redhat.com>
PR middle-end/38422
* gcc.c-torture/execute/pr38422.c: New test.
2008-12-06 Janus Weil <janus@gcc.gnu.org>
PR fortran/38415
......
/* PR middle-end/38422 */
extern void abort (void);
struct S
{
int s : (sizeof (int) * __CHAR_BIT__ - 2);
} s;
void
foo (void)
{
s.s *= 2;
}
int
main ()
{
s.s = 24;
foo ();
if (s.s != 48)
abort ();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment