On Tue, 2016-02-16 at 00:15 +0100, Peter Meerwald wrote: > In file included from pulse/timeval.c:32:0: > pulse/timeval.c: In function 'pa_timeval_add': > ./pulsecore/macro.h:303:28: warning: left shift of negative value [-Wshift-negative-value] > Â Â Â Â Â Â Â Â Â Â Â Â Â Â ? ~(~(type) 0 << (8*sizeof(type)-1)) > > reported by Ubuntu gcc-6 > > gcc-6 adds -Wshift-negative-value (enabled by -Wextra) which warns > about left shifting a negative value. Such shifts are undefined > because they depend on the representation of negative values. > > also works with -Wshift-overflow=2 > > Signed-off-by: Peter Meerwald <pmeerw at pmeerw.net> > --- > Â src/pulsecore/macro.h | 6 ++++-- > Â 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/src/pulsecore/macro.h b/src/pulsecore/macro.h > index 1716f81..1e15f4f 100644 > --- a/src/pulsecore/macro.h > +++ b/src/pulsecore/macro.h > @@ -298,14 +298,16 @@ static inline size_t PA_PAGE_ALIGN(size_t l) { > Â > Â #define PA_INT_TYPE_SIGNED(type) (!!((type) 0 > (type) -1)) > Â > +#define PA_INT_TYPE_HALF(type) ((type) 1 << (sizeof(type)*8 - 2)) > + > Â #define PA_INT_TYPE_MAX(type)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â \ > Â Â Â Â Â ((type) (PA_INT_TYPE_SIGNED(type)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â \ > -Â Â Â Â Â Â Â Â Â Â Â Â Â ? ~(~(type) 0 << (8*sizeof(type)-1))Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â \ > +Â Â Â Â Â Â Â Â Â Â Â Â Â ? (PA_INT_TYPE_HALF(type) - 1 + PA_INT_TYPE_HALF(type))Â Â Â \ > Â Â Â Â Â Â Â Â Â Â Â Â Â Â : (type) -1)) > Â > Â #define PA_INT_TYPE_MIN(type)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â \ > Â Â Â Â Â ((type) (PA_INT_TYPE_SIGNED(type)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â \ > -Â Â Â Â Â Â Â Â Â Â Â Â Â ? (~(type) 0 << (8*sizeof(type)-1))Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â \ > +Â Â Â Â Â Â Â Â Â Â Â Â Â ? (-1 - PA_INT_TYPE_MAX(type))Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â \ > Â Â Â Â Â Â Â Â Â Â Â Â Â Â : (type) 0)) > Â > Â /* We include this at the very last place */ The logic checks out, so as long as it doesn't break anything in practice, ack. :) -- Arun