- action_list_t *action_trace;
- HashTable<int, Thread *, int> *thread_map;
-
- /** Per-object list of actions. Maps an object (i.e., memory location)
- * to a trace of all actions performed on the object. */
- HashTable<const void *, action_list_t, uintptr_t, 4> *obj_map;
-
- /** Per-object list of actions. Maps an object (i.e., memory location)
- * to a trace of all actions performed on the object. */
- HashTable<const void *, action_list_t, uintptr_t, 4> *lock_waiters_map;
-
- HashTable<void *, std::vector<action_list_t>, uintptr_t, 4 > *obj_thrd_map;
- std::vector<Promise *> *promises;
- std::vector<struct PendingFutureValue> *futurevalues;
-
- /**
- * List of acquire actions that might synchronize with one or more
- * release sequence. Release sequences might be determined lazily as
- * promises are fulfilled and modification orders are established. Each
- * ModelAction in this list must be an acquire operation.
- */
- std::vector<ModelAction *> *pending_acq_rel_seq;
-
- std::vector<ModelAction *> *thrd_last_action;
- NodeStack *node_stack;
-
- /** Private data members that should be snapshotted. They are grouped
- * together for efficiency and maintainability. */
- struct model_snapshot_members *priv;
-
- /**
- * @brief The modification order graph
- *
- * A directed acyclic graph recording observations of the modification
- * order on all the atomic objects in the system. This graph should
- * never contain any cycles, as that represents a violation of the
- * memory model (total ordering). This graph really consists of many
- * disjoint (unconnected) subgraphs, each graph corresponding to a
- * separate ordering on a distinct object.
- *
- * The edges in this graph represent the "ordered before" relation,
- * such that <tt>a --> b</tt> means <tt>a</tt> was ordered before
- * <tt>b</tt>.
- */
- CycleGraph *mo_graph;
- bool failed_promise;
- bool too_many_reads;
- bool asserted;
+
+ ModelVector<TraceAnalysis *> trace_analyses;
+
+ /** @brief The cumulative execution stats */
+ struct execution_stats stats;
+ void record_stats();
+ void run_trace_analyses();
+ void print_bugs() const;
+ void print_execution(bool printbugs) const;
+ void print_stats() const;
+
+ friend void user_main_wrapper();