<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Dec 7, 2016 at 7:39 AM, Robinson, Paul via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">When we are looking at a situation where an instruction is merely *moved*<br>
from one place to another, retaining the source location and having a<br>
less naïve statement-marking tactic could help the debugging experience<br>
without perturbing other consumers (although one still wonders whether<br>
profiles will get messed up in cases where e.g. a loop invariant gets<br>
hoisted out of a cold loop into a hot predecessor).<br>
<br>
When we are looking at a situation where two instructions are *merged* or<br>
*combined* into one, and the original two instructions had different<br>
source locations, that's a separate problem.  In that case there is no<br>
single correct source location for the new instruction, and typically<br>
erasing the source location will give a better debugging experience (also<br>
a less misleading profile).<br>
<br>
My personal opinion is that having sanitizers *rely* on debug info for<br>
accurate source attribution is just asking for trouble.  It happens to<br>
work at –O0 but cannot be considered reliable in the face of optimization.<br>
IMO this is a fundamental design flaw; debug info is best-effort and full<br>
of ambiguities, as shown above. Sanitizers need a more reliable<br>
source-of-truth, i.e. they should encode source info into their own<br>
instrumentation.<br></blockquote><div><br></div><div>I don't see how ASan and debuggers are different. It feels like both need reasonably accurate source location attribution for any instruction. ASan just happens to care more about loads and stores than interactive stepping debuggers.</div><div><br></div><div>It really doesn't make sense for ASan to invent another mechanism to track source location information. Any mechanism we build would be so redundant with debug info that, as an implementation detail, we would find a way to make them use the same storage when possible. With that in mind, maybe we should really find a way to mark source locations as "hoisted" or "sunk" so that we can suppress them from our line tables or do something else clever.</div></div></div></div>