Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

clang: selector.c:301:26: error: incompatible function pointer types #290

Closed
jgraichen opened this issue Jan 23, 2023 · 5 comments
Closed

Comments

@jgraichen
Copy link

When Ruby is built with clang, gem install nio4r fails with:

compiling selector.c
selector.c:301:26: error: incompatible function pointer types passing 'VALUE (*)(VALUE *)' (aka 'unsigned long (*)(unsigned long *)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-function-pointer-types]
        return rb_ensure(func, (VALUE)args, NIO_Selector_unlock, self);
                         ^~~~
/home/user/.rvm/rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/iterator.h:425:25: note: passing argument to parameter 'b_proc' here
VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2);
                        ^
1 error generated.
make: *** [Makefile:247: selector.o] Error 1

make failed, exit code 2

Environment

> lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.1 LTS
Release:	22.04
Codename:	jammy

> clang --version
Ubuntu clang version 16.0.0 (++20230116031321+5ab0894fd570-1~exp1~20230116151419.689)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

Ruby has been built with rvm:

> CC=clang CXX=clang++ optflags="-O3 -march=native -mtune=native" rvm reinstall 3.1.3 --disable-binary

Same happens with Ruby 3.2.0 built the same way.

Steps to reproduce

> gem install nio4r
Fetching nio4r-2.5.8.gem
Building native extensions. This could take a while...
ERROR:  Error installing nio4r:
	ERROR: Failed to build gem native extension.

    current directory: /home/user/.rvm/rubies/ruby-3.1.3/lib/ruby/gems/3.1.0/gems/nio4r-2.5.8/ext/nio4r
/home/user/.rvm/rubies/ruby-3.1.3/bin/ruby -I /home/user/.rvm/rubies/ruby-3.1.3/lib/ruby/3.1.0 extconf.rb
checking for unistd.h... yes
checking for linux/aio_abi.h... yes
checking for linux/io_uring.h... yes
checking for sys/select.h... yes
checking for port_event_t in poll.h... no
checking for sys/epoll.h... yes
checking for sys/event.h... no
checking for port_event_t in port.h... no
checking for sys/resource.h... yes
creating Makefile

current directory: /home/user/.rvm/rubies/ruby-3.1.3/lib/ruby/gems/3.1.0/gems/nio4r-2.5.8/ext/nio4r
make DESTDIR\= sitearchdir\=./.gem.20230123-130871-7gl98e sitelibdir\=./.gem.20230123-130871-7gl98e clean

current directory: /home/user/.rvm/rubies/ruby-3.1.3/lib/ruby/gems/3.1.0/gems/nio4r-2.5.8/ext/nio4r
make DESTDIR\= sitearchdir\=./.gem.20230123-130871-7gl98e sitelibdir\=./.gem.20230123-130871-7gl98e
compiling bytebuffer.c
bytebuffer.c:308:20: warning: implicit conversion loses integer precision: 'ssize_t' (aka 'long') to 'int' [-Wshorten-64-to-32]
    return INT2NUM(bytes_read);
           ~~~~~~~ ^~~~~~~~~~
bytebuffer.c:338:20: warning: implicit conversion loses integer precision: 'ssize_t' (aka 'long') to 'int' [-Wshorten-64-to-32]
    return INT2NUM(bytes_written);
           ~~~~~~~ ^~~~~~~~~~~~~
2 warnings generated.
compiling monitor.c
monitor.c:185:40: warning: implicit conversion loses integer precision: 'VALUE' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
    NIO_Monitor_update_interests(self, interest);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~       ^~~~~~~~
monitor.c:196:40: warning: implicit conversion loses integer precision: 'VALUE' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32]
    NIO_Monitor_update_interests(self, interest);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~       ^~~~~~~~
2 warnings generated.
compiling nio4r_ext.c
In file included from nio4r_ext.c:6:
./../libev/ev.c:234:5: warning: 'EV_NO_THREADS' is not defined, evaluates to 0 [-Wundef]
#if EV_NO_THREADS
    ^
