bool mo_may_allow(const ModelAction *writer, const ModelAction *reader);
bool promises_may_allow(const ModelAction *writer, const ModelAction *reader) const;
void set_bad_synchronization();
+ void set_bad_sc_read();
bool promises_expired() const;
bool should_wake_up(const ModelAction *curr, const Thread *thread) const;
void wake_up_sleeping_actions(ModelAction *curr);
void propagate_clockvector(ModelAction *acquire, work_queue_t *work);
bool resolve_release_sequences(void *location, work_queue_t *work_queue);
void add_future_value(const ModelAction *writer, ModelAction *reader);
-
+ bool check_coherence_promise(const ModelAction *write, const ModelAction *read);
ModelAction * get_uninitialized_action(const ModelAction *curr) const;
action_list_t action_trace;
HashTable<const void *, action_list_t *, uintptr_t, 4> condvar_waiters_map;
HashTable<void *, SnapVector<action_list_t> *, uintptr_t, 4> obj_thrd_map;
+
+ /**
+ * @brief List of currently-pending promises
+ *
+ * Promises are sorted by the execution order of the read(s) which
+ * created them
+ */
SnapVector<Promise *> promises;
SnapVector<struct PendingFutureValue> futurevalues;