[LLVMdev] Strange pointer aliasing behaviour

Eli Friedman eli.friedman at gmail.com
Thu Jun 17 00:22:26 PDT 2010


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.

-Eli




More information about the llvm-dev mailing list