Hi, On Tue, 23 Apr 2024 at 19:59, Andres Freund <and...@anarazel.de> wrote: > > > 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...
The fix is attached. It cleanly applies from REL_15_STABLE to REL_12_STABLE, fixes the warnings and the tests pass. -- Regards, Nazir Bilal Yavuz Microsoft
From 588c99f5c402fc41414702133636e5a51f9e3470 Mon Sep 17 00:00:00 2001 From: Nazir Bilal Yavuz <byavu...@gmail.com> Date: Fri, 10 May 2024 10:43:45 +0300 Subject: [PATCH v1] Fix -Warray-bounds warning in guc_var_compare() function There are a couple of places that guc_var_compare() function takes 'const char ***' type and then casts it to the 'const struct config_generic *' type. This triggers '-Warray-bounds' warning. So, instead cast them to the 'const char *' type. Author: Nazir Bilal Yavuz <byavu...@gmail.com> Reported-by: Erik Rijkers <e...@xs4all.nl> Suggested-by: Andres Freund <and...@anarazel.de> Discussion: https://postgr.es/m/a74a1a0d-0fd2-3649-5224-4f754e8f91aa%40xs4all.nl --- src/backend/utils/misc/guc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index c410ba532d2..eec97dea659 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -5721,10 +5721,10 @@ find_option(const char *name, bool create_placeholders, bool skip_errors, 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; + const char *confa_name = **(char **const *) a; + const char *confb_name = **(char **const *) b; - return guc_name_compare(confa->name, confb->name); + return guc_name_compare(confa_name, confb_name); } /* -- 2.43.0