I only want to add that my system is current up to date (dnf check-update --refresh), The GCC is installed from Fedora during the normal system upgrade process to Fedora 44.
root@fedora ~]# dnf list --installed gcc* Installed packages (available for reinstall, available for upgrade) gcc.x86_64 16.1.1-2.fc44 updates gcc-c++.x86_64 16.1.1-2.fc44 updates gcc-plugin-annobin.x86_64 16.1.1-2.fc44 updates As seen in the Bug report, this is not specific to PG 19 beta1. My guess is that this warning occurs on all supported versions of postgres (tested with 18.4 in the BUG report), so backpatching could be necessary. Hans Buschmann ________________________________ Von: Tristan Partin <[email protected]> Gesendet: Freitag, 5. Juni 2026 00:24 An: Nathan Bossart Cc: [email protected]; Hans Buschmann Betreff: Re: PG19beta1: GCC 16.1.1 warning: ‘actual_arg_types’ may be used uninitialized in clauses.c On Thu Jun 4, 2026 at 3:08 PM UTC, Nathan Bossart wrote: > On Thu, Jun 04, 2026 at 02:42:18PM +0000, Hans Buschmann wrote: >> 839/2360] Compiling C object >> src/backend/postgres_lib.a.p/optimizer_util_clauses.c.o >> ../src/backend/optimizer/util/clauses.c: In function >> ‘recheck_cast_function_args.isra’: >> ../src/backend/optimizer/util/clauses.c:5152:19: warning: ‘actual_arg_types’ >> may be used uninitialized [-Wmaybe-uninitialized] >> 5152 | rettype = enforce_generic_type_consistency(actual_arg_types, > > This code is ~18 years old, so I'm dubious there's a real problem here. Pulling the code into the email: > static void > recheck_cast_function_args(List *args, Oid result_type, > Oid *proargtypes, int > pronargs, > HeapTuple func_tuple) > { > [...] > Oid actual_arg_types[FUNC_MAX_ARGS]; > [...] > ListCell *lc; > > if (list_length(args) > FUNC_MAX_ARGS) > elog(ERROR, "too many function arguments"); > nargs = 0; > foreach(lc, args) > { > actual_arg_types[nargs++] = exprType((Node *) lfirst(lc)); > } > Assert(nargs == pronargs); > memcpy(declared_arg_types, proargtypes, pronargs * sizeof(Oid)); > rettype = enforce_generic_type_consistency(actual_arg_types, GCC seems right to complain. A NIL list or a list with a length of 0 would initialize none of the elements in actual_arg_types. However, is this a problem in actuality? No, because we use nargs to make sure we don't access uninitialized memory in enforce_generic_type_consistency(). Maybe GCC's static analysis is a lot smarter than I give it credit for though, and this is a compiler bug in the newer version. > Does something like this suppress the warning? > > Oid actual_arg_types[FUNC_MAX_ARGS] = {InvalidOid}; I could not reproduce on 16.1.0 via nixpkgs or 16.1.1 on Fedora 44 (which is strange), but theoretically this would work. -- Tristan Partin PostgreSQL Contributors Team AWS (https://aws.amazon.com)
