Keep compiler silence (clang 10, implicit conversion from 'long' to 'double' )

Yuya Watari <watari.yuya@gmail.com>

From: Yuya Watari <watari.yuya@gmail.com>
To: pgsql-hackers@postgresql.org
Date: 2019-09-27T03:00:15Z
Lists: pgsql-hackers

Attachments

Hello,

I found the problem that clang compiler introduces warnings when building
PostgreSQL. Attached patch fixes it.

===
Compiler version
===
clang version 10.0.0-svn372772-1~exp1+0~20190924181208.2504~1.gbpb209ff
(trunk)

Older versions of clang may not generate this warning.

===
Warning
===

timestamp.c:3236:22: warning: implicit conversion from 'long' to 'double'
changes value from 9223372036854775807 to 9223372036854775808
[-Wimplicit-int-float-conversion]
        if (result_double > PG_INT64_MAX || result_double < PG_INT64_MIN)
                          ~ ^~~~~~~~~~~~
../../../../src/include/c.h:444:22: note: expanded from macro 'PG_INT64_MAX'
#define PG_INT64_MAX    INT64CONST(0x7FFFFFFFFFFFFFFF)
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../src/include/c.h:381:25: note: expanded from macro 'INT64CONST'
#define INT64CONST(x)  (x##L)
                        ^~~~
<scratch space>:234:1: note: expanded from here
0x7FFFFFFFFFFFFFFFL
^~~~~~~~~~~~~~~~~~~
1 warning generated.
pgbench.c:1657:30: warning: implicit conversion from 'long' to 'double'
changes value from 9223372036854775807 to 9223372036854775808
[-Wimplicit-int-float-conversion]
                if (dval < PG_INT64_MIN || PG_INT64_MAX < dval)
                                           ^~~~~~~~~~~~ ~
../../../src/include/c.h:444:22: note: expanded from macro 'PG_INT64_MAX'
#define PG_INT64_MAX    INT64CONST(0x7FFFFFFFFFFFFFFF)
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../src/include/c.h:381:25: note: expanded from macro 'INT64CONST'
#define INT64CONST(x)  (x##L)
                        ^~~~
<scratch space>:252:1: note: expanded from here
0x7FFFFFFFFFFFFFFFL
^~~~~~~~~~~~~~~~~~~
1 warning generated.

===

This warning is due to implicit conversion from PG_INT64_MAX to double,
which drops the precision as described in the warning. This drop is not a
problem in this case, but we have to get rid of useless warnings. Attached
patch casts PG_INT64_MAX explicitly.

Thanks,
Yuya Watari
NTT Software Innovation Center
watari.yuya@gmail.com

Commits

  1. Fix integer-overflow edge case detection in interval_mul and pgbench.

  2. Change floating-point output format for improved performance.