#include "promise.h"
#include "datarace.h"
#include "threads-model.h"
+#include "output.h"
#define INITIAL_THREAD_ID 0
too_many_reads = false;
bad_synchronization = false;
reset_asserted();
+
+ /* Print all model-checker output before rollback */
+ fflush(model_out);
+
snapshotObject->backTrackBeforeStep(0);
}
{
DBG();
- record_stats();
-
if (isfinalfeasible() && (is_complete_execution() || have_bug_reports())) {
- model_print("Earliest divergence point since last feasible execution:\n");
- if (earliest_diverge)
- earliest_diverge->print();
- else
- model_print("(Not set)\n");
-
- earliest_diverge = NULL;
-
if (is_deadlocked())
assert_bug("Deadlock detected");
checkDataRaces();
- print_bugs();
- model_print("\n");
- print_summary();
+
+ if (DBG_ENABLED() || params.verbose || have_bug_reports()) {
+ print_program_output();
+
+ if (DBG_ENABLED() || params.verbose) {
+ model_print("Earliest divergence point since last feasible execution:\n");
+ if (earliest_diverge)
+ earliest_diverge->print();
+ else
+ model_print("(Not set)\n");
+
+ model_print("\n");
+ print_stats();
+ }
+
+ print_bugs();
+ model_print("\n");
+ print_summary();
+ } else
+ clear_program_output();
+
+ earliest_diverge = NULL;
} else if (DBG_ENABLED()) {
+ print_program_output();
model_print("\n");
+ print_stats();
print_summary();
+ } else {
+ clear_program_output();
}
+ record_stats();
+
if ((diverge = get_next_backtrack()) == NULL)
return false;
}
}
-static void print_list(action_list_t *list)
+static void print_list(action_list_t *list, int exec_num = -1)
{
action_list_t::iterator it;
model_print("---------------------------------------------------------------------\n");
- model_print("Trace:\n");
+ if (exec_num >= 0)
+ model_print("Execution %d:\n", exec_num);
+
unsigned int hash=0;
for (it = list->begin(); it != list->end(); it++) {
}
#endif
-void ModelChecker::print_summary()
+/** @brief Prints an execution trace summary. */
+void ModelChecker::print_summary() const
{
#if SUPPORT_MOD_ORDER_DUMP
scheduler->print();
if (!isfinalfeasible())
model_print("INFEASIBLE EXECUTION!\n");
- print_list(action_trace);
+ print_list(action_trace, stats.num_total);
model_print("\n");
}