X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=action.cc;h=2fb498f4a05baf6dc783f7efdf2efc5bd2db0c9b;hb=fbacb5f41ada96e7b539ccc41deccb1a7e1a1ba8;hp=acecd5a6e20f6b512cef0d9e136db4422d8078d8;hpb=87d6ae25425840ccad0ef6edef6e279967e83be6;p=model-checker.git diff --git a/action.cc b/action.cc index acecd5a..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; @@ -542,7 +556,7 @@ void ModelAction::print() const model_print("\n"); } -/** @brief Print nicely-formatted info about this ModelAction */ +/** @brief Get a (likely) unique hash for this ModelAction */ unsigned int ModelAction::hash() const { unsigned int hash = (unsigned int)this->type;