<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div>Hi Tim,</div><div>  Firstly, thanks for your reply.</div><div>I agree on your idea about integer overflow in this test.</div><div>But, in fact, the content of this test is the same to gcc\testsuite\gcc.c-torture\execute\920612-1.c.</div><div>gcc can handle it correctly.</div><div>Moreover, when I compile this test using clang with optlevel O0 instead of O2.</div><div>Its execution result is the same to gcc.</div><div>That to say, for this test, clang with optlevel O2 execution result is different from O0.</div><div>Is it reasonable?</div><div><span class="Apple-tab-span" style="white-space:pre">    </span></div><div>Thanks a lot.</div><div>-Haishan</div><br><br><pre>At 2013-11-28 22:02:51,"Tim Northover" <t.p.northover@gmail.com> wrote:
>Hi Haishan,
>
>>   int foo(int j) {
>>     return ++j > 0;
>>   }
>>   int main() {
>>     if (foo(((~0U)>>1)))
>>       abort();
>>     exit(0)
>>   }
>
>This test contains undefined behaviour, and you can never rely on the
>compiler doing anything predictable with that. Specifically, the
>result of casting (~0U) >> 1 to an int is almost certainly INT_MAX and
>when foo increments it integer overflow occurs, which is undefined.
>
>Cheers.
>
>Tim.
</pre></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>