@@ -297,9 +297,9 @@ typedef struct AggHashEntryData *AggHashEntry;
297297typedef struct AggHashEntryData
298298{
299299TupleHashEntryData shared ;/* common header for hash table entries */
300- /* per-aggregate transition status array- must be last! */
301- AggStatePerGroupData pergroup [1 ]; /* VARIABLE LENGTH ARRAY */
302- }AggHashEntryData ;/* VARIABLE LENGTH STRUCT */
300+ /* per-aggregate transition status array */
301+ AggStatePerGroupData pergroup [FLEXIBLE_ARRAY_MEMBER ];
302+ }AggHashEntryData ;
303303
304304
305305static void initialize_aggregates (AggState * aggstate ,
@@ -941,8 +941,8 @@ build_hash_table(AggState *aggstate)
941941Assert (node -> aggstrategy == AGG_HASHED );
942942Assert (node -> numGroups > 0 );
943943
944- entrysize = sizeof (AggHashEntryData )+
945- ( aggstate -> numaggs - 1 ) * sizeof (AggStatePerGroupData );
944+ entrysize = offsetof (AggHashEntryData , pergroup )+
945+ aggstate -> numaggs * sizeof (AggStatePerGroupData );
946946
947947aggstate -> hashtable = BuildTupleHashTable (node -> numCols ,
948948node -> grpColIdx ,
@@ -1013,8 +1013,8 @@ hash_agg_entry_size(int numAggs)
10131013Size entrysize ;
10141014
10151015/* This must match build_hash_table */
1016- entrysize = sizeof (AggHashEntryData )+
1017- ( numAggs - 1 ) * sizeof (AggStatePerGroupData );
1016+ entrysize = offsetof (AggHashEntryData , pergroup )+
1017+ numAggs * sizeof (AggStatePerGroupData );
10181018entrysize = MAXALIGN (entrysize );
10191019/* Account for hashtable overhead (assuming fill factor = 1) */
10201020entrysize += 3 * sizeof (void * );