• Tom Lane's avatar
    Re-implement the ereport() macro using __VA_ARGS__. · e3a87b49
    Tom Lane authored
    Now that we require C99, we can depend on __VA_ARGS__ to work, and
    revising ereport() to use it has several significant benefits:
    
    * The extra parentheses around the auxiliary function calls are now
    optional.  Aside from being a bit less ugly, this removes a common
    gotcha for new contributors, because in some cases the compiler errors
    you got from forgetting them were unintelligible.
    
    * The auxiliary function calls are now evaluated as a comma expression
    list rather than as extra arguments to errfinish().  This means that
    compilers can be expected to warn about no-op expressions in the list,
    allowing detection of several other common mistakes such as forgetting
    to add errmsg(...) when converting an elog() call to ereport().
    
    * Unlike the situation with extra function arguments, comma expressions
    are guaranteed to be evaluated left-to-right, so this removes platform
    dependency in the order of the auxiliary function calls.  While that
    dependency hasn't caused us big problems in the past, this change does
    allow dropping some rather shaky assumptions around errcontext() domain
    handling.
    
    There's no intention to make wholesale changes of existing ereport
    calls, but as proof-of-concept this patch removes the extra parens
    from a couple of calls in postgres.c.
    
    While new code can be written either way, code intended to be
    back-patched will need to use extra parens for awhile yet.  It seems
    worth back-patching this change into v12, so as to reduce the window
    where we have to be careful about that by one year.  Hence, this patch
    is careful to preserve ABI compatibility; a followup HEAD-only patch
    will make some additional simplifications.
    
    Andres Freund and Tom Lane
    
    Discussion: https://postgr.es/m/CA+fd4k6N8EjNvZpM8nme+y+05mz-SM8Z_BgkixzkA34R+ej0Kw@mail.gmail.com
    e3a87b49
elog.h 16.6 KB