2017-12-06 21:24:55

by Prasad Sodagudi

[permalink] [raw]
Subject: unused-variable warning is getting disabled with clang


Hi All,

When kernel compiled with clang, following line is disabling the
unused-variable warning. This is not the case with gcc.
KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)

Are there any specific reasons for disabling unused-variable with clang?

--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
Forum,
Linux Foundation Collaborative Project


2017-12-07 06:25:58

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: unused-variable warning is getting disabled with clang

On Wed, Dec 06, 2017 at 01:24:51PM -0800, Sodagudi Prasad wrote:
>
> Hi All,
>
> When kernel compiled with clang, following line is disabling the
> unused-variable warning. This is not the case with gcc.
> KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
>
> Are there any specific reasons for disabling unused-variable with clang?

Try it and see why it is disabled :)

2017-12-08 02:16:59

by Prasad Sodagudi

[permalink] [raw]
Subject: Re: unused-variable warning is getting disabled with clang

On 2017-12-06 22:26, Greg Kroah-Hartman wrote:
> On Wed, Dec 06, 2017 at 01:24:51PM -0800, Sodagudi Prasad wrote:
>>
>> Hi All,
>>
>> When kernel compiled with clang, following line is disabling the
>> unused-variable warning. This is not the case with gcc.
>> KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
>>
>> Are there any specific reasons for disabling unused-variable with
>> clang?
>
> Try it and see why it is disabled :)

Hi Greg,

When I have enabled -Wunused-variable warnings with clang, observed both
-Wunused-variable and -Wunused-const-variable as expected.
It looks that, -Wunused-const-variable warnings are disabled explicitly
with GCC as well.
commit - c9c6837d39311b0c - "kbuild: move -Wunused-const-variable to
W=1 warning level"

I could see following warnings along with couple of -Wunused-variables
warnings with downstream code.
arch/arm64/crypto/sha1-ce-glue.c:118:1: warning: unused variable
'cpu_feature_match_SHA1' [-Wunused-const-variable]
include/linux/cpufeature.h:48:33: note: expanded from macro
'module_cpu_feature_match'
arch/arm64/crypto/sha2-ce-glue.c:148:1: warning: unused variable
'cpu_feature_match_SHA2' [-Wunused-const-variable]
arch/arm64/crypto/ghash-ce-glue.c:597:33: warning: unused variable
'ghash_cpu_feature' [-Wunused-const-variable]
arch/arm64/crypto/aes-ce-cipher.c:280:1: warning: unused variable
'cpu_feature_match_AES' [-Wunused-const-variable]
arch/arm64/crypto/aes-glue.c:674:1: warning: unused variable
'cpu_feature_match_AES' [-Wunused-const-variable]
kernel/trace/ftrace.c:1092:27: warning: unused variable
'ftrace_swapper_pid' [-Wunused-const-variable]
drivers/usb/host/ehci-platform.c:406:36: warning: unused variable
'ehci_acpi_match' [-Wunused-const-variable]
drivers/usb/host/xhci-plat.c:416:36: warning: unused variable
'usb_xhci_acpi_match' [-Wunused-const-variable]

So I have made following change and I will share patch for the same.

diff --git a/Makefile b/Makefile
index 4e6da2f..8a6c14e 100644
--- a/Makefile
+++ b/Makefile
@@ -711,7 +711,7 @@ endif
KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) -meabi gnu
KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)

Please let me know if you have any concerns with this approach to
identify all unused local variables.

-Thanks, Prasad

--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
Forum,
Linux Foundation Collaborative Project

2017-12-18 15:33:01

by Masahiro Yamada

[permalink] [raw]
Subject: Re: unused-variable warning is getting disabled with clang

