From: Andrew MacLeod Date: Tue, 6 Oct 2020 20:52:03 +0000 (-0400) Subject: Off by one final fix. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4e9213027587b807ca7e4bbde706b19102342d37;p=gcc.git 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. --- 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 *