Re: [HACKERS] "left shift of negative value" warnings

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [HACKERS] "left shift of negative value" warnings
Дата
Msg-id 970.1491852357@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: [HACKERS] "left shift of negative value" warnings  (Andres Freund <andres@anarazel.de>)
Ответы Re: [HACKERS] "left shift of negative value" warnings
Список pgsql-hackers
Andres Freund <andres@anarazel.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.
        regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: [HACKERS] "left shift of negative value" warnings
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: Re: [HACKERS] Letting the client choose the protocol to use during aSASL exchange