re PR c/43385 (glibc regex testsuite failures)
PR c/43385 * gimplify.c (gimple_boolify): Only recurse on __builtin_expect argument if the argument is truth_value_p. * gcc.c-torture/execute/pr43385.c: New test. From-SVN: r157721
This commit is contained in:
parent
bbee5b1b4a
commit
d53c73e02c
4 changed files with 78 additions and 4 deletions
|
@ -1,3 +1,9 @@
|
|||
2010-03-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/43385
|
||||
* gimplify.c (gimple_boolify): Only recurse on __builtin_expect
|
||||
argument if the argument is truth_value_p.
|
||||
|
||||
2010-03-24 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
* config/rs6000/constraints.md: Update copyright year for my
|
||||
|
|
|
@ -2727,7 +2727,8 @@ gimple_boolify (tree expr)
|
|||
tree call = TREE_OPERAND (expr, 0);
|
||||
tree fn = get_callee_fndecl (call);
|
||||
|
||||
/* For __builtin_expect ((long) (x), y) recurse into x as well. */
|
||||
/* For __builtin_expect ((long) (x), y) recurse into x as well
|
||||
if x is truth_value_p. */
|
||||
if (fn
|
||||
&& DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
|
||||
&& DECL_FUNCTION_CODE (fn) == BUILT_IN_EXPECT
|
||||
|
@ -2739,9 +2740,12 @@ gimple_boolify (tree expr)
|
|||
if (TREE_CODE (arg) == NOP_EXPR
|
||||
&& TREE_TYPE (arg) == TREE_TYPE (call))
|
||||
arg = TREE_OPERAND (arg, 0);
|
||||
arg = gimple_boolify (arg);
|
||||
CALL_EXPR_ARG (call, 0)
|
||||
= fold_convert_loc (loc, TREE_TYPE (call), arg);
|
||||
if (truth_value_p (TREE_CODE (arg)))
|
||||
{
|
||||
arg = gimple_boolify (arg);
|
||||
CALL_EXPR_ARG (call, 0)
|
||||
= fold_convert_loc (loc, TREE_TYPE (call), arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2010-03-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/43385
|
||||
* gcc.c-torture/execute/pr43385.c: New test.
|
||||
|
||||
2010-03-24 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* gcc.dg/strncpy-fix-1.c: New test.
|
||||
|
|
59
gcc/testsuite/gcc.c-torture/execute/pr43385.c
Normal file
59
gcc/testsuite/gcc.c-torture/execute/pr43385.c
Normal file
|
@ -0,0 +1,59 @@
|
|||
/* PR c/43385 */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
int e;
|
||||
|
||||
__attribute__((noinline)) void
|
||||
foo (int x, int y)
|
||||
{
|
||||
if (__builtin_expect (x, 0) && y != 0)
|
||||
e++;
|
||||
}
|
||||
|
||||
__attribute__((noinline)) int
|
||||
bar (int x, int y)
|
||||
{
|
||||
if (__builtin_expect (x, 0) && y != 0)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int z = 0;
|
||||
asm ("" : "+r" (z));
|
||||
foo (z + 2, z + 1);
|
||||
if (e != 1)
|
||||
abort ();
|
||||
foo (z + 2, z);
|
||||
if (e != 1)
|
||||
abort ();
|
||||
foo (z + 1, z + 1);
|
||||
if (e != 2)
|
||||
abort ();
|
||||
foo (z + 1, z);
|
||||
if (e != 2)
|
||||
abort ();
|
||||
foo (z, z + 1);
|
||||
if (e != 2)
|
||||
abort ();
|
||||
foo (z, z);
|
||||
if (e != 2)
|
||||
abort ();
|
||||
if (bar (z + 2, z + 1) != 1)
|
||||
abort ();
|
||||
if (bar (z + 2, z) != 0)
|
||||
abort ();
|
||||
if (bar (z + 1, z + 1) != 1)
|
||||
abort ();
|
||||
if (bar (z + 1, z) != 0)
|
||||
abort ();
|
||||
if (bar (z, z + 1) != 0)
|
||||
abort ();
|
||||
if (bar (z, z) != 0)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue