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.