Re: pg_attribute_noreturn(), MSVC, C11
Peter Eisentraut <peter@eisentraut.org>
From: Peter Eisentraut <peter@eisentraut.org>
To: pgsql-hackers@postgresql.org
Cc: Andres Freund <andres@anarazel.de>, Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>, Thomas Munro <thomas.munro@gmail.com>
Date: 2025-03-10T12:27:07Z
Lists: pgsql-hackers
Attachments
- v3-0001-pg_noreturn-to-replace-pg_attribute_noreturn.patch (text/plain) patch v3-0001
- v3-0002-Add-another-pg_noreturn.patch (text/plain) patch v3-0002
- v3-0003-Swap-order-of-extern-static-and-pg_nodiscard.patch (text/plain) patch v3-0003
- v3-0004-Support-pg_nodiscard-on-non-GNU-compilers-that-su.patch (text/plain) patch v3-0004
On 13.02.25 16:34, Peter Eisentraut wrote: > On 22.01.25 19:16, Peter Eisentraut wrote: >> On 06.01.25 15:52, Peter Eisentraut wrote: >>> On 03.01.25 21:51, Dagfinn Ilmari Mannsåker wrote: >>>> Peter Eisentraut <peter@eisentraut.org> writes: >>>> >>>>> I suggest we define pg_noreturn as >>>>> >>>>> 1. If C11 is supported, then _Noreturn, else >>>>> 2. If GCC-compatible, then __attribute__((noreturn)), else >>>> >>>> Would it be worth also checking __has_attribute(noreturn)? Or do all >>>> compilers that have __attribute__((noreturn)) claim to be GCC? >>> >>> I don't think that would expand the set of supported compilers in a >>> significant way. We can always add it if we find one, of course. >> >> In fact, as another thought, we could even drop #2. Among the GCC- >> compatible compilers, both GCC and Clang have supported #1 for ages, >> and the only other candidate I could find on the build farm is the >> Solaris compiler, which also supports C11 by default, per its >> documentation. >> >>>>> 3. If MSVC, then __declspec((noreturn)) > > Here is an updated patch set that contains the above small change and > fixes some conflicts that have arisen in the meantime. Another rebased patch set, no further changes.
Commits
-
Use standard C23 and C++ attributes if available
- 76f4b92bac87 19 (unreleased) landed
-
Swap order of extern/static and pg_nodiscard
- 05cbd6cb22d2 18.0 landed
-
pg_noreturn to replace pg_attribute_noreturn()
- 3691edfab971 18.0 landed