aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2019-08-17 12:36:30 +0200
committerPeter Eisentraut <peter@eisentraut.org>2019-08-17 12:50:50 +0200
commitd78d452bc5ac46a970e4fca2b31f3d533815c39a (patch)
treeb84beeae3b33cd5ead89f6023dcb5f322118b91e /src
parentf7db0ac7d5b6ba9728616a1cc36288cb4f817e66 (diff)
downloadpostgresql-d78d452bc5ac46a970e4fca2b31f3d533815c39a.tar.gz
postgresql-d78d452bc5ac46a970e4fca2b31f3d533815c39a.zip
Improve Assert output
If an assertion expression contained a macro, the failed assertion message would print the expanded macro, which is usually unhelpful and confusing. Restructure the Assert macros to not expand any macros when constructing the failure message. This also fixes that the existing output for Assert et al. shows the *inverted* condition, which is also confusing and not how assertions usually work. Discussion: https://www.postgresql.org/message-id/flat/6c68efe3-117a-dcc1-73d4-18ba1ec532e2%402ndquadrant.com
Diffstat (limited to 'src')
-rw-r--r--src/include/c.h26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/include/c.h b/src/include/c.h
index 2a082afab11..f461628a24e 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -755,7 +755,7 @@ typedef NameData *Name;
#define Trap(condition, errorType) \
do { \
if (condition) \
- ExceptionalCondition(CppAsString(condition), (errorType), \
+ ExceptionalCondition(#condition, (errorType), \
__FILE__, __LINE__); \
} while (0)
@@ -768,20 +768,34 @@ typedef NameData *Name;
*/
#define TrapMacro(condition, errorType) \
((bool) (! (condition) || \
- (ExceptionalCondition(CppAsString(condition), (errorType), \
+ (ExceptionalCondition(#condition, (errorType), \
__FILE__, __LINE__), 0)))
#define Assert(condition) \
- Trap(!(condition), "FailedAssertion")
+ do { \
+ if (!(condition)) \
+ ExceptionalCondition(#condition, "FailedAssertion", \
+ __FILE__, __LINE__); \
+ } while (0)
#define AssertMacro(condition) \
- ((void) TrapMacro(!(condition), "FailedAssertion"))
+ ((void) ((condition) || \
+ (ExceptionalCondition(#condition, "FailedAssertion", \
+ __FILE__, __LINE__), 0)))
#define AssertArg(condition) \
- Trap(!(condition), "BadArgument")
+ do { \
+ if (!(condition)) \
+ ExceptionalCondition(#condition, "BadArgument", \
+ __FILE__, __LINE__); \
+ } while (0)
#define AssertState(condition) \
- Trap(!(condition), "BadState")
+ do { \
+ if (!(condition)) \
+ ExceptionalCondition(#condition, "BadState", \
+ __FILE__, __LINE__); \
+ } while (0)
/*
* Check that `ptr' is `bndr' aligned.