From 1ab6a255c14935ce43105f45c6c592e62b60a24d Mon Sep 17 00:00:00 2001 From: Nathan Phillips Date: Mon, 27 Mar 2017 17:55:37 +0100 Subject: [PATCH 1/3] Undid accidental config.inc change --- src/config.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.inc b/src/config.inc index 1fb0a49886a..84a7749ee07 100644 --- a/src/config.inc +++ b/src/config.inc @@ -9,7 +9,7 @@ BUILD_ENV = AUTO # Select optimisation or debug info #CXXFLAGS += -O2 -DNDEBUG -CXXFLAGS += -O0 -g +#CXXFLAGS += -O0 -g ifeq ($(shell uname),Linux) CXXFLAGS += -DUSE_BOOST From ca0b983aefde08cb1dd6ffe9119a89d475f1dfb7 Mon Sep 17 00:00:00 2001 From: Nathan Phillips Date: Mon, 27 Mar 2017 18:09:03 +0100 Subject: [PATCH 2/3] Use explicitly sized integer types --- src/util/serializer.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/util/serializer.h b/src/util/serializer.h index 8647292948a..3c70a6e7fb8 100755 --- a/src/util/serializer.h +++ b/src/util/serializer.h @@ -17,6 +17,7 @@ Purpose: Generic serialization of object hierarchies. #include #include #include +#include #include #ifdef USE_BOOST #include @@ -257,7 +258,7 @@ class serializert Serializes a field. \*******************************************************************/ - virtual void serialize(const char *name, int &field)=0; + virtual void serialize(const char *name, int32_t &field)=0; /*******************************************************************\ @@ -273,7 +274,7 @@ class serializert Serializes a field. \*******************************************************************/ - virtual void serialize(const char *name, unsigned int &field)=0; + virtual void serialize(const char *name, uint32_t &field)=0; /*******************************************************************\ @@ -289,7 +290,7 @@ class serializert Serializes a field. \*******************************************************************/ - virtual void serialize(const char *name, unsigned long long &field)=0; + virtual void serialize(const char *name, uint64_t &field)=0; /*******************************************************************\ From ad18aa9797fac50dd915b864a4d3db817a4c85b8 Mon Sep 17 00:00:00 2001 From: Nathan Phillips Date: Mon, 27 Mar 2017 18:22:05 +0100 Subject: [PATCH 3/3] Use shared_ptr for traits --- src/util/serializer.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/util/serializer.h b/src/util/serializer.h index 3c70a6e7fb8..2c2a13d3519 100755 --- a/src/util/serializer.h +++ b/src/util/serializer.h @@ -12,6 +12,7 @@ Purpose: Generic serialization of object hierarchies. #define CPROVER_UTIL_SERIALIZER_H #include +#include #include #include #include @@ -67,7 +68,7 @@ class serializert // Whether this serializer is used for reading rather than writing bool is_read; // Traits attached to this serializer - serializer_traitst *traits; + std::shared_ptr traits; ///////////////////////////////////////////////////////////////////////////// // Section: Constructors/destructors @@ -89,7 +90,7 @@ class serializert \*******************************************************************/ serializert(serializert *parent, bool is_read) - : parent(parent), is_read(is_read), traits(nullptr) + : parent(parent), is_read(is_read) { } @@ -109,7 +110,7 @@ class serializert \*******************************************************************/ explicit serializert(bool is_read) - : parent(nullptr), is_read(is_read), traits(nullptr) + : parent(nullptr), is_read(is_read) { } @@ -161,7 +162,7 @@ class serializert template traitst &get_traits() const { - traitst * result=dynamic_cast(traits); + traitst * result=dynamic_cast(traits.get()); if(result!=nullptr) return *result; assert(parent!=nullptr); // In release build allow undefined behaviour @@ -186,10 +187,12 @@ class serializert Sets traits attached to this serializer. \*******************************************************************/ - void set_traits(serializer_traitst &serializer_traits) + void set_traits(std::shared_ptr serializer_traits) { + assert(serializer_traits!=nullptr); + // If you need to set_traits twice then make the traits member a set assert(traits==nullptr); - traits=&serializer_traits; + traits=serializer_traits; } /////////////////////////////////////////////////////////////////////////////