Re: "left shift of negative value" warnings

From: Andres Freund <andres(at)anarazel(dot)de>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: "left shift of negative value" warnings
Date: 2017-04-10 20:19:28
Message-ID: 20170410201928.jjto2t4rqhi4hdz2@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 2017-04-10 15:25:57 -0400, Tom Lane wrote:
> Andres Freund <andres(at)anarazel(dot)de> writes:
> > On 2017-04-09 19:20:27 -0400, Tom Lane wrote:
> >> As I read that, it's only "undefined" if overflow would occur (ie
> >> the sign bit would change). Your compiler is being a useless annoying
> >> nanny, but that seems to be the in thing for compiler authors these
> >> days.
>
> > "The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with
> > zeros. If E1 has an unsigned type, the value of the result is E1 × 2 E2 , reduced modulo
> > one more than the maximum value representable in the result type. If E1 has a signed
> > type and nonnegative value, and E1 × 2 E2 is representable in the result type, then that is
> > the resulting value; otherwise, the behavior is undefined."
>
> > As I read this it's defined iff E1 is signed, nonnegative *and* the the
> > result of the shift is representable in the relevant type. That seems,
> > uh, a bit restrictive, but that seems to be the only reading?
>
> Oh --- I misread the "nonnegative" as applying to the shift count, but
> you're right, it's talking about the LHS. That's weird --- the E1 × 2^E2
> definition works fine as long as there's no overflow, so why didn't they
> define it like that? It seems just arbitrarily broken this way.

I guess the motivation is that it's not entirely clear what happens with
the sign bit, when shifting. Why they made that UB instead of
implementation defined, is a complete mystery to me, however.

We should do *something* about this? The warnings are a bit annoying :(

- Andres

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2017-04-10 21:06:26 Re: strange parallel query behavior after OOM crashes
Previous Message Álvaro Hernández Tortosa 2017-04-10 20:03:37 Re: Letting the client choose the protocol to use during a SASL exchange