<div dir="ltr"><div><div>I've also run into this problem:<br><br><a href="http://erlang.org/pipermail/erlang-bugs/2013-July/003674.html">http://erlang.org/pipermail/erlang-bugs/2013-July/003674.html</a><br><br></div>At first I thought it was a gcc bug, but <a href="http://gcc.gnu.org/bugs/#report">http://gcc.gnu.org/bugs/#report</a> says "if compiling with -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations makes a difference, your code probably is not correct." Compiling efile_drv.c with -fno-aggressive-loop-optimizations makes the problem go away.<br>
<br></div><div>With -Wextra, there are warnings about signed/unsigned comparisons, which might be causing this:<br><br>drivers/common/efile_drv.c:3749:14: note: in expansion of macro ‘EV_GET_UINT64’<br> if ( !EV_GET_UINT64(ev, &d->c.preadv.offsets[i-1], &p, &q)<br>
^<br>drivers/common/efile_drv.c:590:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br> *(pp) = ( *(pp)+8 < (ev)->iov[*(qp)].iov_len \<br> ^<br>
drivers/common/efile_drv.c:3749:14: note: in expansion of macro ‘EV_GET_UINT64’<br> if ( !EV_GET_UINT64(ev, &d->c.preadv.offsets[i-1], &p, &q)<br> ^<br>drivers/common/efile_drv.c:564:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br>
(*(pp)+4 <= (ev)->iov[*(qp)].iov_len \<br> ^<br>drivers/common/efile_drv.c:3750:7: note: in expansion of macro ‘EV_GET_UINT32’<br> || !EV_GET_UINT32(ev, &sizeH, &p, &q)<br>
^<br>drivers/common/efile_drv.c:569:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br> *(pp) = ( *(pp)+4 < (ev)->iov[*(qp)].iov_len \<br> ^<br>
drivers/common/efile_drv.c:3750:7: note: in expansion of macro ‘EV_GET_UINT32’<br> || !EV_GET_UINT32(ev, &sizeH, &p, &q)<br> ^<br>drivers/common/efile_drv.c:564:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br>
(*(pp)+4 <= (ev)->iov[*(qp)].iov_len \<br> ^<br>drivers/common/efile_drv.c:3751:7: note: in expansion of macro ‘EV_GET_UINT32’<br> || !EV_GET_UINT32(ev, &sizeL, &p, &q)) {<br>
^<br>drivers/common/efile_drv.c:569:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br> *(pp) = ( *(pp)+4 < (ev)->iov[*(qp)].iov_len \<br> ^<br>
drivers/common/efile_drv.c:3751:7: note: in expansion of macro ‘EV_GET_UINT32’<br> || !EV_GET_UINT32(ev, &sizeL, &p, &q)) {<br> ^<br>drivers/common/efile_drv.c:581:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br>
(*(pp)+8 <= (ev)->iov[*(qp)].iov_len \<br><br></div><div>-Manish<br></div></div>