[cfe-dev] -Wsign-compare warns on different signs of operands for ?:

John McCall rjmccall at apple.com
Wed Jul 13 22:08:19 PDT 2011

On Jul 13, 2011, at 5:15 PM, Richard Trieu wrote:

> For code such as:
> void f(unsigned int u, int i) {
>   (void) (true ? u : i);
> }
> When run with -Wsign-compare, Clang gives the following warning.
> warning: operands of ? are integers of different signs:
>       'unsigned int' and 'int' [-Wsign-compare]
>   (void) (true ? u : i);
>                ^ ~   ~
> Yet, no comparison is going on between u and i, so the warning seems out of place for grouping with -Wsign-compare.  I think that it would be better is this warning was pulled out of the -Wsign-compare diagnostic group.  Also, gcc's -Wsign-compare does not warn on this code, so this change will make Clang's sign compare closer to gcc's.  Does this seem reasonable?

gcc's -Wsign-compare does warn on this code if you make the condition non-trivial.  Clang is just missing that special case.


More information about the cfe-dev mailing list