2017-12-08 11:16 GMT+09:00 Sodagudi Prasad <[email protected]>:
> On 2017-12-06 22:26, Greg Kroah-Hartman wrote:
>>
>> On Wed, Dec 06, 2017 at 01:24:51PM -0800, Sodagudi Prasad wrote:
>>>
>>>
>>> Hi All,
>>>
>>> When kernel compiled with clang, following line is disabling the
>>> unused-variable warning. This is not the case with gcc.
>>> KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
>>>
>>> Are there any specific reasons for disabling unused-variable with clang?
>>
>>
>> Try it and see why it is disabled :)
>
>
> Hi Greg,
>
> When I have enabled -Wunused-variable warnings with clang, observed both
> -Wunused-variable and -Wunused-const-variable as expected.
> It looks that, -Wunused-const-variable warnings are disabled explicitly with
> GCC as well.
> commit - c9c6837d39311b0c - "kbuild: move -Wunused-const-variable to W=1
> warning level"
>
> I could see following warnings along with couple of -Wunused-variables
> warnings with downstream code.
> arch/arm64/crypto/sha1-ce-glue.c:118:1: warning: unused variable
> 'cpu_feature_match_SHA1' [-Wunused-const-variable]
> include/linux/cpufeature.h:48:33: note: expanded from macro
> 'module_cpu_feature_match'
> arch/arm64/crypto/sha2-ce-glue.c:148:1: warning: unused variable
> 'cpu_feature_match_SHA2' [-Wunused-const-variable]
> arch/arm64/crypto/ghash-ce-glue.c:597:33: warning: unused variable
> 'ghash_cpu_feature' [-Wunused-const-variable]
> arch/arm64/crypto/aes-ce-cipher.c:280:1: warning: unused variable
> 'cpu_feature_match_AES' [-Wunused-const-variable]
> arch/arm64/crypto/aes-glue.c:674:1: warning: unused variable
> 'cpu_feature_match_AES' [-Wunused-const-variable]
> kernel/trace/ftrace.c:1092:27: warning: unused variable 'ftrace_swapper_pid'
> [-Wunused-const-variable]
> drivers/usb/host/ehci-platform.c:406:36: warning: unused variable
> 'ehci_acpi_match' [-Wunused-const-variable]
> drivers/usb/host/xhci-plat.c:416:36: warning: unused variable
> 'usb_xhci_acpi_match' [-Wunused-const-variable]
>
> So I have made following change and I will share patch for the same.
>
> diff --git a/Makefile b/Makefile
> index 4e6da2f..8a6c14e 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -711,7 +711,7 @@ endif
> KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) -meabi gnu
> KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
> KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
> -KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
> +KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
> KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
> KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
> KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
>
> Please let me know if you have any concerns with this approach to identify
> all unused local variables.
>
> -Thanks, Prasad

This approach seems good, but
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
will be common for GCC and Clang.


Please move it out of "ifeq ... else .. endif"




--
Best Regards
Masahiro Yamada

2018-01-27 01:00:56

by Prasad Sodagudi

[permalink] [raw]
Subject: [PATCH] kbuild: clang: Disable -Wunused-const-variable warnings

Disable -Wunused-const-variable warnings instead of
disabling -Wunused-variable warnings, So that in both
clang and GCC -Wunused-const-variable gets disabled.

Currently with clang -Wunused-variable warnings are
disabled and with gcc -Wunused-variable warnings are
enabled, with this setting all unused local variable
would be warned in clang as well.

Signed-off-by: Prasad Sodagudi <[email protected]>
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 339397b..c730338 100644
--- a/Makefile
+++ b/Makefile
@@ -698,7 +698,6 @@ KBUILD_CFLAGS += $(stackp-flag)

ifeq ($(cc-name),clang)
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
@@ -719,6 +718,7 @@ KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
endif

+KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
ifdef CONFIG_FRAME_POINTER
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
else
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,\na Linux Foundation Collaborative Project


2018-01-28 16:24:41

by Segher Boessenkool

[permalink] [raw]
Subject: Re: [PATCH] kbuild: clang: Disable -Wunused-const-variable warnings

