On Wed, Dec 05, 2012 at 05:10:56PM +0100, Richard Biener wrote:
> > This patch tries to handle bitfield accesses as if it were writes/reads
> > from the corresponding DECL_BIT_FIELD_REPRESENTATIVE.
> > Richard, does it make sense this way (the code will take ADDR_EXPR
> > of the COMPONENT_REF with the DECL_BIT_FIELD_REPRESENTATIVE and use
> > the size of the representative if it decides to instrument it.
> > 
> > Fixes the first 4 asan_test.C failures.  Ok for trunk?
> 
> It makes sense apart from the address-taking - is this done early
> enough to not disrupt aliasing / TREE_ADDRESSABLE?  Thus, before
> gimplifying?

It is done far later than that (except for -Og and -O0 right after PRE),
but I thought that isn't a big deal, it takes address for everything
to be instrumented, and AFAIK tree-ssa-operands.c will take care of
calling mark_addressable on it if needed.  Asan doesn't actually dereference
that pointer ever, all it does is compute from that address the shadow
address (addr >> 3) + (1L << 44) or similar, and dereferences that.
And for asan, we want to instrument
  char p[32];
  for (int i = 0; i < n; i++)
    p[i] = 0;
even when p isn't TREE_ADDRESSABLE (ditto for bitfields).  So, all in all,
even if the address is taken, it will never escape because of the asan
instrumentation.
Doesn't e.g. ivopts also cause non-addressable vars to become addressable,
if it replaces ARRAY_REFs with taking address of the array before the loop
and using MEM_REF/TARGET_MEM_REF in the loop?

        Jakub

Reply via email to