[llvm-dev] Question about __builtin_object_size

Xinliang David Li via llvm-dev llvm-dev at lists.llvm.org
Wed Feb 10 08:35:07 PST 2016


Patch is certainly welcome.

David

On Wed, Feb 10, 2016 at 2:46 AM, Strahinja Petrovic <
strahinja.petrovic at rt-rk.com> wrote:

>
> Thank you for replies. I'm using trunk version. I have problem in some
> tests with this behaviour. I also have fix for this problem just need an
> opinion if this should be fixed in clang. I can post patch on phabricator
> if you want to take a look.
>
> Thanks,
> Strahinja
>
>
> On 09.02.2016. 20:32, George Burgess IV wrote:
>
> Hi!
>
> This is an artifact of how LLVM works. Essentially, LLVM detects that
> `var` is unused and deletes it before it tries to lower the
> `llvm.objectsize` (which is what clang lowers `__builtin_object_size` to)
> call to a constant. While this isn't ideal, I don't think it realistically
> a problem, because `var` must be otherwise unused for this behavior to
> occur, and the whole purpose of objectsize functions (so far) is to insert
> bounds checks when a variable is used.
>
> If this quirk is causing real problems for you, please let me know and
> I'll see what I can do about fixing it. :)
>
> Thanks for pointing this out!
> George
>
> On Tue, Feb 9, 2016 at 11:06 AM, Xinliang David Li <xinliangli at gmail.com>
> wrote:
>
>> What version of clang/LLVM are you using? George (cc'ed ) has improved
>> __builtin_object_size support in Clang recently.
>>
>> David
>>
>> On Tue, Feb 9, 2016 at 6:37 AM, Strahinja Petrovic via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> Hi,
>>>
>>> I have question about __builtin_object_size behaviour. LLVM for
>>> __builtin_object_size function doesn't calculate correct value when pointer
>>> is used only in __builtin_object_size function call, and never after that.
>>> For this case LLVM as result generates 0 or -1 depends of second argument
>>> of __builtin_object_size function. Is this correct behaviour or it should
>>> work as gcc (gcc calculates correct value for this case) ?
>>>
>>> Example for this issue:
>>>
>>> include <assert.h>
>>> int main() {
>>> struct V { char buf1[10];
>>>            int b;
>>>            char buf2[10];
>>>           } var;
>>>
>>>           char *p = &var.buf1[1], *q = &var.b;
>>>           assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
>>>           return 0;
>>> }
>>>
>>> Thanks,
>>> Strahinja
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160210/262aca1b/attachment.html>


More information about the llvm-dev mailing list