X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=action.cc;h=2010a0b61fd76a66bc2102a8ed2f4562491ad3e5;hb=3fe3c730dd6a8deb536276f7a68ef58cae0d74f3;hp=e2557f0ad9fe3bac1083aca81fc67749dc6e8e82;hpb=981465809f7f1fdf2693daf099be5e5f75967ed8;p=model-checker.git diff --git a/action.cc b/action.cc index e2557f0..2010a0b 100644 --- a/action.cc +++ b/action.cc @@ -192,6 +192,11 @@ bool ModelAction::is_initialization() const return type == ATOMIC_INIT; } +bool ModelAction::is_annotation() const +{ + return type == ATOMIC_ANNOTATION; +} + bool ModelAction::is_relaxed() const { return order == std::memory_order_relaxed; @@ -478,7 +483,10 @@ void ModelAction::set_read_from(const ModelAction *act) reads_from = act; reads_from_promise = NULL; if (act->is_uninitialized()) - model->assert_bug("May read from uninitialized atomic\n"); + model->assert_bug("May read from uninitialized atomic:\n" + " action %d, thread %d, location %p (%s, %s)", + seq_number, id_to_int(tid), location, + get_type_str(), get_mo_str()); } /** @@ -544,7 +552,8 @@ const char * ModelAction::get_type_str() const case ATOMIC_TRYLOCK: return "trylock"; case ATOMIC_WAIT: return "wait"; case ATOMIC_NOTIFY_ONE: return "notify one"; - case ATOMIC_NOTIFY_ALL: return "notify all"; + case ATOMIC_NOTIFY_ALL: return "notify all"; + case ATOMIC_ANNOTATION: return "atomic annotation"; default: return "unknown type"; }; } @@ -566,25 +575,25 @@ void ModelAction::print() const { const char *type_str = get_type_str(), *mo_str = get_mo_str(); - model_print("(%4d) Thread: %-2d Action: %-13s MO: %7s Loc: %14p Value: %-#18" PRIx64, + model_print("%-4d %-2d %-13s %7s %14p %-#18" PRIx64, seq_number, id_to_int(tid), type_str, mo_str, location, get_return_value()); if (is_read()) { if (reads_from) - model_print(" Rf: %-3d", reads_from->get_seq_number()); + model_print(" %-3d", reads_from->get_seq_number()); else if (reads_from_promise) { int idx = reads_from_promise->get_index(); if (idx >= 0) - model_print(" Rf: P%-2d", idx); + model_print(" P%-2d", idx); else - model_print(" Rf: P? "); + model_print(" P? "); } else - model_print(" Rf: ? "); + model_print(" ? "); } if (cv) { if (is_read()) model_print(" "); else - model_print(" "); + model_print(" "); cv->print(); } else model_print("\n");