0004-Fix-additional-fallthrough-warnings-from-clang.patch

text/plain

Filename: 0004-Fix-additional-fallthrough-warnings-from-clang.patch
Type: text/plain
Part: 3
Message: enable fallthrough warnings on clang

Patch

Format: format-patch
Series: patch 0004
Subject: Fix additional fallthrough warnings from clang
File+
contrib/isn/isn.c 1 0
contrib/pg_overexplain/pg_overexplain.c 1 0
src/backend/access/transam/xlogrecovery.c 1 0
src/backend/replication/logical/decode.c 1 2
src/backend/tcop/dest.c 1 0
src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c 1 0
src/pl/plpgsql/src/pl_comp.c 1 0
src/tools/pg_bsd_indent/indent.c 1 0
From 9ab13453effe7747280ba650a61d97cefb1599e8 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Tue, 20 Jan 2026 11:35:16 +0100
Subject: [PATCH 4/5] Fix additional fallthrough warnings from clang

Clang warns if falling through to a case or default label that is
immediately followed by break, but GCC does
not (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91432).  (MSVC also
warns about the equivalent code in C++.)
---
 contrib/isn/isn.c                                            | 1 +
 contrib/pg_overexplain/pg_overexplain.c                      | 1 +
 src/backend/access/transam/xlogrecovery.c                    | 1 +
 src/backend/replication/logical/decode.c                     | 3 +--
 src/backend/tcop/dest.c                                      | 1 +
 src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c | 1 +
 src/pl/plpgsql/src/pl_comp.c                                 | 1 +
 src/tools/pg_bsd_indent/indent.c                             | 1 +
 8 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/contrib/isn/isn.c b/contrib/isn/isn.c
index 00bb814c526..bbe4344e6ad 100644
--- a/contrib/isn/isn.c
+++ b/contrib/isn/isn.c
@@ -837,6 +837,7 @@ string2ean(const char *str, struct Node *escontext, ean13 *result,
 		case UPC:
 			buf[2] = '0';
 			valid = (valid && ((rcheck = checkdig(buf + 2, 13)) == check || magic));
+			break;
 		default:
 			break;
 	}
diff --git a/contrib/pg_overexplain/pg_overexplain.c b/contrib/pg_overexplain/pg_overexplain.c
index 316ffd1c87f..0bb38982ced 100644
--- a/contrib/pg_overexplain/pg_overexplain.c
+++ b/contrib/pg_overexplain/pg_overexplain.c
@@ -248,6 +248,7 @@ overexplain_per_node_hook(PlanState *planstate, List *ancestors,
 					overexplain_bitmapset("RTIs",
 										  ((Result *) plan)->relids,
 										  es);
+				break;
 			default:
 				break;
 		}
diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c
index 117d8d8bb6b..41c55aef576 100644
--- a/src/backend/access/transam/xlogrecovery.c
+++ b/src/backend/access/transam/xlogrecovery.c
@@ -1893,6 +1893,7 @@ PerformWalRecovery(void)
 					recoveryPausesHere(true);
 
 					/* drop into promote */
+					pg_fallthrough;
 
 				case RECOVERY_TARGET_ACTION_PROMOTE:
 					break;
diff --git a/src/backend/replication/logical/decode.c b/src/backend/replication/logical/decode.c
index e25dd6bc366..32fb52269c5 100644
--- a/src/backend/replication/logical/decode.c
+++ b/src/backend/replication/logical/decode.c
@@ -430,9 +430,8 @@ heap2_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
 
 				xlrec = (xl_heap_new_cid *) XLogRecGetData(buf->record);
 				SnapBuildProcessNewCid(builder, xid, buf->origptr, xlrec);
-
-				break;
 			}
+			break;
 		case XLOG_HEAP2_REWRITE:
 
 			/*
diff --git a/src/backend/tcop/dest.c b/src/backend/tcop/dest.c
index 931cc563ba6..fb163930c89 100644
--- a/src/backend/tcop/dest.c
+++ b/src/backend/tcop/dest.c
@@ -180,6 +180,7 @@ EndCommand(const QueryCompletion *qc, CommandDest dest, bool force_undecorated_o
 			len = BuildQueryCompletionString(completionTag, qc,
 											 force_undecorated_output);
 			pq_putmessage(PqMsg_CommandComplete, completionTag, len + 1);
+			break;
 
 		case DestNone:
 		case DestDebug:
diff --git a/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c b/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c
index 68f76aa8cb8..21d55523ace 100644
--- a/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c
+++ b/src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c
@@ -370,6 +370,7 @@ CNStoBIG5(unsigned short cns, unsigned char lc)
 				if (b1c4[i][1] == cns)
 					return b1c4[i][0];
 			}
+			break;
 		default:
 			break;
 	}
diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c
index 7d648c941c0..5ecc7766757 100644
--- a/src/pl/plpgsql/src/pl_comp.c
+++ b/src/pl/plpgsql/src/pl_comp.c
@@ -2333,6 +2333,7 @@ plpgsql_add_initdatums(int **varnos)
 					case PLPGSQL_DTYPE_VAR:
 					case PLPGSQL_DTYPE_REC:
 						(*varnos)[n++] = plpgsql_Datums[i]->dno;
+						break;
 
 					default:
 						break;
diff --git a/src/tools/pg_bsd_indent/indent.c b/src/tools/pg_bsd_indent/indent.c
index 6e550ff310f..421592db928 100644
--- a/src/tools/pg_bsd_indent/indent.c
+++ b/src/tools/pg_bsd_indent/indent.c
@@ -296,6 +296,7 @@ main(int argc, char **argv)
 		 * done earlier.
 		 */
 		force_nl = false;
+		break;
 	    case form_feed:
 		break;
 	    case comment:
-- 
2.52.0