[asterisk-dev] [Code Review] 4530: clang compiler warning: -Wgnu-variable-sized-type-not-at-end
Diederik de Groot
reviewboard at asterisk.org
Fri Mar 27 12:10:16 CDT 2015
> On March 27, 2015, 2:11 a.m., Matt Jordan wrote:
> > /branches/13/main/stdtime/localtime.c, lines 357-361
> > <https://reviewboard.asterisk.org/r/4530/diff/1/?file=72936#file72936line357>
> >
> > Just curious, what was the compiler warning on this one?
>
> Diederik de Groot wrote:
> There can only be one variable size struct element and it has to be at the last position. Having them anywhere in the struct is a gcc extension.
>
> rmudgett wrote:
> This is not a valid fix!! The buf.name field is supposed to be the extra space that the buf.iev.name field represents.
>
> rmudgett wrote:
> I'd suggest using ast_alloca() or alloca() to create space for buf instead.
>
> Diederik de Groot wrote:
> I did not interpret this correctly i guess. Doesn't this mean a union should have been used instead ?
> Can you give me an example of how you would restructure this using alloca.
>
> rmudgett wrote:
> Unions have all members overlapping each other. That is not what is needed here. The struct inotify_event has a last member named name and the locally defined struct for buf is reserving space for buf.iev.name with the buf.name array.
>
> Since clang is complaining about this we need to change the definition of buf and the usage of it in the rest of the function.
>
> struct inotify_event *buf;
> size_t real_sizeof_buf = sizeof(*buf) + FILENAME_MAX + 1;
>
> buf = ast_alloca(real_sizeof_buf);
>
> Where used:
> sizeof(buf) becomes real_sizeof_buf
> sizeof(buf.iev) becomes sizeof(*buf)
> buf.iev.wd becomes buf->wd
>
> Since buf is not a good name because it is now misleading, renaming buf to iev would be better.
Thanks... Resolves the issue and even looks cleaner than the original :-)
- Diederik
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/4530/#review14875
-----------------------------------------------------------
On March 26, 2015, 7:12 p.m., Diederik de Groot wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/4530/
> -----------------------------------------------------------
>
> (Updated March 26, 2015, 7:12 p.m.)
>
>
> Review request for Asterisk Developers.
>
>
> Bugs: ASTERISK-24917
> https://issues.asterisk.org/jira/browse/ASTERISK-24917
>
>
> Repository: Asterisk
>
>
> Description
> -------
>
> clang's static analyzer will throw quite a number warnings / errors during compilation, some of which can be very helpfull in finding corner-case bugs\nclang compiler warning:-Wgnu-variable-sized-type-not-at-end
>
>
> Diffs
> -----
>
> /branches/13/main/stdtime/localtime.c 433444
>
> Diff: https://reviewboard.asterisk.org/r/4530/diff/
>
>
> Testing
> -------
>
>
> Thanks,
>
> Diederik de Groot
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20150327/9091e5eb/attachment-0001.html>
More information about the asterisk-dev
mailing list