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 passes. 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> --- platform/linux-generic/odp_packet.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c index 0d3fd05..f3e0a12 100644 --- a/platform/linux-generic/odp_packet.c +++ b/platform/linux-generic/odp_packet.c @@ -309,6 +309,8 @@ static inline void copy_num_segs(odp_packet_hdr_t *to, odp_packet_hdr_t *from, int i; for (i = 0; i < num; i++) { + 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