diff mbox

Kbuild: use cc-disable-warning consistently for maybe-uninitialized

Message ID 20170113154010.2718601-1-arnd@arndb.de (mailing list archive)
State New, archived
Headers show

Commit Message

Arnd Bergmann Jan. 13, 2017, 3:40 p.m. UTC
In commit a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning
for "make W=1""), I reverted another change that happened to fix a problem
with old compilers, and now we get this report again with old compilers
(prior to gcc-4.8) and GCOV enabled:

   cc1: warnings being treated as errors
   drivers/gpu/drm/i915/intel_ringbuffer.c: In function 'intel_ring_setup_status_page':
   drivers/gpu/drm/i915/intel_ringbuffer.c:438: error: 'mmio.reg' may be used uninitialized in this function
   At top level:
>> cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"

The problem is that we turn off the warning conditionally in a number
of places as we should, but one of them does it unconditionally.
Instead, change it to call cc-disable-warning as we do elsewhere.

The original patch that caused it was merged into linux-4.7, then
4.8 removed the change and 4.9 brought it back, so we probably want
a backport to 4.9 once this is merged.

Cc: stable@vger.kernel.org
Fixes: a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"")
Fixes: e72e2dfe7c16 ("gcov: disable -Wmaybe-uninitialized warning")
Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Arnd Bergmann Jan. 27, 2017, 4:03 p.m. UTC | #1
On Fri, Jan 13, 2017 at 4:40 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> In commit a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning
> for "make W=1""), I reverted another change that happened to fix a problem
> with old compilers, and now we get this report again with old compilers
> (prior to gcc-4.8) and GCOV enabled:
>
>    cc1: warnings being treated as errors
>    drivers/gpu/drm/i915/intel_ringbuffer.c: In function 'intel_ring_setup_status_page':
>    drivers/gpu/drm/i915/intel_ringbuffer.c:438: error: 'mmio.reg' may be used uninitialized in this function
>    At top level:
>>> cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"
>
> The problem is that we turn off the warning conditionally in a number
> of places as we should, but one of them does it unconditionally.
> Instead, change it to call cc-disable-warning as we do elsewhere.
>
> The original patch that caused it was merged into linux-4.7, then
> 4.8 removed the change and 4.9 brought it back, so we probably want
> a backport to 4.9 once this is merged.
>
> Cc: stable@vger.kernel.org
> Fixes: a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"")
> Fixes: e72e2dfe7c16 ("gcov: disable -Wmaybe-uninitialized warning")
> Reported-by: kbuild test robot <fengguang.wu@intel.com>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---

Hi Michal,

any plans to pick this up for v4.10?

   Arnd

>  Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index 4fcc0f2dd93c..dbe9ce5d0e96 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -370,7 +370,7 @@ LDFLAGS_MODULE  =
>  CFLAGS_KERNEL  =
>  AFLAGS_KERNEL  =
>  LDFLAGS_vmlinux =
> -CFLAGS_GCOV    = -fprofile-arcs -ftest-coverage -fno-tree-loop-im -Wno-maybe-uninitialized
> +CFLAGS_GCOV    = -fprofile-arcs -ftest-coverage -fno-tree-loop-im $(call cc-disable-warning,maybe-uninitialized,)
>  CFLAGS_KCOV    := $(call cc-option,-fsanitize-coverage=trace-pc,)
>
>
> --
> 2.9.0
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Masahiro Yamada March 14, 2017, 4:17 p.m. UTC | #2
Hi Arnd,

2017-01-14 0:40 GMT+09:00 Arnd Bergmann <arnd@arndb.de>:
> In commit a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning
> for "make W=1""), I reverted another change that happened to fix a problem
> with old compilers, and now we get this report again with old compilers
> (prior to gcc-4.8) and GCOV enabled:
>
>    cc1: warnings being treated as errors
>    drivers/gpu/drm/i915/intel_ringbuffer.c: In function 'intel_ring_setup_status_page':
>    drivers/gpu/drm/i915/intel_ringbuffer.c:438: error: 'mmio.reg' may be used uninitialized in this function
>    At top level:
>>> cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"
>
> The problem is that we turn off the warning conditionally in a number
> of places as we should, but one of them does it unconditionally.
> Instead, change it to call cc-disable-warning as we do elsewhere.
>
> The original patch that caused it was merged into linux-4.7, then
> 4.8 removed the change and 4.9 brought it back, so we probably want
> a backport to 4.9 once this is merged.
>
> Cc: stable@vger.kernel.org
> Fixes: a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"")
> Fixes: e72e2dfe7c16 ("gcov: disable -Wmaybe-uninitialized warning")
> Reported-by: kbuild test robot <fengguang.wu@intel.com>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>


