re PR middle-end/21858 (ICE in compare_values, at tree-vrp.c:301)

2005-06-03  Richard Guenther  <rguenth@gcc.gnu.org>

	PR middle-end/21858
	* fold-const.c (fold_binary): Fix type mismatches in folding
	of comparisons.

	* gcc.dg/pr21858.c: New testcase.

From-SVN: r100539
This commit is contained in:
Richard Guenther 2005-06-03 15:15:46 +00:00 committed by Richard Biener
parent ff5c4582e0
commit 548e34cdb7
4 changed files with 34 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2005-06-03 Richard Guenther <rguenth@gcc.gnu.org>
PR middle-end/21858
* fold-const.c (fold_binary): Fix type mismatches in folding
of comparisons.
2005-06-03 Kazu Hirata <kazu@codesourcery.com>
* cgraph.c, cgraphunit.c, config/mips/mips.c: Fix comment

View File

@ -9303,12 +9303,16 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
switch (code)
{
case GE_EXPR:
arg1 = const_binop (MINUS_EXPR, arg1, integer_one_node, 0);
return fold_build2 (GT_EXPR, type, arg0, arg1);
arg1 = const_binop (MINUS_EXPR, arg1,
build_int_cst (TREE_TYPE (arg1), 1), 0);
return fold_build2 (GT_EXPR, type, arg0,
fold_convert (TREE_TYPE (arg0), arg1));
case LT_EXPR:
arg1 = const_binop (MINUS_EXPR, arg1, integer_one_node, 0);
return fold_build2 (LE_EXPR, type, arg0, arg1);
arg1 = const_binop (MINUS_EXPR, arg1,
build_int_cst (TREE_TYPE (arg1), 1), 0);
return fold_build2 (LE_EXPR, type, arg0,
fold_convert (TREE_TYPE (arg0), arg1));
default:
break;

View File

@ -1,3 +1,8 @@
2005-06-03 Richard Guenther <rguenth@gcc.gnu.org>
PR middle-end/21858
* gcc.dg/pr21858.c: New testcase.
2005-06-03 Paolo Bonzini <bonzini@gnu.org>
PR tree-optimization/21292

View File

@ -0,0 +1,15 @@
/* Fold used to create a GT_EXPR of pointer vs. integer types,
which caused us to ICE in VRP. */
/* { dg-do compile } */
/* { dg-options "-Os -w" } */
unsigned int dsdblm_GetBlockAddress();
void error_LocalAssert(void);
int dsdblm_CreateBlock(unsigned int address)
{
address = dsdblm_GetBlockAddress();
if (address >= (void*)0x00020000)
error_LocalAssert();
return address;
}