./../libev/ev.c:240:5: warning: 'EV_NO_SMP' is not defined, evaluates to 0 [-Wundef]
#if EV_NO_SMP
    ^
./../libev/ev.c:573:48: warning: '/*' within block comment [-Wcomment]
/*#define MIN_INTERVAL  0.00000095367431640625 /* 1/2**20, good till 2200 */
                                               ^
./../libev/ev.c:691:7: warning: '__OPTIMIZE_SIZE__' is not defined, evaluates to 0 [-Wundef]
  #if __OPTIMIZE_SIZE__
      ^
./../libev/ev.c:700:7: warning: '_ILP32' is not defined, evaluates to 0 [-Wundef]
  #if _ILP32
      ^
./../libev/ev.c:739:5: warning: '__cplusplus' is not defined, evaluates to 0 [-Wundef]
#if ECB_CPP
    ^
./../libev/ev.c:734:20: note: expanded from macro 'ECB_CPP'
#define ECB_CPP   (__cplusplus+0)
                   ^
./../libev/ev.c:751:5: warning: '__cplusplus' is not defined, evaluates to 0 [-Wundef]
#if ECB_CPP
    ^
./../libev/ev.c:734:20: note: expanded from macro 'ECB_CPP'
#define ECB_CPP   (__cplusplus+0)
                   ^
./../libev/ev.c:766:5: warning: 'ECB_NO_THREADS' is not defined, evaluates to 0 [-Wundef]
#if ECB_NO_THREADS
    ^
./../libev/ev.c:770:5: warning: 'ECB_NO_SMP' is not defined, evaluates to 0 [-Wundef]
#if ECB_NO_SMP
    ^
./../libev/ev.c:775:5: warning: '__xlC__' is not defined, evaluates to 0 [-Wundef]
#if __xlC__ && ECB_CPP
    ^
./../libev/ev.c:779:13: warning: '_MSC_VER' is not defined, evaluates to 0 [-Wundef]
#if 1400 <= _MSC_VER
            ^
./../libev/ev.c:786:9: warning: '__i386' is not defined, evaluates to 0 [-Wundef]
    #if __i386 || __i386__
        ^
./../libev/ev.c:786:19: warning: '__i386__' is not defined, evaluates to 0 [-Wundef]
    #if __i386 || __i386__
                  ^
./../libev/ev.c:924:5: warning: '__cplusplus' is not defined, evaluates to 0 [-Wundef]
#if ECB_CPP
    ^
./../libev/ev.c:734:20: note: expanded from macro 'ECB_CPP'
#define ECB_CPP   (__cplusplus+0)
                   ^
./../libev/ev.c:981:5: warning: '__cplusplus' is not defined, evaluates to 0 [-Wundef]
#if ECB_CPP11
    ^
./../libev/ev.c:735:20: note: expanded from macro 'ECB_CPP11'
#define ECB_CPP11 (__cplusplus >= 201103L)
                   ^
./../libev/ev.c:989:5: warning: '_MSC_VER' is not defined, evaluates to 0 [-Wundef]
#if _MSC_VER >= 1300
    ^
./../libev/ev.c:995:5: warning: '_MSC_VER' is not defined, evaluates to 0 [-Wundef]
#if _MSC_VER >= 1500
    ^
./../libev/ev.c:1003:5: warning: '_MSC_VER' is not defined, evaluates to 0 [-Wundef]
#if _MSC_VER >= 1400
    ^
./../libev/ev.c:1192:26: warning: implicit conversion loses integer precision: 'uint64_t' (aka 'unsigned long') to 'unsigned int' [-Wshorten-64-to-32]
  return ecb_popcount32 (x) + ecb_popcount32 (x >> 32);
         ~~~~~~~~~~~~~~~~^~
./../libev/ev.c:1054:49: note: expanded from macro 'ecb_popcount32'
  #define ecb_popcount32(x) __builtin_popcount (x)
                            ~~~~~~~~~~~~~~~~~~  ^
