diff options
-rw-r--r-- | src/expr/node_manager.cpp | 4 | ||||
-rw-r--r-- | src/expr/node_manager.h | 3 |
2 files changed, 7 insertions, 0 deletions
diff --git a/src/expr/node_manager.cpp b/src/expr/node_manager.cpp index c68b0df86..e9f56bf3f 100644 --- a/src/expr/node_manager.cpp +++ b/src/expr/node_manager.cpp @@ -106,6 +106,10 @@ NodeManager::NodeManager(ExprManager* exprManager) } void NodeManager::init() { + // `mkConst()` indirectly needs the correct NodeManager in scope because we + // call `NodeValue::inc()` which uses `NodeManager::curentNM()` + NodeManagerScope nms(this); + poolInsert( &expr::NodeValue::null() ); for(unsigned i = 0; i < unsigned(kind::LAST_KIND); ++i) { diff --git a/src/expr/node_manager.h b/src/expr/node_manager.h index 1a28a16eb..84c4b44e0 100644 --- a/src/expr/node_manager.h +++ b/src/expr/node_manager.h @@ -1484,6 +1484,9 @@ TypeNode NodeManager::mkTypeConst(const T& val) { template <class NodeClass, class T> NodeClass NodeManager::mkConstInternal(const T& val) { + // This method indirectly calls `NodeValue::inc()`, which relies on having + // the correct `NodeManager` in scope. + NodeManagerScope nms(this); // typedef typename kind::metakind::constantMap<T>::OwningTheory theory_t; NVStorage<1> nvStorage; |