123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- From b810c8e719ea082e47c7a8f7cf878bc84fa2455d Mon Sep 17 00:00:00 2001
- From: Arnd Bergmann <[email protected]>
- Date: Tue, 8 Mar 2022 22:56:14 +0100
- Subject: [PATCH 2/3] Kbuild: move to -std=gnu11
- During a patch discussion, Linus brought up the option of changing
- the C standard version from gnu89 to gnu99, which allows using variable
- declaration inside of a for() loop. While the C99, C11 and later standards
- introduce many other features, most of these are already available in
- gnu89 as GNU extensions as well.
- An earlier attempt to do this when gcc-5 started defaulting to
- -std=gnu11 failed because at the time that caused warnings about
- designated initializers with older compilers. Now that gcc-5.1 is
- the minimum compiler version used for building kernels, that is no
- longer a concern. Similarly, the behavior of 'inline' functions changes
- between gnu89 using gnu_inline behavior and gnu11 using standard c99+
- behavior, but this was taken care of by defining 'inline' to include
- __attribute__((gnu_inline)) in order to allow building with clang a
- while ago.
- Nathan Chancellor reported a new -Wdeclaration-after-statement
- warning that appears in a system header on arm, this still needs a
- workaround.
- The differences between gnu99, gnu11, gnu1x and gnu17 are fairly
- minimal and mainly impact warnings at the -Wpedantic level that the
- kernel never enables. Between these, gnu11 is the newest version
- that is supported by all supported compiler versions, though it is
- only the default on gcc-5, while all other supported versions of
- gcc or clang default to gnu1x/gnu17.
- Link: https://lore.kernel.org/lkml/CAHk-=wiyCH7xeHcmiFJ-YgXUy2Jaj7pnkdKpcovt8fYbVFW3TA@mail.gmail.com/
- Link: https://github.com/ClangBuiltLinux/linux/issues/1603
- Suggested-by: Linus Torvalds <[email protected]>
- Acked-by: Marco Elver <[email protected]>
- Acked-by: Jani Nikula <[email protected]>
- Acked-by: David Sterba <[email protected]>
- Tested-by: Sedat Dilek <[email protected]>
- Reviewed-by: Alex Shi <[email protected]>
- Reviewed-by: Nick Desaulniers <[email protected]>
- Reviewed-by: Miguel Ojeda <[email protected]>
- Signed-off-by: Arnd Bergmann <[email protected]>
- Reviewed-by: Nathan Chancellor <[email protected]>
- Signed-off-by: Masahiro Yamada <[email protected]>
- ---
- Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
- --- a/Makefile
- +++ b/Makefile
- @@ -524,7 +524,7 @@ KBUILD_CFLAGS := -Wall -Wundef -Werror
- -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
- -Werror=implicit-function-declaration -Werror=implicit-int \
- -Werror=return-type -Wno-format-security \
- - -std=gnu89
- + -std=gnu11
- KBUILD_CPPFLAGS := -D__KERNEL__
- KBUILD_AFLAGS_KERNEL :=
- KBUILD_CFLAGS_KERNEL :=
|