On Tue, Mar 1, 2022 at 11:57 AM Nick Desaulniers <ndesaulniers@xxxxxxxxxx> wrote: > > On Tue, Mar 1, 2022 at 6:52 AM Arnd Bergmann <arnd@xxxxxxxxxx> wrote: > > > > From: Mark Rutland <mark.rutland@xxxxxxx> > > > > In a subsequent patch we'll move the kernel from using `-std=gnu89` to > > `-std=gnu11`, permitting the use of additional C11 features such as > > for-loop initial declarations. > > > > One contentious aspect of C99 is that it permits mixed declarations and > > code, and for now at least, it seems preferable to enforce that > > declarations must come first. > > > > These warnings were already disabled in the kernel itself, but not > > for KBUILD_USERCFLAGS or the compat VDSO on arch/arm64, which uses > > a separate set of CFLAGS. > > > > This patch fixes an existing violation in modpost.c, which is not > > reported because of the missing flag in KBUILD_USERCFLAGS: > > > > | scripts/mod/modpost.c: In function ‘match’: > > | scripts/mod/modpost.c:837:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] > > | 837 | const char *endp = p + strlen(p) - 1; > > | | ^~~~~ > > > > Signed-off-by: Mark Rutland <mark.rutland@xxxxxxx> > > [arnd: don't add a duplicate flag to the default set, update changelog] > > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> > > Thanks for the patches! > Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> That said, there's a few additional places that reset KBUILD_CFLAGS. $ git grep -rn "KBUILD_CFLAGS :=" | grep -v filter-out | grep -v subst arch/mips/boot/compressed/Makefile:30:KBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ -D__DISABLE_EXPORTS \ arch/mips/vdso/Makefile:115:$(obj-vdso): KBUILD_CFLAGS := $(cflags-vdso) $(native-abi) arch/mips/vdso/Makefile:144:$(obj-vdso-o32): KBUILD_CFLAGS := $(cflags-vdso) -mabi=32 arch/mips/vdso/Makefile:184:$(obj-vdso-n32): KBUILD_CFLAGS := $(cflags-vdso) -mabi=n32 arch/parisc/boot/compressed/Makefile:17:KBUILD_CFLAGS := -D__KERNEL__ -O2 -DBOOTLOADER arch/s390/boot/Makefile:13:KBUILD_CFLAGS := $(KBUILD_CFLAGS_DECOMPRESSOR) arch/s390/boot/compressed/Makefile:23:KBUILD_CFLAGS := $(KBUILD_CFLAGS_DECOMPRESSOR) arch/s390/purgatory/Makefile:24:KBUILD_CFLAGS := -fno-strict-aliasing -Wall -Wstrict-prototypes arch/x86/boot/compressed/Makefile:35:KBUILD_CFLAGS := -m$(BITS) -O2 $(CLANG_FLAGS) The parisc, s390, and x86 cases look like true positives to me (mips looks fine FWICT). I didn't want to nack the patch for being incomplete, but it's not necessarily treewide. > > > --- > > Makefile | 3 ++- > > arch/arm64/kernel/vdso32/Makefile | 1 + > > scripts/mod/modpost.c | 4 +++- > > 3 files changed, 6 insertions(+), 2 deletions(-) > > > > diff --git a/Makefile b/Makefile > > index 94fa9a849a7a..37ef6a555dcd 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -432,7 +432,8 @@ HOSTCXX = g++ > > endif > > > > export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \ > > - -O2 -fomit-frame-pointer -std=gnu89 > > + -O2 -fomit-frame-pointer -std=gnu89 \ > > + -Wdeclaration-after-statement > > export KBUILD_USERLDFLAGS := > > > > KBUILD_HOSTCFLAGS := $(KBUILD_USERCFLAGS) $(HOST_LFS_CFLAGS) $(HOSTCFLAGS) > > diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile > > index 9378ea055bf2..ed181bedbffc 100644 > > --- a/arch/arm64/kernel/vdso32/Makefile > > +++ b/arch/arm64/kernel/vdso32/Makefile > > @@ -68,6 +68,7 @@ VDSO_CFLAGS += -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ > > -fno-strict-aliasing -fno-common \ > > -Werror-implicit-function-declaration \ > > -Wno-format-security \ > > + -Wdeclaration-after-statement \ > > -std=gnu11 > > VDSO_CFLAGS += -O2 > > # Some useful compiler-dependent flags from top-level Makefile > > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c > > index 6bfa33217914..fe693304b120 100644 > > --- a/scripts/mod/modpost.c > > +++ b/scripts/mod/modpost.c > > @@ -833,8 +833,10 @@ static int match(const char *sym, const char * const pat[]) > > { > > const char *p; > > while (*pat) { > > + const char *endp; > > + > > p = *pat++; > > - const char *endp = p + strlen(p) - 1; > > + endp = p + strlen(p) - 1; > > > > /* "*foo*" */ > > if (*p == '*' && *endp == '*') { > > -- > > 2.29.2 > > > > > -- > Thanks, > ~Nick Desaulniers -- Thanks, ~Nick Desaulniers