Applied to linux-kbuild/fixes.


But, please let me ask one question.

When I was checking your commit a76bcf557ef4,
I noticed the following code:


KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \
                       $(call cc-disable-warning,maybe-uninitialized,))



It was not clear to me where this comes from
because it is not the revert of Linus' commit.


My best guess is:
maybe-uninitialized was introduced by gcc 4.7,
but only reliable for gcc 4.9 or later.
So it should be disabled for gcc < 4.9


Is this correct?


Thanks!
Arnd Bergmann March 14, 2017, 8:52 p.m. UTC | #3
On Tue, Mar 14, 2017 at 5:17 PM, Masahiro Yamada
<yamada.masahiro@socionext.com> wrote:
> Hi Arnd,
>
> 2017-01-14 0:40 GMT+09:00 Arnd Bergmann <arnd@arndb.de>:
>> In commit a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning
>> for "make W=1""), I reverted another change that happened to fix a problem
>> with old compilers, and now we get this report again with old compilers
>> (prior to gcc-4.8) and GCOV enabled:
>>
>>    cc1: warnings being treated as errors
>>    drivers/gpu/drm/i915/intel_ringbuffer.c: In function 'intel_ring_setup_status_page':
>>    drivers/gpu/drm/i915/intel_ringbuffer.c:438: error: 'mmio.reg' may be used uninitialized in this function
>>    At top level:
>>>> cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"
>>
>> The problem is that we turn off the warning conditionally in a number
>> of places as we should, but one of them does it unconditionally.
>> Instead, change it to call cc-disable-warning as we do elsewhere.
>>
>> The original patch that caused it was merged into linux-4.7, then
>> 4.8 removed the change and 4.9 brought it back, so we probably want
>> a backport to 4.9 once this is merged.
>>
>> Cc: stable@vger.kernel.org
>> Fixes: a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"")
>> Fixes: e72e2dfe7c16 ("gcov: disable -Wmaybe-uninitialized warning")
>> Reported-by: kbuild test robot <fengguang.wu@intel.com>
>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>
>
> Applied to linux-kbuild/fixes.

Thanks!

> But, please let me ask one question.
>
> When I was checking your commit a76bcf557ef4,
> I noticed the following code:
>
>
> KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \
>                        $(call cc-disable-warning,maybe-uninitialized,))
>
>
>
> It was not clear to me where this comes from
> because it is not the revert of Linus' commit.
>
>
> My best guess is:
> maybe-uninitialized was introduced by gcc 4.7,
> but only reliable for gcc 4.9 or later.
> So it should be disabled for gcc < 4.9
>
>
> Is this correct?

Yes. Actually this warning is by definition not reliable, but gcc-4.9
got a lot better than earlier versions, and the set of false positives
in 4.9 is different from the one in 4.8, which introduced the flag.
As most people have 4.9 or higher, it makes sense to address all
the warnings found by that version by modifying the code (either
fixing bugs or working around false positives), but to just disable it
for 4.8 and earlier.

In older compiler versions, -Wuninitialized controlled both the
"definitely uninitialized" and the "possibly uninitialized" warnings,
and also had a lot of false positives, but 4.7 and earlier also
prouce lots of other warnings. I try to get a warning free build with
4.8 and higher but don't even try for old versions at the moment,
though I have an idea for how we could do that too.

        Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnd Bergmann March 16, 2017, 2:23 p.m. UTC | #4
