the-moisrex / liburing-hdr-only

The header only implementation of the liburing library
MIT License
18 stars 1 forks source link

`liburing.h`: implicit conversion loses integer precision #13

Closed the-moisrex closed 11 months ago

the-moisrex commented 11 months ago

2.6 (not yet official release) added this.

/liburing.h:2260:22: warning: implicit conversion loses integer precision: 'int' to '__u16' (aka 'unsigned short') [-Wimplicit-int-conversion]
    sqe->buf_group = buf_group;
                   ~ ^~~~~~~~~
/liburing.h:2748:20: warning: implicit conversion changes signedness: 'int' to '__u32' (aka 'unsigned int') [-Wsign-conversion]
    sqe->optname = optname;
                 ~ ^~~~~~~
/liburing.h:2749:20: warning: implicit conversion changes signedness: 'int' to '__u32' (aka 'unsigned int') [-Wsign-conversion]
    sqe->optlen  = optlen;
                 ~ ^~~~~~
/liburing.h:2750:20: warning: implicit conversion changes signedness: 'int' to '__u32' (aka 'unsigned int') [-Wsign-conversion]
    sqe->cmd_op  = cmd_op;
                 ~ ^~~~~~
/liburing.h:2751:20: warning: implicit conversion changes signedness: 'int' to '__u32' (aka 'unsigned int') [-Wsign-conversion]
    sqe->level   = level;
                 ~ ^~~~~
/liburing.h:2760:45: warning: implicit conversion changes signedness: 'id_t' (aka 'unsigned int') to 'int' [-Wsign-conversion]
    io_uring_prep_rw(IORING_OP_WAITID, sqe, id, nullptr, uring_static_cast(unsigned, idtype), 0);
    ~~~~~~~~~~~~~~~~                        ^~
/liburing.h:2762:25: warning: implicit conversion changes signedness: 'int' to '__u32' (aka 'unsigned int') [-Wsign-conversion]
    sqe->file_index   = options;
                      ~ ^~~~~~~
/liburing.h:2772:49: warning: implicit conversion changes signedness: 'uint32_t' (aka 'unsigned int') to 'int' [-Wsign-conversion]
    io_uring_prep_rw(IORING_OP_FUTEX_WAKE, sqe, futex_flags, futex, 0, val);
    ~~~~~~~~~~~~~~~~                            ^~~~~~~~~~~
/liburing.h:2783:49: warning: implicit conversion changes signedness: 'uint32_t' (aka 'unsigned int') to 'int' [-Wsign-conversion]
    io_uring_prep_rw(IORING_OP_FUTEX_WAIT, sqe, futex_flags, futex, 0, val);
    ~~~~~~~~~~~~~~~~                            ^~~~~~~~~~~
the-moisrex commented 11 months ago

Another bug after fixing this:

In file included from ../liburing/liburing.h:17:
../liburing/liburing.h: In function ‘void io_uring_prep_waitid(io_uring_sqe*, idtype_t, id_t, siginfo_t*, int, unsigned int)’:
../liburing/compat.h:53:46: error: invalid ‘static_cast’ from type ‘siginfo_t*’ to type ‘__u64’ {aka ‘long long unsigned int’}
   53 | #    define uring_static_cast(To, What)      static_cast<To>(What)
      |                                              ^~~~~~~~~~~~~~~~~~~~~
../liburing/liburing.h:2768:25: note: in expansion of macro ‘uring_static_cast’
 2768 |     sqe->addr2        = uring_static_cast(__u64, infop);
      |                         ^~~~~~~~~~~~~~~~~
the-moisrex commented 11 months ago

Fixed.