From c67f6f2f573064c206044b44a73cdf0806dfbd4e Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 29 Feb 2008 17:47:41 +0000
Subject: [PATCH] Reducing the assumed alignment of struct varlena means that
 the compiler is also licensed to put a local variable declared that way at an
 unaligned address.  Which will not work if the variable is then manipulated
 with SET_VARSIZE or other macros that assume alignment.  So the previous
 patch is not an unalloyed good, but on balance I think it's still a win,
 since we have very few places that do that sort of thing.  Fix the one place
 in tuptoaster.c that does it.  Per buildfarm results from gypsy_moth (I'm a
 bit surprised that only one machine showed a failure).

---
 src/backend/access/heap/tuptoaster.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/backend/access/heap/tuptoaster.c b/src/backend/access/heap/tuptoaster.c
index a7fd6d0984d..3ace2042493 100644
--- a/src/backend/access/heap/tuptoaster.c
+++ b/src/backend/access/heap/tuptoaster.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/access/heap/tuptoaster.c,v 1.82 2008/02/23 19:11:45 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/access/heap/tuptoaster.c,v 1.83 2008/02/29 17:47:41 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1093,7 +1093,8 @@ toast_save_datum(Relation rel, Datum value,
 	struct
 	{
 		struct varlena hdr;
-		char		data[TOAST_MAX_CHUNK_SIZE];
+		char		data[TOAST_MAX_CHUNK_SIZE];	/* make struct big enough */
+		int32		align_it;	/* ensure struct is aligned well enough */
 	}			chunk_data;
 	int32		chunk_size;
 	int32		chunk_seq = 0;
-- 
GitLab