From 850cb88e4b6003361963593ccd9fb0456dbe148f Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 21 Sep 2022 13:52:38 -0400
Subject: [PATCH] Suppress more variable-set-but-not-used warnings from clang
 15.

Mop up assorted set-but-not-used warnings in the back branches.
This includes back-patching relevant fixes from commit 152c9f7b8
the rest of the way, but there are also several cases that did not
appear in HEAD.  Some of those we'd fixed in a retail way but not
back-patched, and others I think just got rewritten out of existence
during nearby refactoring.

While here, also back-patch b1980f6d0 (PL/Tcl: Fix compiler warnings
with Tcl 8.6) into 9.2, so that that branch compiles warning-free
with modern Tcl.

Per project policy, this is a candidate for back-patching into
out-of-support branches: it suppresses annoying compiler warnings
but changes no behavior.  Hence, back-patch all the way to 9.2.

Discussion: https://postgr.es/m/514615.1663615243@sss.pgh.pa.us
---
 contrib/hstore/crc32.c                   | 6 ++----
 contrib/ltree/crc32.c                    | 6 ++----
 src/backend/access/gin/gindatapage.c     | 3 ---
 src/backend/optimizer/util/var.c         | 3 ---
 src/backend/parser/gram.y                | 1 +
 src/backend/utils/adt/array_typanalyze.c | 4 +---
 src/backend/utils/adt/varlena.c          | 3 +--
 src/pl/tcl/pltcl.c                       | 9 +++++++--
 8 files changed, 14 insertions(+), 21 deletions(-)

diff --git a/contrib/hstore/crc32.c b/contrib/hstore/crc32.c
index d541d0cc951..2b59d1e3bba 100644
--- a/contrib/hstore/crc32.c
+++ b/contrib/hstore/crc32.c
@@ -95,12 +95,10 @@ crc32_sz(char *buf, int size)
 {
 	unsigned int crc = ~((unsigned int) 0);
 	char	   *p;
-	int			len,
-				nr;
+	int			nr;
 
-	len = 0;
 	nr = size;
-	for (len += nr, p = buf; nr--; ++p)
+	for (p = buf; nr--; ++p)
 		_CRC32_(crc, *p);
 	return ~crc;
 }
diff --git a/contrib/ltree/crc32.c b/contrib/ltree/crc32.c
index ea1a661fefb..9c62216dd73 100644
--- a/contrib/ltree/crc32.c
+++ b/contrib/ltree/crc32.c
@@ -103,12 +103,10 @@ ltree_crc32_sz(char *buf, int size)
 {
 	unsigned int crc = ~((unsigned int) 0);
 	char	   *p;
-	int			len,
-				nr;
+	int			nr;
 
-	len = 0;
 	nr = size;
-	for (len += nr, p = buf; nr--; ++p)
+	for (p = buf; nr--; ++p)
 		_CRC32_(crc, TOLOWER((unsigned int) *p));
 	return ~crc;
 }
diff --git a/src/backend/access/gin/gindatapage.c b/src/backend/access/gin/gindatapage.c
index 2e14d5636a7..e0702950d8d 100644
--- a/src/backend/access/gin/gindatapage.c
+++ b/src/backend/access/gin/gindatapage.c
@@ -465,7 +465,6 @@ dataSplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogRe
 	Page		rpage = BufferGetPage(rbuf);
 	Size		pageSize = PageGetPageSize(lpage);
 	Size		freeSpace;
-	uint32		nCopied = 1;
 
 	/* these must be static so they can be returned to caller */
 	static ginxlogSplit data;
@@ -485,7 +484,6 @@ dataSplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogRe
 
 	if (GinPageIsLeaf(lpage) && GinPageRightMost(lpage) && off > GinPageGetOpaque(lpage)->maxoff)
 	{
-		nCopied = 0;
 		while (btree->curitem < btree->nitem &&
 			   maxoff * sizeof(ItemPointerData) < 2 * (freeSpace - sizeof(ItemPointerData)))
 		{
@@ -493,7 +491,6 @@ dataSplitPage(GinBtree btree, Buffer lbuf, Buffer rbuf, OffsetNumber off, XLogRe
 				   btree->items + btree->curitem,
 				   sizeof(ItemPointerData));
 			maxoff++;
-			nCopied++;
 			btree->curitem++;
 		}
 	}
