On 22 December 2016 at 08:49, Maxim Uvarov <maxim.uva...@linaro.org> wrote:
> On debian jessie gcc unable to compile current code > with error: > odp_packet.c: In function 'odp_packet_trunc_head': > odp_packet.c:314:46: error: array subscript is above array bounds > [-Werror=array-bounds] > to->buf_hdr.seg[i].len = from->buf_hdr.seg[num + i].len; > > The problem is that it breaks compilation only on .len line: > for (i = 0; i < num; i++) { > to->buf_hdr.seg[i].hdr = from->buf_hdr.seg[num + i].hdr; > to->buf_hdr.seg[i].data = from->buf_hdr.seg[num + i].data; > to->buf_hdr.seg[i].len = from->buf_hdr.seg[num + i].len; > } > > If that line is commented out compilation passes. If lines are reordered > than compilation also fails on .len line. Because there is no warning on > .hdr and .data it looks like compiler error. Additional check for > preconfigured value is workaround to that situation. > > Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org> > Reviewed-by: Mike Holmes <mike.hol...@linaro.org> -O3 now passes for me on x86 gcc (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005 > --- > v2: - add comment (Mike) > - in description .len line reorder does not fix compilation (Bill) > > platform/linux-generic/odp_packet.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/platform/linux-generic/odp_packet.c > b/platform/linux-generic/odp_packet.c > index 0d3fd05..599d839 100644 > --- a/platform/linux-generic/odp_packet.c > +++ b/platform/linux-generic/odp_packet.c > @@ -309,6 +309,10 @@ static inline void copy_num_segs(odp_packet_hdr_t > *to, odp_packet_hdr_t *from, > int i; > > for (i = 0; i < num; i++) { > + /* check bellow also fixes gcc bug, refer to corresponding > + * git commit */ > + if (odp_unlikely((num + i) >= CONFIG_PACKET_MAX_SEGS)) > + ODP_ABORT("packet segmenation error\n"); > to->buf_hdr.seg[i].hdr = from->buf_hdr.seg[num + i].hdr; > to->buf_hdr.seg[i].data = from->buf_hdr.seg[num + i].data; > to->buf_hdr.seg[i].len = from->buf_hdr.seg[num + i].len; > -- > 2.7.1.250.gff4ea60 > > -- Mike Holmes Program Manager - Linaro Networking Group Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs "Work should be fun and collaborative, the rest follows"