bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 05/11] glr2.cc: fix memory leak


From: Akim Demaille
Subject: [PATCH 05/11] glr2.cc: fix memory leak
Date: Sun, 10 Jan 2021 17:59:04 +0100

* data/skeletons/glr2.cc (glr_stack_item::setState): Free the previous
state before installing the new one.
---
 data/skeletons/glr2.cc | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/data/skeletons/glr2.cc b/data/skeletons/glr2.cc
index 77c64641..19773cd2 100644
--- a/data/skeletons/glr2.cc
+++ b/data/skeletons/glr2.cc
@@ -1374,10 +1374,10 @@ public:
   ~glr_stack_item ()
   {]b4_parse_assert_if([[
     check_ ();]])[
-    if (is_state())
-      getState().~glr_state();
+    if (is_state ())
+      getState ().~glr_state ();
     else
-      getOption().~semantic_option();
+      getOption ().~semantic_option ();
   }
 
   void setState (const glr_state &state)
@@ -1386,12 +1386,12 @@ public:
     state.check_ ();]])[
     if (this != state.asItem ())
       {
-        is_state_ = true;
-        // FIXME: What about the previous content?  Shouldn't it be
-        // freed?  It might be useful to have an explicit "void" state
-        // when this item is in unused state (in the list of free
-        // items), when parse.assert is set.
+        if (is_state_)
+          getState ().~glr_state ();
+        else
+          getOption ().~semantic_option ();
         new (&raw_) glr_state (state);
+        is_state_ = true;
       }
   }
 
-- 
2.30.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]