The attached tweak avoids the new -Warray-bounds instances when building libatomic for arm. Christophe confirms it resolves the problem (thank you!)
As we have discussed, the main goal of this class of warnings is to detect accesses at addresses derived from null pointers (e.g., to struct members or array elements at a nonzero offset). Diagnosing accesses at hardcoded addresses is incidental because at the stage they are detected the two are not distinguishable from each another. I'm planning (hoping) to implement detection of invalid pointer arithmetic involving null for GCC 12, so this patch is a stopgap solution to unblock the arm libatomic build without compromising the warning. Once the new detection is in place these workarounds can be removed or replaced with something more appropriate (e.g., declaring the objects at the hardwired addresses with an attribute like AVR's address or io; that would enable bounds checking at those addresses as well). Martin
PR bootstrap/101379 - libatomic arm build failure after r12-2132 due to -Warray-bounds on a constant address libatomic/ChangeLog: * /config/linux/arm/host-config.h (__kernel_helper_version): New function. Adjust shadow macro. diff --git a/libatomic/config/linux/arm/host-config.h b/libatomic/config/linux/arm/host-config.h index 1520f237d73..777d08a2b85 100644 --- a/libatomic/config/linux/arm/host-config.h +++ b/libatomic/config/linux/arm/host-config.h @@ -39,8 +39,14 @@ typedef void (__kernel_dmb_t) (void); #define __kernel_dmb (*(__kernel_dmb_t *) 0xffff0fa0) /* Kernel helper page version number. */ -#define __kernel_helper_version (*(unsigned int *)0xffff0ffc) +static inline unsigned* +__kernel_helper_version () +{ + unsigned *volatile addr = (unsigned int *)0xffff0ffc; + return addr; +} +#define __kernel_helper_version (*__kernel_helper_version()) #ifndef HAVE_STREX static inline bool