diff options
author | Cristian Cadar <cristic@cs.stanford.edu> | 2012-04-07 11:37:47 +0000 |
---|---|---|
committer | Cristian Cadar <cristic@cs.stanford.edu> | 2012-04-07 11:37:47 +0000 |
commit | dcf55acd75d7a6f74b7b9fa98f84083ea8b79760 (patch) | |
tree | 778f48fd84717aea77d3647ca73a25947239a817 /unittests/Ref | |
parent | 16c771d54330d73cc66b52922f37a4b6755d04b0 (diff) | |
download | klee-dcf55acd75d7a6f74b7b9fa98f84083ea8b79760.tar.gz |
Patch by Seungbeom that fixes a memory management issue with Refs, and
associated unit test. More details at http://keeda.stanford.edu/pipermail/klee-commits/2012-February/000904.html git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@154256 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests/Ref')
-rw-r--r-- | unittests/Ref/Makefile | 19 | ||||
-rw-r--r-- | unittests/Ref/RefTest.cpp | 31 |
2 files changed, 50 insertions, 0 deletions
diff --git a/unittests/Ref/Makefile b/unittests/Ref/Makefile new file mode 100644 index 00000000..3117a5fd --- /dev/null +++ b/unittests/Ref/Makefile @@ -0,0 +1,19 @@ +##===- unittests/Expr/Makefile -----------------------------*- Makefile -*-===## + +LEVEL := ../.. +include $(LEVEL)/Makefile.config + +TESTNAME := RefTest +STP_LIBS := stp_c_interface.a stp_AST.a stp_bitvec.a \ + stp_constantbv.a stp_sat.a stp_simplifier.a +USEDLIBS := kleaverExpr.a kleeBasic.a +ifeq ($(ENABLE_EXT_STP),0) + USEDLIBS += $(STP_LIBS) +endif +LINK_COMPONENTS := support + +include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest + +ifeq ($(ENABLE_EXT_STP),1) + LIBS += -lstp +endif 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; +} |