maint: port to strict C function type checking

Violation of C standard detected by clang -fsanitize=undefined
with clang 19.1.7 on Fedora 41 x86-64.
* src/counterexample.c (si_bfs_free):
* src/files.c (prefix_map_free, add_prefix_map):
* src/fixits.c (fixit_cmp, fixit_free, fixits_register):
(expand_to_conflict, nonunifying_shift_path)
(search_state_free_children, search_state_free, ssb_free)
(ssb_hasher, ssb_comp, ssb_equals, visited_hasher)
(visited_comparator, ssb_append, unifying_example):
* src/lssi.c (lssi_free, lssi_hasher, lssi_comparator)
(shortest_path_from_start):
* src/parse-simulation.c (free_parse_state)
(parse_state_list_new, parser_pop):
* src/state-item.c (hash_pair_hasher, hash_pair_comparator)
(hash_pair_free, hash_pair_table_create):
Avoid undefined behavior in C, which does not allow you to cast a
function pointer to some other function type and then call it via
that other type.  Instead, use functions with correct types
according to the C standard, and cast their parameters.
* src/getargs.c (xargmatch_fn): Return int const, not int, to
match what ARGMATCH_DEFINE_GROUP does.  In all uses of
ARGMATCH_DEFINE_GROUP, say that they return int, to match
xargmatch_fn.
(FLAGS_ARGMATCH): Do not cast function pointer.
* src/parse-simulation.c (vc_derivation_list_append): New function.
* src/system.h (deconst): New static function.
This commit is contained in:
Paul Eggert
2025-03-13 13:38:21 -07:00
parent 6a4b3240cf
commit d7527048a8
9 changed files with 90 additions and 70 deletions

View File

@@ -44,20 +44,24 @@ typedef struct
} hash_pair;
static size_t
hash_pair_hasher (const hash_pair *sl, size_t max)
hash_pair_hasher (void const *vsl, size_t max)
{
hash_pair const *sl = vsl;
return sl->key % max;
}
static bool
hash_pair_comparator (const hash_pair *l, const hash_pair *r)
hash_pair_comparator (void const *vl, void const *vr)
{
hash_pair const *l = vl;
hash_pair const *r = vr;
return l->key == r->key;
}
static void
hash_pair_free (hash_pair *hp)
hash_pair_free (void *vhp)
{
hash_pair *hp = vhp;
bitset_free (hp->l);
free (hp);
}
@@ -65,11 +69,8 @@ hash_pair_free (hash_pair *hp)
static Hash_table *
hash_pair_table_create (int size)
{
return hash_xinitialize (size,
NULL,
(Hash_hasher) hash_pair_hasher,
(Hash_comparator) hash_pair_comparator,
(Hash_data_freer) hash_pair_free);
return hash_xinitialize (size, NULL, hash_pair_hasher,
hash_pair_comparator, hash_pair_free);
}
static bitset