re PR c/61741 (wrong code with -fno-strict-overflow)
2014-07-09 Richard Biener <rguenther@suse.de> PR c-family/61741 * c-gimplify.c (c_gimplify_expr): Gimplify self-modify expressions using unsigned arithmetic if overflow does not wrap instead of if overflow is undefined. * c-c++-common/torture/pr61741.c: New testcase. From-SVN: r212400
This commit is contained in:
parent
bde56a1d4d
commit
63dfbb9505
4 changed files with 35 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
|||
2014-07-09 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR c-family/61741
|
||||
* c-gimplify.c (c_gimplify_expr): Gimplify self-modify expressions
|
||||
using unsigned arithmetic if overflow does not wrap instead of
|
||||
if overflow is undefined.
|
||||
|
||||
2014-07-06 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/6940
|
||||
|
|
|
@ -240,9 +240,7 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED,
|
|||
tree type = TREE_TYPE (TREE_OPERAND (*expr_p, 0));
|
||||
if (INTEGRAL_TYPE_P (type) && c_promoting_integer_type_p (type))
|
||||
{
|
||||
if (TYPE_OVERFLOW_UNDEFINED (type)
|
||||
|| ((flag_sanitize & SANITIZE_SI_OVERFLOW)
|
||||
&& !TYPE_OVERFLOW_WRAPS (type)))
|
||||
if (!TYPE_OVERFLOW_WRAPS (type))
|
||||
type = unsigned_type_for (type);
|
||||
return gimplify_self_mod_expr (expr_p, pre_p, post_p, 1, type);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-07-09 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR c-family/61741
|
||||
* c-c++-common/torture/pr61741.c: New testcase.
|
||||
|
||||
2014-07-09 Pat Haugen <pthaugen@us.ibm.com>
|
||||
|
||||
* lib/target-supports.exp
|
||||
|
|
22
gcc/testsuite/c-c++-common/torture/pr61741.c
Normal file
22
gcc/testsuite/c-c++-common/torture/pr61741.c
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* { dg-do run } */
|
||||
|
||||
int a = 1, b;
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
char c = 0;
|
||||
for (; a; a--)
|
||||
for (; c >= 0; c++);
|
||||
if (!c)
|
||||
b = 1;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
foo ();
|
||||
if (b != 0)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue