Re: [patch] compiler, clang: suppress warning for unused static inline functions

From: David Rientjes
Date: Tue May 30 2017 - 20:10:29 EST


On Wed, 24 May 2017, Doug Anderson wrote:

> * Matthias has been sending out individual patches that take each
> particular case into account to try to remove the warnings. In some
> cases this removes totally dead code. In other cases this adds
> __maybe_unused. ...and as a last resort it uses #ifdef. In each of
> these individual patches we wouldn't want a list of all other patches,
> I think.
>

Again, I defer to maintainers like Andrew and Ingo who have to deal with
an enormous amount of patches on how they would like to handle it; I don't
think myself or anybody else who doesn't deal with a large number of
patches should be mandating how it's handled.

For reference, the patchset that this patch originated from added 8 lines
and removed 1, so I disagree that this cleans anything up; in reality, it
obfuscates the code and makes the #ifdef nesting more complex.

> If you just want a list of things in response to this thread...
>
> Clang's behavior has found some dead code, as shown by:
>
> * https://patchwork.kernel.org/patch/9732161/
> ring-buffer: Remove unused function __rb_data_page_index()
> * https://patchwork.kernel.org/patch/9735027/
> r8152: Remove unused function usb_ocp_read()
> * https://patchwork.kernel.org/patch/9735053/
> net1080: Remove unused function nc_dump_ttl()
> * https://patchwork.kernel.org/patch/9741513/
> crypto: rng: Remove unused function __crypto_rng_cast()
> * https://patchwork.kernel.org/patch/9741539/
> x86/ioapic: Remove unused function IO_APIC_irq_trigger()
> * https://patchwork.kernel.org/patch/9741549/
> ASoC: Intel: sst: Remove unused function sst_restore_shim64()
> * https://patchwork.kernel.org/patch/9743225/
> ASoC: cht_bsw_max98090_ti: Remove unused function cht_get_codec_dai()
>
> ...plus more examples...
>

Let us please not confuse the matter by suggesting that you cannot
continue to do this work by simply removing the __attribute__((unused))
and emailing kernel-janitors to cleanup unused code (which should already
be significantly small by the sheer fact that it is inlined).

> However, clang's behavior has also led to patches that add a
> "__maybe_unused" attribute (usually no increase in LOC unless it
> causes word wrap) and also added a handful of #ifdefs, as you've
> pointed out. The example we already talked about was:
>

The good work to remove truly dead code may easily continue while not
adding more and more LOC to suppress these warnings for a compiler that is
very heavily in the minority.