[systemd-devel] compile with clang broken
Thomas H.P. Andersen
phomes at gmail.com
Fri Aug 15 03:40:55 PDT 2014
On Fri, Aug 15, 2014 at 12:35 PM, David Herrmann <dh.herrmann at gmail.com> wrote:
> Hi
>
> On Fri, Aug 15, 2014 at 12:29 PM, Thomas H.P. Andersen <phomes at gmail.com> wrote:
>> On Fri, Aug 15, 2014 at 11:49 AM, David Herrmann <dh.herrmann at gmail.com> wrote:
>>> Thanks for trying!
>>>
>>> Result is as I expected. Evaluation takes place _after_ validating
>>> compile-time constants, and thus __builtin_constant_p in combination
>>> with ?: will not work if not both cases are constant. Maybe it works
>>> with __builtin_choose_expr()?
>>>
>>> Can you try the attached patch?
>>
>> This patch works. It also needs the change to do the calculation to a
>> seperate line. Also only if size is const, like so:
>> const size_t size = MAX(sizeof(struct in_pktinfo), sizeof(struct in6_pktinfo));
>
> Again, thanks for trying it out!
no problem. I have inserted the relevant error messages for the two
non-working cases.
> I don't understand your comment, though. You're saying this works:
>
> const size_t size = MAX(...);
> uint8_t buffer[CMSG_SPACE(size) +...];
>
> ...but this doesn't work:
>
> uint8_t buffer[CMSG_SPACE(MAX(...)) +...];
src/resolve/resolved-dns-stream.c:67:43: error: non-const static data
member must be initialized out of line
uint8_t buffer[CMSG_SPACE(MAX(sizeof(struct
in_pktinfo), sizeof(struct in6_pktinfo)))
^
> ...and this doesn't work either (mind the dropped 'const'):
>
> size_t size = MAX(...);
> uint8_t buffer[CMSG_SPACE(size) +...];
src/resolve/resolved-dns-stream.c:68:25: error: fields must have a
constant size: 'variable length array in structure' extension will
never be supported
uint8_t buffer[CMSG_SPACE(size)
^
> Hm. This is weird. Maybe CMSG_SPACE does something weird. I'll see.
> David
More information about the systemd-devel
mailing list