aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/utils/elog.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
index 1bbfd2b958f..03298fbbaf0 100644
--- a/src/include/utils/elog.h
+++ b/src/include/utils/elog.h
@@ -100,11 +100,16 @@
* and have errstart insert the default text domain. Modules can either use
* ereport_domain() directly, or preferably they can override the TEXTDOMAIN
* macro.
+ *
+ * When elevel >= ERROR, we add an abort() call to give the compiler a hint
+ * that the ereport() expansion will not return, but the abort() isn't actually
+ * reached because the longjmp happens in errfinish().
*----------
*/
#define ereport_domain(elevel, domain, rest) \
(errstart(elevel, __FILE__, __LINE__, PG_FUNCNAME_MACRO, domain) ? \
- (errfinish rest) : (void) 0)
+ (errfinish rest) : (void) 0), \
+ ((elevel) >= ERROR ? abort() : (void) 0)
#define ereport(elevel, rest) \
ereport_domain(elevel, TEXTDOMAIN, rest)