BUG #1526: SHRT_MIN out of range on explicit type conversion

Started by Kelly Burkhartabout 21 years ago2 messagesbugs
Jump to latest
#1Kelly Burkhart
pgkrb@kkcsm.net

The following bug has been logged online:

Bug reference: 1526
Logged by: Kelly Burkhart
Email address: pgkrb@kkcsm.net
PostgreSQL version: 7.4.2
Operating system: SuSE Linux 9.1 i386 & x86-64
Description: SHRT_MIN out of range on explicit type conversion
Details:

An explicit type conversion of an integer constant representing the minimum
value that type can hold results in an 'integer out of range' error.

From psql, the following will fail:

select -32768::int2;
select -2147483648::int4;
select -9223372036854775808::int8;

If the constants are strings, there is no failure. For instance the
following will succeed:

select '-32768'::int2;
select '-2147483648'::int4;
select '-9223372036854775808'::int8;

Also increasing the value by one does not result in failure. The following
will succeed:

select -32767::int2;
select -2147483647::int4;
select -9223372036854775807::int8;

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Kelly Burkhart (#1)
Re: BUG #1526: SHRT_MIN out of range on explicit type conversion

"Kelly Burkhart" <pgkrb@kkcsm.net> writes:

From psql, the following will fail:

select -32768::int2;

This is not a bug. The reason is that :: binds more tightly than -,
so what you have written is equivalent to

select -(32768::int2);

which obviously *should* fail. Try it as

select (-32768)::int2;

regards, tom lane