mirror of git://gcc.gnu.org/git/gcc.git
re PR sanitizer/80800 (UBSAN: yet another false positive)
PR sanitizer/80800 * fold-const.c (extract_muldiv_1) <case TRUNC_DIV_EXPR>: Add TYPE_OVERFLOW_WRAPS checks. * c-c++-common/ubsan/pr80800.c: New test. * c-c++-common/Wduplicated-branches-1.c: Adjust an expression. From-SVN: r248291
This commit is contained in:
parent
ff50231797
commit
33f8c0a14d
|
|
@ -1,3 +1,9 @@
|
||||||
|
2017-05-19 Marek Polacek <polacek@redhat.com>
|
||||||
|
|
||||||
|
PR sanitizer/80800
|
||||||
|
* fold-const.c (extract_muldiv_1) <case TRUNC_DIV_EXPR>: Add
|
||||||
|
TYPE_OVERFLOW_WRAPS checks.
|
||||||
|
|
||||||
2017-05-19 Thomas Schwinge <thomas@codesourcery.com>
|
2017-05-19 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
* tree-core.h (enum omp_clause_default_kind): Add
|
* tree-core.h (enum omp_clause_default_kind): Add
|
||||||
|
|
|
||||||
|
|
@ -6281,11 +6281,13 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type,
|
||||||
new operation. Likewise for the RHS from a MULT_EXPR. Otherwise,
|
new operation. Likewise for the RHS from a MULT_EXPR. Otherwise,
|
||||||
do something only if the second operand is a constant. */
|
do something only if the second operand is a constant. */
|
||||||
if (same_p
|
if (same_p
|
||||||
|
&& TYPE_OVERFLOW_WRAPS (ctype)
|
||||||
&& (t1 = extract_muldiv (op0, c, code, wide_type,
|
&& (t1 = extract_muldiv (op0, c, code, wide_type,
|
||||||
strict_overflow_p)) != 0)
|
strict_overflow_p)) != 0)
|
||||||
return fold_build2 (tcode, ctype, fold_convert (ctype, t1),
|
return fold_build2 (tcode, ctype, fold_convert (ctype, t1),
|
||||||
fold_convert (ctype, op1));
|
fold_convert (ctype, op1));
|
||||||
else if (tcode == MULT_EXPR && code == MULT_EXPR
|
else if (tcode == MULT_EXPR && code == MULT_EXPR
|
||||||
|
&& TYPE_OVERFLOW_WRAPS (ctype)
|
||||||
&& (t1 = extract_muldiv (op1, c, code, wide_type,
|
&& (t1 = extract_muldiv (op1, c, code, wide_type,
|
||||||
strict_overflow_p)) != 0)
|
strict_overflow_p)) != 0)
|
||||||
return fold_build2 (tcode, ctype, fold_convert (ctype, op0),
|
return fold_build2 (tcode, ctype, fold_convert (ctype, op0),
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
2017-05-19 Marek Polacek <polacek@redhat.com>
|
||||||
|
|
||||||
|
PR sanitizer/80800
|
||||||
|
* c-c++-common/ubsan/pr80800.c: New test.
|
||||||
|
* c-c++-common/Wduplicated-branches-1.c: Adjust an expression.
|
||||||
|
|
||||||
2017-05-19 Thomas Schwinge <thomas@codesourcery.com>
|
2017-05-19 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
* c-c++-common/goacc/default-1.c: Update.
|
* c-c++-common/goacc/default-1.c: Update.
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ f (int i, int *p)
|
||||||
if (i == 8) /* { dg-warning "this condition has identical branches" } */
|
if (i == 8) /* { dg-warning "this condition has identical branches" } */
|
||||||
return i * 8 * i * 8;
|
return i * 8 * i * 8;
|
||||||
else
|
else
|
||||||
return 8 * i * 8 * i;
|
return i * 8 * i * 8;
|
||||||
|
|
||||||
|
|
||||||
if (i == 9) /* { dg-warning "this condition has identical branches" } */
|
if (i == 9) /* { dg-warning "this condition has identical branches" } */
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
/* PR sanitizer/80800 */
|
||||||
|
/* { dg-do run } */
|
||||||
|
/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */
|
||||||
|
|
||||||
|
int n = 20000;
|
||||||
|
int z = 0;
|
||||||
|
|
||||||
|
int
|
||||||
|
fn1 (void)
|
||||||
|
{
|
||||||
|
return (n * 10000 * z) * 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fn2 (void)
|
||||||
|
{
|
||||||
|
return (10000 * n * z) * 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
fn1 ();
|
||||||
|
fn2 ();
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue