[LLVMdev] c const

Nikhil A. Patil patil.nikhil at gmail.com
Wed Aug 8 15:01:59 PDT 2007


Hi,

I think I found a bug. I don't know if it's in upstream gcc or llvm-gcc4.

int func()
{
    const int *arr;
    arr[0] = 1;
}

$ llvm-gcc main.c -c; echo $?
0

$ gcc main.c -c
main.c: In function 'func':
main.c:4: error: assignment of read-only location

The difference disappears when arr[0] is replaced by *arr.

(I tried the above with gcc 4.1.2, 3.4.6, 4.0.3. (I don't have access
to 4.0.1, off which llvm-gcc seems to be derived.)

nikhil

On 08/08/2007, Chris Lattner <sabre at nondot.org> wrote:
> This property isn't preserved on the llvm ir, because const can always
> be cast away.  If you want mod information, then I suggest using the
> aliasanalysis interface to get mod ref info for a call.
>
> -Chris
>
> http://nondot.org/sabre
> http://llvm.org
>
> On Aug 8, 2007, at 12:07 AM, "Ryan M. Lefever" <lefever at crhc.uiuc.edu>
> wrote:
>
> > How is c's const keyword translated when compiling c into llvm
> > bytecode.
> >  I'm specifically interested in const pointer function arguments.
> > Consider a function declared as follows in c:
> >
> > void f(const int* arg);
> >
> > When I examine f in llvm bytecode, how can I tell that arg is a
> > pointer,
> > whose contents can only be read, not written.
> >
> > Regards,
> > Ryan
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



More information about the llvm-dev mailing list