Обсуждение: pgsql: Use stdbool.h if suitable

Поиск
Список
Период
Сортировка

pgsql: Use stdbool.h if suitable

От
Peter Eisentraut
Дата:
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: https://www.postgresql.org/message-id/flat/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(-)


Re: pgsql: Use stdbool.h if suitable

От
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.

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


Re: pgsql: Use stdbool.h if suitable

От
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


Re: pgsql: Use stdbool.h if suitable

От
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