bug in fence support fixed
[model-checker.git] / action.cc
index 2010a0b61fd76a66bc2102a8ed2f4562491ad3e5..d4c6253caf20c23411c60ba350a91760c386e6fc 100644 (file)
--- a/action.cc
+++ b/action.cc
@@ -9,6 +9,7 @@
 #include "common.h"
 #include "threads-model.h"
 #include "nodestack.h"
+#include "wildcard.h"
 
 #define ACTION_INITIAL_CLOCK 0
 
@@ -34,6 +35,7 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc,
                uint64_t value, Thread *thread) :
        type(type),
        order(order),
+       original_order(order),
        location(loc),
        value(value),
        reads_from(NULL),
@@ -328,7 +330,7 @@ bool ModelAction::could_synchronize_with(const ModelAction *act) const
                return false;
 
        // Different locations commute
-       if (!same_var(act))
+       if (!same_var(act) && !is_fence() && !act->is_fence())
                return false;
 
        // Explore interleavings of seqcst writes/fences to guarantee total
@@ -553,7 +555,7 @@ const char * ModelAction::get_type_str() const
                case ATOMIC_WAIT: return "wait";
                case ATOMIC_NOTIFY_ONE: return "notify one";
          case ATOMIC_NOTIFY_ALL: return "notify all";
-         case ATOMIC_ANNOTATION: return "atomic annotation";
+         case ATOMIC_ANNOTATION: return "annotation";
                default: return "unknown type";
        };
 }