Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 3691edf

Browse files
committedMar 13, 2025
pg_noreturn to replace pg_attribute_noreturn()
We want to support a "noreturn" decoration on more compilers besides just GCC-compatible ones, but for that we need to move the decoration in front of the function declaration instead of either behind it or wherever, which is the current style afforded by GCC-style attributes. Also rename the macro to "pg_noreturn" to be similar to the C11 standard "noreturn". pg_noreturn is now supported on all compilers that support C11 (using _Noreturn), as well as GCC-compatible ones (using __attribute__, as before), as well as MSVC (using __declspec). (When PostgreSQL requires C11, the latter two variants can be dropped.) Now, all supported compilers effectively support pg_noreturn, so the extra code for !HAVE_PG_ATTRIBUTE_NORETURN can be dropped. This also fixes a possible problem if third-party code includes stdnoreturn.h, because then the current definition of #define pg_attribute_noreturn() __attribute__((noreturn)) would cause an error. Note that the C standard does not support a noreturn attribute on function pointer types. So we have to drop these here. There are only two instances at this time, so it's not a big loss. In one case, we can make up for it by adding the pg_noreturn to a wrapper function and adding a pg_unreachable(), in the other case, the latter was already done before. Reviewed-by: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org> Reviewed-by: Andres Freund <andres@anarazel.de> Discussion: https://www.postgresql.org/message-id/flat/pxr5b3z7jmkpenssra5zroxi7qzzp6eswuggokw64axmdixpnk@zbwxuq7gbbcw
1 parent cc5d985 commit 3691edf

File tree

54 files changed

+118
-118
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+118
-118
lines changed
 

‎contrib/dblink/dblink.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,7 @@ xpstrdup(const char *in)
160160
return pstrdup(in);
161161
}
162162

163-
static void
164-
pg_attribute_noreturn()
163+
pg_noreturn static void
165164
dblink_res_internalerror(PGconn *conn, PGresult *res, const char *p2)
166165
{
167166
char *msg = pchomp(PQerrorMessage(conn));
@@ -170,8 +169,7 @@ dblink_res_internalerror(PGconn *conn, PGresult *res, const char *p2)
170169
elog(ERROR, "%s: %s", p2, msg);
171170
}
172171

173-
static void
174-
pg_attribute_noreturn()
172+
pg_noreturn static void
175173
dblink_conn_not_avail(const char *conname)
176174
{
177175
if (conname)

‎contrib/pgcrypto/px.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ int px_find_hmac(const char *name, PX_HMAC **res);
181181
int px_find_cipher(const char *name, PX_Cipher **res);
182182
int px_find_combo(const char *name, PX_Combo **res);
183183

184-
void px_THROW_ERROR(int err) pg_attribute_noreturn();
184+
pg_noreturn void px_THROW_ERROR(int err);
185185
const char *px_strerror(int err);
186186

187187
const char *px_resolve_alias(const PX_Alias *list, const char *name);

0 commit comments

Comments
 (0)
Please sign in to comment.