https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111736
--- Comment #15 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Richard Biener from comment #13) > The original testcase is fixed, appearantly slapping 'extern' on the int > makes it not effective. > > Possibly better amend the > > if (VAR_P (inner) && DECL_HARD_REGISTER (inner)) > return; > > check though. As indicated my fix fixed only VAR_DECL cases, there's > still pointer-based accesses (MEM_REF) to consider. So possibly even > the following is necessary > > diff --git a/gcc/asan.cc b/gcc/asan.cc > index 0fd7dd1f3ed..36f85757435 100644 > --- a/gcc/asan.cc > +++ b/gcc/asan.cc > @@ -2747,7 +2747,8 @@ instrument_derefs (gimple_stmt_iterator *iter, tree t, > || maybe_ne (bitsize, size_in_bytes * BITS_PER_UNIT)) > return; > > - if (VAR_P (inner) && DECL_HARD_REGISTER (inner)) > + if ((VAR_P (inner) && DECL_HARD_REGISTER (inner)) > + || !ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (TREE_TYPE (inner)))) > return; > > poly_int64 decl_size; I'm testing this now - can you see if it is enough to fix the kernel usecase?