diff --git a/src/backend/utils/error/assert.c b/src/backend/utils/error/assert.c index ad548239f24be938b1c88403717ae4a8c65c93cc..2908abe852097e02c29e16ba65878b8f56341285 100644 --- a/src/backend/utils/error/assert.c +++ b/src/backend/utils/error/assert.c @@ -21,11 +21,8 @@ /* * ExceptionalCondition - Handles the failure of an Assert() - * - * Note: this can't actually return, but we declare it as returning int - * because the TrapMacro() macro might get wonky otherwise. */ -int +void ExceptionalCondition(const char *conditionName, const char *errorType, const char *fileName, @@ -55,6 +52,4 @@ ExceptionalCondition(const char *conditionName, #endif abort(); - - return 0; } diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 239ac19882d6b020c6eb71a57de1c048d01ebd30..65c28a750807aec39cc6adcc9ad506f16fb31f33 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -1507,15 +1507,9 @@ pg_re_throw(void) errfinish(0); } - /* We mustn't return... */ + /* Doesn't return ... */ ExceptionalCondition("pg_re_throw tried to return", "FailedAssertion", __FILE__, __LINE__); - - /* - * Since ExceptionalCondition isn't declared noreturn because of - * TrapMacro(), we need this to keep gcc from complaining. - */ - abort(); } diff --git a/src/include/postgres.h b/src/include/postgres.h index c429f291c2f8b4f8f08734c698c04173d6360f97..94c0218cd1b29d50582f5d497cabed69c11ea768 100644 --- a/src/include/postgres.h +++ b/src/include/postgres.h @@ -655,14 +655,14 @@ extern PGDLLIMPORT bool assert_enabled; /* * TrapMacro is the same as Trap but it's intended for use in macros: * - * #define foo(x) (AssertMacro(x != 0) && bar(x)) + * #define foo(x) (AssertMacro(x != 0), bar(x)) * * Isn't CPP fun? */ #define TrapMacro(condition, errorType) \ ((bool) ((! assert_enabled) || ! (condition) || \ (ExceptionalCondition(CppAsString(condition), (errorType), \ - __FILE__, __LINE__)))) + __FILE__, __LINE__), 0))) #ifndef USE_ASSERT_CHECKING #define Assert(condition) @@ -683,8 +683,8 @@ extern PGDLLIMPORT bool assert_enabled; Trap(!(condition), "BadState") #endif /* USE_ASSERT_CHECKING */ -extern int ExceptionalCondition(const char *conditionName, +extern void ExceptionalCondition(const char *conditionName, const char *errorType, - const char *fileName, int lineNumber); + const char *fileName, int lineNumber) __attribute__((noreturn)); #endif /* POSTGRES_H */