From 97525bc5c8ffb31475d23955d08e9ec9c1408f33 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 28 Nov 2024 11:48:07 +1300 Subject: Require sizeof(bool) == 1. The C standard says that sizeof(bool) is implementation-defined, but we know of no current systems where it is not 1. The last known systems seem to have been Apple macOS/PowerPC 10.5 and Microsoft Visual C++ 4, both long defunct. PostgreSQL has always required sizeof(bool) == 1 for the definition of bool that it used, but previously it would define its own type if the system-provided bool had a different size. That was liable to cause memory layout problems when interacting with system and third-party libraries on (by now hypothetical) computers with wider _Bool, and now C23 has introduced a new problem by making bool a built-in datatype (like C++), so the fallback code doesn't even compile. We could probably work around that, but then we'd be writing new untested code for a computer that doesn't exist. Instead, delete the unreachable and C23-uncompilable fallback code, and let existing static assertions fail if the system-provided bool is too wide. If we ever get a problem report from a real system, then it will be time to figure out what to do about it in a way that also works on modern compilers. Note on C++: Previously we avoided including or trying to define a new bool type in headers that might be included by C++ code. These days we might as well just include unconditionally: it should be visible to C++11 but do nothing, just as in C23. We already include without C++ guards in c.h, and that falls under the same C99-compatibility section of the C++11 standard as , so let's remove the guards here too. Reviewed-by: Tom Lane Discussion: https://postgr.es/m/3198438.1731895163%40sss.pgh.pa.us --- configure.ac | 9 --------- 1 file changed, 9 deletions(-) (limited to 'configure.ac') diff --git a/configure.ac b/configure.ac index 99a5b1aac64..21817009642 100644 --- a/configure.ac +++ b/configure.ac @@ -1691,15 +1691,6 @@ if test "$ac_cv_sizeof_off_t" -lt 8; then fi fi -AC_CHECK_SIZEOF([bool], [], [#include ]) - -dnl We use if bool has size 1 after including it. Otherwise, c.h -dnl will fall back to declaring bool as unsigned char. -if test "$ac_cv_sizeof_bool" = 1; then - AC_DEFINE([PG_USE_STDBOOL], 1, - [Define to 1 to use to define type bool.]) -fi - ## ## Functions, global variables -- cgit v1.2.3