mirror of
https://github.com/postgres/postgres.git
synced 2025-09-09 13:09:39 +03:00
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
This commit is contained in:
@@ -114,8 +114,8 @@ static void json_manifest_finalize_wal_range(JsonManifestParseState *parse);
|
||||
static void verify_manifest_checksum(JsonManifestParseState *parse,
|
||||
const char *buffer, size_t size,
|
||||
pg_cryptohash_ctx *incr_ctx);
|
||||
static void json_manifest_parse_failure(JsonManifestParseContext *context,
|
||||
char *msg);
|
||||
pg_noreturn static void json_manifest_parse_failure(JsonManifestParseContext *context,
|
||||
char *msg);
|
||||
|
||||
static int hexdecode_char(char c);
|
||||
static bool hexdecode_string(uint8 *result, char *input, int nbytes);
|
||||
@@ -889,6 +889,7 @@ static void
|
||||
json_manifest_parse_failure(JsonManifestParseContext *context, char *msg)
|
||||
{
|
||||
context->error_cb(context, "could not parse backup manifest: %s", msg);
|
||||
pg_unreachable();
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user