diff --git a/src/backend/optimizer/util/var.c b/src/backend/optimizer/util/var.c
index d2b1604e16a..8b2fbf956bb 100644
--- a/src/backend/optimizer/util/var.c
+++ b/src/backend/optimizer/util/var.c
@@ -784,16 +784,13 @@ flatten_join_alias_vars_mutator(Node *node,
 			RowExpr    *rowexpr;
 			List	   *fields = NIL;
 			List	   *colnames = NIL;
-			AttrNumber	attnum;
 			ListCell   *lv;
 			ListCell   *ln;
 
-			attnum = 0;
 			Assert(list_length(rte->joinaliasvars) == list_length(rte->eref->colnames));
 			forboth(lv, rte->joinaliasvars, ln, rte->eref->colnames)
 			{
 				newvar = (Node *) lfirst(lv);
-				attnum++;
 				/* Ignore dropped columns */
 				if (newvar == NULL)
 					continue;
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 4182f2fd711..39a917c2950 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -653,6 +653,7 @@ static void processCASbits(int cas_bits, int location, const char *constrType,
 stmtblock:	stmtmulti
 			{
 				pg_yyget_extra(yyscanner)->parsetree = $1;
+				(void) yynerrs;		/* suppress compiler warning */
 			}
 		;
 
diff --git a/src/backend/utils/adt/array_typanalyze.c b/src/backend/utils/adt/array_typanalyze.c
index 62e398b1d13..5369eeb5040 100644
--- a/src/backend/utils/adt/array_typanalyze.c
+++ b/src/backend/utils/adt/array_typanalyze.c
@@ -216,7 +216,6 @@ compute_array_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
 {
 	ArrayAnalyzeExtraData *extra_data;
 	int			num_mcelem;
-	int			null_cnt = 0;
 	int			null_elem_cnt = 0;
 	int			analyzed_rows = 0;
 
@@ -321,8 +320,7 @@ compute_array_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
 		value = fetchfunc(stats, array_no, &isnull);
 		if (isnull)
 		{
-			/* array is null, just count that */
-			null_cnt++;
+			/* ignore arrays that are null overall */
 			continue;
 		}
 
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index aa27a4b5c06..18f3971d70b 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -3169,7 +3169,6 @@ text_to_array_internal(PG_FUNCTION_ARGS)
 		 * to search for occurrences of fldsep.
 		 */
 		TextPositionState state;
-		int			fldnum;
 		int			start_posn;
 		int			end_posn;
 		int			chunk_len;
@@ -3209,7 +3208,7 @@ text_to_array_internal(PG_FUNCTION_ARGS)
 		/* start_ptr points to the start_posn'th character of inputstring */
 		start_ptr = VARDATA_ANY(inputstring);
 
-		for (fldnum = 1;; fldnum++)		/* field number is 1 based */
+		for (;;)
 		{
 			CHECK_FOR_INTERRUPTS();
 
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index d3c59797239..5f5601bd2fd 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -18,6 +18,11 @@
 #define CONST84
 #endif
 
+/* ... and for Tcl 8.6. */
+#ifndef CONST86
+#define CONST86
+#endif
+
 #include "access/xact.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_type.h"
@@ -258,7 +263,7 @@ pltcl_FinalizeNotifier(ClientData clientData)
 }
 
 static void
-pltcl_SetTimer(Tcl_Time *timePtr)
+pltcl_SetTimer(CONST86 Tcl_Time *timePtr)
 {
 }
 
@@ -284,7 +289,7 @@ pltcl_ServiceModeHook(int mode)
 }
 
 static int
-pltcl_WaitForEvent(Tcl_Time *timePtr)
+pltcl_WaitForEvent(CONST86 Tcl_Time *timePtr)
 {
 	return 0;
 }