chiark / gitweb /
basic/hashmap: tweak code to avoid pointless gcc warning
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 2 Feb 2018 13:34:00 +0000 (14:34 +0100)
committerSven Eden <yamakuzure@gmx.net>
Wed, 30 May 2018 05:58:47 +0000 (07:58 +0200)
gcc says:
[196/1142] Compiling C object 'src/basic/basic@sta/hashmap.c.o'.
../src/basic/hashmap.c: In function ‘cachemem_maintain’:
../src/basic/hashmap.c:1913:17: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
                 mem->active = r = true;
                 ^~~

which conflates two things: the first is transitive assignent a = b = c = d;
the second is assignment of the value of an expression, which happens to be a
an assignment expression here, and boolean. While the second _should_ be
parenthesized, the first should _not_, and it's more natural to understand
our code as the first, and gcc should treat this as an exception and not emit
the warning. But since it's a while until this will be fixed, let's update
our code too.

src/basic/hashmap.c

index 876a10eeb3f23e67099f1e7d52a15c64de612185..03ed3b8df1502360206863fbc10092a35e98ce38 100644 (file)
@@ -1904,8 +1904,6 @@ int set_put_strsplit(Set *s, const char *v, const char *separators, ExtractFlags
 
 /* expand the cachemem if needed, return true if newly (re)activated. */
 static int cachemem_maintain(CacheMem *mem, unsigned size) {
-        int r = false;
-
         assert(mem);
 
         if (!GREEDY_REALLOC(mem->ptr, mem->n_allocated, size)) {
@@ -1913,10 +1911,12 @@ static int cachemem_maintain(CacheMem *mem, unsigned size) {
                         return -ENOMEM;
         }
 
-        if (!mem->active)
-                mem->active = r = true;
+        if (!mem->active) {
+                mem->active = true;
+                return true;
+        }
 
-        return r;
+        return false;
 }
 
 int iterated_cache_get(IteratedCache *cache, const void ***res_keys, const void ***res_values, unsigned *res_n_entries) {