Commit 8b5546d6 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/55832 (ICE in fold_convert_loc, at fold-const.c:1967)

	PR tree-optimization/55832
	* fold-const.c (fold_binary_loc): For ABS_EXPR<x> >= 0 and
	ABS_EXPR<x> < 0 folding use constant_boolean_node instead of
	integer_{one,zero}_node.

	* gcc.c-torture/compile/pr55832.c: New test.

Co-Authored-By: Marc Glisse <marc.glisse@inria.fr>

From-SVN: r194836
parent 8ab1d2e9
2013-01-03 Jakub Jelinek <jakub@redhat.com> 2013-01-03 Jakub Jelinek <jakub@redhat.com>
Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/55832
* fold-const.c (fold_binary_loc): For ABS_EXPR<x> >= 0 and
ABS_EXPR<x> < 0 folding use constant_boolean_node instead of
integer_{one,zero}_node.
2013-01-03 Jakub Jelinek <jakub@redhat.com>
PR debug/54402 PR debug/54402
* params.def (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE): New param. * params.def (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE): New param.
/* Fold a constant sub-tree into a single node for C-compiler /* Fold a constant sub-tree into a single node for C-compiler
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012 Free Software Foundation, Inc. 2012, 2013 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -13519,7 +13519,9 @@ fold_binary_loc (location_t loc, ...@@ -13519,7 +13519,9 @@ fold_binary_loc (location_t loc,
"when simplifying comparison of " "when simplifying comparison of "
"absolute value and zero"), "absolute value and zero"),
WARN_STRICT_OVERFLOW_CONDITIONAL); WARN_STRICT_OVERFLOW_CONDITIONAL);
return omit_one_operand_loc (loc, type, integer_one_node, arg0); return omit_one_operand_loc (loc, type,
constant_boolean_node (true, type),
arg0);
} }
/* Convert ABS_EXPR<x> < 0 to false. */ /* Convert ABS_EXPR<x> < 0 to false. */
...@@ -13533,7 +13535,9 @@ fold_binary_loc (location_t loc, ...@@ -13533,7 +13535,9 @@ fold_binary_loc (location_t loc,
"when simplifying comparison of " "when simplifying comparison of "
"absolute value and zero"), "absolute value and zero"),
WARN_STRICT_OVERFLOW_CONDITIONAL); WARN_STRICT_OVERFLOW_CONDITIONAL);
return omit_one_operand_loc (loc, type, integer_zero_node, arg0); return omit_one_operand_loc (loc, type,
constant_boolean_node (false, type),
arg0);
} }
/* If X is unsigned, convert X < (1 << Y) into X >> Y == 0 /* If X is unsigned, convert X < (1 << Y) into X >> Y == 0
......
2013-01-03 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/55832
* gcc.c-torture/compile/pr55832.c: New test.
2013-01-02 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> 2013-01-02 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* gcc.dg/pr55430.c: Define MAP_FAILED if not defined. * gcc.dg/pr55430.c: Define MAP_FAILED if not defined.
......
/* PR tree-optimization/55832 */
int g, b;
void
foo (void)
{
union U { int i; unsigned short s; } a = { 0 };
unsigned char c;
unsigned short d = 0, *p = &a.s;
if (g)
a.i--;
if (b && a.i < (d = 1))
return;
for (; a.i < 15; a.i++)
b |= d <= c;
if (!*p)
g = 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