mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
mathops: remove undefined behaviour from sign_extend()
This function intentionally overflows the signed range on the left shift. Using this type-punning avoids errors from the overflow checker without disabling this test globally. Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
42feaf4070
commit
f59bb3d8f3
@ -116,7 +116,9 @@ static inline av_const int mid_pred(int a, int b, int c)
|
||||
#ifndef sign_extend
|
||||
static inline av_const int sign_extend(int val, unsigned bits)
|
||||
{
|
||||
return (val << ((8 * sizeof(int)) - bits)) >> ((8 * sizeof(int)) - bits);
|
||||
unsigned shift = 8 * sizeof(int) - bits;
|
||||
union { unsigned u; int s; } v = { (unsigned) val << shift };
|
||||
return v.s >> shift;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user