[pulseaudio-discuss] [PATCH 2/2] core: Fix GCC 6 compiler warning regarding left shift of negative value

Arun Raghavan arun at accosted.net
Thu Feb 18 06:22:33 UTC 2016


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


More information about the pulseaudio-discuss mailing list