postgres.git / summary / log / commit / refs

commit    f2717c79eeecaf5997016d52fd81881301dcfc5e
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Sat Sep 10 21:54:23 2016 +0000
First released in: 10.0, 9.3.15, 9.4.10, 9.5.5, 9.6.0

    Improve unreachability recognition in elog() macro.
    
    Some experimentation with an older version of gcc showed that it is able
    to determine whether "if (elevel_ >= ERROR)" is compile-time constant
    if elevel_ is declared "const", but otherwise not so much.  We had
    accounted for that in ereport() but were too miserly with braces to
    make it so in elog().  I don't know how many currently-interesting
    compilers have the same quirk, but in case it will save some code
    space, let's make sure that elog() is on the same footing as ereport()
    for this purpose.
    
    Back-patch to 9.3 where we introduced pg_unreachable() calls into
    elog/ereport.


src/include/utils/elog.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index f4ff03ec8a1..70dc365465c 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -206,12 +206,13 @@ extern int getinternalerrposition(void); #else /* !HAVE__BUILTIN_CONSTANT_P */ #define elog(elevel, ...) \ do { \ - int elevel_; \ elog_start(__FILE__, __LINE__, PG_FUNCNAME_MACRO); \ - elevel_ = (elevel); \ - elog_finish(elevel_, __VA_ARGS__); \ - if (elevel_ >= ERROR) \ - pg_unreachable(); \ + { \ + const int elevel_ = (elevel); \ + elog_finish(elevel_, __VA_ARGS__); \ + if (elevel_ >= ERROR) \ + pg_unreachable(); \ + } \ } while(0) #endif /* HAVE__BUILTIN_CONSTANT_P */ #else /* !HAVE__VA_ARGS */ [parent: ddc889317912]