From 6441123fd0fd0103a45b8eef803af08357de1131 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Staff=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Thu, 6 Dec 2018 08:38:45 +0900 Subject: [PATCH] [coco] Deallocate a partial Op tree correctly (#2502) The current implementation of destroy_all does not work for a partial Op tree. Signed-off-by: Jonghyun Park --- contrib/coco/core/src/IR/OpManager.cpp | 5 ++++- contrib/coco/core/src/IR/OpManager.test.cpp | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/contrib/coco/core/src/IR/OpManager.cpp b/contrib/coco/core/src/IR/OpManager.cpp index ce94b2d..ad20375 100644 --- a/contrib/coco/core/src/IR/OpManager.cpp +++ b/contrib/coco/core/src/IR/OpManager.cpp @@ -62,7 +62,10 @@ void OpManager::destroy_all(Op *op) // Insert child op nodes for (uint32_t n = 0; n < cur->arity(); ++n) { - q.emplace(cur->arg(n)); + if (auto child = cur->arg(n)) + { + q.emplace(child); + } } // Destroy the current op node diff --git a/contrib/coco/core/src/IR/OpManager.test.cpp b/contrib/coco/core/src/IR/OpManager.test.cpp index 3afc2da..e9e97a5 100644 --- a/contrib/coco/core/src/IR/OpManager.test.cpp +++ b/contrib/coco/core/src/IR/OpManager.test.cpp @@ -87,3 +87,13 @@ TEST_F(OpManagerTest, destroy_all) ASSERT_EQ(mgr.size(), 0); } + +TEST_F(OpManagerTest, destroy_all_partial_tree) +{ + // Create a (partial) Op tree + auto conv_op = mgr.create(); + + mgr.destroy_all(conv_op); + + ASSERT_EQ(mgr.size(), 0); +} -- 2.7.4