8000 Adjust DatumGetBool macro, this time for sure. · prmdeveloper/postgres@65c2eeb · GitHub
[go: up one dir, main page]

Skip to content

Commit 65c2eeb

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 3be77da commit 65c2eeb

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
@@ -368,7 +368,7 @@ typedef Datum *DatumPtr;
368368
* the left of the width of bool, per comment above.
369369
*/
370370

371-
#define DatumGetBool(X) ((bool) (((bool) (X)) != 0))
371+
#define DatumGetBool(X) ((bool) (GET_1_BYTE(X) != 0))
372372

373373
/*
374374
* BoolGetDatum

0 commit comments

Comments
 (0)
0