Skip to content
Snippets Groups Projects
  • Tom Lane's avatar
    c563d97c
    Adjust DatumGetBool macro, this time for sure. · c563d97c
    Tom Lane authored
    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.
    c563d97c
    History
    Adjust DatumGetBool macro, this time for sure.
    Tom Lane authored
    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.
postgres.h 20.07 KiB