This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/83433] missing signed integer overflow diagnostic for abs(INT_MIN)
- From: "msebor at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 18 Jan 2018 18:35:58 +0000
- Subject: [Bug c/83433] missing signed integer overflow diagnostic for abs(INT_MIN)
- Auto-submitted: auto-generated
- References: <bug-83433-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83433
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic
Status|UNCONFIRMED |NEW
Last reconfirmed| |2018-01-18
CC| |msebor at gcc dot gnu.org
Summary|Should -Wstrict-overflow=2 |missing signed integer
|produce a diagnostic for |overflow diagnostic for
|abs(INT_MIN) |abs(INT_MIN)
Ever confirmed|0 |1
--- Comment #4 from Martin Sebor <msebor at gcc dot gnu.org> ---
-Woverflow diagnoses a bare negation of INT_MIN and it would be useful to
diagnose the same negation by abs(). The folder folds abs() into the same
expression and it has all the knowledge it needs to diagnose it With that,
confirmed.
$ cat pr83433.c && gcc -O2 -S -Wall -Wextra -Wstrict-overflow=2
-fdump-tree-optimized=/dev/stdout pr83433.c
#define INT_MIN (-__INT_MAX__ - 1)
int f (void)
{
return -INT_MIN;
}
int g (void)
{
return __builtin_abs (INT_MIN);
}
pr83433.c: In function ‘f’:
pr83433.c:5:10: warning: integer overflow in expression ‘-2147483648’ of type
‘int’ results in ‘-2147483648’ [-Woverflow]
return -INT_MIN;
^
;; Function f (f, funcdef_no=0, decl_uid=1950, cgraph_uid=0, symbol_order=0)
f ()
{
<bb 2> [local count: 1073741825]:
return -2147483648;
}
;; Function g (g, funcdef_no=3, decl_uid=1953, cgraph_uid=1, symbol_order=1)
g ()
{
<bb 2> [local count: 1073741825]:
return -2147483648;
}