<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Jul 14, 2011, at 4:57 PM, Richard Trieu wrote:</div><blockquote type="cite"><div class="gmail_quote">On Thu, Jul 14, 2011 at 1:39 PM, John McCall <span dir="ltr"><<a href="mailto:rjmccall@apple.com">rjmccall@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div style="word-wrap:break-word"><div><div></div><div class="h5"><div><div>On Jul 14, 2011, at 1:32 PM, Richard Trieu wrote:</div><blockquote type="cite"><div class="gmail_quote">On Thu, Jul 14, 2011 at 1:11 PM, John McCall <span dir="ltr"><<a href="mailto:rjmccall@apple.com" target="_blank">rjmccall@apple.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex">
<div style="word-wrap:break-word"><div><div><div><div>On Jul 14, 2011, at 12:58 PM, Richard Trieu wrote:</div><blockquote type="cite"><div class="gmail_quote">On Wed, Jul 13, 2011 at 10:08 PM, John McCall <span dir="ltr"><<a href="mailto:rjmccall@apple.com" target="_blank">rjmccall@apple.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div></div><div><br>
On Jul 13, 2011, at 5:15 PM, Richard Trieu wrote:<br>
<br>
> For code such as:<br>
><br>
> void f(unsigned int u, int i) {<br>
>   (void) (true ? u : i);<br>
> }<br>
><br>
> When run with -Wsign-compare, Clang gives the following warning.<br>
><br>
> warning: operands of ? are integers of different signs:<br>
>       'unsigned int' and 'int' [-Wsign-compare]<br>
>   (void) (true ? u : i);<br>
>                ^ ~   ~<br>
><br>
> 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?<br>



<br>
</div></div>gcc's -Wsign-compare does warn on this code if you make the condition non-trivial.  Clang is just missing that special case.<br>
<font color="#888888"><br>
John.<br>
</font></blockquote></div><br><div>Could you give an example of a non-trivial case that gcc does warn on?  I've tried:</div><div><br></div><div><div>void f(bool b, unsigned int u, int i) {</div><div>  (void) (b ? u : i);</div>


<div>}</div></div><div><br></div><div><div>void f(unsigned int u, int i) {</div><div>  (void) ((i > 5) ? u : i);</div><div>}</div></div><div><br></div><div>but both don't give an warning from gcc -Wsign-compare.  Clang's -Wsign-compare warns on both.</div>


</blockquote></div><br></div></div><div>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.</div>

<div><br></div><font color="#888888"><div>John.</div></font></div>
</blockquote></div><br><div>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?</div>
</blockquote></div><br></div></div><div>I have no problem with that;  just don't tell me it's about consistency with what GCC does. :)</div><div><br></div><font color="#888888"><div>John.</div></font></div>
</blockquote></div><br><div>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?</div>
</blockquote></div><br><div>I think that was just a hack so that it would appear under both flags.</div><div><br></div><div>John.</div></body></html>