Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Try to make the abort() inconditionnal in failed xbt_assert, to please the checkers
[simgrid.git] / include / xbt / asserts.h
index 2799724..e51ed8a 100644 (file)
@@ -1,6 +1,6 @@
 /*  xbt/asserts.h -- assertion mechanism                                    */
 
-/* Copyright (c) 2005-2021. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2005-2022. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -8,6 +8,7 @@
 #ifndef XBT_ASSERTS_H
 #define XBT_ASSERTS_H
 
+#include "simgrid/modelchecker.h"
 #include <stdlib.h>
 #include <xbt/base.h>
 #include <xbt/log.h>
@@ -48,6 +49,8 @@ XBT_ATTRIB_NORETURN XBT_PUBLIC void xbt_abort(void);
  *
  * Unlike the standard assert, xbt_assert is never disabled, even if the macro NDEBUG is defined at compile time.  So
  * it's safe to have a condition with side effects.
+ *
+ * In model-checking mode, a failed xbt_assert() is reported as a failed MC_assert().
  */
 /** @brief The condition which failed will be displayed.
     @hideinitializer  */
@@ -60,6 +63,8 @@ XBT_ATTRIB_NORETURN XBT_PUBLIC void xbt_abort(void);
       XBT_CCRITICAL(root, __VA_ARGS__);                                                                                \
       if (!xbt_log_no_loc)                                                                                             \
         xbt_backtrace_display_current();                                                                               \
+      if (MC_is_active())                                                                                              \
+        MC_assert(0);                                                                                                  \
       abort();                                                                                                         \
     }                                                                                                                  \
   } while (0)