c/95141 - fix bogus integer overflow warning
This fixes an integer overflow warning that ultimatively happens because of TREE_OVERFLOW propagating through transforms and the existing guard against this, 375 if (TREE_OVERFLOW_P (ret) 376 && !TREE_OVERFLOW_P (op0) 377 && !TREE_OVERFLOW_P (op1)) 378 overflow_warning (EXPR_LOC_OR_LOC (expr, input_location, being insufficient. Rather than trying to use sth like walk_tree to exhaustively walk operands (with the possibility of introducing quadraticness when folding larger expressions recursively) the following amends the above with an ad-hoc test for a binary op0 with a possibly constant op1. 2020-05-30 Richard Biener <rguenther@suse.de> PR c/95141 gcc/c * c-fold.c (c_fully_fold_internal): Enhance guard on overflow_warning. gcc/testsuite * gcc.dg/pr95141.c: New testcase.
This commit is contained in:
parent
dfa4fcdba3
commit
4a88caf21a
|
@ -1,3 +1,9 @@
|
|||
2020-05-30 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR c/95141
|
||||
* c-fold.c (c_fully_fold_internal): Enhance guard on
|
||||
overflow_warning.
|
||||
|
||||
2020-05-20 Kito Cheng <kito.cheng@sifive.com>
|
||||
|
||||
PR target/90811
|
||||
|
|
|
@ -374,6 +374,7 @@ c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
|
|||
ret = fold (expr);
|
||||
if (TREE_OVERFLOW_P (ret)
|
||||
&& !TREE_OVERFLOW_P (op0)
|
||||
&& !(BINARY_CLASS_P (op0) && TREE_OVERFLOW_P (TREE_OPERAND (op0, 1)))
|
||||
&& !TREE_OVERFLOW_P (op1))
|
||||
overflow_warning (EXPR_LOC_OR_LOC (expr, input_location), ret, expr);
|
||||
if (code == LSHIFT_EXPR
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2020-05-30 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR c/95141
|
||||
* gcc.dg/pr95141.c: New testcase.
|
||||
|
||||
2020-05-19 Alex Coplan <alex.coplan@arm.com>
|
||||
|
||||
PR target/94591
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
uint64_t test(uint8_t IA1)
|
||||
{
|
||||
return (uint8_t)(IA1 & 158) & 1UL; /* { dg-bogus "integer overflow" } */
|
||||
}
|
Loading…
Reference in New Issue