On 13/02/2018 14:00, Jakub Jelinek wrote: >> Certainly, for now I'll revert. > Reversion is not the right thing, the "fn spec" attributes were clearly > incorrect. So, we should change them to something more conservative that > will work.
That would only be "all dots", that is no fnspec at all. Martin suggested removing EAF_DIRECT, but I don't think I agree with his reasoning. Besides, aliasing doesn't see the shadow memory at all (see call_may_clobber_ref_p_1), so it's okay to ignore it for the sake of fnspecs. >> But can you expand on why it's too early? Indeed I suppose it may >> affect inlining decisions, on the other hand it seems dangerous to apply >> instrumentation after pretty much any optimization pass. > > It will prevent pretty much all optimizations. We don't want -O2 > -fsanitize=address to be unusably slow, if people want to catch everything, > they can always use -O0 -fsanitize=address. The current placement of the > passes has been a result of long discussions if I remember well. I'm not sure it will be that bad, together with the fnspec. Consider that PR84340 is latent in current GCC; the testcases work because GCC thinks that the &x pointer escaped, and thus treated the stores as not dead. In other words, -fsanitize=address -O2 _currently_ lacks an awful lot of aliasing-based optimizations such as DSE, because all variables are marked as escaping after the initial ASAN_MARK(UNPOISON, &var, sz). With some luck (that we can ascertain between now and stage 1) the negative effects of pass placement balance with the positive effects of the fnspec. But I agree that it requires some discussion and benchmarking. Paolo