On Tue, Mar 14, 2017 at 9:52 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> On Tue, Mar 14, 2017 at 5:17 PM, Masahiro Yamada
> <yamada.masahiro@socionext.com> wrote:
>> Hi Arnd,
>>
>> 2017-01-14 0:40 GMT+09:00 Arnd Bergmann <arnd@arndb.de>:
>>> In commit a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning
>>> for "make W=1""), I reverted another change that happened to fix a problem
>>> with old compilers, and now we get this report again with old compilers
>>> (prior to gcc-4.8) and GCOV enabled:
>>>
>>>    cc1: warnings being treated as errors
>>>    drivers/gpu/drm/i915/intel_ringbuffer.c: In function 'intel_ring_setup_status_page':
>>>    drivers/gpu/drm/i915/intel_ringbuffer.c:438: error: 'mmio.reg' may be used uninitialized in this function
>>>    At top level:
>>>>> cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"
>>>
>>> The problem is that we turn off the warning conditionally in a number
>>> of places as we should, but one of them does it unconditionally.
>>> Instead, change it to call cc-disable-warning as we do elsewhere.
>>>
>>> The original patch that caused it was merged into linux-4.7, then
>>> 4.8 removed the change and 4.9 brought it back, so we probably want
>>> a backport to 4.9 once this is merged.
>>>
>>> Cc: stable@vger.kernel.org
>>> Fixes: a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"")
>>> Fixes: e72e2dfe7c16 ("gcov: disable -Wmaybe-uninitialized warning")
>>> Reported-by: kbuild test robot <fengguang.wu@intel.com>
>>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>>
>>
>> Applied to linux-kbuild/fixes.

Hmm, after I've carried this patch for months, I now found that it
caused a build
time regression. I'm sending a fix for that too, please either apply the fix
on top, or fold it into the first patch.

     Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Masahiro Yamada March 16, 2017, 5:35 p.m. UTC | #5
Hi Arnd,

2017-03-15 5:52 GMT+09:00 Arnd Bergmann <arnd@arndb.de>:
> On Tue, Mar 14, 2017 at 5:17 PM, Masahiro Yamada
> <yamada.masahiro@socionext.com> wrote:
>> Hi Arnd,
>>
>> 2017-01-14 0:40 GMT+09:00 Arnd Bergmann <arnd@arndb.de>:
>>> In commit a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning
>>> for "make W=1""), I reverted another change that happened to fix a problem
>>> with old compilers, and now we get this report again with old compilers
>>> (prior to gcc-4.8) and GCOV enabled:
>>>
>>>    cc1: warnings being treated as errors
>>>    drivers/gpu/drm/i915/intel_ringbuffer.c: In function 'intel_ring_setup_status_page':
>>>    drivers/gpu/drm/i915/intel_ringbuffer.c:438: error: 'mmio.reg' may be used uninitialized in this function
>>>    At top level:
>>>>> cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"
>>>
>>> The problem is that we turn off the warning conditionally in a number
>>> of places as we should, but one of them does it unconditionally.
>>> Instead, change it to call cc-disable-warning as we do elsewhere.
>>>
>>> The original patch that caused it was merged into linux-4.7, then
>>> 4.8 removed the change and 4.9 brought it back, so we probably want
>>> a backport to 4.9 once this is merged.
>>>
>>> Cc: stable@vger.kernel.org
>>> Fixes: a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"")
>>> Fixes: e72e2dfe7c16 ("gcov: disable -Wmaybe-uninitialized warning")
>>> Reported-by: kbuild test robot <fengguang.wu@intel.com>
>>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>>
>>
>> Applied to linux-kbuild/fixes.
>
> Thanks!
>
>> But, please let me ask one question.
>>
>> When I was checking your commit a76bcf557ef4,
>> I noticed the following code:
>>
>>
>> KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \
>>                        $(call cc-disable-warning,maybe-uninitialized,))
>>
>>
>>
>> It was not clear to me where this comes from
>> because it is not the revert of Linus' commit.
>>
>>
>> My best guess is:
>> maybe-uninitialized was introduced by gcc 4.7,
>> but only reliable for gcc 4.9 or later.
>> So it should be disabled for gcc < 4.9
>>
>>
>> Is this correct?
>
> Yes. Actually this warning is by definition not reliable, but gcc-4.9
> got a lot better than earlier versions, and the set of false positives
> in 4.9 is different from the one in 4.8, which introduced the flag.
> As most people have 4.9 or higher, it makes sense to address all
> the warnings found by that version by modifying the code (either
> fixing bugs or working around false positives), but to just disable it
> for 4.8 and earlier.
>
> In older compiler versions, -Wuninitialized controlled both the
> "definitely uninitialized" and the "possibly uninitialized" warnings,
> and also had a lot of false positives, but 4.7 and earlier also
> prouce lots of other warnings. I try to get a warning free build with
> 4.8 and higher but don't even try for old versions at the moment,
> though I have an idea for how we could do that too.
>

Thanks for clarification!
Masahiro Yamada March 16, 2017, 5:38 p.m. UTC | #6
Hi Arnd,

2017-03-16 23:23 GMT+09:00 Arnd Bergmann <arnd@arndb.de>:
> On Tue, Mar 14, 2017 at 9:52 PM, Arnd Bergmann <arnd@arndb.de> wrote:
>> On Tue, Mar 14, 2017 at 5:17 PM, Masahiro Yamada
>> <yamada.masahiro@socionext.com> wrote:
>>> Hi Arnd,
>>>
>>> 2017-01-14 0:40 GMT+09:00 Arnd Bergmann <arnd@arndb.de>:
>>>> In commit a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning
>>>> for "make W=1""), I reverted another change that happened to fix a problem
>>>> with old compilers, and now we get this report again with old compilers
>>>> (prior to gcc-4.8) and GCOV enabled:
>>>>
>>>>    cc1: warnings being treated as errors
>>>>    drivers/gpu/drm/i915/intel_ringbuffer.c: In function 'intel_ring_setup_status_page':
>>>>    drivers/gpu/drm/i915/intel_ringbuffer.c:438: error: 'mmio.reg' may be used uninitialized in this function
>>>>    At top level:
>>>>>> cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"
>>>>
>>>> The problem is that we turn off the warning conditionally in a number
>>>> of places as we should, but one of them does it unconditionally.
>>>> Instead, change it to call cc-disable-warning as we do elsewhere.
>>>>
>>>> The original patch that caused it was merged into linux-4.7, then
>>>> 4.8 removed the change and 4.9 brought it back, so we probably want
>>>> a backport to 4.9 once this is merged.
>>>>
>>>> Cc: stable@vger.kernel.org
>>>> Fixes: a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"")
>>>> Fixes: e72e2dfe7c16 ("gcov: disable -Wmaybe-uninitialized warning")
>>>> Reported-by: kbuild test robot <fengguang.wu@intel.com>
>>>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>>>
>>>
>>> Applied to linux-kbuild/fixes.
>
> Hmm, after I've carried this patch for months, I now found that it
> caused a build
> time regression. I'm sending a fix for that too, please either apply the fix
> on top, or fold it into the first patch.
>

It is good that I had forgot to push my branch.
I will squash the two.

I'd like to combine the two git-log.

The git-log of the squashed one will be like follows.
If you want to edit it more, please let me know. Thanks!


---------------------------------------->8-------------------------------------

build: use cc-disable-warning consistently for maybe-uninitialized

In commit a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning
for "make W=1""), I reverted another change that happened to fix a problem
with old compilers, and now we get this report again with old compilers
(prior to gcc-4.8) and GCOV enabled:

   cc1: warnings being treated as errors
   drivers/gpu/drm/i915/intel_ringbuffer.c: In function
'intel_ring_setup_status_page':
   drivers/gpu/drm/i915/intel_ringbuffer.c:438: error: 'mmio.reg' may
be used uninitialized in this function
   At top level:
>> cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"

The problem is that we turn off the warning conditionally in a number
of places as we should, but one of them does it unconditionally.
Instead, change it to call cc-disable-warning as we do elsewhere.

The original patch that caused it was merged into linux-4.7, then
4.8 removed the change and 4.9 brought it back, so we probably want
a backport to 4.9 once this is merged.

Use a ':=' assignment instead of '=' to force the cc-disable-warning
call to only be evaluated once instead of every time.

Cc: stable@vger.kernel.org
Fixes: a76bcf557ef4 ("Kbuild: enable -Wmaybe-uninitialized warning for
"make W=1"")
Fixes: e72e2dfe7c16 ("gcov: disable -Wmaybe-uninitialized warning")
Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

---------------------------------------->8-------------------------------------
diff mbox

Patch

diff --git a/Makefile b/Makefile
index 4fcc0f2dd93c..dbe9ce5d0e96 100644
--- a/Makefile
+++ b/Makefile
@@ -370,7 +370,7 @@  LDFLAGS_MODULE  =
 CFLAGS_KERNEL	=
 AFLAGS_KERNEL	=
 LDFLAGS_vmlinux =
-CFLAGS_GCOV	= -fprofile-arcs -ftest-coverage -fno-tree-loop-im -Wno-maybe-uninitialized
+CFLAGS_GCOV	= -fprofile-arcs -ftest-coverage -fno-tree-loop-im $(call cc-disable-warning,maybe-uninitialized,)
 CFLAGS_KCOV	:= $(call cc-option,-fsanitize-coverage=trace-pc,)