When I replaced the std::unique_ptr member in r16-997-gef632273a90657 I
should have added an explicit delete[] operation to replace the effects
of the unique_ptr destructor.

libstdc++-v3/ChangeLog:

        PR libstdc++/123378
        * include/std/barrier (~__tree_barrier_base): Define.
---

Tested x86_64-linux.

 libstdc++-v3/include/std/barrier | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libstdc++-v3/include/std/barrier b/libstdc++-v3/include/std/barrier
index 060285d6bf85..0986ff9dada6 100644
--- a/libstdc++-v3/include/std/barrier
+++ b/libstdc++-v3/include/std/barrier
@@ -114,6 +114,12 @@ It looks different from literature pseudocode for two main 
reasons:
        _M_state.store(_M_alloc_state().release(), memory_order_release);
     }
 
+    ~__tree_barrier_base()
+    { delete[] _M_state.load(memory_order_relaxed); }
+
+    __tree_barrier_base(const __tree_barrier_base&&) = delete;
+    __tree_barrier_base& operator=(const __tree_barrier_base&&) = delete;
+
     unique_ptr<__state_t[]>
     _M_alloc_state()
     {
-- 
2.52.0

Reply via email to