Hi, On 2024-04-15 11:25:05 +0300, Nazir Bilal Yavuz wrote: > I am able to reproduce this. I regenerated the debian bookworm image > and ran CI on REL_15_STABLE with this image. > > CI Run: https://cirrus-ci.com/task/4978799442395136
Hm, not sure why I wasn't able to repro - now I can. It actually seems like a legitimate warning: The caller allocates the key as static struct config_generic * find_option(const char *name, bool create_placeholders, bool skip_errors, int elevel) { const char **key = &name; and then does res = (struct config_generic **) bsearch((void *) &key, (void *) guc_variables, num_guc_variables, sizeof(struct config_generic *), guc_var_compare); while guc_var_compare() assume it's being passed a full config_generic: static int guc_var_compare(const void *a, const void *b) { const struct config_generic *confa = *(struct config_generic *const *) a; const struct config_generic *confb = *(struct config_generic *const *) b; return guc_name_compare(confa->name, confb->name); } which several versions of gcc then complain about: In function ‘guc_var_compare’, inlined from ‘bsearch’ at /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:33:23, inlined from ‘find_option’ at /home/andres/src/postgresql-15/src/backend/utils/misc/guc.c:5640:35: /home/andres/src/postgresql-15/src/backend/utils/misc/guc.c:5727:38: warning: array subscript ‘const struct config_generic[0]’ is partly outside array bounds of ‘const char[8]’ [-Warray-bounds=] 5727 | return guc_name_compare(confa->name, confb->name); | ~~~~~^~~~~~ /home/andres/src/postgresql-15/src/backend/utils/misc/guc.c: In function ‘find_option’: /home/andres/src/postgresql-15/src/backend/utils/misc/guc.c:5627:25: note: object ‘name’ of size 8 5627 | find_option(const char *name, bool create_placeholders, bool skip_errors, Which seems entirely legitimate. ISTM that guc_var_compare() ought to only cast the pointers to the key type, i.e. char *. And incidentally that does prevent the warning. The reason it doesn't happen in newer versions of postgres is that we aren't using guc_var_compare() in the relevant places anymore... Greetings, Andres Freund