<div dir="ltr">+Hal<div><br></div><div>The use-case we dropped support for, specifically, was:</div><div><br></div><div>```</div><div>void foo() {</div><div>  int a;</div><div>  int *ap = &a;</div><div>  int *ap2 = (int*)((char*)NULL + (uintptr_t)&a);</div><div>  // now ap and ap2 may alias</div><div>}</div><div>```</div><div><br></div><div>Our justification is that LLVM (specifically, BasicAA) already explicitly doesn't support this pattern, so we shouldn't have to support it in CFLAA.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 21, 2016 at 3:50 PM, Joerg Sonnenberger 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"><span>On Tue, Jun 21, 2016 at 05:29:13PM -0500, Jia Chen via llvm-dev wrote:<br>
> - [r271322] Remove aliasing relations between GEP pointers and GEP indices.<br>
> Before this patch, CFL-AA will claim that a and b may-alias each other in<br>
> the following codes:<br>
><br>
> int a[10], b[10];<br>
> a[N] = ...;<br>
> b[N] = ...;<br>
><br>
> This seemingly insane behavior was actually there to safeguard certain cases<br>
> where people do crazy stuffs with pointer arithmetics. Later we figured out<br>
> that those crazy behaviors were in fact UB and therefore we could drop<br>
> support for it.<br>
<br>
</span>What exactly is the semantic justification here? I'm asking because<br>
there are a number of crucial use cases for aliasing global arrayish<br>
variables behind the compiler like linker sets. We had quite some fun in<br>
NetBSD with newer GCC introducing breakage by exploiting UB in fun ways.<br>
It would be nice to avoid breaking valid applications in system/embedded<br>
land.<br>
<br>
Joerg<br>
<div><div>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</div></div></blockquote></div><br></div></div>