about summary refs log tree commit diff homepage
path: root/unittests/Ref/RefTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/Ref/RefTest.cpp')
-rw-r--r--unittests/Ref/RefTest.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/unittests/Ref/RefTest.cpp b/unittests/Ref/RefTest.cpp
new file mode 100644
index 00000000..229fd9a8
--- /dev/null
+++ b/unittests/Ref/RefTest.cpp
@@ -0,0 +1,31 @@
+/* Regression test for a bug caused by assigning a ref to itself.
+   More details at http://keeda.stanford.edu/pipermail/klee-commits/2012-February/000904.html */
+
+#include "gtest/gtest.h"
+#include <iostream>
+#include "klee/util/Ref.h"
+using klee::ref;
+
+int finished = 0;
+
+struct Expr
+{
+  int refCount;
+  Expr() : refCount(0) { 
+    //std::cout << "Expr(" << this << ") created\n"; 
+  }
+  ~Expr() { 
+    //std::cout << "Expr(" << this << ") destroyed\n"; 
+    EXPECT_EQ(finished, 1);
+  }
+};
+
+TEST(RefTest, SelfAssign) 
+{
+  struct Expr *r_e = new Expr();
+  ref<Expr> r(r_e);
+  EXPECT_EQ(r_e->refCount, 1);
+  r = r;
+  EXPECT_EQ(r_e->refCount, 1);
+  finished = 1;
+}