[PATCH] LoongArch: Fix use of logical '&&' with constant operand

WangYuli posted 1 patch 11 months, 1 week ago
arch/loongarch/kernel/setup.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] LoongArch: Fix use of logical '&&' with constant operand
Posted by WangYuli 11 months, 1 week ago
Fix follow error with clang-19:

arch/loongarch/kernel/setup.c:335:40: error: use of logical '&&' with constant operand [-Werror,-Wconstant-logical-operand]
  335 |         if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
      |                                               ^  ~~~~~~~~~~~~~~~~~
arch/loongarch/kernel/setup.c:335:40: note: use '&' for a bitwise operation
  335 |         if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
      |                                               ^~
      |                                               &
arch/loongarch/kernel/setup.c:335:40: note: remove constant to silence this warning
  335 |         if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
      |                                               ^~~~~~~~~~~~~~~~~~~~
1 error generated.

Fixes: 83da30d73b86 ("LoongArch: Fix CMDLINE_EXTEND and CMDLINE_BOOTLOADER handling")
Co-developed-by: Wentao Guan <guanwentao@uniontech.com>
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
Signed-off-by: Yuli Wang <wangyuli@uniontech.com>
---
 arch/loongarch/kernel/setup.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/loongarch/kernel/setup.c b/arch/loongarch/kernel/setup.c
index edcfdfcad7d2..834bea7f42da 100644
--- a/arch/loongarch/kernel/setup.c
+++ b/arch/loongarch/kernel/setup.c
@@ -332,7 +332,7 @@ static void __init bootcmdline_init(char **cmdline_p)
 	 * Append built-in command line to the bootloader command line if
 	 * CONFIG_CMDLINE_EXTEND is enabled.
 	 */
-	if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
+	if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && !!CONFIG_CMDLINE[0]) {
 		strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
 		strlcat(boot_command_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
 	}
-- 
2.47.2
Re: [PATCH] LoongArch: Fix use of logical '&&' with constant operand
Posted by David Laight 11 months ago
On Tue,  4 Mar 2025 18:52:46 +0800
WangYuli <wangyuli@uniontech.com> wrote:

> Fix follow error with clang-19:
> 
> arch/loongarch/kernel/setup.c:335:40: error: use of logical '&&' with constant operand [-Werror,-Wconstant-logical-operand]
>   335 |         if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
>       |                                               ^  ~~~~~~~~~~~~~~~~~
> arch/loongarch/kernel/setup.c:335:40: note: use '&' for a bitwise operation
>   335 |         if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
>       |                                               ^~
>       |                                               &
> arch/loongarch/kernel/setup.c:335:40: note: remove constant to silence this warning
>   335 |         if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
>       |                                               ^~~~~~~~~~~~~~~~~~~~
> 1 error generated.

Isn't that just 'an error too far' ?

There is nothing really wrong with compile-time constants in conditionals.
The kernel is full of them.

Why not just disable the warning?

	David
Re: [PATCH] LoongArch: Fix use of logical '&&' with constant operand
Posted by Huacai Chen 11 months, 1 week ago
On Tue, Mar 4, 2025 at 6:53 PM WangYuli <wangyuli@uniontech.com> wrote:
>
> Fix follow error with clang-19:
>
> arch/loongarch/kernel/setup.c:335:40: error: use of logical '&&' with constant operand [-Werror,-Wconstant-logical-operand]
>   335 |         if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
>       |                                               ^  ~~~~~~~~~~~~~~~~~
> arch/loongarch/kernel/setup.c:335:40: note: use '&' for a bitwise operation
>   335 |         if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
>       |                                               ^~
>       |                                               &
> arch/loongarch/kernel/setup.c:335:40: note: remove constant to silence this warning
>   335 |         if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
>       |                                               ^~~~~~~~~~~~~~~~~~~~
> 1 error generated.
Are you kidding me? CONFIG_CMDLINE[0] is a constant for a specific
config but the config is variable across buildings. So the "constant"
for compilers is not as "constant" for people. Compiler warnings
should be double-checked by people, right?

Huacai

>
> Fixes: 83da30d73b86 ("LoongArch: Fix CMDLINE_EXTEND and CMDLINE_BOOTLOADER handling")
> Co-developed-by: Wentao Guan <guanwentao@uniontech.com>
> Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
> Signed-off-by: Yuli Wang <wangyuli@uniontech.com>
> ---
>  arch/loongarch/kernel/setup.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/loongarch/kernel/setup.c b/arch/loongarch/kernel/setup.c
> index edcfdfcad7d2..834bea7f42da 100644
> --- a/arch/loongarch/kernel/setup.c
> +++ b/arch/loongarch/kernel/setup.c
> @@ -332,7 +332,7 @@ static void __init bootcmdline_init(char **cmdline_p)
>          * Append built-in command line to the bootloader command line if
>          * CONFIG_CMDLINE_EXTEND is enabled.
>          */
> -       if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && CONFIG_CMDLINE[0]) {
> +       if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) && !!CONFIG_CMDLINE[0]) {
>                 strlcat(boot_command_line, " ", COMMAND_LINE_SIZE);
>                 strlcat(boot_command_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
>         }
> --
> 2.47.2
>
Re: [PATCH] LoongArch: Fix use of logical '&&' with constant operand
Posted by WangYuli 11 months ago
Hi Huacai,

On 2025/3/4 20:00, Huacai Chen wrote:
> Are you kidding me?

nope

> CONFIG_CMDLINE[0] is a constant for a specific
> config but the config is variable across buildings. So the "constant"
> for compilers is not as "constant" for people.

Perhaps I'm not fully understanding your point.

 From my vantage point, it appears that all that's necessary is to 
ascertain whether CONFIG_CMDLINE[0] is a null value.

Given that the ASCII representation of NUL is indeed 0, this method of 
boolean coercion followed by a logical conjunction with the antecedent 
boolean value should not impinge upon the intended operationality of 
this line of code, and it further obviates a compilation warning.

To be precise, amending !!CONFIG_CMDLINE[0] to (CONFIG_CMDLINE[0] == 0) 
or converting the logical AND to a bitwise AND operation would also 
likely engender a commensurate outcome.

I merely opted for one modification strategy and patched it.

> Compiler warnings
> should be double-checked by people, right?

Naturally.

Compilers are, in essence, just sophisticated software programs, and are 
susceptible to numerous imperfections.

Nonetheless, for the most part, the warnings and error reports they 
output are typically justified.


Thanks.

-- 
Yuli Wang*
*