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
This commit is contained in:
Jakub Jelinek 2013-01-03 10:02:41 +01:00 committed by Jakub Jelinek
parent 8ab1d2e90f
commit 8b5546d674
4 changed files with 43 additions and 3 deletions

View File

@ -1,3 +1,11 @@
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

View File

@ -1,7 +1,7 @@
/* Fold a constant sub-tree into a single node for C-compiler
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
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.
@ -13519,7 +13519,9 @@ fold_binary_loc (location_t loc,
"when simplifying comparison of "
"absolute value and zero"),
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. */
@ -13533,7 +13535,9 @@ fold_binary_loc (location_t loc,
"when simplifying comparison of "
"absolute value and zero"),
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

View File

@ -1,3 +1,8 @@
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>
* gcc.dg/pr55430.c: Define MAP_FAILED if not defined.

View File

@ -0,0 +1,23 @@
/* 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;
}