[lttng-dev] [PATCH 1/3] urcu: avoid "expression result unused" from clang

Lai Jiangshan laijs at cn.fujitsu.com
Sun Dec 9 21:33:43 EST 2012


On 12/08/2012 11:00 PM, Mathieu Desnoyers wrote:
> * Lai Jiangshan (eag0628 at gmail.com) wrote:
>> How about the one in yy.diff?
>>
>> xx.diff fixes the one what I had sent in 1/3 patch, but it may still
>> cause warning in future if the complier become more strict.
> 
> Hrm. In any cases, I think that even with the 2 patches you propose, the
> warning "unused expression return" would still be valid (because we end
> up not using the result of the outer statement-expression). 

The one in yy.diff:

1 ? _v : statement_which_has_side_affect;

The compiler should not warn for it. "?:" can be used for control flow,
the complier should only warn if both branches are warning.


We might
> want to consider simpler approaches:
> 
> 1 - Add the missing (void) casts before each CMM_STORE_SHARED() in the
>     code. I don't like this because it makes the CMM_STORE_SHARED common
>     case more cumbersome to use.
> 2 - Change the CMM_STORE_SHARED() API so it does not return anything.
>     I think most use-cases don't involve using its return value anyway.
> 
> Thoughts ?
> 
> Thanks,
> 
> Mathieu
> 
>>
>> On Sat, Dec 8, 2012 at 1:27 AM, Lai Jiangshan <eag0628 at gmail.com> wrote:
>>>
>>>
>>> On Saturday, December 8, 2012, Mathieu Desnoyers wrote:
>>>>
>>>> * Lai Jiangshan (laijs at cn.fujitsu.com) wrote:
>>>>> The last expression result is unused and clang will complain.
>>>>> The trick in the patch supresses the complaint
>>>>
>>>> Hrm, but with this patch, gcc complains:
>>>>
>>>> rculfhash.c:1921:3: warning: variable '_w' set but not used
>>>> [-Wunused-but-set-variable]
>>>>
>>>> using
>>>>
>>>> gcc version 4.7.2 (Debian 4.7.2-4)
>>>
>>>
>>> Ouch, my gcc is too old
>>>
>>>
>>>>
>>>>
>>>> Thoughts ?
>>>>
>>>> Thanks,
>>>>
>>>> Mathieu
>>>>
>>>>>
>>>>> Signed-off-by: Lai Jiangshan <laijs at cn.fujitsu.com>
>>>>> ---
>>>>>  urcu/system.h        |    5 ++++-
>>>>>  2 files changed, 4 insertions(+), 1 deletions(-)
>>>>>
>>>>> diff --git a/urcu/system.h b/urcu/system.h
>>>>> index 2a45f22..6b7b0af 100644
>>>>> --- a/urcu/system.h
>>>>> +++ b/urcu/system.h
>>>>> @@ -46,12 +46,15 @@
>>>>>  /*
>>>>>   * Store v into x, where x is located in shared memory. Performs the
>>>>>   * required cache flush after writing. Returns v.
>>>>> + * "_w" here avoids the warning from clang:
>>>>> + *   warning: expression result unused [-Wunused-value]
>>>>>   */
>>>>>  #define CMM_STORE_SHARED(x, v)               \
>>>>>       ({                              \
>>>>>               __typeof__(x) _v = _CMM_STORE_SHARED(x, v);     \
>>>>> +             __typeof__(x) _w;       \
>>>>>               cmm_smp_wmc();          \
>>>>> -             _v;                     \
>>>>> +             _w = _v;                \
>>>>>       })
>>>>>
>>>>>  #endif /* _URCU_SYSTEM_H */
>>>>> --
>>>>> 1.7.4.4
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> lttng-dev mailing list
>>>>> lttng-dev at lists.lttng.org
>>>>> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>>>>
>>>>
>>>> --
>>>> Mathieu Desnoyers
>>>> Operating System Efficiency R&D Consultant
>>>> EfficiOS Inc.
>>>> http://www.efficios.com
>>>>
>>>> _______________________________________________
>>>> lttng-dev mailing list
>>>> lttng-dev at lists.lttng.org
>>>> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
> 
> 
> 
> 




More information about the lttng-dev mailing list