[llvm-dev] [cfe-dev] Struct padding

mats petersson via llvm-dev llvm-dev at lists.llvm.org
Thu May 18 01:03:39 PDT 2017


What are you actually trying to achieve? LLVM knows the alignment and size
of each component. You could iterate over the different types and identify
when there is a difference in "calculated total size and the current
alignment requirement", but LLVM does automatically pad structures [unless
you specifically ask it not to].

Note that there is no actual field added for padding, it's just the size
and alignment itself.

--
Mats

On 18 May 2017 at 08:51, Hongbin Zheng via cfe-dev <cfe-dev at lists.llvm.org>
wrote:

> Hi Jonas,
>
> Thanks a lot.
> In an LLVM pass, how can I check the related information? will clang emit
> some metadata table?
>
> Thanks
> Hongbin
>
> On Thu, May 18, 2017 at 12:47 AM, Jonas Devlieghere <jonas at devlieghere.com
> > wrote:
>
>> Hi Hongbin,
>>
>> You can pass `-Wpadded` to clang. For your particular example it will
>> print something along the lines of
>>
>> ```
>> warning: padding struct 'foo1' with 7 bytes to align 'x' [-Wpadded]
>>     long x;
>> ```
>>
>> Jonas
>>
>> On Thu, May 18, 2017 at 9:15 AM, Hongbin Zheng via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> Hi,
>>>
>>> I am wondering how I can tell whether a field of a struct is introduced
>>> by padding or not.
>>>
>>> For example, if I have a struct:
>>>
>>> struct foo1 {
>>>     char *p;     /* 8 bytes */
>>>     char c;      /* 1 byte
>>>     long x;      /* 8 bytes */
>>> };
>>>
>>> clang may generate:
>>>
>>> struct foo1 {
>>>     char *p;     /* 8 bytes */
>>>     char c;      /* 1 byte
>>>     char pad[7]; /* 7 bytes */
>>>     long x;      /* 8 bytes */
>>> };
>>>
>>> Is there any way that I can tell the "pad" array is generated by padding?
>>>
>>> Thanks a lot
>>> Hongbin
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>>
>>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170518/43968b07/attachment.html>


More information about the llvm-dev mailing list