From 4e9213027587b807ca7e4bbde706b19102342d37 Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Tue, 6 Oct 2020 16:52:03 -0400 Subject: [PATCH] Off by one final fix. Allocate the memory in an approved portable way. gcc/ChangeLog: 2020-10-06 Andrew MacLeod * value-range.h (irange_allocator::allocate): Allocate in two hunks instead of using the variably-sized trailing array approach. --- gcc/value-range.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/gcc/value-range.h b/gcc/value-range.h index 7031a823138..63c96204cda 100644 --- a/gcc/value-range.h +++ b/gcc/value-range.h @@ -668,13 +668,12 @@ irange_allocator::allocate (unsigned num_pairs) if (num_pairs < 2) num_pairs = 2; - struct newir { - irange range; - tree mem[2]; - }; - size_t nbytes = (sizeof (newir) + sizeof (tree) * 2 * (num_pairs - 1)); - struct newir *r = (newir *) obstack_alloc (&m_obstack, nbytes); - return new (r) irange (r->mem, num_pairs); + size_t nbytes = sizeof (tree) * 2 * num_pairs; + + // Allocate the irange and required memory for the vector. + void *r = obstack_alloc (&m_obstack, sizeof (irange)); + tree *mem = (tree *) obstack_alloc (&m_obstack, nbytes); + return new (r) irange (mem, num_pairs); } inline irange * -- 2.30.2