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