mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Add compiler hints to PLy_elog()
Decorate PLy_elog() in a similar way as elog(), to give compilers and static analyzers hints in which cases it does not return. Reviewed-by: John Naylor <jcnaylor@gmail.com>
This commit is contained in:
parent
eaedf0df71
commit
cdddd5d40b
@ -44,7 +44,7 @@ static bool set_string_attr(PyObject *obj, char *attrname, char *str);
|
||||
* in the context.
|
||||
*/
|
||||
void
|
||||
PLy_elog(int elevel, const char *fmt,...)
|
||||
PLy_elog_impl(int elevel, const char *fmt,...)
|
||||
{
|
||||
char *xmsg;
|
||||
char *tbmsg;
|
||||
|
@ -10,7 +10,33 @@ extern PyObject *PLy_exc_error;
|
||||
extern PyObject *PLy_exc_fatal;
|
||||
extern PyObject *PLy_exc_spi_error;
|
||||
|
||||
extern void PLy_elog(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
|
||||
/*
|
||||
* PLy_elog()
|
||||
*
|
||||
* See comments at elog() about the compiler hinting.
|
||||
*/
|
||||
#ifdef HAVE__VA_ARGS
|
||||
#ifdef HAVE__BUILTIN_CONSTANT_P
|
||||
#define PLy_elog(elevel, ...) \
|
||||
do { \
|
||||
PLy_elog_impl(elevel, __VA_ARGS__); \
|
||||
if (__builtin_constant_p(elevel) && (elevel) >= ERROR) \
|
||||
pg_unreachable(); \
|
||||
} while(0)
|
||||
#else /* !HAVE__BUILTIN_CONSTANT_P */
|
||||
#define PLy_elog(elevel, ...) \
|
||||
do { \
|
||||
const int elevel_ = (elevel); \
|
||||
PLy_elog_impl(elevel_, __VA_ARGS__); \
|
||||
if (elevel_ >= ERROR) \
|
||||
pg_unreachable(); \
|
||||
} while(0)
|
||||
#endif /* HAVE__BUILTIN_CONSTANT_P */
|
||||
#else /* !HAVE__VA_ARGS */
|
||||
#define PLy_elog PLy_elog_impl
|
||||
#endif /* HAVE__VA_ARGS */
|
||||
|
||||
extern void PLy_elog_impl(int elevel, const char *fmt,...) pg_attribute_printf(2, 3);
|
||||
|
||||
extern void PLy_exception_set(PyObject *exc, const char *fmt,...) pg_attribute_printf(2, 3);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user