From: Ferruh Yigit Date: Mon, 11 May 2020 16:07:22 +0000 (+0100) Subject: ring: fix build for gcc O1 optimization X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=867b49d17ac76ac202c307b700c0303ca815300d ring: fix build for gcc O1 optimization Can be reproduced with "make EXTRA_CFLAGS='-O1'" command using gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2) Two build errors: 1) In file included from .../build/include/rte_ring_elem.h:1093, from .../lib/librte_rcu/rte_rcu_qsbr.c:21: ../lib/librte_rcu/rte_rcu_qsbr.c: In function ‘rte_rcu_qsbr_dq_reclaim’: .../build/include/rte_ring_peek.h:282:22: error: ‘avail’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 282 | *available = avail - n; | ~~~~~~^~~ ./build/include/rte_ring_peek.h:259:11: note: ‘avail’ was declared here 259 | uint32_t avail, head, next; | ^~~~~ 2) In file included from .../build/include/rte_ring_elem.h:1093, from .../build/include/rte_ring.h:405, from .../app/test/test_ring_stress.h:13, from .../app/test/test_ring_stress_impl.h:5, from .../app/test/test_ring_peek_stress.c:5: .../app/test/test_ring_peek_stress.c: In function ‘_st_ring_enqueue_bulk’: .../build/include/rte_ring_peek.h:80:22: error: ‘free’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 80 | *free_space = free - n; | ~~~~~^~~ .../build/include/rte_ring_peek.h:60:11: note: ‘free’ was declared here 60 | uint32_t free, head, next; | ^~~~ The cases shouldn't be hit, and it looks like there is already logic error if it has been hit, but assigning 'avail' & 'free' to '0' to fix the build error. Signed-off-by: Ferruh Yigit Acked-by: Konstantin Ananyev --- diff --git a/lib/librte_ring/rte_ring_peek.h b/lib/librte_ring/rte_ring_peek.h index d5e6ea1cf3..45f707dc7e 100644 --- a/lib/librte_ring/rte_ring_peek.h +++ b/lib/librte_ring/rte_ring_peek.h @@ -74,6 +74,7 @@ __rte_ring_do_enqueue_start(struct rte_ring *r, uint32_t n, /* unsupported mode, shouldn't be here */ RTE_ASSERT(0); n = 0; + free = 0; } if (free_space != NULL) @@ -273,6 +274,7 @@ __rte_ring_do_dequeue_start(struct rte_ring *r, void *obj_table, /* unsupported mode, shouldn't be here */ RTE_ASSERT(0); n = 0; + avail = 0; } if (n != 0)