On Fri, Feb 16, 2018 at 11:14 PM, Arnd Bergmann arnd@arndb.de wrote:
On Fri, Feb 16, 2018 at 11:03 PM, Steven Rostedt rostedt@goodmis.org wrote:
On Fri, 16 Feb 2018 22:41:11 +0100 Arnd Bergmann arnd@arndb.de wrote:
This can easily double the time for compiling a driver but does not provide any benefit for the compile tester, so it's better left disabled.
In addition, any 'inline' function that is not also 'static' and that contains an 'if' causes a warning like
include/linux/string.h:212:2: note: in expansion of macro 'if' if (strscpy(p, q, p_size < q_size ? p_size : q_size) < 0) ^~ include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'strcpy' which is not static
without this patch, and I could not come up with a nice fix for that. In combination with my patch to always enable 'CONFIG_COMPILE_TEST' during 'randconfig' builds, we can at least hide these warnings for most users.
This looks like it fixes the same issue that was already fixed and is in Linus's tree.
http://lkml.kernel.org/r/9199446b-a141-c0c3-9678-a3f9107f2750@infradead.org
See commit 68e76e034b6b1 ("tracing: Prevent PROFILE_ALL_BRANCHES when FORTIFY_SOURCE=y")
Ah, right. I missed that when I wrote the new changelog text for this old patch of mine. It also means I should rebase the patch so it applies on mainline, as I still want PROFILE_ALL_BRANCHES to be disabled in COMPILE_TEST kernels for the build speed aspect.
I retested on top of that patch and found a couple of other warnings show up in an allmodconfig build with PROFILE_ALL_BRANCHES:
lib/zstd/decompress.c: In function 'ZSTD_decompressStream': lib/zstd/decompress.c:416:2: error: argument 1 null where non-null expected [-Werror=nonnull] drivers/crypto/qat/qat_common/qat_algs.c: In function 'qat_alg_do_precomputes': drivers/crypto/qat/qat_common/qat_algs.c:156:7: error: argument 1 range [18446744071562067968, 18446744073709551615] exceeds maximum object size 9223372036854775807 [-Werror=alloc-size-larger-than=] drivers/isdn/hardware/eicon/message.c: In function 'mixer_notify_update': drivers/isdn/hardware/eicon/message.c:11162:54: error: array subscript is above array bounds [-Werror=array-bounds] ((CAPI_MSG *) msg)->info.facility_req.structs[1] = LI_REQ_SILENT_UPDATE & 0xff; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/isdn/hardware/eicon/message.c:11163:54: error: array subscript is above array bounds [-Werror=array-bounds] ((CAPI_MSG *) msg)->info.facility_req.structs[2] = LI_REQ_SILENT_UPDATE >> 8; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/isdn/hardware/eicon/message.c:11164:54: error: array subscript is above array bounds [-Werror=array-bounds] ((CAPI_MSG *) msg)->info.facility_req.structs[3] = 0;
All those are nonsense AFAICT, and we see them only because the "if()" override ends up confusing gcc's value-range tracking in the same way it used to cause lots of -Wmaybe-uninitialized warnings (which we just disable these days with PROFILE_ALL_BRANCHES).
Arnd