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 via email to