[cfe-dev] memcpy behaviour when destination unknown

Nuno Lopes nunoplopes at sapo.pt
Tue May 22 08:53:28 PDT 2012


Hi,

So this is related with the way that the objectsize intrinsic is  
implemented in LLVM.
At the moment, LLVM doesn't support fetching the minimum/maximum size  
of a set of objects. It can only return the size of a single object.   
However, your example is trivial to handle since both objects have the  
same size.

Feel free to submit a bug report to LLVM's bug database.

Nuno

Citando rajesh viswabramana <viswabramana.rajesh at gmail.com>:

> Hi *,
>
> General behaviour is __builtin_memcpy_chk function should be called for all
> memcpy calls, to check object size(destination).
>
> I have noticed in clang for memcpy function when destination buffer *unknown
> * than, memcpy calls optimized to memcpy.
> Where as if destination has *known* pointer at compilation time than it
> will call builtin_memcpy_chk which in turn calls memcpy.
>
> extern int l1;
>
> test_func ()
> {
>     char buf1[10], buf2[10];
>              ........
>     memcpy(buf1, s3, l1); // Destination is known(buf1), length is not
> known calls memcpy_chk
>
>     r = l1 == 1 ? buf1 : buf2;
>     memcpy(r, s3, l1 + 1); // Destination is not known(might be buf1 or
> buf2), so optimizing call to memcpy
>               ......
> }
>
> To compare the behaviour with gcc, for all above memcpy calls memcpy_chk
> function called.
>
> I have attached codes of sample program (test program, as well library call
> impl).
>
> When sample code run on CLANG, Its abort. where as in GCC it run
> sucessfully.
>
> *Any info why the optimization behaviour in clang is differ from gcc.*
>
>
> Regards,
> Rajesh
>
>
> *further info about object size checking in gcc.*
> *http://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html*<http://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html>



More information about the cfe-dev mailing list