On 8/14/18, Joseph Myers <jos...@codesourcery.com> wrote: > On Tue, 14 Aug 2018, Martin Jambor wrote: > >> when you try compiling a call to function abs and provide an unsigned >> int in the argument in C++, you will get an error about ambiguous >> overload. In C however, it will pass without silently. The following >> patch adds a warning for these cases, because I think it is likely that >> such code does not do what the author intended. > > abs of unsigned short (promoted to int) seems harmless; I don't see any > tests to make sure it doesn't warn. Really the issue seems more like abs > (or labs / llabs / imaxabs) of an argument whose value might be changed by > the conversion to int. Except that's more like a subset of -Wconversion, > and highly likely to have false positives (for a long argument that is > actually always in the range of int), so maybe a restriction to unsigned > arguments makes sense for this warning, but should still only be for > unsigned arguments at least as wide as the argument type of the abs > function in question. > >> + else if (DECL_FUNCTION_CODE (expr.value) == BUILT_IN_ABS > > This looks like it would only handle abs, not labs / llabs / imaxabs. > >> +@code{<} or @code{>=}. When compiling C, also warn when calculating >> +an absolute value from an unsigned type. This warning is also enabled > > But this would suggest any absolute value function, not just abs.
clang has a -Wabsolute-value warning flag that might be looking at here for comparison; see bug 63886 for an example: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63886 > > -- > Joseph S. Myers > jos...@codesourcery.com >