This patch fixes almost all false positives in PR43772. The case not fixed is:
intmax_t i = (whatever);
if (INT_MAX < i && i <= LONG_MAX)
print ("i is in 'long' but not 'int' ran")
where we warn if INT_MAX = LONG_MAX < INTMAX_MAX. Perhaps with the
macro location code, we could now tell that the constants INT_MAX and
LONG_MAX come from different macro expansions in system headers, and
avoid warning in this specific case, but that would be better done in
a follow-up patch. Dodji, is that possible? how could it be done?
Bootstrapped and regression tested.
OK?
2012-05-05 Manuel López-Ibáñez <[email protected]>
PR c/43772
c-family/
* c-common.c (warn_logical_operator): Do not warn if either side
is already true or false.
testsuite/
* c-c++-common/pr43772.c: New.
fix-pr43772.diff
Description: Binary data
