model: rework assert_bug() and assert_user_bug() interfaces
[c11tester.git] / common.cc
index e05e094ea0105a9c2ce8e221cf95a1613d21074b..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,6 +30,7 @@ void print_trace(void)
                printf("\t%s\n", strings[i]);
 
        free(strings);
+#endif /* CONFIG_STACKTRACE */
 }
 
 void model_print_summary(void)
@@ -34,3 +42,13 @@ 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);
+       }
+}