Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/include/assert.h

    re8d3c6f5 r1cf26ab  
    3434 */
    3535
    36 // XXX: The definition of `assert()` is not guarded.
    37 // One must not use `#pragma once` in this header.
    38 // This is in accordance with the C standard.
    39 
    4036#ifndef LIBC_ASSERT_H_
    4137#define LIBC_ASSERT_H_
    4238
    4339#define static_assert(expr)     _Static_assert(expr, "")
    44 
    45 extern void __helenos_assert_abort(const char *, const char *, unsigned int)
    46     __attribute__((noreturn));
    47 
    48 extern void __helenos_assert_quick_abort(const char *, const char *, unsigned int)
    49     __attribute__((noreturn));
    50 
    51 #endif
    5240
    5341/** Debugging assert macro
     
    6149 */
    6250
    63 #undef assert
     51#ifndef NDEBUG
    6452
    65 #ifndef NDEBUG
    66         #define assert(expr) ((expr) ? (void) 0 : __helenos_assert_abort(#expr, __FILE__, __LINE__))
    67 #else
    68         #define assert(expr) ((void) 0)
     53#define assert(expr) \
     54        do { \
     55                if (!(expr)) \
     56                        assert_abort(#expr, __FILE__, __LINE__); \
     57        } while (0)
     58
     59#else /* NDEBUG */
     60
     61#define assert(expr)
     62
     63#endif /* NDEBUG */
     64
     65extern void assert_abort(const char *, const char *, unsigned int)
     66    __attribute__((noreturn));
     67
    6968#endif
    70 
    71 #ifdef _HELENOS_SOURCE
    72 
    73 #undef safe_assert
    74 
    75 #ifndef NDEBUG
    76         #define safe_assert(expr) ((expr) ? (void) 0 : __helenos_assert_quick_abort(#expr, __FILE__, __LINE__))
    77 #else
    78         #define safe_assert(expr) ((void) 0)
    79 #endif
    80 
    81 #endif /* _HELENOS_SOURCE */
    8269
    8370/** @}
Note: See TracChangeset for help on using the changeset viewer.