[LLVMdev] GEP instruction change

Artur Pietrek pietreka at gmail.com
Fri Aug 21 04:22:13 PDT 2009


On Fri, Aug 21, 2009 at 12:33 PM, Eli Friedman <eli.friedman at gmail.com>wrote:

> On Fri, Aug 21, 2009 at 2:02 AM, Artur Pietrek<pietreka at gmail.com> wrote:
> > Hi All,
> > Since few days I observe weird change.
> > Consider the following C code
> >
> > char array[] = "0123456789";
> > extern int test(char arr[], int size);
> >
> > int main(void) {
> >   return test(array-1, sizeof(array)-1);
> > }
> >
> > using clang frontend i get this:
> >
> > %call = call i32 @test(i8* getelementptr inbounds ([11 x i8]* @array, i32
> 0,
> > i32 -1), i32 10) ; <i32> [#uses=1]
> >
> > and using LLVM-GCC this:
> > %1 = call i32 @test(i8* getelementptr ([11 x i8]* @array, i32 1561806289,
> > i32 4), i32 10) nounwind ; <i32> [#uses=1]
> >
> > Should the second getelementptr look like this? Is it correct or a bug?
>
> Indexing out of an array is undefined behavior per C99, but that
> particular result does look strange...
>

So it isn't a bug?
It's weird that it simply started to happen few days ago and only with
llvm-gcc.



>
> > Since that change there's a problem in MSIL backend - it simply triggers
> > pointer overflow assertion.
>
> Sorry, I don't know anything about the MSIL backend.
>
> -Eli
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090821/b7b6cecd/attachment.html>


More information about the llvm-dev mailing list