./../libev/ev.c:1213:5: warning: '__cplusplus' is not defined, evaluates to 0 [-Wundef]
#if ECB_CPP
    ^
./../libev/ev.c:734:20: note: expanded from macro 'ECB_CPP'
#define ECB_CPP   (__cplusplus+0)
                   ^
./../libev/ev.c:1335:108: warning: implicit conversion loses integer precision: 'uint_fast32_t' (aka 'unsigned long') to 'unsigned int' [-Wshorten-64-to-32]
ecb_inline uint_fast32_t ecb_be_u32_to_host (uint_fast32_t v) { return ecb_little_endian () ? ecb_bswap32 (v) : v; }
                                                                                              ~~~~~~~~~~~~~^~
./../libev/ev.c:1257:46: note: expanded from macro 'ecb_bswap32'
  #define ecb_bswap32(x)  __builtin_bswap32 (x)
                          ~~~~~~~~~~~~~~~~~  ^
./../libev/ev.c:1339:108: warning: implicit conversion loses integer precision: 'uint_fast32_t' (aka 'unsigned long') to 'unsigned int' [-Wshorten-64-to-32]
ecb_inline uint_fast32_t ecb_le_u32_to_host (uint_fast32_t v) { return ecb_big_endian    () ? ecb_bswap32 (v) : v; }
                                                                                              ~~~~~~~~~~~~~^~
./../libev/ev.c:1257:46: note: expanded from macro 'ecb_bswap32'
  #define ecb_bswap32(x)  __builtin_bswap32 (x)
                          ~~~~~~~~~~~~~~~~~  ^
./../libev/ev.c:1355:108: warning: implicit conversion loses integer precision: 'uint_fast32_t' (aka 'unsigned long') to 'unsigned int' [-Wshorten-64-to-32]
ecb_inline uint_fast32_t ecb_host_to_be_u32 (uint_fast32_t v) { return ecb_little_endian () ? ecb_bswap32 (v) : v; }
                                                                                              ~~~~~~~~~~~~~^~
./../libev/ev.c:1257:46: note: expanded from macro 'ecb_bswap32'
  #define ecb_bswap32(x)  __builtin_bswap32 (x)
                          ~~~~~~~~~~~~~~~~~  ^
./../libev/ev.c:1359:108: warning: implicit conversion loses integer precision: 'uint_fast32_t' (aka 'unsigned long') to 'unsigned int' [-Wshorten-64-to-32]
ecb_inline uint_fast32_t ecb_host_to_le_u32 (uint_fast32_t v) { return ecb_big_endian    () ? ecb_bswap32 (v) : v; }
                                                                                              ~~~~~~~~~~~~~^~
./../libev/ev.c:1257:46: note: expanded from macro 'ecb_bswap32'
  #define ecb_bswap32(x)  __builtin_bswap32 (x)
                          ~~~~~~~~~~~~~~~~~  ^
./../libev/ev.c:1367:87: warning: implicit conversion loses integer precision: 'uint_fast32_t' (aka 'unsigned long') to 'uint32_t' (aka 'unsigned int') [-Wshorten-64-to-32]
ecb_inline void ecb_poke_be_u32_u (void *ptr, uint_fast32_t v) { ecb_poke_u32_u (ptr, ecb_host_to_be_u32 (v)); }
                                                                 ~~~~~~~~~~~~~~       ^~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:1371:87: warning: implicit conversion loses integer precision: 'uint_fast32_t' (aka 'unsigned long') to 'uint32_t' (aka 'unsigned int') [-Wshorten-64-to-32]
ecb_inline void ecb_poke_le_u32_u (void *ptr, uint_fast32_t v) { ecb_poke_u32_u (ptr, ecb_host_to_le_u32 (v)); }
                                                                 ~~~~~~~~~~~~~~       ^~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:1374:5: warning: '__cplusplus' is not defined, evaluates to 0 [-Wundef]
#if ECB_CPP
    ^
