[ovs-dev] [PATCH] test-atomic: Fix warnings for GCC4.9 and sparse
Daniele Di Proietto
ddiproietto at vmware.com
Wed Aug 6 17:35:11 UTC 2014
There's no reason for the local variable 'old_count' to be atomic. In fact, if
it is atomic it triggers a GCC4.9 warning (Wunused-value)
The global variables 'a' and 'paux' could be static, according to sparse.
Signed-off-by: Daniele Di Proietto <ddiproietto at vmware.com>
---
There's something interesting about the warning: GCC does not complain about
'old_count' being atomic, but about "right-hand operand of comma expression
having no effect" (the comma comes from OVS macro atomic_add_explicit()).
I've isolated a test case to trigger the warning:
/* main.c */
#include <stdatomic.h>
#include <stdint.h>
int main()
{
_Atomic(uint32_t) a = 0;
#ifdef TEST_ATOMIC_DST
_Atomic(uint32_t) b = 0;
#else
uint32_t b = 0;
#endif
b = atomic_fetch_add_explicit ((&a), (1), (memory_order_seq_cst)),
(void) 0;
return b;
}
When compiled with
gcc main.c -Wall
there's no warning. When compiled with
gcc main.c -Wall -DTEST_ATOMIC_DST
GCC complains with
main.c: In function ‘main’:
main.c:13:70: warning: right-hand operand of comma expression has no effect
[-Wunused-value]
b = atomic_fetch_add_explicit ((&a), (1), (memory_order_seq_cst)),
^
I'm using gcc (Debian 4.9.1-1) 4.9.1
---
tests/test-atomic.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/test-atomic.c b/tests/test-atomic.c
index ca293ba..31c06fa 100644
--- a/tests/test-atomic.c
+++ b/tests/test-atomic.c
@@ -167,7 +167,7 @@ test_atomic_flag(void)
ovs_assert(atomic_flag_test_and_set(&flag) == false);
}
-uint32_t a;
+static uint32_t a;
struct atomic_aux {
atomic_uint32_t count;
@@ -175,7 +175,7 @@ struct atomic_aux {
ATOMIC(uint32_t *) data;
};
-ATOMIC(struct atomic_aux *) paux = ATOMIC_VAR_INIT(NULL);
+static ATOMIC(struct atomic_aux *) paux = ATOMIC_VAR_INIT(NULL);
static struct atomic_aux *auxes = NULL;
#define ATOMIC_ITEM_COUNT 1000000
@@ -273,7 +273,7 @@ static void *
atomic_writer(void *aux_)
{
struct atomic_aux *aux = aux_;
- atomic_uint32_t old_count;
+ uint32_t old_count;
uint32_t *data;
size_t i;
--
2.0.1
More information about the dev
mailing list