diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index f04757c5826218fd167ad06a2a8494b181b09084..6b4db305e58d65a11c1f3d07ddf840bfc312de4c 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -8741,9 +8741,10 @@ SerializeGUCState(Size maxsize, char *start_address)
 	Size		actual_size;
 	Size		bytes_left;
 	int			i;
-	int			i_role;
+	int			i_role = -1;
 
 	/* Reserve space for saving the actual size of the guc state */
+	Assert(maxsize > sizeof(actual_size));
 	curptr = start_address + sizeof(actual_size);
 	bytes_left = maxsize - sizeof(actual_size);
 
@@ -8759,7 +8760,8 @@ SerializeGUCState(Size maxsize, char *start_address)
 		else
 			serialize_variable(&curptr, &bytes_left, guc_variables[i]);
 	}
-	serialize_variable(&curptr, &bytes_left, guc_variables[i_role]);
+	if (i_role >= 0)
+		serialize_variable(&curptr, &bytes_left, guc_variables[i_role]);
 
 	/* Store actual size without assuming alignment of start_address. */
 	actual_size = maxsize - bytes_left - sizeof(actual_size);