libevtr: Fix loop properly
authorJohn Marino <draco@marino.st>
Tue, 10 Feb 2015 11:51:37 +0000 (12:51 +0100)
committerJohn Marino <draco@marino.st>
Tue, 10 Feb 2015 11:56:44 +0000 (12:56 +0100)
The bruteforce fix should have used elements 0 - 2 because the strings
array was defined as EVTR_NS_MAX - 1, not EVTR_NS_MAX.  So the fix was
wrong, but it exposed the problem with the original code: the upper bound
of the loop was set to EVTR_NS_MAX, not EVTR_NS_MAX - 1 like the "maps"
version below it.

This commit reverts the previous change and fixes the problem with the
original code.

spotted-by: ivadasz

lib/libevtr/evtr.c

index c85d013..a4ea7a4 100644 (file)
@@ -1434,21 +1434,8 @@ evtr_close(evtr_t evtr)
 
        if (evtr->flags & EVTRF_WR) {
                hashtab_destroy(&evtr->fmts->tab);
-               /*
-                * Brute force soluion - the following loop fails to build
-                * with gcc48+ with the error "iteration 3u invokes undefined
-                * behavior [-Werror=aggressive-loop-optimizations]
-                * EVTR_NS_MAX is a constant 4.  Apparently it's the
-                * "strings" field causing the issue, because "maps" below
-                * compiles fine with same compiler.
-                *
-                * for (i = 0; i < EVTR_NS_MAX; ++i)
-                *         hashtab_destroy(&evtr->strings[i]->tab);
-                */
-               hashtab_destroy(&evtr->strings[0]->tab);
-               hashtab_destroy(&evtr->strings[1]->tab);
-               hashtab_destroy(&evtr->strings[2]->tab);
-               hashtab_destroy(&evtr->strings[3]->tab);
+               for (i = 0; i < EVTR_NS_MAX - 1; ++i)
+                       hashtab_destroy(&evtr->strings[i]->tab);
        } else {
                id_tree_free(&evtr->fmtmap.root);
                for (i = 0; i < EVTR_NS_MAX - 1; ++i) {