[LLVMdev] Strange pointer aliasing behaviour

Jim Grosbach grosbach at apple.com
Thu Jun 17 08:22:14 PDT 2010


On Jun 17, 2010, at 12:22 AM, Eli Friedman wrote:

> On Wed, Jun 16, 2010 at 11:14 PM, Pierre C <lists at peufeu.com> wrote:
>>> There are essentially two ways to "solve" this issue: one is
>>> type-based alias analysis, i.e. assuming "double" and "int" don't
>>> alias; LLVM doesn't implement this at the moment.  The other is to
>>> attempt to analyze the loop and prove that %indvar.i is never
>>> negative; LLVM doesn't implement anything like this at the moment
>>> either.
>>> 
>>> -Eli
>> 
>> Actually I think it's much simpler than that...
>> 
>> http://llvm.org/releases/1.3/docs/AliasAnalysis.html#basic-aa
>> 
>> it says says "Different fields of a structure do not alias."
>> 
>> This is the case here : we have two different fields of a struct however it
>> mistakenly thinks they alias.
> 
> Consider a case like the following:
> struct X { int a; int b[10]; };
> int f(struct X* a) { a->b[-1] = 1; return a->a; }
> 
> This is technically illegal code, but various programs depend on
> constructs like this working.
> 

Those programs are buggy and should be fixed.



More information about the llvm-dev mailing list