On Fri, Jan 26, 2018 at 04:59:46PM -0800, Prasad Sodagudi wrote:
> Disable -Wunused-const-variable warnings instead of
> disabling -Wunused-variable warnings, So that in both
> clang and GCC -Wunused-const-variable gets disabled.

Why would you disable -Wunused-const-variable on GCC? You do not
explain why.


Segher

2018-01-29 16:36:50

by Prasad Sodagudi

[permalink] [raw]
Subject: Re: [PATCH] kbuild: clang: Disable -Wunused-const-variable warnings

On 2018-01-28 08:22, Segher Boessenkool wrote:
> On Fri, Jan 26, 2018 at 04:59:46PM -0800, Prasad Sodagudi wrote:
>> Disable -Wunused-const-variable warnings instead of
>> disabling -Wunused-variable warnings, So that in both
>> clang and GCC -Wunused-const-variable gets disabled.
>
> Why would you disable -Wunused-const-variable on GCC? You do not
> explain why.

Hi Segher,

Please check below discussion with Greg and Masahiro about
"unused-variable".
https://lkml.org/lkml/2017/12/18/697


Please check this link, "unused-const-variable" warning is already
disabled for GCC.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Makefile?h=v4.15#n719
Below commit is disabling the "unused-const-variable" for GCC.
commit - c9c6837d39311b0c - "kbuild: move -Wunused-const-variable to
W=1 warning level"

Currently "unused-variable" warnings are disabled for clang and not for
the gcc. Disabling of
"unused-variable" warning also disables "unused-const-variable" warning.
To match same settings
between clang and gcc, disabling "unused-const-variable" warnings for
clang as well.
So with this patch, keeping the same settings for GCC and CLANG with
respect to "unused-const-variable".

-Thanks, Prasad

>
>
> Segher

--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
Forum,
Linux Foundation Collaborative Project

2018-01-29 17:09:55

by Prasad Sodagudi

[permalink] [raw]
Subject: [PATCH] kbuild: clang: Disable -Wunused-const-variable warnings

Currently -Wunused-variable warnings are disabled with
clang and with gcc -Wunused-variable warnings are
enabled, with this setting all unused local variables
would be warned in clang as well.

Disable -Wunused-const-variable warnings instead of
disabling -Wunused-variable warnings, So that in both
clang and GCC -Wunused-const-variable gets disabled.

Signed-off-by: Prasad Sodagudi <[email protected]>
---
Makefile | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 339397b..4b6c8e2 100644
--- a/Makefile
+++ b/Makefile
@@ -698,7 +698,6 @@ KBUILD_CFLAGS += $(stackp-flag)

ifeq ($(cc-name),clang)
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
@@ -716,9 +715,9 @@ else
# These warnings generated too much noise in a regular build.
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
endif

+KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
ifdef CONFIG_FRAME_POINTER
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
else
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,\na Linux Foundation Collaborative Project


2018-01-29 23:58:08

by Segher Boessenkool

[permalink] [raw]
Subject: Re: [PATCH] kbuild: clang: Disable -Wunused-const-variable warnings

Hi Prasad,

On Mon, Jan 29, 2018 at 09:08:00AM -0800, Prasad Sodagudi wrote:
> --- a/Makefile
> +++ b/Makefile
> @@ -698,7 +698,6 @@ KBUILD_CFLAGS += $(stackp-flag)
>
> ifeq ($(cc-name),clang)
> KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
> -KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
> KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
> KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
> KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
> @@ -716,9 +715,9 @@ else
> # These warnings generated too much noise in a regular build.
> # Use make W=1 to enable them (see scripts/Makefile.extrawarn)
> KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
> -KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
> endif
>
> +KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
> ifdef CONFIG_FRAME_POINTER
> KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
> else

Ah, much more obvious now, thanks :-)


Segher

2018-02-02 16:03:14

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] kbuild: clang: Disable -Wunused-const-variable warnings

