mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 09:43:03 +00:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user