Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 May 2023 13:35:50 +0000
From:      bugzilla-noreply@freebsd.org
To:        ruby@FreeBSD.org
Subject:   maintainer-feedback requested: [Bug 271706] graphics/rubygem-cairo: fix build with clang 16
Message-ID:  <bug-271706-21402-YaqubPdXgH@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-271706-21402@https.bugs.freebsd.org/bugzilla/>
References:  <bug-271706-21402@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
Bugzilla Automation <bugzilla@FreeBSD.org> has asked freebsd-ruby (Nobody)
<ruby@FreeBSD.org> for maintainer-feedback:
Bug 271706: graphics/rubygem-cairo: fix build with clang 16
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D271706



--- Description ---
Clang 16 has a new error about incompatible function types, which shows
up when building graphics/rubygem-cairo:

  rb_cairo_surface.c:2354:3: error: incompatible function pointer types pas=
sing
'VALUE (int, VALUE *, VALUE)' (aka 'unsigned long (int, unsigned long *,
unsigned long)') to parameter of type 'VALUE (*)(VALUE, VALUE)' (aka 'unsig=
ned
long (*)(unsigned long, unsigned long)')
[-Wincompatible-function-pointer-types]
    rb_define_method (rb_cCairo_GLSurface, "initialize",
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /usr/local/include/ruby-3.1/ruby/internal/anyargs.h:287:135: note: expand=
ed
from macro 'rb_define_method'
  #define rb_define_method(klass, mid, func, arity)=09=20=20=20=20=20
RBIMPL_ANYARGS_DISPATCH_rb_define_method((arity), (func))((klass), (mid),
(func), (arity))
=09=09=09=09=09=09=09=09=09=20=20=20=20=20=20=20
							^~~~~~
  /usr/local/include/ruby-3.1/ruby/internal/anyargs.h:276:1: note: passing
argument to parameter here
  RBIMPL_ANYARGS_DECL(rb_define_method, VALUE, const char *)
  ^
  /usr/local/include/ruby-3.1/ruby/internal/anyargs.h:255:72: note: expanded
from macro 'RBIMPL_ANYARGS_DECL'
  RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _01(__VA_ARGS__,
VALUE(*)(VALUE, VALUE), int); \
									 ^
  rb_cairo_surface.c:2368:3: error: incompatible function pointer types pas=
sing
'VALUE (int, VALUE *, VALUE)' (aka 'unsigned long (int, unsigned long *,
unsigned long)') to parameter of type 'VALUE (*)(VALUE, VALUE)' (aka 'unsig=
ned
long (*)(unsigned long, unsigned long)')
[-Wincompatible-function-pointer-types]
    rb_define_method (rb_cCairo_GLTextureSurface, "initialize",
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /usr/local/include/ruby-3.1/ruby/internal/anyargs.h:287:135: note: expand=
ed
from macro 'rb_define_method'
  #define rb_define_method(klass, mid, func, arity)=09=20=20=20=20=20
RBIMPL_ANYARGS_DISPATCH_rb_define_method((arity), (func))((klass), (mid),
(func), (arity))
=09=09=09=09=09=09=09=09=09=20=20=20=20=20=20=20
							^~~~~~
  /usr/local/include/ruby-3.1/ruby/internal/anyargs.h:276:1: note: passing
argument to parameter here
  RBIMPL_ANYARGS_DECL(rb_define_method, VALUE, const char *)
  ^
  /usr/local/include/ruby-3.1/ruby/internal/anyargs.h:255:72: note: expanded
from macro 'RBIMPL_ANYARGS_DECL'
  RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _01(__VA_ARGS__,
VALUE(*)(VALUE, VALUE), int); \
									 ^

This is because rb_define_method's last argument is the 'arity' of the
method, and in case of cr_gl_surface_initialize() and
cr_gl_texture_surface_initialize() it should be -1 to indicate a
variable number of arguments.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-271706-21402-YaqubPdXgH>