Skip to content

Commit e8c0708

Browse files
arndbmasahir0y
authored andcommitted
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: ClangBuiltLinux#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]>
1 parent 4d94f91 commit e8c0708

File tree

6 files changed

+10
-12
lines changed

6 files changed

+10
-12
lines changed

Documentation/process/programming-language.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ Programming Language
55

66
The kernel is written in the C programming language [c-language]_.
77
More precisely, the kernel is typically compiled with ``gcc`` [gcc]_
8-
under ``-std=gnu89`` [gcc-c-dialect-options]_: the GNU dialect of ISO C90
9-
(including some C99 features). ``clang`` [clang]_ is also supported, see
10-
docs on :ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
8+
under ``-std=gnu11`` [gcc-c-dialect-options]_: the GNU dialect of ISO C11.
9+
``clang`` [clang]_ is also supported, see docs on
10+
:ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
1111

1212
This dialect contains many extensions to the language [gnu-extensions]_,
1313
and many of them are used within the kernel as a matter of course.

Documentation/translations/it_IT/process/programming-language.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ Linguaggio di programmazione
1010

1111
Il kernel è scritto nel linguaggio di programmazione C [it-c-language]_.
1212
Più precisamente, il kernel viene compilato con ``gcc`` [it-gcc]_ usando
13-
l'opzione ``-std=gnu89`` [it-gcc-c-dialect-options]_: il dialetto GNU
14-
dello standard ISO C90 (con l'aggiunta di alcune funzionalità da C99).
13+
l'opzione ``-std=gnu11`` [it-gcc-c-dialect-options]_: il dialetto GNU
14+
dello standard ISO C11.
1515
Linux supporta anche ``clang`` [it-clang]_, leggete la documentazione
1616
:ref:`Building Linux with Clang/LLVM <kbuild_llvm>`.
1717

Documentation/translations/zh_CN/process/programming-language.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
============
1010

1111
内核是用C语言 :ref:`c-language <cn_c-language>` 编写的。更准确地说,内核通常是用 :ref:`gcc <cn_gcc>`
12-
在 ``-std=gnu89`` :ref:`gcc-c-dialect-options <cn_gcc-c-dialect-options>` 下编译的:ISO C90的 GNU 方言(
13-
包括一些C99特性)
12+
在 ``-std=gnu11`` :ref:`gcc-c-dialect-options <cn_gcc-c-dialect-options>` 下编译的:ISO C11的 GNU 方言
1413

1514
这种方言包含对语言 :ref:`gnu-extensions <cn_gnu-extensions>` 的许多扩展,当然,它们许多都在内核中使用。
1615

Documentation/translations/zh_TW/process/programming-language.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
============
1313

1414
內核是用C語言 :ref:`c-language <tw_c-language>` 編寫的。更準確地說,內核通常是用 :ref:`gcc <tw_gcc>`
15-
在 ``-std=gnu89`` :ref:`gcc-c-dialect-options <tw_gcc-c-dialect-options>` 下編譯的:ISO C90的 GNU 方言(
16-
包括一些C99特性)
15+
在 ``-std=gnu11`` :ref:`gcc-c-dialect-options <tw_gcc-c-dialect-options>` 下編譯的:ISO C11的 GNU 方言
1716

1817
這種方言包含對語言 :ref:`gnu-extensions <tw_gnu-extensions>` 的許多擴展,當然,它們許多都在內核中使用。
1918

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
516516
-fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
517517
-Werror=implicit-function-declaration -Werror=implicit-int \
518518
-Werror=return-type -Wno-format-security \
519-
-std=gnu89
519+
-std=gnu11
520520
KBUILD_CPPFLAGS := -D__KERNEL__
521521
KBUILD_AFLAGS_KERNEL :=
522522
KBUILD_CFLAGS_KERNEL :=
@@ -783,7 +783,7 @@ KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
783783

784784
ifdef CONFIG_CC_IS_CLANG
785785
KBUILD_CPPFLAGS += -Qunused-arguments
786-
# The kernel builds with '-std=gnu89' so use of GNU extensions is acceptable.
786+
# The kernel builds with '-std=gnu11' so use of GNU extensions is acceptable.
787787
KBUILD_CFLAGS += -Wno-gnu
788788
# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
789789
# source of a reference will be _MergedGlobals and not on of the whitelisted names.

arch/arm64/kernel/vdso32/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ VDSO_CFLAGS += -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
6969
-Werror-implicit-function-declaration \
7070
-Wno-format-security \
7171
-Wdeclaration-after-statement \
72-
-std=gnu89
72+
-std=gnu11
7373
VDSO_CFLAGS += -O2
7474
# Some useful compiler-dependent flags from top-level Makefile
7575
VDSO_CFLAGS += $(call cc32-option,-Wdeclaration-after-statement,)

0 commit comments

Comments
 (0)