summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/expr/node_manager.cpp2
-rw-r--r--src/expr/node_manager.h5
-rw-r--r--src/util/tls.h.in15
3 files changed, 18 insertions, 4 deletions
diff --git a/src/expr/node_manager.cpp b/src/expr/node_manager.cpp
index 31b848885..5d99fb31e 100644
--- a/src/expr/node_manager.cpp
+++ b/src/expr/node_manager.cpp
@@ -39,7 +39,7 @@ using __gnu_cxx::hash_set;
namespace CVC4 {
-CVC4_THREADLOCAL(NodeManager*) NodeManager::s_current = 0;
+CVC4_THREADLOCAL(NodeManager*) NodeManager::s_current = NULL;
/**
* This class sets it reference argument to true and ensures that it gets set
diff --git a/src/expr/node_manager.h b/src/expr/node_manager.h
index 5fb7c57ad..4f658c507 100644
--- a/src/expr/node_manager.h
+++ b/src/expr/node_manager.h
@@ -562,11 +562,12 @@ public:
*/
class NodeManagerScope {
/** The old NodeManager, to be restored on destruction. */
- NodeManager *d_oldNodeManager;
+ NodeManager* d_oldNodeManager;
public:
- NodeManagerScope(NodeManager* nm) : d_oldNodeManager(NodeManager::s_current) {
+ NodeManagerScope(NodeManager* nm) :
+ d_oldNodeManager(NodeManager::s_current) {
NodeManager::s_current = nm;
Debug("current") << "node manager scope: "
<< NodeManager::s_current << "\n";
diff --git a/src/util/tls.h.in b/src/util/tls.h.in
index 29a52497a..80eac93b0 100644
--- a/src/util/tls.h.in
+++ b/src/util/tls.h.in
@@ -24,6 +24,8 @@
#ifndef __CVC4__TLS_H
#define __CVC4__TLS_H
+#line 28 "@srcdir@/tls.h.in"
+
#if @CVC4_TLS_SUPPORTED@
# define CVC4_THREADLOCAL(__type) @CVC4_TLS@ __type
# define CVC4_THREADLOCAL_PUBLIC(__type) @CVC4_TLS@ CVC4_PUBLIC __type
@@ -49,7 +51,7 @@ public:
pthread_key_create(&d_key, ThreadLocalImpl::cleanup);
}
- ThreadLocalImpl(T t) {
+ ThreadLocalImpl(const T& t) {
pthread_key_create(&d_key, ThreadLocalImpl::cleanup);
pthread_setspecific(d_key, const_cast<void*>(reinterpret_cast<const void*>(t)));
}
@@ -74,6 +76,10 @@ public:
};/* class ThreadLocalImpl<T, true> */
template <class T>
+class ThreadLocalImpl<T, false> {
+};/* class ThreadLocalImpl<T, false> */
+
+template <class T>
class ThreadLocal : public ThreadLocalImpl<T, sizeof(T) <= sizeof(void*)> {
typedef ThreadLocalImpl<T, sizeof(T) <= sizeof(void*)> super;
@@ -81,6 +87,13 @@ public:
ThreadLocal() : super() {}
ThreadLocal(const T& t) : super(t) {}
ThreadLocal(const ThreadLocal<T>& tl) : super(tl) {}
+
+ ThreadLocal<T>& operator=(const T& t) {
+ return static_cast< ThreadLocal<T>& >(super::operator=(t));
+ }
+ ThreadLocal<T>& operator=(const ThreadLocal<T>& tl) {
+ return static_cast< ThreadLocal<T>& >(super::operator=(tl));
+ }
};/* class ThreadLocal<T> */
}/* CVC4 namespace */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback