backport: re PR tree-optimization/56250 (Wrong constant folding on unsigned int)
Backported from mainline 2013-02-08 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/56250 * fold-const.c (extract_muldiv_1) <case NEGATE_EXPR>: Don't optimize if type is unsigned and code isn't MULT_EXPR. * gcc.c-torture/execute/pr56250.c: New test. From-SVN: r196147
This commit is contained in:
parent
953142867a
commit
11ba2b86b5
|
@ -1,6 +1,12 @@
|
|||
2013-02-19 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Backported from mainline
|
||||
2013-02-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/56250
|
||||
* fold-const.c (extract_muldiv_1) <case NEGATE_EXPR>: Don't optimize
|
||||
if type is unsigned and code isn't MULT_EXPR.
|
||||
|
||||
2013-02-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/56217
|
||||
|
|
|
@ -5716,6 +5716,11 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type,
|
|||
break;
|
||||
/* FALLTHROUGH */
|
||||
case NEGATE_EXPR:
|
||||
/* For division and modulus, type can't be unsigned, as e.g.
|
||||
(-(x / 2U)) / 2U isn't equal to -((x / 2U) / 2U) for x >= 2.
|
||||
For signed types, even with wrapping overflow, this is fine. */
|
||||
if (code != MULT_EXPR && TYPE_UNSIGNED (type))
|
||||
break;
|
||||
if ((t1 = extract_muldiv (op0, c, code, wide_type, strict_overflow_p))
|
||||
!= 0)
|
||||
return fold_build1 (tcode, ctype, fold_convert (ctype, t1));
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
2013-02-19 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Backported from mainline
|
||||
2013-02-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/56250
|
||||
* gcc.c-torture/execute/pr56250.c: New test.
|
||||
|
||||
2013-02-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/56241
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
/* PR tree-optimization/56250 */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
unsigned int x = 2;
|
||||
unsigned int y = (0U - x / 2) / 2;
|
||||
if (-1U / x != y)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue