Re: [PATCH 2/3] arm64: Optimize __READ_ONCE() with CONFIG_LTO=y
From: "Arnd Bergmann" <arnd@arndb.de>
Date: 2026-01-26 07:56:53
Also in:
lkml, llvm
From: "Arnd Bergmann" <arnd@arndb.de>
Date: 2026-01-26 07:56:53
Also in:
lkml, llvm
On Mon, Jan 26, 2026, at 01:25, Marco Elver wrote:
diff --git a/arch/arm64/include/asm/rwonce.h b/arch/arm64/include/asm/rwonce.h index fc0fb42b0b64..9963948f4b44 100644 --- a/arch/arm64/include/asm/rwonce.h +++ b/arch/arm64/include/asm/rwonce.h@@ -32,8 +32,7 @@ #define __READ_ONCE(x) \ ({ \ typeof(&(x)) __x = &(x); \ - int atomic = 1; \ - union { __unqual_scalar_typeof(*__x) __val; char __c[1]; } __u; \ + union { TYPEOF_UNQUAL(*__x) __val; char __c[1]; } __u; \ switch (sizeof(x)) { \ case 1: \ asm volatile(__LOAD_RCPC(b, %w0, %1) \
How does this work with CC_HAS_TYPEOF_UNQUAL=false?
As far as I can tell, TYPEOF_UNQUAL() falls back to __typeof__
on gcc-13, clang-18 and earlier, and not strip out qualifiers.
With fd69b2f7d5f4 ("compiler: Use __typeof_unqual__() for
__unqual_scalar_typeof()"), I would expect __unqual_scalar_typeof()
to do the right thing already.
Arnd