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

Samuel Crow samuraileumas at yahoo.com
Thu Jul 14 13:34:16 PDT 2011




>________________________________
>From: John McCall <rjmccall at apple.com>
>To: Richard Trieu <rtrieu at google.com>
>Cc: cfe-dev at cs.uiuc.edu
>Sent: Thursday, July 14, 2011 3:11 PM
>Subject: Re: [cfe-dev] -Wsign-compare warns on different signs of operands for ?:
>
>
>
>
>On Jul 14, 2011, at 12:58 PM, Richard Trieu wrote:
>
>On Wed, Jul 13, 2011 at 10:08 PM, John McCall <rjmccall at apple.com> wrote:
>>
>>
>>>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.
>>>
>>>John.
>>>
>>
>>Could you give an example of a non-trivial case that gcc does warn on?  I've tried:
>>
>>
>>void f(bool b, unsigned int u, int i) {
>>  (void) (b ? u : i);
>>}
>>
>>
>>void f(unsigned int u, int i) {
>>  (void) ((i > 5) ? u : i);
>>}
>>
>>
>>but both don't give an warning from gcc -Wsign-compare.  Clang's -Wsign-compare warns on both.
>
>Aha.  From 'bool' I take it that you're talking about C++.  You're correct that G++'s -Wsign-compare does not warn about conditional operators.  GCC's does.  In clang, we decided that that inconsistency wasn't worth emulating.
>
>
>John.

Hi John,

Either that, or he's used #inlcude <stdbool.h> from C99.  I've used that in C before.  That may be beside the point, however.

--Sam




More information about the cfe-dev mailing list