Quoting Martin Storsjö (2024-09-24 10:53:38) > While shifting "value" to left, we would iterate through all bits > of an unsigned long long, while we only expect to count through > "size * CHAR_BIT" bits. > > This fixes fate with MSVC. > --- > compat/stdbit/stdbit.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/compat/stdbit/stdbit.h b/compat/stdbit/stdbit.h > index b434fc2357..3197a24938 100644 > --- a/compat/stdbit/stdbit.h > +++ b/compat/stdbit/stdbit.h > @@ -179,9 +179,10 @@ static inline unsigned int > __stdc_trailing_zeros(unsigned long long value, > unsigned int size) > { > unsigned int zeros = size * CHAR_BIT; > + unsigned long long mask = (1ULL << (size * CHAR_BIT)) - 1;
This is UB for size == sizeof(unsigned long long). > > while (value != 0) { > - value <<= 1; > + value = (value << 1) & mask; Otherwise looks ok. -- Anton Khirnov _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".