Re: Keep elog(ERROR) and ereport(ERROR) calls in the cold path

Alvaro Herrera <alvherre@alvh.no-ip.org>

From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: David Rowley <dgrowleyml@gmail.com>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Andres Freund <andres@anarazel.de>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>
Date: 2020-11-24T21:04:31Z
Lists: pgsql-hackers
On 2020-Nov-24, Tom Lane wrote:

> David Rowley <dgrowleyml@gmail.com> writes:
> > On Wed, 25 Nov 2020 at 04:55, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> >> walleye's been failing since this patchset went in:
> >> I have no idea what to make of that, but it looks more like a compiler bug
> >> than anything else.
> 
> > I wondered if #if !defined(__MINGW32__) && !defined(__MINGW64__) would
> > be the correct fix for it... aka, just define the new
> > pg_attribute_(hot|cold) macros to empty on MinGW.
> 
> I'd make any such fix as narrow as possible (ie MINGW64 only, based on
> present evidence).  It'd be nice to have a compiler version upper bound
> too, in the hopes that they'd fix it in future.  Maybe something like
> "#if defined(__MINGW64__) && defined(__GNUC__) && __GNUC__ <= 8" ?

Apparently the bug was fixed days after it was reported,
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86048
but they haven't made a release containing the fix yet.



Commits

  1. Stop gap fix for __attribute__((cold)) compiler bug in MinGW 8.1

  2. Tidy up definitions of pg_attribute_hot and pg_attribute_cold

  3. Fix unportable usage of __has_attribute

  4. Improve compiler code layout in elog/ereport ERROR calls

  5. Define pg_attribute_cold and pg_attribute_hot macros