./../libev/ev.c:734:20: note: expanded from macro 'ECB_CPP'
#define ECB_CPP   (__cplusplus+0)
                   ^
./../libev/ev.c:1409:5: warning: '__cplusplus' is not defined, evaluates to 0 [-Wundef]
#if ECB_CPP
    ^
./../libev/ev.c:734:20: note: expanded from macro 'ECB_CPP'
#define ECB_CPP   (__cplusplus+0)
                   ^
./../libev/ev.c:1425:5: warning: 'ecb_cplusplus_does_not_suck' is not defined, evaluates to 0 [-Wundef]
#if ecb_cplusplus_does_not_suck
    ^
./../libev/ev.c:1540:8: warning: '__i386' is not defined, evaluates to 0 [-Wundef]
    || __i386 || __i386__ \
       ^
./../libev/ev.c:1540:18: warning: '__i386__' is not defined, evaluates to 0 [-Wundef]
    || __i386 || __i386__ \
                 ^
./../libev/ev.c:1510:13: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
      if (e < (14 - 24)) /* might not be sharp, but is good enough */
          ~ ^  ~~~~~~~
./../libev/ev.c:1746:5: warning: 'ECB_MEMORY_FENCE_NEEDS_PTHREADS' is not defined, evaluates to 0 [-Wundef]
#if ECB_MEMORY_FENCE_NEEDS_PTHREADS
    ^
./../libev/ev.c:1976:5: warning: 'EV_AVOID_STDIO' is not defined, evaluates to 0 [-Wundef]
#if EV_AVOID_STDIO
    ^
./../libev/ev.c:2005:5: warning: 'EV_AVOID_STDIO' is not defined, evaluates to 0 [-Wundef]
#if EV_AVOID_STDIO
    ^
./../libev/ev.c:2050:5: warning: 'EV_AVOID_STDIO' is not defined, evaluates to 0 [-Wundef]
#if EV_AVOID_STDIO
    ^
./../libev/ev.c:2080:5: warning: 'EV_SELECT_IS_WINSOCKET' is not defined, evaluates to 0 [-Wundef]
#if EV_SELECT_IS_WINSOCKET || EV_USE_IOCP
    ^
./../libev/ev.c:2080:31: warning: 'EV_USE_IOCP' is not defined, evaluates to 0 [-Wundef]
#if EV_SELECT_IS_WINSOCKET || EV_USE_IOCP
                              ^
./../libev/ev.c:2083:5: warning: 'EV_USE_IOCP' is not defined, evaluates to 0 [-Wundef]
#if EV_USE_IOCP
    ^
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:2130:
./../libev/ev_vars.h:88:24: warning: 'EV_GENWRAP' is not defined, evaluates to 0 [-Wundef]
#if defined(_WIN32) || EV_GENWRAP
                       ^
./../libev/ev_vars.h:150:22: warning: 'EV_GENWRAP' is not defined, evaluates to 0 [-Wundef]
#if EV_USE_KQUEUE || EV_GENWRAP
                     ^
./../libev/ev_vars.h:159:20: warning: 'EV_GENWRAP' is not defined, evaluates to 0 [-Wundef]
#if EV_USE_PORT || EV_GENWRAP
                   ^
./../libev/ev_vars.h:164:5: warning: 'EV_USE_IOCP' is not defined, evaluates to 0 [-Wundef]
#if EV_USE_IOCP || EV_GENWRAP
    ^
./../libev/ev_vars.h:164:20: warning: 'EV_GENWRAP' is not defined, evaluates to 0 [-Wundef]
#if EV_USE_IOCP || EV_GENWRAP
                   ^
In file included from nio4r_ext.c:6:
./../libev/ev.c:2136:31: warning: 'extern' variable has an initializer [-Wextern-initializer]
  EV_API_DECL struct ev_loop *ev_default_loop_ptr = 0; /* needs to be initialised to make it a definition despite extern */
                              ^
./../libev/ev.c:2249:19: warning: comparison of integers of different signs: 'int' and 'unsigned long' [-Wsign-compare]
  if (elem * ncur > MALLOC_ROUND - sizeof (void *) * 4)
      ~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:2402:5: warning: 'EV_SELECT_IS_WINSOCKET' is not defined, evaluates to 0 [-Wundef]
#if EV_SELECT_IS_WINSOCKET || EV_USE_IOCP
    ^
./../libev/ev.c:2402:31: warning: 'EV_USE_IOCP' is not defined, evaluates to 0 [-Wundef]
#if EV_SELECT_IS_WINSOCKET || EV_USE_IOCP
                              ^
./../libev/ev.c:2619:18: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
      k = minpos - heap;
        ~ ~~~~~~~^~~~~~
./../libev/ev.c:3073:5: warning: 'EV_USE_IOCP' is not defined, evaluates to 0 [-Wundef]
#if EV_USE_IOCP
    ^
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3086:
./../libev/ev_linuxaio.c:125:10: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
  return ev_syscall2 (SYS_io_setup, nr_events, ctx_idp);
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:1826:57: note: expanded from macro 'ev_syscall2'
  #define ev_syscall2(nr,arg1,arg2)                     syscall (nr, arg1, arg2)
                                                        ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3086:
./../libev/ev_linuxaio.c:132:10: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
  return ev_syscall1 (SYS_io_destroy, ctx_id);
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:1825:57: note: expanded from macro 'ev_syscall1'
  #define ev_syscall1(nr,arg1)                          syscall (nr, arg1)
                                                        ^~~~~~~~~~~~~~~~~~
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3086:
./../libev/ev_linuxaio.c:139:10: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
  return ev_syscall3 (SYS_io_submit, ctx_id, nr, cbp);
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:1827:57: note: expanded from macro 'ev_syscall3'
  #define ev_syscall3(nr,arg1,arg2,arg3)                syscall (nr, arg1, arg2, arg3)
                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3086:
./../libev/ev_linuxaio.c:146:10: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
  return ev_syscall3 (SYS_io_cancel, ctx_id, cbp, result);
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:1827:57: note: expanded from macro 'ev_syscall3'
  #define ev_syscall3(nr,arg1,arg2,arg3)                syscall (nr, arg1, arg2, arg3)
                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3086:
./../libev/ev_linuxaio.c:153:10: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
  return ev_syscall5 (SYS_io_getevents, ctx_id, min_nr, nr, events, timeout);
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:1829:57: note: expanded from macro 'ev_syscall5'
  #define ev_syscall5(nr,arg1,arg2,arg3,arg4,arg5)      syscall (nr, arg1, arg2, arg3, arg4, arg5)
                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3086:
./../libev/ev_linuxaio.c:310:26: warning: implicit conversion loses integer precision: '__s64' (aka 'long long') to 'int' [-Wshorten-64-to-32]
      int res      = ev->res;
          ~~~        ~~~~^~~
./../libev/ev_linuxaio.c:483:9: warning: add explicit braces to avoid dangling else [-Wdangling-else]
        else if (errno == EAGAIN)
        ^
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3089:
./../libev/ev_iouring.c:205:10: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
  return ev_syscall2 (SYS_io_uring_setup, entries, params);
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:1826:57: note: expanded from macro 'ev_syscall2'
  #define ev_syscall2(nr,arg1,arg2)                     syscall (nr, arg1, arg2)
                                                        ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3089:
./../libev/ev_iouring.c:212:10: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32]
  return ev_syscall6 (SYS_io_uring_enter, fd, to_submit, min_complete, flags, sig, sigsz);
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../libev/ev.c:1830:57: note: expanded from macro 'ev_syscall6'
  #define ev_syscall6(nr,arg1,arg2,arg3,arg4,arg5,arg6) syscall (nr, arg1, arg2, arg3, arg4, arg5,arg6)
                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3089:
./../libev/ev_iouring.c:298:31: warning: '/*' within block comment [-Wcomment]
  /*ECB_MEMORY_FENCE_RELEASE; /* for the time being we assume this is not needed */
                              ^
./../libev/ev_iouring.c:293:22: warning: implicit conversion loses integer precision: 'long' to 'unsigned int' [-Wshorten-64-to-32]
  unsigned idx = sqe - EV_SQES;
           ~~~   ~~~~^~~~~~~~~
./../libev/ev_iouring.c:359:5: warning: 'TODO' is not defined, evaluates to 0 [-Wundef]
#if TODO
    ^
In file included from nio4r_ext.c:6:
In file included from ./../libev/ev.c:3095:
./../libev/ev_select.c:57:5: warning: 'EV_SELECT_IS_WINSOCKET' is not defined, evaluates to 0 [-Wundef]
#if EV_SELECT_IS_WINSOCKET
    ^
./../libev/ev_select.c:176:11: warning: 'EV_SELECT_IS_WINSOCKET' is not defined, evaluates to 0 [-Wundef]
      #if EV_SELECT_IS_WINSOCKET
          ^
In file included from nio4r_ext.c:6:
./../libev/ev.c:3318:5: warning: 'EV_USE_IOCP' is not defined, evaluates to 0 [-Wundef]
#if EV_USE_IOCP
    ^
./../libev/ev.c:3409:5: warning: 'EV_USE_IOCP' is not defined, evaluates to 0 [-Wundef]
#if EV_USE_IOCP
    ^
./../libev/ev.c:4417:34: warning: '&' within '|' [-Wbitwise-op-parentheses]
  fd_change (EV_A_ fd, w->events & EV__IOFDSET | EV_ANFD_REIFY);
                       ~~~~~~~~~~^~~~~~~~~~~~~ ~
./../libev/ev.c:4417:34: note: place parentheses around the '&' expression to silence this warning
  fd_change (EV_A_ fd, w->events & EV__IOFDSET | EV_ANFD_REIFY);
                                 ^
                       (                      )
./../libev/ev.c:4925:13: warning: implicit conversion loses integer precision: 'ssize_t' (aka 'long') to 'int' [-Wshorten-64-to-32]
  int len = read (fs_fd, buf, sizeof (buf));
      ~~~   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68 warnings generated.
compiling selector.c
selector.c:301:26: error: incompatible function pointer types passing 'VALUE (*)(VALUE *)' (aka 'unsigned long (*)(unsigned long *)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-function-pointer-types]
        return rb_ensure(func, (VALUE)args, NIO_Selector_unlock, self);
                         ^~~~
/home/user/.rvm/rubies/ruby-3.1.3/include/ruby-3.1.0/ruby/internal/iterator.h:425:25: note: passing argument to parameter 'b_proc' here
VALUE rb_ensure(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*e_proc)(VALUE), VALUE data2);
                        ^
1 error generated.
make: *** [Makefile:247: selector.o] Error 1

make failed, exit code 2

Gem files will remain installed in /home/user/.rvm/rubies/ruby-3.1.3/lib/ruby/gems/3.1.0/gems/nio4r-2.5.8 for inspection.
Results logged to /home/user/.rvm/rubies/ruby-3.1.3/lib/ruby/gems/3.1.0/extensions/x86_64-linux/3.1.0/nio4r-2.5.8/gem_make.out
@ioquatix
Copy link
Member

Wow, that is a lot of warnings!

Feel free to submit PRs to fix, otherwise I'll look at it when I have time.

@jgraichen
Copy link
Author

jgraichen commented Jan 23, 2023

No panic 😉. It is only a test/development system.

I just rebuilt Ruby with gcc again, that does work, but wanted to report the error with clang.

Most warnings seem to come from libev too. They probably are not shown on gem install with otherwise successful?

@ioquatix
Copy link
Member

I think we should check if upstream libev has fixed these issues?

@ioquatix
Copy link
Member

ioquatix commented Apr 2, 2023

This should be fixed in the latest release, can you please confirm and update the issue.

@jgraichen
Copy link
Author

Working here. Thanks a lot!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants