postgres.git / summary / log / commit / refs

commit    ebd971f74d8a20260bdb281977cfbd5404bfbb76
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 92073be0ca5..72c7377ecca 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -258,12 +258,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: fb7ed3889fa6]