diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index de84dd27a14ef9aae986a33065be906d272bc538..51925af6a054096b56e132233ac2e003250c6962 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -129,7 +129,7 @@ CommandIsReadOnly(PlannedStmt *pstmt)
  *
  * Note the definitions of the relevant flags in src/include/utility/tcop.h.
  */
-int
+static int
 ClassifyUtilityCommandAsReadOnly(Node *parsetree)
 {
 	switch (nodeTag(parsetree))
@@ -359,7 +359,7 @@ ClassifyUtilityCommandAsReadOnly(Node *parsetree)
 				TransactionStmt *stmt = (TransactionStmt *) parsetree;
 
 				/*
-				 * PREPARE, COMMIT PREPARED, and ROLLBACK PREPARED all change
+				 * PREPARE, COMMIT PREPARED, and ROLLBACK PREPARED all
 				 * write WAL, so they're not read-only in the strict sense;
 				 * but the first and third do not change pg_dump output, so
 				 * they're OK in a read-only transactions.
@@ -383,12 +383,15 @@ ClassifyUtilityCommandAsReadOnly(Node *parsetree)
 					case TRANS_STMT_ROLLBACK_PREPARED:
 						return COMMAND_OK_IN_READ_ONLY_TXN;
 				}
+				elog(ERROR, "unrecognized TransactionStmtKind: %d",
+					 (int) stmt->kind);
+				return 0;		/* silence stupider compilers */
 			}
 
 		default:
 			elog(ERROR, "unrecognized node type: %d",
 				 (int) nodeTag(parsetree));
-			break;
+			return 0;			/* silence stupider compilers */
 	}
 }
 
diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c
index 4b5a0214dca807788fb54bb5ef414f9cc35f57a9..3c1a0319fe9f2864f65938afbae37ccd6e61db4d 100644
--- a/src/backend/utils/adt/jsonfuncs.c
+++ b/src/backend/utils/adt/jsonfuncs.c
@@ -4456,6 +4456,7 @@ jsonb_set_lax(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("need delete_key, return_target, use_json_null, or raise_exception")));
+		return (Datum) 0;		/* silence stupider compilers */
 	}
 }