From c3c240537f6da498186bfb07017a7b01b9a2c24f Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 12 Jan 2026 16:12:56 +0100 Subject: [PATCH] Avoid casting void * function arguments In many cases, the cast would silently drop a const qualifier. To fix, drop the unnecessary cast and let the compiler check the types and qualifiers. Add const to read-only local variables, preserving the const qualifiers from the function signatures. Co-authored-by: Bertrand Drouvot Co-authored-by: Peter Eisentraut Discussion: https://postgr.es/m/aUQHy/MmWq7c97wK%40ip-10-97-1-34.eu-west-3.compute.internal --- src/backend/access/brin/brin_minmax_multi.c | 12 ++++++------ src/backend/access/common/heaptuple.c | 6 +++--- src/backend/access/heap/pruneheap.c | 4 ++-- src/backend/access/nbtree/nbtpage.c | 4 ++-- src/backend/access/nbtree/nbtpreprocesskeys.c | 4 ++-- src/backend/access/nbtree/nbtsplitloc.c | 4 ++-- src/backend/access/spgist/spgkdtreeproc.c | 8 ++++---- src/backend/statistics/extended_stats.c | 4 ++-- src/backend/statistics/mcv.c | 8 ++++---- src/backend/tsearch/spell.c | 4 ++-- src/backend/utils/adt/rangetypes_gist.c | 18 +++++++++--------- src/backend/utils/adt/rangetypes_spgist.c | 6 +++--- src/backend/utils/adt/rangetypes_typanalyze.c | 6 +++--- src/backend/utils/cache/typcache.c | 14 +++++++------- src/bin/pg_dump/pg_dump.c | 2 +- .../injection_points/injection_points.c | 12 ++++++------ 16 files changed, 58 insertions(+), 58 deletions(-) diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index 6b86b1fd889..75dd8d5083b 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -857,8 +857,8 @@ brin_range_deserialize(int maxvalues, SerializedRanges *serialized) static int compare_expanded_ranges(const void *a, const void *b, void *arg) { - ExpandedRange *ra = (ExpandedRange *) a; - ExpandedRange *rb = (ExpandedRange *) b; + const ExpandedRange *ra = a; + const ExpandedRange *rb = b; Datum r; compare_context *cxt = (compare_context *) arg; @@ -895,8 +895,8 @@ compare_expanded_ranges(const void *a, const void *b, void *arg) static int compare_values(const void *a, const void *b, void *arg) { - Datum *da = (Datum *) a; - Datum *db = (Datum *) b; + const Datum *da = a; + const Datum *db = b; Datum r; compare_context *cxt = (compare_context *) arg; @@ -1304,8 +1304,8 @@ merge_overlapping_ranges(FmgrInfo *cmp, Oid colloid, static int compare_distances(const void *a, const void *b) { - DistanceValue *da = (DistanceValue *) a; - DistanceValue *db = (DistanceValue *) b; + const DistanceValue *da = a; + const DistanceValue *db = b; if (da->value < db->value) return 1; diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index 61367b3235a..11bec20e82e 100644 --- a/src/backend/access/common/heaptuple.c +++ b/src/backend/access/common/heaptuple.c @@ -103,7 +103,7 @@ static HTAB *missing_cache = NULL; static uint32 missing_hash(const void *key, Size keysize) { - const missing_cache_key *entry = (missing_cache_key *) key; + const missing_cache_key *entry = key; return hash_bytes((const unsigned char *) DatumGetPointer(entry->value), entry->len); } @@ -111,8 +111,8 @@ missing_hash(const void *key, Size keysize) static int missing_match(const void *key1, const void *key2, Size keysize) { - const missing_cache_key *entry1 = (missing_cache_key *) key1; - const missing_cache_key *entry2 = (missing_cache_key *) key2; + const missing_cache_key *entry1 = key1; + const missing_cache_key *entry2 = key2; if (entry1->len != entry2->len) return entry1->len > entry2->len ? 1 : -1; diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index af788b29714..632c2427952 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -2021,8 +2021,8 @@ heap_log_freeze_eq(xlhp_freeze_plan *plan, HeapTupleFreeze *frz) static int heap_log_freeze_cmp(const void *arg1, const void *arg2) { - HeapTupleFreeze *frz1 = (HeapTupleFreeze *) arg1; - HeapTupleFreeze *frz2 = (HeapTupleFreeze *) arg2; + const HeapTupleFreeze *frz1 = arg1; + const HeapTupleFreeze *frz2 = arg2; if (frz1->xmax < frz2->xmax) return -1; diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index 2ff0085b96f..4125c185e8b 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -1462,8 +1462,8 @@ _bt_delitems_update(BTVacuumPosting *updatable, int nupdatable, static int _bt_delitems_cmp(const void *a, const void *b) { - TM_IndexDelete *indexdelete1 = (TM_IndexDelete *) a; - TM_IndexDelete *indexdelete2 = (TM_IndexDelete *) b; + const TM_IndexDelete *indexdelete1 = a; + const TM_IndexDelete *indexdelete2 = b; Assert(indexdelete1->id != indexdelete2->id); diff --git a/src/backend/access/nbtree/nbtpreprocesskeys.c b/src/backend/access/nbtree/nbtpreprocesskeys.c index 5235ef9a8f5..b028b0c3e88 100644 --- a/src/backend/access/nbtree/nbtpreprocesskeys.c +++ b/src/backend/access/nbtree/nbtpreprocesskeys.c @@ -1792,8 +1792,8 @@ _bt_unmark_keys(IndexScanDesc scan, int *keyDataMap) static int _bt_reorder_array_cmp(const void *a, const void *b) { - BTArrayKeyInfo *arraya = (BTArrayKeyInfo *) a; - BTArrayKeyInfo *arrayb = (BTArrayKeyInfo *) b; + const BTArrayKeyInfo *arraya = a; + const BTArrayKeyInfo *arrayb = b; return pg_cmp_s32(arraya->scan_key, arrayb->scan_key); } diff --git a/src/backend/access/nbtree/nbtsplitloc.c b/src/backend/access/nbtree/nbtsplitloc.c index 523abd64575..de9eca3c8b2 100644 --- a/src/backend/access/nbtree/nbtsplitloc.c +++ b/src/backend/access/nbtree/nbtsplitloc.c @@ -594,8 +594,8 @@ _bt_deltasortsplits(FindSplitData *state, double fillfactormult, static int _bt_splitcmp(const void *arg1, const void *arg2) { - SplitPoint *split1 = (SplitPoint *) arg1; - SplitPoint *split2 = (SplitPoint *) arg2; + const SplitPoint *split1 = arg1; + const SplitPoint *split2 = arg2; return pg_cmp_s16(split1->curdelta, split2->curdelta); } diff --git a/src/backend/access/spgist/spgkdtreeproc.c b/src/backend/access/spgist/spgkdtreeproc.c index 6acda3fdcff..1ec0a4f59f3 100644 --- a/src/backend/access/spgist/spgkdtreeproc.c +++ b/src/backend/access/spgist/spgkdtreeproc.c @@ -84,8 +84,8 @@ typedef struct SortedPoint static int x_cmp(const void *a, const void *b) { - SortedPoint *pa = (SortedPoint *) a; - SortedPoint *pb = (SortedPoint *) b; + const SortedPoint *pa = a; + const SortedPoint *pb = b; if (pa->p->x == pb->p->x) return 0; @@ -95,8 +95,8 @@ x_cmp(const void *a, const void *b) static int y_cmp(const void *a, const void *b) { - SortedPoint *pa = (SortedPoint *) a; - SortedPoint *pb = (SortedPoint *) b; + const SortedPoint *pa = a; + const SortedPoint *pb = b; if (pa->p->y == pb->p->y) return 0; diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index c14d8d21bf0..b9a8f257042 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -862,8 +862,8 @@ int multi_sort_compare(const void *a, const void *b, void *arg) { MultiSortSupport mss = (MultiSortSupport) arg; - SortItem *ia = (SortItem *) a; - SortItem *ib = (SortItem *) b; + const SortItem *ia = a; + const SortItem *ib = b; int i; for (i = 0; i < mss->ndims; i++) diff --git a/src/backend/statistics/mcv.c b/src/backend/statistics/mcv.c index 390ad83497a..9749871b18e 100644 --- a/src/backend/statistics/mcv.c +++ b/src/backend/statistics/mcv.c @@ -402,8 +402,8 @@ count_distinct_groups(int numrows, SortItem *items, MultiSortSupport mss) static int compare_sort_item_count(const void *a, const void *b, void *arg) { - SortItem *ia = (SortItem *) a; - SortItem *ib = (SortItem *) b; + const SortItem *ia = a; + const SortItem *ib = b; if (ia->count == ib->count) return 0; @@ -465,8 +465,8 @@ static int sort_item_compare(const void *a, const void *b, void *arg) { SortSupport ssup = (SortSupport) arg; - SortItem *ia = (SortItem *) a; - SortItem *ib = (SortItem *) b; + const SortItem *ia = a; + const SortItem *ib = b; return ApplySortComparator(ia->values[0], ia->isnull[0], ib->values[0], ib->isnull[0], diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c index 2e96c86b0b3..e3436dbddd2 100644 --- a/src/backend/tsearch/spell.c +++ b/src/backend/tsearch/spell.c @@ -210,8 +210,8 @@ cmpspellaffix(const void *s1, const void *s2) static int cmpcmdflag(const void *f1, const void *f2) { - CompoundAffixFlag *fv1 = (CompoundAffixFlag *) f1, - *fv2 = (CompoundAffixFlag *) f2; + const CompoundAffixFlag *fv1 = f1; + const CompoundAffixFlag *fv2 = f2; Assert(fv1->flagMode == fv2->flagMode); diff --git a/src/backend/utils/adt/rangetypes_gist.c b/src/backend/utils/adt/rangetypes_gist.c index 53470cd5006..cb9f769cdb2 100644 --- a/src/backend/utils/adt/rangetypes_gist.c +++ b/src/backend/utils/adt/rangetypes_gist.c @@ -1729,9 +1729,9 @@ get_gist_range_class(RangeType *range) static int single_bound_cmp(const void *a, const void *b, void *arg) { - SingleBoundSortItem *i1 = (SingleBoundSortItem *) a; - SingleBoundSortItem *i2 = (SingleBoundSortItem *) b; - TypeCacheEntry *typcache = (TypeCacheEntry *) arg; + const SingleBoundSortItem *i1 = a; + const SingleBoundSortItem *i2 = b; + TypeCacheEntry *typcache = arg; return range_cmp_bounds(typcache, &i1->bound, &i2->bound); } @@ -1742,9 +1742,9 @@ single_bound_cmp(const void *a, const void *b, void *arg) static int interval_cmp_lower(const void *a, const void *b, void *arg) { - NonEmptyRange *i1 = (NonEmptyRange *) a; - NonEmptyRange *i2 = (NonEmptyRange *) b; - TypeCacheEntry *typcache = (TypeCacheEntry *) arg; + const NonEmptyRange *i1 = a; + const NonEmptyRange *i2 = b; + TypeCacheEntry *typcache = arg; return range_cmp_bounds(typcache, &i1->lower, &i2->lower); } @@ -1755,9 +1755,9 @@ interval_cmp_lower(const void *a, const void *b, void *arg) static int interval_cmp_upper(const void *a, const void *b, void *arg) { - NonEmptyRange *i1 = (NonEmptyRange *) a; - NonEmptyRange *i2 = (NonEmptyRange *) b; - TypeCacheEntry *typcache = (TypeCacheEntry *) arg; + const NonEmptyRange *i1 = a; + const NonEmptyRange *i2 = b; + TypeCacheEntry *typcache = arg; return range_cmp_bounds(typcache, &i1->upper, &i2->upper); } diff --git a/src/backend/utils/adt/rangetypes_spgist.c b/src/backend/utils/adt/rangetypes_spgist.c index f9db6869d0a..b25b468b83d 100644 --- a/src/backend/utils/adt/rangetypes_spgist.c +++ b/src/backend/utils/adt/rangetypes_spgist.c @@ -185,9 +185,9 @@ spg_range_quad_choose(PG_FUNCTION_ARGS) static int bound_cmp(const void *a, const void *b, void *arg) { - RangeBound *ba = (RangeBound *) a; - RangeBound *bb = (RangeBound *) b; - TypeCacheEntry *typcache = (TypeCacheEntry *) arg; + const RangeBound *ba = a; + const RangeBound *bb = b; + TypeCacheEntry *typcache = arg; return range_cmp_bounds(typcache, ba, bb); } diff --git a/src/backend/utils/adt/rangetypes_typanalyze.c b/src/backend/utils/adt/rangetypes_typanalyze.c index 01f55b12ed5..38d12dedbc5 100644 --- a/src/backend/utils/adt/rangetypes_typanalyze.c +++ b/src/backend/utils/adt/rangetypes_typanalyze.c @@ -111,9 +111,9 @@ float8_qsort_cmp(const void *a1, const void *a2, void *arg) static int range_bound_qsort_cmp(const void *a1, const void *a2, void *arg) { - RangeBound *b1 = (RangeBound *) a1; - RangeBound *b2 = (RangeBound *) a2; - TypeCacheEntry *typcache = (TypeCacheEntry *) arg; + const RangeBound *b1 = a1; + const RangeBound *b2 = a2; + TypeCacheEntry *typcache = arg; return range_cmp_bounds(typcache, b1, b2); } diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index 96bbd64de2c..dc4b1a56414 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -235,8 +235,8 @@ shared_record_table_compare(const void *a, const void *b, size_t size, void *arg) { dsa_area *area = (dsa_area *) arg; - SharedRecordTableKey *k1 = (SharedRecordTableKey *) a; - SharedRecordTableKey *k2 = (SharedRecordTableKey *) b; + const SharedRecordTableKey *k1 = a; + const SharedRecordTableKey *k2 = b; TupleDesc t1; TupleDesc t2; @@ -259,8 +259,8 @@ shared_record_table_compare(const void *a, const void *b, size_t size, static uint32 shared_record_table_hash(const void *a, size_t size, void *arg) { - dsa_area *area = (dsa_area *) arg; - SharedRecordTableKey *k = (SharedRecordTableKey *) a; + dsa_area *area = arg; + const SharedRecordTableKey *k = a; TupleDesc t; if (k->shared) @@ -2013,7 +2013,7 @@ lookup_rowtype_tupdesc_domain(Oid type_id, int32 typmod, bool noError) static uint32 record_type_typmod_hash(const void *data, size_t size) { - RecordCacheEntry *entry = (RecordCacheEntry *) data; + const RecordCacheEntry *entry = data; return hashRowType(entry->tupdesc); } @@ -2024,8 +2024,8 @@ record_type_typmod_hash(const void *data, size_t size) static int record_type_typmod_compare(const void *a, const void *b, size_t size) { - RecordCacheEntry *left = (RecordCacheEntry *) a; - RecordCacheEntry *right = (RecordCacheEntry *) b; + const RecordCacheEntry *left = a; + const RecordCacheEntry *right = b; return equalRowTypes(left->tupdesc, right->tupdesc) ? 0 : 1; } diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index d8a6b8ab0d5..687dc98e46d 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -11102,7 +11102,7 @@ fetchAttributeStats(Archive *fout) static char * dumpRelationStats_dumper(Archive *fout, const void *userArg, const TocEntry *te) { - const RelStatsInfo *rsinfo = (RelStatsInfo *) userArg; + const RelStatsInfo *rsinfo = userArg; static PGresult *res; static int rownum; PQExpBuffer query; diff --git a/src/test/modules/injection_points/injection_points.c b/src/test/modules/injection_points/injection_points.c index 9c3806f5958..3de0491e0ec 100644 --- a/src/test/modules/injection_points/injection_points.c +++ b/src/test/modules/injection_points/injection_points.c @@ -189,7 +189,7 @@ injection_init_shmem(void) * otherwise. */ static bool -injection_point_allowed(InjectionPointCondition *condition) +injection_point_allowed(const InjectionPointCondition *condition) { bool result = true; @@ -232,8 +232,8 @@ injection_points_cleanup(int code, Datum arg) void injection_error(const char *name, const void *private_data, void *arg) { - InjectionPointCondition *condition = (InjectionPointCondition *) private_data; - char *argstr = (char *) arg; + const InjectionPointCondition *condition = private_data; + char *argstr = arg; if (!injection_point_allowed(condition)) return; @@ -248,8 +248,8 @@ injection_error(const char *name, const void *private_data, void *arg) void injection_notice(const char *name, const void *private_data, void *arg) { - InjectionPointCondition *condition = (InjectionPointCondition *) private_data; - char *argstr = (char *) arg; + const InjectionPointCondition *condition = private_data; + char *argstr = arg; if (!injection_point_allowed(condition)) return; @@ -268,7 +268,7 @@ injection_wait(const char *name, const void *private_data, void *arg) uint32 old_wait_counts = 0; int index = -1; uint32 injection_wait_event = 0; - InjectionPointCondition *condition = (InjectionPointCondition *) private_data; + const InjectionPointCondition *condition = private_data; if (inj_state == NULL) injection_init_shmem();