diff --git a/src/hotspot/share/utilities/rbTree.inline.hpp b/src/hotspot/share/utilities/rbTree.inline.hpp index ed8884b2d27..70d9aee7fbf 100644 --- a/src/hotspot/share/utilities/rbTree.inline.hpp +++ b/src/hotspot/share/utilities/rbTree.inline.hpp @@ -408,7 +408,9 @@ AbstractRBTree::cursor(const K& key, const NodeType* hi template inline void AbstractRBTree::insert_at_cursor(NodeType* node, const Cursor& node_cursor) { - assert(node_cursor.valid() && !node_cursor.found(), "must be"); + precond(node != nullptr); + precond(node_cursor.valid()); + precond(!node_cursor.found()); _num_nodes++; *node_cursor._insert_location = node; @@ -622,7 +624,8 @@ inline void AbstractRBTree::remove_from_tree(IntrusiveR template inline void AbstractRBTree::remove_at_cursor(const Cursor& node_cursor) { - assert(node_cursor.valid() && node_cursor.found(), "must be"); + precond(node_cursor.valid()); + precond(node_cursor.found()); _num_nodes--; IntrusiveRBNode* node = node_cursor.node(); @@ -718,7 +721,9 @@ AbstractRBTree::prev(const Cursor& node_cursor) const { template inline void AbstractRBTree::replace_at_cursor(NodeType* new_node, const Cursor& node_cursor) { - assert(node_cursor.valid() && node_cursor.found(), "must be"); + precond(new_node != nullptr); + precond(node_cursor.valid()); + precond(node_cursor.found()); NodeType* old_node = node_cursor.node(); if (old_node == new_node) { return; @@ -785,12 +790,14 @@ inline NodeType* AbstractRBTree::find_node(const K& key template inline void AbstractRBTree::insert(const K& key, NodeType* node, const NodeType* hint_node) { + precond(node != nullptr); Cursor node_cursor = cursor(key, hint_node); insert_at_cursor(node, node_cursor); } template inline void AbstractRBTree::remove(NodeType* node) { + precond(node != nullptr); Cursor node_cursor = cursor(node); remove_at_cursor(node_cursor); } @@ -1049,9 +1056,9 @@ inline RBTree::~RBTree() { template bool RBTree::copy_into(RBTree& other) const { - assert(other.size() == 0, "You can only copy into an empty RBTree"); - assert(std::is_copy_constructible::value, "Key type must be copy-constructible when copying a RBTree"); - assert(std::is_copy_constructible::value, "Value type must be copy-constructible when copying a RBTree"); + precond(other.size() == 0); + precond(std::is_copy_constructible::value); + precond(std::is_copy_constructible::value); enum class Dir { Left, Right }; struct node_pair { const IntrusiveRBNode* current; IntrusiveRBNode* other_parent; Dir dir; }; struct stack { @@ -1098,6 +1105,9 @@ bool RBTree::copy_into(RBTree& other) const { template inline void RBTree::replace_at_cursor(RBNode* new_node, const Cursor& node_cursor) { + precond(new_node != nullptr); + precond(node_cursor.valid()); + precond(node_cursor.found()); RBNode* old_node = node_cursor.node(); BaseType::replace_at_cursor(new_node, node_cursor); free_node(old_node); @@ -1123,6 +1133,7 @@ inline RBNode* RBTree::allocate_node(const K& template inline void RBTree::free_node(RBNode* node) { + precond(node != nullptr); node->_value.~V(); _allocator.free(node); }