[cfe-dev] -Wsign-compare warns on different signs of operands for ?:
Richard Trieu
rtrieu at google.com
Thu Jul 14 16:57:57 PDT 2011
On Thu, Jul 14, 2011 at 1:39 PM, John McCall <rjmccall at apple.com> wrote:
> On Jul 14, 2011, at 1:32 PM, Richard Trieu wrote:
>
> On Thu, Jul 14, 2011 at 1:11 PM, John McCall <rjmccall at apple.com> wrote:
>>
>> 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.
>>
>
> Sorry for the confusion. If we don't care about consistency in this case,
> can we remove this warning so that our -Wsign-compare will only be about
> signed comparisons?
>
>
> I have no problem with that; just don't tell me it's about consistency
> with what GCC does. :)
>
> John.
>
Originally, I was going to move this warning (operands of different signs)
out to its own flag. However, a similar warning (? operand conversion)
exists in -Wsign-conversion which will warn on the same case as this
warning (operands of different signs) does. Since this case is covered
under (? operand conversion), should this warning (operands of different
signs) be completely removed from Clang?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110714/2a3d75c7/attachment.html>
More information about the cfe-dev
mailing list