Fix memory leak in resolve_wiretype().
diff --git a/systemverilog-plugin/UhdmAst.cc b/systemverilog-plugin/UhdmAst.cc
index d6a0a2a..f1b81a9 100644
--- a/systemverilog-plugin/UhdmAst.cc
+++ b/systemverilog-plugin/UhdmAst.cc
@@ -495,21 +495,16 @@
     }
     if (wiretype_node == nullptr)
         return;
-    std::vector<AST::AstNode *> packed_ranges;
-    std::vector<AST::AstNode *> unpacked_ranges;
-    // First check if it has already defined ranges
-    if (wire_node->attributes.count(UhdmAst::packed_ranges())) {
-        for (auto r : wire_node->attributes[UhdmAst::packed_ranges()]->children) {
-            packed_ranges.push_back(r->clone());
-        }
-    }
-    if (wire_node->attributes.count(UhdmAst::unpacked_ranges())) {
-        for (auto r : wire_node->attributes[UhdmAst::unpacked_ranges()]->children) {
-            unpacked_ranges.push_back(r->clone());
-        }
-    }
+
+    unique_resource<std::vector<AST::AstNode *>> packed_ranges = wire_node->attributes.count(attr_id::packed_ranges)
+                                                                   ? std::move(wire_node->attributes[attr_id::packed_ranges]->children)
+                                                                   : std::vector<AST::AstNode *>{};
     delete_attribute(wire_node, attr_id::packed_ranges);
+    unique_resource<std::vector<AST::AstNode *>> unpacked_ranges = wire_node->attributes.count(attr_id::unpacked_ranges)
+                                                                     ? std::move(wire_node->attributes[attr_id::unpacked_ranges]->children)
+                                                                     : std::vector<AST::AstNode *>{};
     delete_attribute(wire_node, attr_id::unpacked_ranges);
+
     AST::AstNode *wiretype_ast = nullptr;
     log_assert(AST_INTERNAL::current_scope.count(wiretype_node->str));
     wiretype_ast = AST_INTERNAL::current_scope[wiretype_node->str];
@@ -557,10 +552,10 @@
         // add wiretype range before current wire ranges
         std::reverse(packed_ranges_wiretype.begin(), packed_ranges_wiretype.end());
         std::reverse(unpacked_ranges_wiretype.begin(), unpacked_ranges_wiretype.end());
-        std::reverse(packed_ranges.begin(), packed_ranges.end());
-        std::reverse(unpacked_ranges.begin(), unpacked_ranges.end());
-        packed_ranges.insert(packed_ranges.begin(), packed_ranges_wiretype.begin(), packed_ranges_wiretype.end());
-        unpacked_ranges.insert(unpacked_ranges.begin(), unpacked_ranges_wiretype.begin(), unpacked_ranges_wiretype.end());
+        std::reverse(packed_ranges->begin(), packed_ranges->end());
+        std::reverse(unpacked_ranges->begin(), unpacked_ranges->end());
+        packed_ranges->insert(packed_ranges->begin(), packed_ranges_wiretype.begin(), packed_ranges_wiretype.end());
+        unpacked_ranges->insert(unpacked_ranges->begin(), unpacked_ranges_wiretype.begin(), unpacked_ranges_wiretype.end());
         AST::AstNode *value = nullptr;
         if (wire_node->children[0]->type != AST::AST_RANGE) {
             value = wire_node->children[0]->clone();
@@ -568,7 +563,7 @@
         delete_children(wire_node);
         if (value)
             wire_node->children.push_back(value);
-        add_multirange_wire(wire_node, packed_ranges, unpacked_ranges, false /* reverse */);
+        add_multirange_wire(wire_node, packed_ranges.release(), unpacked_ranges.release(), false /* reverse */);
     }
 }