aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2018-02-15 13:41:30 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2018-02-15 13:41:30 -0500
commit51940f97607b7cb4d03bdd99e43abb1a1c6a0c47 (patch)
tree9d2036f02f567435830c38eee5b49fb343ba6f0b
parent03c5a00ea3867f5736da6cedce73b1eea88a98af (diff)
downloadpostgresql-51940f97607b7cb4d03bdd99e43abb1a1c6a0c47.tar.gz
postgresql-51940f97607b7cb4d03bdd99e43abb1a1c6a0c47.zip
Cast to void in StaticAssertExpr, not its callers.
Seems a bit silly that many (in fact all, as of today) uses of StaticAssertExpr would need to cast it to void to avoid warnings from pickier compilers. Let's just do the cast right in the macro, instead. In passing, change StaticAssertExpr to StaticAssertStmt in one place where that seems more apropos. Discussion: https://postgr.es/m/16161.1518715186@sss.pgh.pa.us
-rw-r--r--src/backend/storage/lmgr/lwlock.c4
-rw-r--r--src/include/c.h8
2 files changed, 6 insertions, 6 deletions
diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c
index 71caac1a1f4..233606b4141 100644
--- a/src/backend/storage/lmgr/lwlock.c
+++ b/src/backend/storage/lmgr/lwlock.c
@@ -380,10 +380,10 @@ LWLockShmemSize(void)
void
CreateLWLocks(void)
{
- StaticAssertExpr(LW_VAL_EXCLUSIVE > (uint32) MAX_BACKENDS,
+ StaticAssertStmt(LW_VAL_EXCLUSIVE > (uint32) MAX_BACKENDS,
"MAX_BACKENDS too big for lwlock.c");
- StaticAssertExpr(sizeof(LWLock) <= LWLOCK_MINIMAL_SIZE &&
+ StaticAssertStmt(sizeof(LWLock) <= LWLOCK_MINIMAL_SIZE &&
sizeof(LWLock) <= LWLOCK_PADDED_SIZE,
"Miscalculated LWLock padding");
diff --git a/src/include/c.h b/src/include/c.h
index c38ef8aed3e..6b55181e0a1 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -779,7 +779,7 @@ extern void ExceptionalCondition(const char *conditionName,
#define StaticAssertStmt(condition, errmessage) \
do { _Static_assert(condition, errmessage); } while(0)
#define StaticAssertExpr(condition, errmessage) \
- ({ StaticAssertStmt(condition, errmessage); true; })
+ ((void) ({ StaticAssertStmt(condition, errmessage); true; }))
#else /* !HAVE__STATIC_ASSERT */
#define StaticAssertStmt(condition, errmessage) \
((void) sizeof(struct { int static_assert_failure : (condition) ? 1 : -1; }))
@@ -796,7 +796,7 @@ extern void ExceptionalCondition(const char *conditionName,
#define StaticAssertStmt(condition, errmessage) \
do { struct static_assert_struct { int static_assert_failure : (condition) ? 1 : -1; }; } while(0)
#define StaticAssertExpr(condition, errmessage) \
- ({ StaticAssertStmt(condition, errmessage); })
+ ((void) ({ StaticAssertStmt(condition, errmessage); }))
#endif
#endif /* C++ */
@@ -817,14 +817,14 @@ extern void ExceptionalCondition(const char *conditionName,
StaticAssertStmt(__builtin_types_compatible_p(__typeof__(varname), typename), \
CppAsString(varname) " does not have type " CppAsString(typename))
#define AssertVariableIsOfTypeMacro(varname, typename) \
- ((void) StaticAssertExpr(__builtin_types_compatible_p(__typeof__(varname), typename), \
+ (StaticAssertExpr(__builtin_types_compatible_p(__typeof__(varname), typename), \
CppAsString(varname) " does not have type " CppAsString(typename)))
#else /* !HAVE__BUILTIN_TYPES_COMPATIBLE_P */
#define AssertVariableIsOfType(varname, typename) \
StaticAssertStmt(sizeof(varname) == sizeof(typename), \
CppAsString(varname) " does not have type " CppAsString(typename))
#define AssertVariableIsOfTypeMacro(varname, typename) \
- ((void) StaticAssertExpr(sizeof(varname) == sizeof(typename), \
+ (StaticAssertExpr(sizeof(varname) == sizeof(typename), \
CppAsString(varname) " does not have type " CppAsString(typename)))
#endif /* HAVE__BUILTIN_TYPES_COMPATIBLE_P */