The Rust gcc builds failed due to following build warnings / errors on the x86_64 and arm64 architectures with selftests/rust/config on the Linux next-20241216...next-20241218.
First seen on the next-20241216 tag. Good: next-20241213 Bad: next-20241216
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
Anders bisected this regressions and found, # first bad commit: [20b3c3eccd9361c9976af640be280526bef72248] percpu: use TYPEOF_UNQUAL() in variable declarations
Build log: ------- arch/x86/include/asm/current.h:49:9: error: call to undeclared function '__typeof_unqual__'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] arch/x86/include/asm/current.h:49:9: error: expected ';' after expression arch/x86/include/asm/current.h:49:9: error: use of undeclared identifier 'pscr_ret__'
Links: ------- - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20241218/tes... - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20241218/tes... - https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20241217/tes...
metadata: ---- git describe: next-20241216..next-20241218 git repo: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git kernel config: https://storage.tuxsuite.com/public/linaro/lkft/builds/2qNMCRNosQCRWxj5dIUE8... build url: https://storage.tuxsuite.com/public/linaro/lkft/builds/2qNMCRNosQCRWxj5dIUE8... toolchain: 'gcc', 'version': '14' arch: arm64, x86 build name: rustgcc-lkftconfig-kselftest
-- Linaro LKFT https://lkft.linaro.org
On Wed, Dec 18, 2024 at 5:08 PM Naresh Kamboju naresh.kamboju@linaro.org wrote:
The Rust gcc builds failed due to following build warnings / errors on the x86_64 and arm64 architectures with selftests/rust/config on the Linux next-20241216...next-20241218.
First seen on the next-20241216 tag. Good: next-20241213 Bad: next-20241216
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
Anders bisected this regressions and found, # first bad commit: [20b3c3eccd9361c9976af640be280526bef72248] percpu: use TYPEOF_UNQUAL() in variable declarations
Build log:
arch/x86/include/asm/current.h:49:9: error: call to undeclared function '__typeof_unqual__'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] arch/x86/include/asm/current.h:49:9: error: expected ';' after expression arch/x86/include/asm/current.h:49:9: error: use of undeclared identifier 'pscr_ret__'
__typeof_unqual__ is a keyword in c23 (and an extension in gcc-14+ and clang-19+).
https://en.cppreference.com/w/c/language/typeof https://learn.microsoft.com/en-us/cpp/c-language/typeof-unqual-c?view=msvc-1...
The compiler support is detected in init/Kconfig:
config CC_HAS_TYPEOF_UNQUAL def_bool $(success,echo 'int foo (int a) { __typeof_unqual__(a) b = a; return b; }' | $(CC) -x c - -S -o /dev/null)
so, if your compiler doesn't support this keyword, CC_HAS_TYPEOF_UNQUAL should not be enabled and include/linux/compiler.h should disable usage of __typeof_unqual__:
#if defined(CONFIG_CC_HAS_TYPEOF_UNQUAL) && !defined(__CHECKER__) # define TYPEOF_UNQUAL(exp) __typeof_unqual__(exp) #else # define TYPEOF_UNQUAL(exp) __typeof__(exp) #endif
Can you please investigate what happens here for your build?
Thanks, Uros.
On Wed, Dec 18, 2024 at 05:33:24PM +0100, Uros Bizjak wrote:
On Wed, Dec 18, 2024 at 5:08 PM Naresh Kamboju naresh.kamboju@linaro.org wrote:
The Rust gcc builds failed due to following build warnings / errors on the x86_64 and arm64 architectures with selftests/rust/config on the Linux next-20241216...next-20241218.
First seen on the next-20241216 tag. Good: next-20241213 Bad: next-20241216
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
Anders bisected this regressions and found, # first bad commit: [20b3c3eccd9361c9976af640be280526bef72248] percpu: use TYPEOF_UNQUAL() in variable declarations
Build log:
arch/x86/include/asm/current.h:49:9: error: call to undeclared function '__typeof_unqual__'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] arch/x86/include/asm/current.h:49:9: error: expected ';' after expression arch/x86/include/asm/current.h:49:9: error: use of undeclared identifier 'pscr_ret__'
__typeof_unqual__ is a keyword in c23 (and an extension in gcc-14+ and clang-19+).
https://en.cppreference.com/w/c/language/typeof https://learn.microsoft.com/en-us/cpp/c-language/typeof-unqual-c?view=msvc-1...
The compiler support is detected in init/Kconfig:
config CC_HAS_TYPEOF_UNQUAL def_bool $(success,echo 'int foo (int a) { __typeof_unqual__(a) b = a; return b; }' | $(CC) -x c - -S -o /dev/null)
so, if your compiler doesn't support this keyword, CC_HAS_TYPEOF_UNQUAL should not be enabled and include/linux/compiler.h should disable usage of __typeof_unqual__:
#if defined(CONFIG_CC_HAS_TYPEOF_UNQUAL) && !defined(__CHECKER__) # define TYPEOF_UNQUAL(exp) __typeof_unqual__(exp) #else # define TYPEOF_UNQUAL(exp) __typeof__(exp) #endif
Can you please investigate what happens here for your build?
This is the bindgen program for generating Rust bindings. Tuxmake is using bindgen 0.66.1 and I was able to reproduce the failures with that version inside a container. I have bindgen 0.70.1 installed on my system and that seems to parse __typeof_unqual__ okay.
I don't know how bindgen works. Maybe the Rust developers can comment?
regards, dan carpenter
linux-kselftest-mirror@lists.linaro.org