]> pd.if.org Git - pdclib.old/blobdiff - includes/assert.h
Modify various POSIX platform files so you can build on top of glibc for testing
[pdclib.old] / includes / assert.h
index 7874167258675dcb713b9e2f69328db9f2e2b4ad..cb5c47e4bd2875ba8e1874c96c6e6b7c951d0562 100644 (file)
@@ -12,6 +12,7 @@
 #include <_PDCLIB_config.h>
 _PDCLIB_BEGIN_EXTERN_C
 
+/* Functions _NOT_ tagged noreturn as this hampers debugging */
 void _PDCLIB_assert99( char const * const, char const * const, char const * const );
 void _PDCLIB_assert89( char const * const );
 
@@ -19,24 +20,31 @@ void _PDCLIB_assert89( char const * const );
 #undef assert
 
 #ifdef NDEBUG
-#define assert( ignore ) ( (void) 0 )
-#elif _PDCLIB_C_VERSION >= 99
+#define assert( ignore ) do { \
+        if(!(expression)) { _PDCLIB_UNREACHABLE; } \
+    } while(0)
+
+#elif _PDCLIB_C_MIN(99)
 #define assert(expression) \
-    do { if(!(expression)) \
-        _PDCLIB_assert99("Assertion failed: " #expression \
+    do { if(!(expression)) \
+        _PDCLIB_assert99("Assertion failed: " _PDCLIB_symbol2string(expression)\
                          ", function ", __func__, \
                          ", file " __FILE__ \
                          ", line " _PDCLIB_symbol2string( __LINE__ ) \
                          "." _PDCLIB_endl ); \
+        _PDCLIB_UNREACHABLE; \
+      } \
     } while(0)
+    
 #else
 #define assert(expression) \
-    do { \
-        if(!(expression)) \
-            _PDCLIB_assert89( "Assertion failed: " #expression \
-                          ", file " __FILE__ \
-                          ", line " _PDCLIB_symbol2string( __LINE__ ) \
-                          "." _PDCLIB_endl ); \
+    do { if(!(expression)) { \
+        _PDCLIB_assert89("Assertion failed: " _PDCLIB_symbol2string(expression)\
+                         ", file " __FILE__ \
+                         ", line " _PDCLIB_symbol2string( __LINE__ ) \
+                         "." _PDCLIB_endl ); \
+        _PDCLIB_UNREACHABLE; \
+      } \
     } while(0)
 #endif