aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-04-28 11:50:58 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2016-04-28 11:51:22 -0400
commitc563d97c6bfd63e4d533bf01d0074d3a47e7a12c (patch)
treeadf29db332f9f4315af86646ff5c774db2e97176 /src
parent0f54912837ec3f1dc352627b18dca3d7d54fc787 (diff)
downloadpostgresql-c563d97c6bfd63e4d533bf01d0074d3a47e7a12c.tar.gz
postgresql-c563d97c6bfd63e4d533bf01d0074d3a47e7a12c.zip
Adjust DatumGetBool macro, this time for sure.
Commit 23a41573c attempted to fix the DatumGetBool macro to ignore bits in a Datum that are to the left of the actual bool value. But it did that by casting the Datum to bool; and on compilers that use C99 semantics for bool, that ends up being a whole-word test, not a 1-byte test. This seems to be the true explanation for contrib/seg failing in VS2015. To fix, use GET_1_BYTE() explicitly. I think in the previous patch, I'd had some idea of not having to commit to bool being exactly 1 byte wide, but regardless of what the compiler's bool is, boolean columns and Datums are certainly 1 byte wide. The previous fix was (eventually) back-patched into all active versions, so do likewise with this one.
Diffstat (limited to 'src')
-rw-r--r--src/include/postgres.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/include/postgres.h b/src/include/postgres.h
index 90cd3d55532..b34b93d8e4f 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -326,7 +326,7 @@ typedef Datum *DatumPtr;
* the left of the width of bool, per comment above.
*/
-#define DatumGetBool(X) ((bool) (((bool) (X)) != 0))
+#define DatumGetBool(X) ((bool) (GET_1_BYTE(X) != 0))
/*
* BoolGetDatum