pgsql: Use stdbool.h if suitable
Use stdbool.h if suitable
Using the standard bool type provided by C allows some recent compilers
and debuggers to give better diagnostics. Also, some extension code and
third-party headers are increasingly pulling in stdbool.h, so it's
probably saner if everyone uses the same definition.
But PostgreSQL code is not prepared to handle bool of a size other than
1, so we keep our own old definition if we encounter a stdbool.h with a
bool of a different size. (Among current build farm members, this only
applies to old macOS versions on PowerPC.)
To check that the used bool is of the right size, add a static
assertions about size of GinTernaryValue vs bool. This is currently the
only place that assumes that bool and char are of the same size.
Discussion: /messages/by-id/3a0fe7e1-5ed1-414b-9230-53bbc0ed1f49@2ndquadrant.com
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/9a95a77d9d5d3003d2d67121f2731b6e5fc37336
Modified Files
--------------
src/backend/utils/adt/tsginidx.c | 4 +++-
src/include/access/gin.h | 4 ++--
src/include/c.h | 14 ++++++++++++--
src/include/pg_config.h.win32 | 9 +++++++++
src/pl/plperl/plperl.h | 10 +++++-----
5 files changed, 31 insertions(+), 10 deletions(-)
Hi,
On 2018-03-23 00:42:39 +0000, Peter Eisentraut wrote:
Use stdbool.h if suitable
Using the standard bool type provided by C allows some recent compilers
and debuggers to give better diagnostics. Also, some extension code and
third-party headers are increasingly pulling in stdbool.h, so it's
probably saner if everyone uses the same definition.
Hah. I was setting up LLVM buildfarm animals that run with LLVM
assertions enabled, and was getting confused why they're failing after
I'd run a check-world locally with assertions enabled.
Turns out this broke it. I'll fix it. Just amazed that we've gone weeks
without a change breaking my JIT work, and then within hours of it
getting it got broken. Turns out LLVM represents a stdbool.h boolean as
an i1 (int with 1 bit) rather than an i8 (int with 8 bits), which makes
sense given the desired boolean behaviour (still takes 8 bits of
storage).
Greetings,
Andres Freund
Hi,
On 2018-03-23 00:42:39 +0000, Peter Eisentraut wrote:
Use stdbool.h if suitable
Using the standard bool type provided by C allows some recent compilers
and debuggers to give better diagnostics. Also, some extension code and
third-party headers are increasingly pulling in stdbool.h, so it's
probably saner if everyone uses the same definition.But PostgreSQL code is not prepared to handle bool of a size other than
1, so we keep our own old definition if we encounter a stdbool.h with a
bool of a different size. (Among current build farm members, this only
applies to old macOS versions on PowerPC.)To check that the used bool is of the right size, add a static
assertions about size of GinTernaryValue vs bool. This is currently the
only place that assumes that bool and char are of the same size.
This appears to have broken buildfarm animal locust:
https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=locust&dt=2018-03-23%2001%3A13%3A30
I suspect that's because of the perl hunk
src/pl/plperl/plperl.h | 10 +++++-----
Greetings,
Andres Freund
On 2018-03-22 18:25:01 -0700, Andres Freund wrote:
Hi,
On 2018-03-23 00:42:39 +0000, Peter Eisentraut wrote:
Use stdbool.h if suitable
Using the standard bool type provided by C allows some recent compilers
and debuggers to give better diagnostics. Also, some extension code and
third-party headers are increasingly pulling in stdbool.h, so it's
probably saner if everyone uses the same definition.Hah. I was setting up LLVM buildfarm animals that run with LLVM
assertions enabled, and was getting confused why they're failing after
I'd run a check-world locally with assertions enabled.Turns out this broke it. I'll fix it. Just amazed that we've gone weeks
without a change breaking my JIT work, and then within hours of it
getting it got broken. Turns out LLVM represents a stdbool.h boolean as
an i1 (int with 1 bit) rather than an i8 (int with 8 bits), which makes
sense given the desired boolean behaviour (still takes 8 bits of
storage).
Pushed a fix. There's now an array of llvm with assertion using
buildfarm animals. The one I was trying to setup, shows the before/after
now:
https://buildfarm.postgresql.org/cgi-bin/show_history.pl?nm=xenodermus&br=HEAD
- Andres