hashmap.c:4089:23: error: incompatible function pointer types with clang 16
Clang 16 and possibly GCC 13 enables -Werror=int-conversion -Werror=implicit-function-declaration -Werror=implicit-int, and -Werror=incompatible-function-pointer-types
This results in build errors such as
hashmap.c:4089:23: error: incompatible function pointer types assigning to 'gboolean (*)(GeeMapIterator *)' (aka 'int (*)(struct _GeeMapIterator *)') from 'gboolean (GeeHashMapNodeIterator *)' (aka 'int (struct _GeeHashMapNodeIterator *)') [-Wincompatible-function-pointer-types]
iface->get_read_only = gee_hash_map_map_iterator_real_get_read_only;
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
First found on Gentoo musl-llvm profile, locally I can use the following patch to workaround the error:
diff --git a/gee/hashmap.c b/gee/hashmap.c
index a9aabdf..7e7e278 100644
--- a/gee/hashmap.c
+++ b/gee/hashmap.c
@@ -4086,7 +4086,7 @@ gee_hash_map_map_iterator_gee_map_iterator_interface_init (GeeMapIteratorIface *
iface->next = (gboolean (*) (GeeMapIterator*)) gee_hash_map_node_iterator_next;
iface->has_next = (gboolean (*) (GeeMapIterator*)) gee_hash_map_node_iterator_has_next;
iface->get_mutable = gee_hash_map_map_iterator_real_get_mutable;
- iface->get_read_only = gee_hash_map_map_iterator_real_get_read_only;
+ iface->get_read_only = (gboolean (*) (GeeMapIterator*)) gee_hash_map_map_iterator_real_get_read_only;
iface->get_valid = (gboolean (*) (GeeMapIterator *)) gee_hash_map_node_iterator_get_valid;
}
diff --git a/gee/treemap.c b/gee/treemap.c
index af3233b..40504b8 100644
--- a/gee/treemap.c
+++ b/gee/treemap.c
@@ -13955,7 +13955,7 @@ gee_tree_map_map_iterator_gee_map_iterator_interface_init (GeeMapIteratorIface *
iface->next = (gboolean (*) (GeeMapIterator*)) gee_tree_map_node_iterator_next;
iface->has_next = (gboolean (*) (GeeMapIterator*)) gee_tree_map_node_iterator_has_next;
iface->unset = (void (*) (GeeMapIterator*)) gee_tree_map_node_iterator_unset;
- iface->get_read_only = gee_tree_map_map_iterator_real_get_read_only;
+ iface->get_read_only = (gboolean (*) (GeeMapIterator*)) gee_tree_map_map_iterator_real_get_read_only;
iface->get_mutable = gee_tree_map_map_iterator_real_get_mutable;
iface->get_valid = (gboolean (*) (GeeMapIterator *)) gee_tree_map_node_iterator_get_valid;
}
@@ -14320,7 +14320,7 @@ gee_tree_map_sub_map_iterator_gee_map_iterator_interface_init (GeeMapIteratorIfa
iface->next = (gboolean (*) (GeeMapIterator*)) gee_tree_map_sub_node_iterator_next;
iface->has_next = (gboolean (*) (GeeMapIterator*)) gee_tree_map_sub_node_iterator_has_next;
iface->unset = (void (*) (GeeMapIterator*)) gee_tree_map_sub_node_iterator_unset;
- iface->get_read_only = gee_tree_map_sub_map_iterator_real_get_read_only;
+ iface->get_read_only = (gboolean (*) (GeeMapIterator*)) gee_tree_map_sub_map_iterator_real_get_read_only;
iface->get_mutable = gee_tree_map_sub_map_iterator_real_get_mutable;
iface->get_valid = (gboolean (*) (GeeMapIterator *)) gee_tree_map_sub_node_iterator_get_valid;
}
diff --git a/tests/testcase.c b/tests/testcase.c
index 18fdf82..9d6420e 100644
--- a/tests/testcase.c
+++ b/tests/testcase.c
@@ -278,7 +278,7 @@ gee_test_case_add_test (GeeTestCase* self,
_tmp3_ = self->priv->suite;
_tmp4_ = gee_test_case_adaptor_get_name (adaptor);
_tmp5_ = _tmp4_;
- _tmp6_ = g_test_create_case (_tmp5_, (gsize) 0, adaptor, _gee_test_case_adaptor_set_up_gtest_fixture_func, _gee_test_case_adaptor_run_gtest_fixture_func, _gee_test_case_adaptor_tear_down_gtest_fixture_func);
+ _tmp6_ = g_test_create_case (_tmp5_, (gsize) 0, adaptor, (GTestFixtureFunc *) _gee_test_case_adaptor_set_up_gtest_fixture_func, (GTestFixtureFunc *) _gee_test_case_adaptor_run_gtest_fixture_func, (GTestFixtureFunc *) _gee_test_case_adaptor_tear_down_gtest_fixture_func);
g_test_suite_add (_tmp3_, _tmp6_);
_gee_test_case_adaptor_unref0 (adaptor);
(test_target_destroy_notify == NULL) ? NULL : (test_target_destroy_notify (test_target), NULL);
Please refer: https://bugs.gentoo.org/894376.
It would be very useful if someone took a look. Thanks!
Edited by listout