Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 23b09e1

Browse files
committed
Adjust DatumGetBool macro, this time for sure.
Commit 23a4157 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.
1 parent f050423 commit 23b09e1

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/include/postgres.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ typedef Datum *DatumPtr;
398398
* the left of the width of bool, per comment above.
399399
*/
400400

401-
#define DatumGetBool(X) ((bool) (((bool) (X)) != 0))
401+
#define DatumGetBool(X) ((bool) (GET_1_BYTE(X) != 0))
402402

403403
/*
404404
* BoolGetDatum

0 commit comments

Comments
 (0)