Thanks,

Daniele

On 8/6/14, 11:07 AM, "Jarno Rajahalme" <jrajaha...@nicira.com> wrote:

>Daniele,
>
>Thanks for spotting these. GCC error message may be cryptic, but using an
>atomic variable as the return value is an error regardless.
>
>Acked-by: Jarno Rajahalme <jrajaha...@nicira.com>
>
>Pushed to master,
>
>  Jarno
>
>On Aug 6, 2014, at 10:35 AM, Daniele Di Proietto <ddiproie...@vmware.com>
>wrote:
>
>> 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 <ddiproie...@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
>> 
>> _______________________________________________
>> dev mailing list
>> dev@openvswitch.org
>> 
>>https://urldefense.proofpoint.com/v1/url?u=http://openvswitch.org/mailman
>>/listinfo/dev&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=MV9BdLjtFIdhBDBaw5z%2
>>BU6SSA2gAfY4L%2F1HCy3VjlKU%3D%0A&m=XE2zPadAxTGxbIcaeiPkkwVAkmctcz5orBACaG
>>Ux5wU%3D%0A&s=3ffec66cb9cd408188f182595a5da510c43f37589962b80e9fafaa4deb4
>>de90a
>

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to