On Wed, Apr 26, 2023 at 11:01 AM SenthilKumar.Selvaraj--- via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > Hi, > > This patch fixes PR 105523 by setting param_min_pagesize to 0 for the > avr target. For this target, zero and offsets from zero are perfectly > valid addresses, and the default value of param_min_pagesize ends up > triggering warnings on valid memory accesses.
I think the proper configuration is to have DEFAULT_ADDR_SPACE_ZERO_ADDRESS_VALID defined to something returning true instead. Richard. > Ok for trunk and backporting to 13 and 12 branches? > > Regards > Senthil > > PR target/105523 > > gcc/ChangeLog: > > * config/avr/avr.cc (avr_option_override): Set > param_min_pagesize to 0. > > gcc/testsuite/ChangeLog: > > * gcc.target/avr/pr105523.c: New test. > > diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc > index c193430cf07..3b862f4e4ac 100644 > --- a/gcc/config/avr/avr.cc > +++ b/gcc/config/avr/avr.cc > @@ -56,6 +56,7 @@ > #include "tree-pass.h" > #include "print-rtl.h" > #include "rtl-iter.h" > +#include "opts.h" > > /* This file should be included last. */ > #include "target-def.h" > @@ -769,6 +770,9 @@ avr_option_override (void) > avr_gasisr_prologues = 0; > #endif > > + SET_OPTION_IF_UNSET (&global_options, &global_options_set, > + param_min_pagesize, 0); > + > if (!avr_set_core_architecture()) > return; > > diff --git a/gcc/testsuite/gcc.target/avr/pr105523.c > b/gcc/testsuite/gcc.target/avr/pr105523.c > new file mode 100644 > index 00000000000..fbbf7bf4422 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/avr/pr105523.c > @@ -0,0 +1,14 @@ > +/* { dg-do compile } */ > +/* { dg-options "-Os -Wall" } */ > + > +/* Verify no "array subscript 0 is outside array bounds of" is generated > + for accessing memory addresses in the 0-4096 range. */ > + > +typedef __UINT8_TYPE__ uint8_t; > + > +#define SREG (*(volatile uint8_t*) (0x3F + __AVR_SFR_OFFSET__ )) > + > +void bar (void) > +{ > + SREG = 0; > +} >