summaryrefslogtreecommitdiffstats
path: root/libdimension/dimension/error.h
diff options
context:
space:
mode:
Diffstat (limited to 'libdimension/dimension/error.h')
-rw-r--r--libdimension/dimension/error.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/libdimension/dimension/error.h b/libdimension/dimension/error.h
index ae8ba01..894899a 100644
--- a/libdimension/dimension/error.h
+++ b/libdimension/dimension/error.h
@@ -39,8 +39,11 @@
* Report an error.
* @param[in] str A string to print explaining the error.
*/
-#define dmnsn_error(str) \
- dmnsn_report_error(true, DMNSN_FUNC, __FILE__, __LINE__, str)
+#define dmnsn_error(str) \
+ do { \
+ dmnsn_report_error(true, DMNSN_FUNC, __FILE__, __LINE__, str); \
+ DMNSN_UNREACHABLE(); \
+ } while (0)
/**
* @def dmnsn_assert
@@ -54,12 +57,23 @@
#define dmnsn_assert(expr, str) \
do { \
if (!(expr)) { \
- dmnsn_error((str)); \
+ dmnsn_error((str)); \
} \
} while (0)
#endif
/**
+ * @def dmnsn_unreachable
+ * Express that a line of code is unreachable.
+ * @param[in] str A string to print if the line is reached.
+ */
+#ifdef NDEBUG
+ #define dmnsn_unreachable(str) DMNSN_UNREACHABLE()
+#else
+ #define dmnsn_unreachable(str) dmnsn_error((str))
+#endif
+
+/**
* @internal
* Called by dmnsn_warning() and dmnsn_error(); don't call directly.
* @param[in] die Whether the error is fatal.