[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