On Sun, Nov 5, 2023, at 07:22, Yafang Shao wrote: > The kernel supports a minimum GCC version of 5.1.0 for building. However, > the "__diag_ignore_all" directive only suppresses the > "-Wmissing-prototypes" warning for GCC versions >= 8.0.0. As a result, when > building the kernel with older GCC versions, warnings may be triggered. The > example below illustrates the warnings reported by the kernel test robot > using GCC 7.5.0: > > compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0 > All warnings (new ones prefixed by >>): > > kernel/bpf/helpers.c:1893:19: warning: no previous prototype for > 'bpf_obj_new_impl' [-Wmissing-prototypes] > __bpf_kfunc void *bpf_obj_new_impl(u64 local_type_id__k, void > *meta__ign) > ^~~~~~~~~~~~~~~~ > kernel/bpf/helpers.c:1907:19: warning: no previous prototype for > 'bpf_percpu_obj_new_impl' [-Wmissing-prototypes] > __bpf_kfunc void *bpf_percpu_obj_new_impl(u64 local_type_id__k, > void *meta__ign) > [...] > > To address this, we should also suppress the "-Wmissing-prototypes" warning > for older GCC versions. Since "#pragma GCC diagnostic push" is supported as > of GCC 4.6, it is acceptable to ignore these warnings for GCC >= 5.1.0. Not sure why these need to be suppressed like this at all, can't you just add the prototype somewhere? > @@ -131,14 +131,14 @@ > #define __diag_str(s) __diag_str1(s) > #define __diag(s) _Pragma(__diag_str(GCC diagnostic s)) > > -#if GCC_VERSION >= 80000 > -#define __diag_GCC_8(s) __diag(s) > +#if GCC_VERSION >= 50100 > +#define __diag_GCC_5(s) __diag(s) > #else > -#define __diag_GCC_8(s) > +#define __diag_GCC_5(s) > #endif > This breaks all uses of __diag_ignore that specify version 8 directly. Just add the macros for each version from 5 to 14 here. Arnd