From: Hans Buschmann <buschmann@nidsa.net>
To: Tristan Partin <tristan@partin.io>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: pgsql-hackers@postgresql.org <pgsql-hackers@postgresql.org>
Subject: AW: PG19beta1: GCC 16.1.1 warning: ‘actual_arg_types’ may be used uninitialized in clauses.c
Date: Fri, 5 Jun 2026 07:15:29 +0000
Message-ID: <d891f1b260ae462aa2548b8aaf3f460d@nidsa.net> (raw)
In-Reply-To: <DJ0M8IHRSUPA.S0XOGR9WZVJI@partin.io>
References: <6c52a1a6612948519468d46cb224a8c4@nidsa.net>
<aiGUxEzo4o5_fRIq@nathan>
<DJ0M8IHRSUPA.S0XOGR9WZVJI@partin.io>
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 <tristan@partin.io>
Gesendet: Freitag, 5. Juni 2026 00:24
An: Nathan Bossart
Cc: pgsql-hackers@postgresql.org; 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)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: buschmann@nidsa.net, tristan@partin.io, nathandbossart@gmail.com
Subject: Re: AW: PG19beta1: GCC 16.1.1 warning: ‘actual_arg_types’ may be used uninitialized in clauses.c
In-Reply-To: <d891f1b260ae462aa2548b8aaf3f460d@nidsa.net>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox