On Tue, Aug 29, 2023 at 10:26:27AM +0700, John Naylor wrote: > > On Tue, Aug 29, 2023 at 6:56 AM David Rowley <dgrowle...@gmail.com> wrote: > > > > I'm just not sure if it's unable to figure out if at least nargs > > elements is set or if it won't be happy until all 100 elements are > > set. > > It looks like the former, since I can silence it on gcc 13 / -O1 by doing: > > /* keep compiler quiet */ > actual_arg_types[0] = InvalidOid;
Agreed, that fixes it for me too. In fact, assigning to only element 99 or 200 also prevents the warning, and considering the array is defined for 100 elements, the fact is accepts 200 isn't a good thing. Patch attached. I think the question is whether we add this to silence a common compiler but non-default optimization level. It is the only such case in our source code right now. -- Bruce Momjian <br...@momjian.us> https://momjian.us EDB https://enterprisedb.com Only you can decide what is important to you.
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index da258968b8..f4a1d1049c 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -4284,6 +4284,10 @@ recheck_cast_function_args(List *args, Oid result_type, if (list_length(args) > FUNC_MAX_ARGS) elog(ERROR, "too many function arguments"); nargs = 0; + + /* Silence gcc 12 compiler at -O1. */ + actual_arg_types[0] = InvalidOid; + foreach(lc, args) { actual_arg_types[nargs++] = exprType((Node *) lfirst(lc));