c/95141 - fix bogus integer overflow warning
authorRichard Biener <rguenther@suse.de>
Tue, 19 May 2020 05:58:33 +0000 (07:58 +0200)
committerRichard Biener <rguenther@suse.de>
Wed, 20 May 2020 07:39:49 +0000 (09:39 +0200)
commit4a88caf21a0a85129f6c985ca13ba3eb54ff5366
treec76fd0b16bd0bf84e405c298ce7617b1e357d8d6
parentdfa4fcdba374ed44d4aa1a22b2738f3f5c5b37af
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.
gcc/ChangeLog
gcc/c/c-fold.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr95141.c [new file with mode: 0644]