[erlang-bugs] file:pread broken with GCC 4.8

Manish Singh <>
Thu Aug 15 20:43:51 CEST 2013


I've also run into this problem:

http://erlang.org/pipermail/erlang-bugs/2013-July/003674.html

At first I thought it was a gcc bug, but
http://gcc.gnu.org/bugs/#reportsays "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.

With -Wextra, there are warnings about signed/unsigned comparisons, which
might be causing this:

drivers/common/efile_drv.c:3749:14: note: in expansion of macro
‘EV_GET_UINT64’
      if (   !EV_GET_UINT64(ev, &d->c.preadv.offsets[i-1], &p, &q)
              ^
drivers/common/efile_drv.c:590:30: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
         *(pp) = (    *(pp)+8 < (ev)->iov[*(qp)].iov_len   \
                              ^
drivers/common/efile_drv.c:3749:14: note: in expansion of macro
‘EV_GET_UINT64’
      if (   !EV_GET_UINT64(ev, &d->c.preadv.offsets[i-1], &p, &q)
              ^
drivers/common/efile_drv.c:564:14: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
     (*(pp)+4 <= (ev)->iov[*(qp)].iov_len                  \
              ^
drivers/common/efile_drv.c:3750:7: note: in expansion of macro
‘EV_GET_UINT32’
   || !EV_GET_UINT32(ev, &sizeH, &p, &q)
       ^
drivers/common/efile_drv.c:569:30: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
         *(pp) = (    *(pp)+4 < (ev)->iov[*(qp)].iov_len   \
                              ^
drivers/common/efile_drv.c:3750:7: note: in expansion of macro
‘EV_GET_UINT32’
   || !EV_GET_UINT32(ev, &sizeH, &p, &q)
       ^
drivers/common/efile_drv.c:564:14: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
     (*(pp)+4 <= (ev)->iov[*(qp)].iov_len                  \
              ^
drivers/common/efile_drv.c:3751:7: note: in expansion of macro
‘EV_GET_UINT32’
   || !EV_GET_UINT32(ev, &sizeL, &p, &q)) {
       ^
drivers/common/efile_drv.c:569:30: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
         *(pp) = (    *(pp)+4 < (ev)->iov[*(qp)].iov_len   \
                              ^
drivers/common/efile_drv.c:3751:7: note: in expansion of macro
‘EV_GET_UINT32’
   || !EV_GET_UINT32(ev, &sizeL, &p, &q)) {
       ^
drivers/common/efile_drv.c:581:14: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
     (*(pp)+8 <= (ev)->iov[*(qp)].iov_len                  \

-Manish
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20130815/4195566d/attachment.html>


More information about the erlang-bugs mailing list