]> granicus.if.org Git - postgresql/commitdiff
Cast to void in StaticAssertExpr, not its callers.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 15 Feb 2018 18:41:30 +0000 (13:41 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 15 Feb 2018 18:41:30 +0000 (13:41 -0500)
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

src/backend/storage/lmgr/lwlock.c
src/include/c.h

index 71caac1a1f47852c4dbe5ea27fa713c79fa8fc07..233606b41418125ddc782deb065aff8a86ea39d7 100644 (file)
@@ -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");
 
index c38ef8aed3e9778573d5adcd8ae2a9ed2c52f9e6..6b55181e0a1eae0f9b19d327264f6c5e1aaadfe4 100644 (file)
@@ -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 */