On 15/07/2019 11:35, Jan Beulich wrote:
> With non-empty CONFIG_DOM0_MEM clang5 produces
>
> dom0_build.c:344:24: error: use of logical '&&' with constant operand 
> [-Werror,-Wconstant-logical-operand]
>      if ( !dom0_mem_set && CONFIG_DOM0_MEM[0] )
>                         ^  ~~~~~~~~~~~~~~~~~~
> dom0_build.c:344:24: note: use '&' for a bitwise operation
>      if ( !dom0_mem_set && CONFIG_DOM0_MEM[0] )
>                         ^~
>                         &
> dom0_build.c:344:24: note: remove constant to silence this warning
>      if ( !dom0_mem_set && CONFIG_DOM0_MEM[0] )
>                        ~^~~~~~~~~~~~~~~~~~~~~
> 1 error generated.
>
> Obviously neither of the two suggestions are an option here. Oddly
> enough swapping the operands of the && helps, while e.g. casting or
> parenthesizing doesn't. Another workable variant looks to be the use of
> !! on the constant.
>
> Signed-off-by: Jan Beulich <jbeul...@suse.com>
> ---
> I'm open to going the !! or yet some different route. No matter which
> one we choose, I'm afraid it is going to remain guesswork what newer
> (and future) versions of clang will choke on.
>
> --- a/xen/arch/x86/dom0_build.c
> +++ b/xen/arch/x86/dom0_build.c
> @@ -341,7 +341,7 @@ unsigned long __init dom0_compute_nr_pag
>       unsigned long avail = 0, nr_pages, min_pages, max_pages;
>       bool need_paging;
>   
> -    if ( !dom0_mem_set && CONFIG_DOM0_MEM[0] )
> +    if ( CONFIG_DOM0_MEM[0] && !dom0_mem_set )
>           parse_dom0_mem(CONFIG_DOM0_MEM);

First and foremost, there is an identical construct on the ARM side,
which wants an equivalent adjustment.

As to the change, I'm going to suggest what I suggested instead of this
the first time around, which is strlen(CONFIG_DOM0_MEM) to make the
logic easier to follow.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to