Delete functions instead of using CVC4_UNDEFINED (#1794)
authorAndres Noetzli <andres.noetzli@gmail.com>
Wed, 8 Aug 2018 00:26:58 +0000 (17:26 -0700)
committerGitHub <noreply@github.com>
Wed, 8 Aug 2018 00:26:58 +0000 (17:26 -0700)
C++11 supports explicitly deleting functions that should not be used
(explictly or implictly), e.g. copy or assignment constructors. We were
previously using the CVC4_UNDEFINED macro that used a compiler-specific
attribute. The C++11 feature should be more portable.

28 files changed:
.travis.yml
config/bindings.m4
src/api/cvc4cpp.h
src/base/exception.h
src/base/listener.h
src/context/cdhashmap.h
src/context/cdhashset.h
src/context/cdinsert_hashmap.h
src/context/cdlist.h
src/context/cdo.h
src/context/context.h
src/expr/expr_manager_template.h
src/expr/node_manager.h
src/include/cvc4_public.h
src/main/portfolio_util.h
src/options/options.h
src/parser/antlr_input.h
src/parser/input.h
src/printer/printer.h
src/prop/bvminisat/bvminisat.h
src/smt/smt_engine.h
src/smt_util/boolean_simplification.h
src/smt_util/lemma_channels.h
src/theory/rewriter.h
src/theory/theory.h
src/util/bin_heap.h
src/util/resource_manager.h
src/util/statistics_registry.h

index d1f72f955a5c2ffc087567322b476ea0a4d9d0bd..27cb2915bd279e759571f6fd3990ddd58ecc5391 100644 (file)
@@ -32,7 +32,7 @@ addons:
   - libgmp-dev
   - libboost-dev
   - libboost-thread-dev
-  - swig
+  - swig3.0
   - libcln-dev
   - openjdk-7-jdk
   - antlr3
index 7174934c1d87e0f4683081668d2b2668e6b1e03b..5941d81cdbf9babe536727f1fc200a72cc88f2d4 100644 (file)
@@ -47,7 +47,7 @@ if test "$noswig" = yes; then
   SWIG=
 else
   if test -z "$SWIG"; then
-    AC_CHECK_PROGS(SWIG, [swig swig2.0 swig-2], [], [])
+    AC_CHECK_PROGS(SWIG, [swig swig3.0 swig-3], [], [])
   else
     AC_CHECK_PROG(SWIG, "$SWIG", "$SWIG", [])
   fi
index c3c4290099ef84b5376d5ae987c2d8eb14f6af9c..0d05c9b19f8937a691326baf0d1df6748003567f 100644 (file)
@@ -1303,8 +1303,8 @@ class CVC4_PUBLIC Solver
   /**
    * Disallow copy/assignment.
    */
-  Solver(const Solver&) CVC4_UNDEFINED;
-  Solver& operator=(const Solver&) CVC4_UNDEFINED;
+  Solver(const Solver&) = delete;
+  Solver& operator=(const Solver&) = delete;
 
   /* .................................................................... */
   /* Sorts Handling                                                       */
index c6619ddd67767c654782779cb7d8e4d8c9dca45f..983a5957215f9d0af63171f1e6e8154b0d5a47ef 100644 (file)
@@ -158,8 +158,8 @@ public:
 
 private:
   /* Disallow copies */
-  LastExceptionBuffer(const LastExceptionBuffer&) CVC4_UNDEFINED;
-  LastExceptionBuffer& operator=(const LastExceptionBuffer&) CVC4_UNDEFINED;
+  LastExceptionBuffer(const LastExceptionBuffer&) = delete;
+  LastExceptionBuffer& operator=(const LastExceptionBuffer&) = delete;
 
   char* d_contents;
 
index 7e8d0003931963b77544781e6cd4944ed1898a22..88bcee74271f11b0b222875367cfd63705be6f3b 100644 (file)
@@ -125,14 +125,14 @@ private:
    * The user of the class must be know to remove listeners on the collection.
    * Allowing copies will only cause confusion.
    */
-  ListenerCollection(const ListenerCollection& copy) CVC4_UNDEFINED;
+  ListenerCollection(const ListenerCollection& copy) = delete;
 
   /**
    * Disabling the assignment operator.
    * The user of the class must be know to remove listeners on the collection.
    * Allowing copies will only cause confusion.
    */
-  ListenerCollection& operator=(const ListenerCollection& copy) CVC4_UNDEFINED;
+  ListenerCollection& operator=(const ListenerCollection& copy) = delete;
 
   /** A list of the listeners in the collection.*/
   ListenerList d_listeners;
@@ -153,10 +153,9 @@ class ListenerRegistrationList {
 
  private:
   /** Disallow copying.*/
-  ListenerRegistrationList(const ListenerRegistrationList&) CVC4_UNDEFINED;
+  ListenerRegistrationList(const ListenerRegistrationList&) = delete;
   /** Disallow assignment.*/
-  ListenerRegistrationList operator=(const ListenerRegistrationList&)
-      CVC4_UNDEFINED;
+  ListenerRegistrationList operator=(const ListenerRegistrationList&) = delete;
   std::list<ListenerCollection::Registration*> d_registrations;
 };/* class CVC4::ListenerRegistrationList */
 
index 94b507a7e3d23ae06638483bf7755212fbd925b0..958c48e22d502e1bdc9ed4ba8d415777b95ba138 100644 (file)
@@ -177,7 +177,7 @@ class CDOhash_map : public ContextObj {
         d_next(NULL)
   {
   }
-  CDOhash_map& operator=(const CDOhash_map&) CVC4_UNDEFINED;
+  CDOhash_map& operator=(const CDOhash_map&) = delete;
 
  public:
   CDOhash_map(Context* context,
@@ -290,8 +290,8 @@ class CDHashMap : public ContextObj {
   void restore(ContextObj* data) override { Unreachable(); }
 
   // no copy or assignment
-  CDHashMap(const CDHashMap&) CVC4_UNDEFINED;
-  CDHashMap& operator=(const CDHashMap&) CVC4_UNDEFINED;
+  CDHashMap(const CDHashMap&) = delete;
+  CDHashMap& operator=(const CDHashMap&) = delete;
 
 public:
   CDHashMap(Context* context)
index 0dc1f087d7bddfa624bb2b404e81606adc7dc0c2..b907d982321ed4bf3d0a0c961a13e589f5afdefb 100644 (file)
@@ -32,8 +32,8 @@ class CDHashSet : protected CDInsertHashMap<V, bool, HashFcn> {
   typedef CDInsertHashMap<V, bool, HashFcn> super;
 
   // no copy or assignment
-  CDHashSet(const CDHashSet&) CVC4_UNDEFINED;
-  CDHashSet& operator=(const CDHashSet&) CVC4_UNDEFINED;
+  CDHashSet(const CDHashSet&) = delete;
+  CDHashSet& operator=(const CDHashSet&) = delete;
 
 public:
 
index 62268b471b570091955b15ac8579084ecda6e5f4..d59bf584d46a408a552413d80b469d5c9a44cfed 100644 (file)
@@ -214,7 +214,7 @@ private:
                     << " from " << &l
                     << " size " << d_size << std::endl;
   }
-  CDInsertHashMap& operator=(const CDInsertHashMap&) CVC4_UNDEFINED;
+  CDInsertHashMap& operator=(const CDInsertHashMap&) = delete;
 
   /**
    * Implementation of mandatory ContextObj method save: simply copies
index 8fcc977afd722908e9ab595375a535360370e918..834e363f99e38b459f0a61f9153e5f8b3907e164 100644 (file)
@@ -113,7 +113,7 @@ protected:
                     << " from " << &l
                     << " size " << d_size << std::endl;
   }
-  CDList& operator=(const CDList& l) CVC4_UNDEFINED;
+  CDList& operator=(const CDList& l) = delete;
 
 private:
   /**
index 3cb646d6ce14015fdf97d9c86384764547f83abf..da6c8d338a5f49e80a1886ef001f171ca21042d8 100644 (file)
@@ -50,7 +50,7 @@ protected:
   /**
    * operator= for CDO is private to ensure CDO object is not copied.
    */
-  CDO<T>& operator=(const CDO<T>& cdo) CVC4_UNDEFINED;
+  CDO<T>& operator=(const CDO<T>& cdo) = delete;
 
   /**
    * Implementation of mandatory ContextObj method save: simply copies the
index acff2b5c243f08bb94c8ff22e07f4d6bea519b38..04da9c25d4a37527823411b2a6a5eb7d6e97dbe8 100644 (file)
@@ -94,8 +94,8 @@ class Context {
   friend std::ostream& operator<<(std::ostream&, const Context&);
 
   // disable copy, assignment
-  Context(const Context&) CVC4_UNDEFINED;
-  Context& operator=(const Context&) CVC4_UNDEFINED;
+  Context(const Context&) = delete;
+  Context& operator=(const Context&) = delete;
 
 public:
 
@@ -208,8 +208,8 @@ public:
 class UserContext : public Context {
 private:
   // disable copy, assignment
-  UserContext(const UserContext&) CVC4_UNDEFINED;
-  UserContext& operator=(const UserContext&) CVC4_UNDEFINED;
+  UserContext(const UserContext&) = delete;
+  UserContext& operator=(const UserContext&) = delete;
 public:
   UserContext() {}
 };/* class UserContext */
index a9cdfc5874f6cbea0cfa4a9cd0aa1e863863b834..bce1c894088465ab98bdbf2d9e6ee0db51283c00 100644 (file)
@@ -83,8 +83,8 @@ private:
   friend class NodeManager;
 
   // undefined, private copy constructor and assignment op (disallow copy)
-  ExprManager(const ExprManager&) CVC4_UNDEFINED;
-  ExprManager& operator=(const ExprManager&) CVC4_UNDEFINED;
+  ExprManager(const ExprManager&) = delete;
+  ExprManager& operator=(const ExprManager&) = delete;
 
   std::vector<DatatypeType> d_keep_dtt;
   std::vector<Datatype> d_keep_dt;
index 71082ef9d8c5922c6c44beb30e8fa43f7912b613..f7f3fb1449cb4efd57549be69d01fe26df2f5e2a 100644 (file)
@@ -349,9 +349,9 @@ class NodeManager {
   // bool properlyContainsDecision(TNode); // all children are atomic
 
   // undefined private copy constructor (disallow copy)
-  NodeManager(const NodeManager&) CVC4_UNDEFINED;
+  NodeManager(const NodeManager&) = delete;
 
-  NodeManager& operator=(const NodeManager&) CVC4_UNDEFINED;
+  NodeManager& operator=(const NodeManager&) = delete;
 
   void init();
 
index e1d406b0342c0a41697b28429123c266bac4dba2..7950a5af6b4f87ba1010c26ea29700df33c63c20 100644 (file)
 #  endif /* __GNUC__ >= 4 */
 #endif /* defined _WIN32 || defined __CYGWIN__ */
 
-// Can use CVC4_UNDEFINED for things like undefined, private
-// copy constructors.  The advantage is that with CVC4_UNDEFINED,
-// if something _does_ try to call the function, you get an error
-// at the point of the call (rather than a link error later).
-
 // CVC4_UNUSED is to mark something (e.g. local variable, function)
 // as being _possibly_ unused, so that the compiler generates no
 // warning about it.  This might be the case for e.g. a variable
 // only used in DEBUG builds.
 
-#ifdef __GNUC__
-#  if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 3 )
-     /* error function attribute only exists in GCC >= 4.3.0 */
-#    define CVC4_UNDEFINED __attribute__((__error__("this function intentionally undefined")))
-#  else /* GCC < 4.3.0 */
-#    define CVC4_UNDEFINED
-#  endif /* GCC >= 4.3.0 */
-#else /* ! __GNUC__ */
-#  define CVC4_UNDEFINED
-#endif /* __GNUC__ */
-
 #ifdef __GNUC__
 #  define CVC4_UNUSED __attribute__((__unused__))
 #  define CVC4_NORETURN __attribute__ ((__noreturn__))
index ab65cbaf0b97bbb0c0cdde75a10e756ac4f699c7..6ebd97d3d5d6f2bccf4fcd77d4e5cebb7b164817 100644 (file)
@@ -86,8 +86,8 @@ class OptionsList {
 
   size_t size() const;
  private:
-  OptionsList(const OptionsList&) CVC4_UNDEFINED;
-  OptionsList& operator=(const OptionsList&) CVC4_UNDEFINED;
+  OptionsList(const OptionsList&) = delete;
+  OptionsList& operator=(const OptionsList&) = delete;
   std::vector<Options*> d_options;
 };
 
index 8ca713642975f400eb40db9873f142c56ec37258..16210e1a3501439b16a1308d17b63ff3a45a480a 100644 (file)
@@ -114,13 +114,13 @@ class CVC4_PUBLIC Options {
    * Options cannot be copied as they are given an explicit list of
    * Listeners to respond to.
    */
-  Options(const Options& options) CVC4_UNDEFINED;
+  Options(const Options& options) = delete;
 
   /**
    * Options cannot be assigned as they are given an explicit list of
    * Listeners to respond to.
    */
-  Options& operator=(const Options& options) CVC4_UNDEFINED;
+  Options& operator=(const Options& options) = delete;
 
   static std::string formatThreadOptionException(const std::string& option);
 
index 3a0c0fdfe49ba2ee221f17badfd397584a6e759e..5598dd359e73d7562df4e25d79b97c7349e826e7 100644 (file)
@@ -69,11 +69,10 @@ private:
                    LineBuffer* line_buffer);
 
   /* This is private and unimplemented, because you should never use it. */
-  AntlrInputStream(const AntlrInputStream& inputStream) CVC4_UNDEFINED;
+  AntlrInputStream(const AntlrInputStream& inputStream) = delete;
 
   /* This is private and unimplemented, because you should never use it. */
-  AntlrInputStream& operator=(const AntlrInputStream& inputStream)
-    CVC4_UNDEFINED;
+  AntlrInputStream& operator=(const AntlrInputStream& inputStream) = delete;
 
 public:
 
index 4f1a0f7dace88df5d7dc0763351e469f1e75aad6..02d92749d777bb672657f150bca73de9f140c2f3 100644 (file)
@@ -90,8 +90,8 @@ class CVC4_PUBLIC Input {
    * copy construction and assignment.  Mark them private and do not define
    * them.
    */
-  Input(const Input& input) CVC4_UNDEFINED;
-  Input& operator=(const Input& input) CVC4_UNDEFINED;
+  Input(const Input& input) = delete;
+  Input& operator=(const Input& input) = delete;
 
  public:
   /** Create an input for the given file.
index 29d4f5598a670bea92ca8c0e9d8199b6ad63ec61..6b34094e705171f942608f5772fa66e00d9f8ca3 100644 (file)
@@ -100,8 +100,8 @@ class Printer
 
  private:
   /** Disallow copy, assignment  */
-  Printer(const Printer&) CVC4_UNDEFINED;
-  Printer& operator=(const Printer&) CVC4_UNDEFINED;
+  Printer(const Printer&) = delete;
+  Printer& operator=(const Printer&) = delete;
 
   /** Make a Printer for a given OutputLanguage */
   static std::unique_ptr<Printer> makePrinter(OutputLanguage lang);
index 6578b5ee80ab1c38de85a728586da3e127abed50..728d26bd473e1983bdf3601875807a33efdd6d90 100644 (file)
@@ -121,7 +121,7 @@ public:
 
  private:
   /* Disable the default constructor. */
-  BVMinisatSatSolver() CVC4_UNDEFINED;
+  BVMinisatSatSolver() = delete;
 
   class Statistics {
   public:
index e4bd7d77d968c273fced01dd7100ce7026f17ab5..dc5a5e70328da29e2a99bc951307574ba7cac6f6 100644 (file)
@@ -402,8 +402,8 @@ class CVC4_PUBLIC SmtEngine {
   void addToModelCommandAndDump(const Command& c, uint32_t flags = 0, bool userVisible = true, const char* dumpTag = "declarations");
 
   // disallow copy/assignment
-  SmtEngine(const SmtEngine&) CVC4_UNDEFINED;
-  SmtEngine& operator=(const SmtEngine&) CVC4_UNDEFINED;
+  SmtEngine(const SmtEngine&) = delete;
+  SmtEngine& operator=(const SmtEngine&) = delete;
 
   //check satisfiability (for query and check-sat)
   Result checkSatisfiability(const Expr& assumption,
index 6274d0dbd3fc0af66f8f4a2ae80df9446a1a193e..8e4d8aa25d93b25418af7557e25039115cfe29a9 100644 (file)
@@ -35,8 +35,8 @@ namespace CVC4 {
  */
 class BooleanSimplification {
   // cannot construct one of these
-  BooleanSimplification() CVC4_UNDEFINED;
-  BooleanSimplification(const BooleanSimplification&) CVC4_UNDEFINED;
+  BooleanSimplification() = delete;
+  BooleanSimplification(const BooleanSimplification&) = delete;
 
   static bool push_back_associative_commute_recursive(
       Node n, std::vector<Node>& buffer, Kind k, Kind notK, bool negateNode)
index 67de37ed8325833f856d2f29a4f4849a0e09a7b7..b2af0dfe448a9befb3a661226a33986dd38b6356 100644 (file)
@@ -60,10 +60,10 @@ class CVC4_PUBLIC LemmaChannels {
 
  private:
   // Disable copy constructor.
-  LemmaChannels(const LemmaChannels&) CVC4_UNDEFINED;
+  LemmaChannels(const LemmaChannels&) = delete;
 
   // Disable assignment operator.
-  LemmaChannels& operator=(const LemmaChannels&) CVC4_UNDEFINED;
+  LemmaChannels& operator=(const LemmaChannels&) = delete;
 
   /** This captures the old options::lemmaInputChannel .*/
   LemmaInputChannel* d_lemmaInputChannel;
index eda5dcf2645baca17ec491b34c0ae572893bcb3c..cc948ae7cc42f8ddc88315cd96d9d65926b80316 100644 (file)
@@ -72,8 +72,8 @@ class Rewriter {
                                   TNode node, TNode cache);
 
   // disable construction of rewriters; all functionality is static
-  Rewriter() CVC4_UNDEFINED;
-  Rewriter(const Rewriter&) CVC4_UNDEFINED;
+  Rewriter() = delete;
+  Rewriter(const Rewriter&) = delete;
 
   /**
    * Rewrites the node using the given theory rewriter.
index 2c3c727cbcba947c8ac901ba86c32909bf635e0f..5d176a36bc6864167bea5ebd0b8a451e342acb14 100644 (file)
@@ -83,9 +83,9 @@ private:
   friend class ::CVC4::TheoryEngine;
 
   // Disallow default construction, copy, assignment.
-  Theory() CVC4_UNDEFINED;
-  Theory(const Theory&) CVC4_UNDEFINED;
-  Theory& operator=(const Theory&) CVC4_UNDEFINED;
+  Theory() = delete;
+  Theory(const Theory&) = delete;
+  Theory& operator=(const Theory&) = delete;
 
   /** An integer identifying the type of the theory. */
   TheoryId d_id;
index 7d733829bdc7ed815578e71bb06556f6fb4036be..d547530b118003910a3984910240b1d2e3e5048c 100644 (file)
@@ -60,8 +60,8 @@ private:
   CmpFcn d_cmp;
 
   // disallow copy and assignment
-  BinaryHeap(const BinaryHeap&) CVC4_UNDEFINED;
-  BinaryHeap& operator=(const BinaryHeap&) CVC4_UNDEFINED;
+  BinaryHeap(const BinaryHeap&) = delete;
+  BinaryHeap& operator=(const BinaryHeap&) = delete;
 
 public:
   BinaryHeap(const CmpFcn& c = CmpFcn())
index 2fa7a6bb4636c364bfb7690fec4737c1bf5b7c42..3ca2babcfc5fd5c28f1921b1e8577b208c3e8330 100644 (file)
@@ -120,13 +120,13 @@ class CVC4_PUBLIC ResourceManager {
    * ResourceManagers cannot be copied as they are given an explicit
    * list of Listeners to respond to.
    */
-  ResourceManager(const ResourceManager&) CVC4_UNDEFINED;
+  ResourceManager(const ResourceManager&) = delete;
 
   /**
    * ResourceManagers cannot be assigned as they are given an explicit
    * list of Listeners to respond to.
    */
-  ResourceManager& operator=(const ResourceManager&) CVC4_UNDEFINED;
+  ResourceManager& operator=(const ResourceManager&) = delete;
 
 public:
 
index b000e91e8240f5b6ac9a5dd54e48f5a77b6d15bd..d7f105b6523aeeb555d2296ef972c8e096428c8d 100644 (file)
@@ -392,9 +392,9 @@ class WrappedStat : public ReadOnlyDataStat<typename Stat::payload_t> {
   const ReadOnlyDataStat<T>& d_stat;
 
   /** Private copy constructor undefined (no copy permitted). */
-  WrappedStat(const WrappedStat&) CVC4_UNDEFINED;
+  WrappedStat(const WrappedStat&) = delete;
   /** Private assignment operator undefined (no copy permitted). */
-  WrappedStat<T>& operator=(const WrappedStat&) CVC4_UNDEFINED;
+  WrappedStat<T>& operator=(const WrappedStat&) = delete;
 
 public:
 
@@ -653,7 +653,7 @@ class CVC4_PUBLIC StatisticsRegistry : public StatisticsBase, public Stat {
 private:
 
   /** Private copy constructor undefined (no copy permitted). */
-  StatisticsRegistry(const StatisticsRegistry&) CVC4_UNDEFINED;
+  StatisticsRegistry(const StatisticsRegistry&) = delete;
 
 public:
 
@@ -760,9 +760,9 @@ class CodeTimer {
   bool d_reentrant;
 
   /** Private copy constructor undefined (no copy permitted). */
-  CodeTimer(const CodeTimer& timer) CVC4_UNDEFINED;
+  CodeTimer(const CodeTimer& timer) = delete;
   /** Private assignment operator undefined (no copy permitted). */
-  CodeTimer& operator=(const CodeTimer& timer) CVC4_UNDEFINED;
+  CodeTimer& operator=(const CodeTimer& timer) = delete;
 
 public:
   CodeTimer(TimerStat& timer, bool allow_reentrant = false) : d_timer(timer), d_reentrant(false) {