Fix: backported from urcu commit 92af1a30
authorDavid Goulet <dgoulet@efficios.com>
Thu, 28 Nov 2013 19:55:07 +0000 (14:55 -0500)
committerDavid Goulet <dgoulet@efficios.com>
Thu, 28 Nov 2013 21:19:17 +0000 (16:19 -0500)
commit 92af1a30ca6a70945b167c31631c8598a626c71a
Author: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Date:   Thu Nov 28 18:41:13 2013 +0100

    Fix undefined NULL pointer arithmetic

    Clang 3.3 with -O2 optimisations is especially picky about arithmetic
    on NULL pointers. This undefined behavior is turned into optimized out
    NULL checks by clang 3.3. Fix the undefined behavior by checking against
    the pointer directly, without going back and forth around NULL with
    pointer arithmetic.

Reported-by: Zifei Tong <soariez@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
src/common/hashtable/rculfhash.h

index 17cf6db8443faef5b9c4befedf1e7b2b517de30d..adb5d9d4fe41b82993ec0da288c9e186029ca2c9 100644 (file)
@@ -458,7 +458,7 @@ void cds_lfht_resize(struct cds_lfht *ht, unsigned long new_size);
        for (cds_lfht_first(ht, iter),                                  \
                        pos = caa_container_of(cds_lfht_iter_get_node(iter), \
                                        __typeof__(*(pos)), member);    \
-               &(pos)->member != NULL;                                 \
+               cds_lfht_iter_get_node(iter) != NULL;                   \
                cds_lfht_next(ht, iter),                                \
                        pos = caa_container_of(cds_lfht_iter_get_node(iter), \
                                        __typeof__(*(pos)), member))
@@ -468,7 +468,7 @@ void cds_lfht_resize(struct cds_lfht *ht, unsigned long new_size);
        for (cds_lfht_lookup(ht, hash, match, key, iter),               \
                        pos = caa_container_of(cds_lfht_iter_get_node(iter), \
                                        __typeof__(*(pos)), member);    \
-               &(pos)->member != NULL;                                 \
+               cds_lfht_iter_get_node(iter) != NULL;                   \
                cds_lfht_next_duplicate(ht, match, key, iter),          \
                        pos = caa_container_of(cds_lfht_iter_get_node(iter), \
                                        __typeof__(*(pos)), member))
This page took 0.026269 seconds and 4 git commands to generate.