https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118400

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
This looks like a serious vec.h bug to me.
avals->m_known_value_ranges member is auto_vec<value_range, 32>.
ipa-fnsummary.cc does on that
                        if (!avals->m_known_value_ranges.length ())
                          {
                            avals->m_known_value_ranges.safe_grow_cleared
(count,
                                                                          
true);
                            for (int i = 0; i < count; ++i)
                              avals->m_known_value_ranges[i].set_type
(void_type_node);
                          }
                        avals->m_known_value_ranges[i] = vr;
count seems to be 4, so it uses the auto storage, and safe_gro_cleared there
vec_default_construct constructs 4 objects.
But ~auto_vec calls
    this->release ();
and that does
template<typename T>
inline void
vec<T, va_heap, vl_ptr>::release (void)
{
  if (!m_vec)
    return;

  if (using_auto_storage ())
    {
      m_vec->m_vecpfx.m_num = 0;
      return;
    }

  va_heap::release (m_vec);
} 
where va_heap::release does
  if (!std::is_trivially_destructible <T>::value)
    vec_destruct (v->address (), v->length ());
but for the using_auto_storage case we don't do that.

Reply via email to