Off by one final fix.
authorAndrew MacLeod <amacleod@redhat.com>
Tue, 6 Oct 2020 20:52:03 +0000 (16:52 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Wed, 7 Oct 2020 13:59:56 +0000 (09:59 -0400)
Allocate the memory in an approved portable way.

gcc/ChangeLog:

2020-10-06  Andrew MacLeod  <amacleod@redhat.com>

* value-range.h (irange_allocator::allocate): Allocate in two hunks
instead of using the variably-sized trailing array approach.

gcc/value-range.h

index 7031a8231383671f57e7be174a8cdf1d8e014f0d..63c96204cda5400bd099c45567afc9880d548f38 100644 (file)
@@ -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 *