]> granicus.if.org Git - postgresql/commitdiff
Avoid -Wconversion warnings from direct use of GET_n_BYTES macros.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 31 May 2017 15:27:21 +0000 (11:27 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 31 May 2017 15:27:21 +0000 (11:27 -0400)
The GET/SET_n_BYTES macros are meant to be infrastructure for the
DatumGetFoo/FooGetDatum macros, which include a cast to the intended
target type.  Using them directly without a cast, as DatumGetFloat4
and friends previously did, can yield warnings when -Wconversion is on.
This is of little significance when building Postgres proper, because
there are such a huge number of such warnings in the server that nobody
would think -Wconversion is of any use.  But some extensions build with
-Wconversion due to outside constraints.  Commit 14cca1bf8 did a disservice
to those extensions by moving DatumGetFloat4 et al into postgres.h,
where they can now cause warnings in extension builds.

To fix, use DatumGetInt32 and friends in place of the low-level macros.
This is arguably a bit cleaner anyway.

Chapman Flack

Discussion: https://postgr.es/m/592E4D04.1070609@anastigmatix.net

src/include/postgres.h

index f3582d5523aef4ef817356b08abd140ac956be1e..009337d26880e243ce8b2b8fe94f11b7820d173b 100644 (file)
@@ -679,7 +679,7 @@ DatumGetFloat4(Datum X)
                float4          retval;
        }                       myunion;
 
-       myunion.value = GET_4_BYTES(X);
+       myunion.value = DatumGetInt32(X);
        return myunion.retval;
 }
 #else
@@ -704,7 +704,7 @@ Float4GetDatum(float4 X)
        }                       myunion;
 
        myunion.value = X;
-       return SET_4_BYTES(myunion.retval);
+       return Int32GetDatum(myunion.retval);
 }
 #else
 extern Datum Float4GetDatum(float4 X);
@@ -727,7 +727,7 @@ DatumGetFloat8(Datum X)
                float8          retval;
        }                       myunion;
 
-       myunion.value = GET_8_BYTES(X);
+       myunion.value = DatumGetInt64(X);
        return myunion.retval;
 }
 #else
@@ -753,7 +753,7 @@ Float8GetDatum(float8 X)
        }                       myunion;
 
        myunion.value = X;
-       return SET_8_BYTES(myunion.retval);
+       return Int64GetDatum(myunion.retval);
 }
 #else
 extern Datum Float8GetDatum(float8 X);