| From: | "Tristan Partin" <tristan(at)partin(dot)io> |
|---|---|
| To: | "Nathan Bossart" <nathandbossart(at)gmail(dot)com> |
| Cc: | "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>, "Hans Buschmann" <buschmann(at)nidsa(dot)net> |
| Subject: | Re: PG19beta1: GCC 16.1.1 warning: ‘actual_arg_types’ may be used uninitialized in clauses.c |
| Date: | 2026-06-04 22:24:51 |
| Message-ID: | DJ0M8IHRSUPA.S0XOGR9WZVJI@partin.io |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
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)
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Maxime Schoemans | 2026-06-04 22:31:07 | Re: Multi-Entry Indexing for GiST & SP-GiST |
| Previous Message | Chao Li | 2026-06-04 22:21:07 | Re: Fix OAuth validator docs for error_detail on internal errors |