Re: [PATCH] Kbuild: use cc-disable-warning consistently for maybe-uninitialized

From: Masahiro Yamada
Date: Thu Mar 16 2017 - 13:35:33 EST


Hi Arnd,

2017-03-15 5:52 GMT+09:00 Arnd Bergmann <arnd@xxxxxxxx>:
> On Tue, Mar 14, 2017 at 5:17 PM, Masahiro Yamada
> <yamada.masahiro@xxxxxxxxxxxxx> wrote:
>> Hi Arnd,
>>
>> 2017-01-14 0:40 GMT+09:00 Arnd Bergmann <arnd@xxxxxxxx>:
>>> 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@xxxxxxxxxxxxxxx
>>> 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@xxxxxxxxx>
>>> Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
>>
>>
>> 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!




--
Best Regards
Masahiro Yamada