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:
parent
ff5c4582e0
commit
548e34cdb7
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
15
gcc/testsuite/gcc.dg/pr21858.c
Normal file
15
gcc/testsuite/gcc.dg/pr21858.c
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user