postgrespro.git / summary / log / commit / refs

commit    d78d452bc5ac46a970e4fca2b31f3d533815c39a
Author:   Peter Eisentraut <peter@eisentraut.org>
Date:     Sat Aug 17 10:36:30 2019 +0000

    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


src/include/c.h | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/include/c.h b/src/include/c.h index 2a082afab1..f461628a24 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. [parent: f7db0ac7d5b6]