Re: [PATCH 01/14] kbuild: Bump minimum version of LLVM for building the kernel to 17.0.1
From: Nicolas Schier
Date: Tue May 05 2026 - 12:11:15 EST
On Tue, Apr 28, 2026 at 10:59:07PM -0400, Nathan Chancellor wrote:
> The current minimum version of LLVM for building the kernel is 15.0.0.
> However, there are two deficiencies compared to GCC that were fixed in
> LLVM 17 that are starting to become more noticeable.
>
> The first was a bug in LLVM's scope checker [1], where all labels in a
> function were validated as potential targets of an asm goto statement,
> even if they were not listed in the asm goto statement as targets. This
> becomes particularly problematic when the cleanup attribute is used, as
>
> asm goto(... : label_a);
> ...
> label_a:
> ...
> int var __free(foo);
> asm goto(... : label_b);
> ...
> label_b:
> ...
>
> will trigger an error since the scope checker will complain that the
> cleanup variable would be skipped when jumping from the first asm goto
> to label_b (which obviously cannot happen). This issue was the catalyst
> for commit e2ffa15b9baa ("kbuild: Disable CC_HAS_ASM_GOTO_OUTPUT on
> clang < 17"). Unfortunately, this issue is reproducible with regular asm
> goto in addition to asm goto with outputs, so that change was not
> entirely sufficient to avoid the issue altogether. As asm goto has
> effectively been required since commit a0a12c3ed057 ("asm goto:
> eradicate CC_HAS_ASM_GOTO") and the usage of the cleanup attribute
> continues to grow across the tree, raising the minimum to a version that
> avoids this issue altogether is a better long term solution than
> attempting to workaround it at every spot where it happens.
>
> The second issue is an incompatibility with GCC 8.1+ around variables
> marked with const being valid constant expressions for _Static_assert
> and other macros [2]. With GCC 8.1 being the minimum supported version
> since commit 118c40b7b503 ("kbuild: require gcc-8 and binutils-2.30"),
> this incompatibility becomes more of a maintenance burden since only
> clang-15 and clang-16 are affected by it.
>
> Looking at the clang version of various major distributions through
> Docker images, no one should be left behind as a result of this bump, as
> the old ones cannot clear the current minimum of 15.0.0.
>
> archlinux:latest clang version 22.1.3
> debian:oldoldstable-slim Debian clang version 11.0.1-2
> debian:oldstable-slim Debian clang version 14.0.6
> debian:stable-slim Debian clang version 19.1.7 (3+b1)
> debian:testing-slim Debian clang version 21.1.8 (3+b1)
> debian:unstable-slim Debian clang version 21.1.8 (7+b1)
> fedora:42 clang version 20.1.8 (Fedora 20.1.8-4.fc42)
> fedora:latest clang version 21.1.8 (Fedora 21.1.8-4.fc43)
> fedora:44 clang version 22.1.1 (Fedora 22.1.1-2.fc44)
> fedora:rawhide clang version 22.1.3 (Fedora 22.1.3-1.fc45)
> opensuse/leap:latest clang version 17.0.6
> opensuse/tumbleweed:latest clang version 21.1.8
> ubuntu:jammy Ubuntu clang version 14.0.0-1ubuntu1.1
> ubuntu:noble Ubuntu clang version 18.1.3 (1ubuntu1)
> ubuntu:questing Ubuntu clang version 20.1.8 (0ubuntu4)
> ubuntu:resolute Ubuntu clang version 21.1.8 (6ubuntu1)
>
> 17.0.1 is chosen as the minimum instead of 17.0.0 to ensure that the
> particular version of LLVM 17 has the two aforementioned bugs fixed, as
> the second was fixed during the 17.0.0 release candidate phase and it
> was not until LLVM 18 that LLVM adopted the scheme of x.0.0 being a
> prerelease version and x.1.0 is a release version [3] to help with
> scenarios such as this.
>
> Link: https://github.com/llvm/llvm-project/commit/f023f5cdb2e6c19026f04a15b5a935c041835d14 [1]
> Link: https://github.com/llvm/llvm-project/commit/0b2d5b967d98375793897295d651f58f6fbd3034 [2]
> Link: https://github.com/llvm/llvm-project/commit/4532617ae420056bf32f6403dde07fb99d276a49 [3]
> Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx>
> ---
> Cc: Jonathan Corbet <corbet@xxxxxxx>
> Cc: Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx>
> Cc: linux-doc@xxxxxxxxxxxxxxx
> ---
> Documentation/process/changes.rst | 2 +-
> scripts/min-tool-version.sh | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/process/changes.rst b/Documentation/process/changes.rst
> index 9a99037270ff..b9afce768446 100644
> --- a/Documentation/process/changes.rst
> +++ b/Documentation/process/changes.rst
> @@ -36,7 +36,7 @@ bindgen (optional) 0.71.1 bindgen --version
> binutils 2.30 ld -v
> bison 2.0 bison --version
> btrfs-progs 0.18 btrfs --version
> -Clang/LLVM (optional) 15.0.0 clang --version
> +Clang/LLVM (optional) 17.0.1 clang --version
> e2fsprogs 1.41.4 e2fsck -V
> flex 2.5.35 flex --version
> gdb 7.2 gdb --version
FTR: The translations
Documentation/translations/{it_IT,pt_BR}/process/changes.rst become now
even more outdated.
Acked-by: Nicolas Schier <nsc@xxxxxxxxxx>