Hi!

>     But I'm not sure how it's supposed to work. Is it correct that on GCC
>     (and clang, presumably, since it defines __GNUC__) accept long bitshifts
>     and do the right thing with argument like 138? Is it documented
>     anywhere? Or is there a bug here?
> 
> 
> This is a bug, yes. Oversize shifts are UB, and the only thing
> preventing this from being miscompiled is the fact that the compiler
> cannot figure out that the shift is oversized.
> 
> I'm not sure why this code was introduced, as the compiler should
> generally be able to eliminate this masking if it is unnecessary. See
> for example these isel patterns in clang:
> https://github.com/llvm-mirror/llvm/blob/46b09a3368af1be5005d31fd1d70bad08df352f9/lib/Target/X86/X86InstrCompiler.td#L1753

This was introduced by Dmitry in
https://github.com/php/php-src/commit/4ad9cf460595efd1151faec0780b6ae5a4e0bc57,
so I wonder how that code works in allocators...
-- 
Stas Malyshev
smalys...@gmail.com

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to