model: rework assert_bug() and assert_user_bug() interfaces
[c11tester.git] / common.cc
index ac5cb59601ba7a6025ac1d8d5f24f62fef0666b7..f37f92f1ba7434cdddd365564048b711ddc40816 100644 (file)
--- a/common.cc
+++ b/common.cc
@@ -2,14 +2,21 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include <model-assert.h>
+
 #include "common.h"
 #include "model.h"
+#include "stacktrace.h"
 
 #define MAX_TRACE_LEN 100
 
+#define CONFIG_STACKTRACE
 /** Print a backtrace of the current program state. */
 void print_trace(void)
 {
+#ifdef CONFIG_STACKTRACE
+       print_stacktrace(stdout);
+#else
        void *array[MAX_TRACE_LEN];
        char **strings;
        int size, i;
@@ -23,9 +30,25 @@ void print_trace(void)
                printf("\t%s\n", strings[i]);
 
        free(strings);
+#endif /* CONFIG_STACKTRACE */
 }
 
 void model_print_summary(void)
 {
        model->print_summary();
 }
+
+void assert_hook(void)
+{
+       printf("Add breakpoint to line %u in file %s.\n",__LINE__,__FILE__);
+}
+
+void model_assert(bool expr, const char *file, int line)
+{
+       if (!expr) {
+               char msg[100];
+               sprintf(msg, "Program has hit assertion in file %s at line %d\n",
+                               file, line);
+               model->assert_user_bug(msg);
+       }
+}