2018-01-30 2:08 GMT+09:00 Prasad Sodagudi <[email protected]>:
> Currently -Wunused-variable warnings are disabled with
> clang and with gcc -Wunused-variable warnings are
> enabled, with this setting all unused local variables
> would be warned in clang as well.
>
> Disable -Wunused-const-variable warnings instead of
> disabling -Wunused-variable warnings, So that in both
> clang and GCC -Wunused-const-variable gets disabled.
>
> Signed-off-by: Prasad Sodagudi <[email protected]>

The code is OK, but I'd like to make the log even clearer.


The commit subject
"kbuild: clang: Disable -Wunused-const-variable warnings"
sounds confusing.

-Wunused-const-variable was already disabled for clang
because it was implied by Wno-unused-variable.


So, this patch is effectively enabling -Wunused-variable, right?


How about something like follows?

------------------------->8---------------------------------------
kbuild: clang: disable unused variable warnings only when constant

Currently, GCC disables -Wunused-const-variable, but not
-Wunused-variable, so warns unused variables if they are
non-constant.

While, Clang does not warn unused variables at all regardless of
the const qualifier because -Wno-unused-const-variable is implied
by the stronger option -Wno-unused-variable.

Disable -Wunused-const-variable instead of -Wunused-variable so that
GCC and Clang work in the same way.
--------------------------->8--------------------------------------


If it is tedious to resend, shall I reword the log locally?
Let me your thought.







> ---
> Makefile | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 339397b..4b6c8e2 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -698,7 +698,6 @@ KBUILD_CFLAGS += $(stackp-flag)
>
> ifeq ($(cc-name),clang)
> KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
> -KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
> KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
> KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
> KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
> @@ -716,9 +715,9 @@ else
> # These warnings generated too much noise in a regular build.
> # Use make W=1 to enable them (see scripts/Makefile.extrawarn)
> KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
> -KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
> endif
>
> +KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
> ifdef CONFIG_FRAME_POINTER
> KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
> else
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,\na Linux Foundation Collaborative Project
>



--
Best Regards
Masahiro Yamada

2018-02-06 23:47:55

by Prasad Sodagudi

[permalink] [raw]
Subject: [PATCH] kbuild: clang: disable unused variable warnings only when constant

Currently, GCC disables -Wunused-const-variable, but not
-Wunused-variable, so warns unused variables if they are
non-constant.

While, Clang does not warn unused variables at all regardless of
the const qualifier because -Wno-unused-const-variable is implied
by the stronger option -Wno-unused-variable.

Disable -Wunused-const-variable instead of -Wunused-variable so that
GCC and Clang work in the same way.

Signed-off-by: Prasad Sodagudi <[email protected]>
Reviewed-by: Masahiro Yamada <[email protected]>
---
Makefile | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 11aff0f..ca0a571 100644
--- a/Makefile
+++ b/Makefile
@@ -700,7 +700,6 @@ KBUILD_CFLAGS += $(stackp-flag)

ifeq ($(cc-name),clang)
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
@@ -718,9 +717,9 @@ else
# These warnings generated too much noise in a regular build.
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
endif

+KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
ifdef CONFIG_FRAME_POINTER
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
else
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,\na Linux Foundation Collaborative Project


2018-02-07 00:25:46

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] kbuild: clang: disable unused variable warnings only when constant

2018-02-07 8:46 GMT+09:00 Prasad Sodagudi <[email protected]>:
> Currently, GCC disables -Wunused-const-variable, but not
> -Wunused-variable, so warns unused variables if they are
> non-constant.
>
> While, Clang does not warn unused variables at all regardless of
> the const qualifier because -Wno-unused-const-variable is implied
> by the stronger option -Wno-unused-variable.
>
> Disable -Wunused-const-variable instead of -Wunused-variable so that
> GCC and Clang work in the same way.
>
> Signed-off-by: Prasad Sodagudi <[email protected]>
> Reviewed-by: Masahiro Yamada <[email protected]>

Applied to linux-kbuild/kbuild. Thanks!


--
Best Regards
Masahiro Yamada