X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=model.h;h=90c8a55e5f96f7ca93a6adcd6c6f28fdac96fa4a;hb=7921811e8bd7bba2cdd892434a58ec7254ae0f99;hp=12ec06c060a999e256dfb57ea0088c97a09f81c3;hpb=2b004336a919f74a5ca8f6d87ad5414360a949c7;p=model-checker.git diff --git a/model.h b/model.h index 12ec06c..90c8a55 100644 --- a/model.h +++ b/model.h @@ -24,6 +24,7 @@ class Promise; class Scheduler; class Thread; class ClockVector; +class Trace_Analysis; struct model_snapshot_members; /** @brief Shorthand for a list of release sequence heads */ @@ -132,7 +133,7 @@ public: void check_promises(thread_id_t tid, ClockVector *old_cv, ClockVector *merge_cv); bool isfeasibleprefix() const; - bool assert_bug(const char *msg); + bool assert_bug(const char *msg, ...); void assert_user_bug(const char *msg); const model_params params; @@ -171,6 +172,7 @@ private: bool check_action_enabled(ModelAction *curr); Thread * take_step(ModelAction *curr); + bool should_terminate_execution(); template bool check_recency(ModelAction *curr, const T *rf) const; @@ -245,6 +247,8 @@ private: SnapVector * const thrd_last_action; SnapVector * const thrd_last_fence_release; NodeStack * const node_stack; + ModelVector * trace_analyses; + /** Private data members that should be snapshotted. They are grouped * together for efficiency and maintainability. */ @@ -273,7 +277,7 @@ private: /** @brief The cumulative execution stats */ struct execution_stats stats; void record_stats(); - + void run_trace_analyses(); void print_infeasibility(const char *prefix) const; bool is_feasible_prefix_ignore_relseq() const; bool is_infeasible() const;