Re: alignas (C11)

Peter Eisentraut <peter@eisentraut.org>

From: Peter Eisentraut <peter@eisentraut.org>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2026-01-23T22:00:43Z
Lists: pgsql-hackers
On 23.01.26 18:33, Tom Lane wrote:
                                            ^
> /home/debian/20-chimaera/buildroot/HEAD/pgsql.build/../pgsql/src/include/c.h:1132:49: warning: requested alignment 4096 is larger than 128 [-Wattributes]
>    alignas(PG_IO_ALIGN_SIZE) char data[XLOG_BLCKSZ];
>                                                   ^
> 
> Not sure what to do about that, but I do read it as indicating that we
> cannot put any faith in the compiler to honor such large alignment
> demands.
> 
> A possible short-term(?) workaround is to wrap those two declarations
> in "#ifndef __cplusplus", so that C++ code can't declare such
> variables.

It looks like this was a bug in g++:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70066
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89357

The suggestion there appears to be that it was fixed in gcc 9, but on 
the buildfarm it only goes up to 6.

I think we could work around it like this:

     #if defined(__cplusplus) && defined(__GNUC__) && __GNUC__ <= 6
     #define alignas(a) __attribute__((aligned(a)))
     #endif




Commits

  1. Further fix extended alignment for older g++.

  2. Disable extended alignment uses on older g++

  3. Work around buggy alignas in older g++

  4. Use C11 alignas in pg_atomic_uint64 definitions

  5. C11 alignas instead of unions -- extended alignments

  6. C11 alignas instead of unions

  7. Add <stdalign.h> to c.h