From: Peter Eisentraut Date: Mon, 26 Jan 2026 09:23:14 +0000 (+0100) Subject: Disable extended alignment uses on older g++ X-Git-Url: http://git.postgresql.org/gitweb/static/session/%22https:/www.citusdata.com/%7B%7Bp.id%7D%7D?a=commitdiff_plain;p=postgresql.git Disable extended alignment uses on older g++ Fix for commit a9bdb63bba8. The previous plan of redefining alignas didn't work, because it interfered with other C++ header files (e.g., LLVM). So now the new workaround is to just disable the affected typedefs under the affected compilers. These are not typically used in extensions anyway. Discussion: https://www.postgresql.org/message-id/3119480.1769189606%40sss.pgh.pa.us --- diff --git a/src/include/c.h b/src/include/c.h index 17afaef9a6a..48e4087c09c 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -262,16 +262,6 @@ */ #endif -/* - * alignas is buggy in g++ < 9, but the more or less equivalent attribute - * works. - * - * - */ -#if defined(__cplusplus) && defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 9 -#define alignas(a) __attribute__((aligned(a))) -#endif - /* * Use "pg_attribute_always_inline" in place of "inline" for functions that * we wish to force inlining of, even when the compiler's heuristics would @@ -1123,6 +1113,14 @@ typedef struct PGAlignedBlock alignas(MAXIMUM_ALIGNOF) char data[BLCKSZ]; } PGAlignedBlock; +/* + * alignas with extended alignments is buggy in g++ < 9. As a simple + * workaround, we disable these definitions in that case. + * + * + */ +#if !(defined(__cplusplus) && defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 9) + /* * Use this to declare a field or local variable holding a page buffer, if that * page might be accessed as a page or passed to an SMgr I/O function. If @@ -1142,6 +1140,8 @@ typedef struct PGAlignedXLogBlock alignas(PG_IO_ALIGN_SIZE) char data[XLOG_BLCKSZ]; } PGAlignedXLogBlock; +#endif /* !(g++ < 9) */ + /* msb for char */ #define HIGHBIT (0x80) #define IS_HIGHBIT_SET(ch) ((unsigned char)(ch) & HIGHBIT)