Skip to content

Fails to build with gcc15 #169

@mikelolasagasti

Description

@mikelolasagasti

Output form a fresh Fedora 42 container:

libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I. -I/usr/local/include -I./enc/unicode -Wall -Wno-incompatible-pointer-types -MT st.lo -MD -MP -MF .deps/st.Tpo -c st.c  -fPIC -DPIC -o .libs/st.o
st.c: In function 'do_hash':
st.c:327:43: error: too many arguments to function 'tab->type->hash'; expected 0, have 1
  327 |     st_hash_t hash = (st_hash_t)(tab->type->hash)(key);
      |                                 ~~~~~~~~~~^~~~~~~ ~~~
In file included from regint.h:930,
                 from st.c:106:
st.h:70:18: note: declared here
   70 |     st_index_t (*hash)(ANYARGS /*st_data_t*/);        /* st_hash_func* */
      |                  ^~~~
st.c: In function 'find_entry':
st.c:180:40: error: too many arguments to function '(int (*)(void))tab->type->compare'; expected 0, have 2
  180 | #define EQUAL(tab,x,y) ((x) == (y) || (*(tab)->type->compare)((x),(y)) == 0)
      |                                       ~^~~~~~~~~~~~~~~~~~~~~~ ~~~
st.c:182:35: note: in expansion of macro 'EQUAL'
  182 |     ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key))
      |                                   ^~~~~
st.c:189:15: note: in expansion of macro 'PTR_EQUAL'
  189 |         res = PTR_EQUAL(tab, ptr, hash_val, key);                   \
      |               ^~~~~~~~~
st.c:889:9: note: in expansion of macro 'DO_PTR_EQUAL_CHECK'
  889 |         DO_PTR_EQUAL_CHECK(tab, &entries[i], hash_value, key, eq_p, rebuilt_p);
      |         ^~~~~~~~~~~~~~~~~~
st.c: In function 'find_table_entry_ind':
st.c:180:40: error: too many arguments to function '(int (*)(void))tab->type->compare'; expected 0, have 2
  180 | #define EQUAL(tab,x,y) ((x) == (y) || (*(tab)->type->compare)((x),(y)) == 0)
      |                                       ~^~~~~~~~~~~~~~~~~~~~~~ ~~~
st.c:182:35: note: in expansion of macro 'EQUAL'
  182 |     ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key))
      |                                   ^~~~~
st.c:189:15: note: in expansion of macro 'PTR_EQUAL'
  189 |         res = PTR_EQUAL(tab, ptr, hash_val, key);                   \
      |               ^~~~~~~~~
st.c:931:13: note: in expansion of macro 'DO_PTR_EQUAL_CHECK'
  931 |             DO_PTR_EQUAL_CHECK(tab, &entries[bin - ENTRY_BASE], hash_value, key, eq_p, rebuilt_p);
      |             ^~~~~~~~~~~~~~~~~~
st.c: In function 'find_table_bin_ind':
st.c:180:40: error: too many arguments to function '(int (*)(void))tab->type->compare'; expected 0, have 2
  180 | #define EQUAL(tab,x,y) ((x) == (y) || (*(tab)->type->compare)((x),(y)) == 0)
      |                                       ~^~~~~~~~~~~~~~~~~~~~~~ ~~~
st.c:182:35: note: in expansion of macro 'EQUAL'
  182 |     ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key))
      |                                   ^~~~~
st.c:189:15: note: in expansion of macro 'PTR_EQUAL'
  189 |         res = PTR_EQUAL(tab, ptr, hash_val, key);                   \
      |               ^~~~~~~~~
st.c:978:13: note: in expansion of macro 'DO_PTR_EQUAL_CHECK'
  978 |             DO_PTR_EQUAL_CHECK(tab, &entries[bin - ENTRY_BASE], hash_value, key, eq_p, rebuilt_p);
      |             ^~~~~~~~~~~~~~~~~~
st.c: In function 'find_table_bin_ptr_and_reserve':
st.c:180:40: error: too many arguments to function '(int (*)(void))tab->type->compare'; expected 0, have 2
  180 | #define EQUAL(tab,x,y) ((x) == (y) || (*(tab)->type->compare)((x),(y)) == 0)
      |                                       ~^~~~~~~~~~~~~~~~~~~~~~ ~~~
st.c:182:35: note: in expansion of macro 'EQUAL'
  182 |     ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key))
      |                                   ^~~~~
st.c:189:15: note: in expansion of macro 'PTR_EQUAL'
  189 |         res = PTR_EQUAL(tab, ptr, hash_val, key);                   \
      |               ^~~~~~~~~
st.c:1086:13: note: in expansion of macro 'DO_PTR_EQUAL_CHECK'
 1086 |             DO_PTR_EQUAL_CHECK(tab, &entries[entry_index - ENTRY_BASE], curr_hash_value, key, eq_p, rebuilt_p);
      |             ^~~~~~~~~~~~~~~~~~
st.c: In function 'st_general_foreach':
st.c:1626:19: error: too many arguments to function 'func'; expected 0, have 4
 1626 |         retval = (*func)(key, curr_entry_ptr->record, arg, 0);
      |                  ~^~~~~~ ~~~
st.c:1655:27: error: too many arguments to function 'func'; expected 0, have 4
 1655 |                 retval = (*func)(0, 0, arg, 1);
      |                          ~^~~~~~ ~
make[2]: *** [Makefile:997: st.lo] Error 1

Can be easily reproduced with:

$ dnf install -y git-core make gcc automake libtool cmp gawk && \
git clone https://github.com/k-takata/Onigmo && cd Onigmo/ && \
sh autogen.sh && ./configure && make CFLAGS="-Wno-incompatible-pointer-types"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions