https://gcc.gnu.org/g:43f4d44bebd63b354f8798fcef512d4d2b42c655

commit r15-6941-g43f4d44bebd63b354f8798fcef512d4d2b42c655
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Jan 16 09:17:50 2025 +0100

    vec.h: Properly destruct elements in auto_vec auto storage [PR118400]
    
    For T with non-trivial destructors, we were destructing objects in the
    vector on release only when not using auto storage of auto_vec.
    
    The following patch calls truncate (0) instead of m_vecpfx.m_num clearing,
    and truncate takes care of that destruction:
      unsigned l = length ();
      gcc_checking_assert (l >= size);
      if (!std::is_trivially_destructible <T>::value)
        vec_destruct (address () + size, l - size);
      m_vecpfx.m_num = size;
    
    2025-01-16  Jakub Jelinek  <ja...@redhat.com>
    
            PR ipa/118400
            * vec.h (vec<T, va_heap, vl_ptr>::release): Call m_vec->truncate (0)
            instead of clearing m_vec->m_vecpfx.m_num.

Diff:
---
 gcc/vec.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/vec.h b/gcc/vec.h
index 540d9b556dd0..915df06f03e9 100644
--- a/gcc/vec.h
+++ b/gcc/vec.h
@@ -2020,7 +2020,7 @@ vec<T, va_heap, vl_ptr>::release (void)
 
   if (using_auto_storage ())
     {
-      m_vec->m_vecpfx.m_num = 0;
+      m_vec->truncate (0);
       return;
     }

Reply via email to