Skip to content
Snippets Groups Projects
Commit c563d97c authored by Tom Lane's avatar Tom Lane
Browse files

Adjust DatumGetBool macro, this time for sure.

Commit 23a41573 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.
parent 0f549128
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment