www/rubygem-hpricot: fix build with clang 16

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

  fast_xs.c:165:39: error: incompatible function pointer types passing 'VALUE (VALUE)' (aka 'unsigned long (unsigned long)') to parameter of type 'VALUE (*)(VALUE, VALUE)' (aka 'unsigned long (*)(unsigned long, unsigned long)') [-Wincompatible-function-pointer-types]
          array = rb_rescue(unpack_utf8, self, unpack_uchar, self);
                                               ^~~~~~~~~~~~
  /usr/local/include/ruby-3.1/ruby/internal/iterator.h:364:62: note: passing argument to parameter 'r_proc' here
  VALUE rb_rescue(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2);
                                                               ^

This is because the r_proc parameter of rb_rescue() should be a pointer
to a function taking two VALUE parameters, not one (the second parameter
can contain an exception to be handled).

Another similar error occurs later in hpricot_scan.c, which was
generated from hpricot_scan.rl:

  hpricot_scan.rl:855:3: error: incompatible function pointer types passing 'VALUE (VALUE, VALUE, VALUE, VALUE, VALUE)' (aka 'unsigned long (unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)') to parameter of type 'VALUE (*)(VALUE, VALUE, VALUE, VALUE)' (aka 'unsigned long (*)(unsigned long, unsigned long, unsigned long, unsigned long)') [-Wincompatible-function-pointer-types]
    rb_define_singleton_method(mHpricot, "css", hpricot_css, 3);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /usr/local/include/ruby-3.1/ruby/internal/anyargs.h:307:143: note: expanded from macro 'rb_define_singleton_method'
  #define rb_define_singleton_method(obj, mid, func, arity)   RBIMPL_ANYARGS_DISPATCH_rb_define_singleton_method((arity), (func))((obj), (mid), (func), (arity))
                                                                                                                                                ^~~~~~
  /usr/local/include/ruby-3.1/ruby/internal/anyargs.h:270:1: note: passing argument to parameter here
  RBIMPL_ANYARGS_DECL(rb_define_singleton_method, VALUE, const char *)
  ^

This is because the func parameter of rb_define_singleton_method()
should be a pointer to a function taking four VALUE parameters, not five.

PR:		271245
Approved by:	sunpoet (maintainer)
MFH:		2023Q2
This commit is contained in:
Dimitry Andric 2023-05-04 20:17:18 +02:00
parent 3426627cca
commit 5a61c2c8ba
2 changed files with 23 additions and 0 deletions

View file

@ -1,5 +1,6 @@
PORTNAME= hpricot
PORTVERSION= 0.8.6
PORTREVISION= 1
CATEGORIES= www rubygems
MASTER_SITES= RG

View file

@ -0,0 +1,22 @@
--- ext/fast_xs/fast_xs.c.orig 2023-05-04 17:51:30 UTC
+++ ext/fast_xs/fast_xs.c
@@ -144,7 +144,7 @@ static VALUE unpack_utf8(VALUE self)
return rb_funcall(self, unpack_id, 1, U_fmt);
}
-static VALUE unpack_uchar(VALUE self)
+static VALUE unpack_uchar(VALUE self, VALUE exc)
{
return rb_funcall(self, unpack_id, 1, C_fmt);
}
--- ext/hpricot_scan/hpricot_scan.c.orig 2023-05-04 18:05:46 UTC
+++ ext/hpricot_scan/hpricot_scan.c
@@ -22,7 +22,7 @@ struct hpricot_struct {
#define RSTRING_PTR(str) RSTRING(str)->ptr
#endif
-VALUE hpricot_css(VALUE, VALUE, VALUE, VALUE, VALUE);
+VALUE hpricot_css(VALUE, VALUE, VALUE, VALUE);
#define NO_WAY_SERIOUSLY "*** This should not happen, please file a bug report with the HTML you're parsing at http://github.com/hpricot/hpricot/issues. So sorry!"