[cfe-users] Weird optimization

Artem Alimarin artem.alimarin at gmail.com
Mon Feb 23 03:22:41 PST 2015

Hi Csaba,

Yes, thanks. nasal demons, indeed. I forgot that the signed integer 
overflow causes undefined behavior unlike unsigned integer overflow, 
which causes wrap around.

The code
     return (long)(0ul - (unsigned long)x) > 0;
does what I want.

I am impressed by clang's ability to use this undefinedness to enable 
optimizations like (-x) > 0 to x < 0, which seems to be valid for all 
valid arguments.

Best regards,

On 23-2-2015 9:44, Csaba Raduly wrote:
> cast to an unsigned type to negate
> this value to itself

-------------- next part --------------
A non-text attachment was scrubbed...
Name: artem_alimarin.vcf
Type: text/x-vcard
Size: 362 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20150223/05fc01a2/attachment.vcf>

More information about the cfe-users mailing list