X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=action.cc;h=2fb498f4a05baf6dc783f7efdf2efc5bd2db0c9b;hb=4da2859902f1096053a2d9857df502d3bb94e6e4;hp=bb2b282a67a9c5aa3852d57c7936b438fc3688d1;hpb=b12c09f77928a3034a3b79007485c06d11cbcfef;p=model-checker.git diff --git a/action.cc b/action.cc index bb2b282..2fb498f 100644 --- a/action.cc +++ b/action.cc @@ -393,10 +393,22 @@ Node * ModelAction::get_node() const void ModelAction::set_read_from(const ModelAction *act) { reads_from = act; + reads_from_promise = NULL; if (act && act->is_uninitialized()) model->assert_bug("May read from uninitialized atomic\n"); } +/** + * Set this action's read-from promise + * @param promise The promise to read from + */ +void ModelAction::set_read_from_promise(const Promise *promise) +{ + ASSERT(is_read()); + reads_from_promise = promise; + reads_from = NULL; +} + /** * Synchronize the current thread with the thread corresponding to the * ModelAction parameter. @@ -498,8 +510,10 @@ void ModelAction::print() const } uint64_t valuetoprint; - if (type == ATOMIC_READ && reads_from != NULL) + if (is_read() && reads_from) valuetoprint = reads_from->value; + else if (is_read() && reads_from_promise) + valuetoprint = reads_from_promise->get_value(); else valuetoprint = value;