linux/scripts/gcc-plugins
Masahiro Yamada 1e860048c5 gcc-plugins: simplify GCC plugin-dev capability test
Linus pointed out a third of the time in the Kconfig parse stage comes
from the single invocation of cc1plus in scripts/gcc-plugin.sh [1],
and directly testing plugin-version.h for existence cuts down the
overhead a lot. [2]

This commit takes one step further to kill the build test entirely.

The small piece of code was probably intended to test the C++ designated
initializer, which was not supported until C++20.

In fact, with -pedantic option given, both GCC and Clang emit a warning.

$ echo 'class test { public: int test; } test = { .test = 1 };' | g++ -x c++ -pedantic - -fsyntax-only
<stdin>:1:43: warning: C++ designated initializers only available with '-std=c++2a' or '-std=gnu++2a' [-Wpedantic]
$ echo 'class test { public: int test; } test = { .test = 1 };' | clang++ -x c++ -pedantic - -fsyntax-only
<stdin>:1:43: warning: designated initializers are a C++20 extension [-Wc++20-designator]
class test { public: int test; } test = { .test = 1 };
                                          ^
1 warning generated.

Otherwise, modern C++ compilers should be able to build the code, and
hopefully skipping this test should not make any practical problem.

Checking the existence of plugin-version.h is still needed to ensure
the plugin-dev package is installed. The test code is now small enough
to be embedded in scripts/gcc-plugins/Kconfig.

[1] https://lore.kernel.org/lkml/CAHk-=wjU4DCuwQ4pXshRbwDCUQB31ScaeuDo1tjoZ0_PjhLHzQ@mail.gmail.com/
[2] https://lore.kernel.org/lkml/CAHk-=whK0aQxs6Q5ijJmYF1n2ch8cVFSUzU5yUM_HOjig=+vnw@mail.gmail.com/

Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20201203125700.161354-1-masahiroy@kernel.org
2020-12-04 14:09:55 -08:00
..
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
Kconfig gcc-plugins: simplify GCC plugin-dev capability test 2020-12-04 14:09:55 -08:00
Makefile kbuild: move host .so build rules to scripts/gcc-plugins/Makefile 2020-08-10 01:32:59 +09:00
arm_ssp_per_task_plugin.c gcc-plugins: arm_ssp_per_task_plugin: Fix for older GCC < 6 2019-05-10 15:35:01 -07:00
cyc_complexity_plugin.c gcc-plugins: Replace HTTP links with HTTPS ones 2020-07-13 09:29:09 -07:00
gcc-common.h gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00
gcc-generate-gimple-pass.h gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00
gcc-generate-ipa-pass.h gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00
gcc-generate-rtl-pass.h gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00
gcc-generate-simple_ipa-pass.h gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00
gen-random-seed.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
latent_entropy_plugin.c gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00
randomize_layout_plugin.c gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00
sancov_plugin.c gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00
stackleak_plugin.c gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00
structleak_plugin.c gcc-plugins: remove code for GCC versions older than 4.9 2020-12-04 14:09:41 -08:00