Force syntax-checking on assertions even in non-asserting builds.
This commit is contained in:
parent
3e0286dee3
commit
2e41bfd268
@ -10,6 +10,25 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef NDEBUG
|
||||||
|
#define ASSERTING 0
|
||||||
|
#else
|
||||||
|
#define ASSERTING 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** printf() for assertions
|
||||||
|
*
|
||||||
|
* This function exists so that the assert() macro can expand to
|
||||||
|
* printf() calls without dragging the printf() prototype into scope.
|
||||||
|
*
|
||||||
|
* As far as the compiler is concerned, assert_printf() and printf() are
|
||||||
|
* completely unrelated calls; it's only at the assembly stage that
|
||||||
|
* references to the assert_printf symbol are collapsed into references
|
||||||
|
* to the printf symbol.
|
||||||
|
*/
|
||||||
|
extern int __attribute__ (( format ( printf, 1, 2 ) ))
|
||||||
|
assert_printf ( const char *fmt, ... ) asm ( "printf" );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assert a condition at run-time.
|
* Assert a condition at run-time.
|
||||||
*
|
*
|
||||||
@ -21,10 +40,10 @@
|
|||||||
*/
|
*/
|
||||||
#define assert( condition ) \
|
#define assert( condition ) \
|
||||||
do { \
|
do { \
|
||||||
if ( ! (condition) ) { \
|
if ( ASSERTING && ! (condition) ) { \
|
||||||
printf ( "assert(%s) failed at %s line %d [%s]\n", \
|
assert_printf ( "assert(%s) failed at %s line " \
|
||||||
#condition, __FILE__, __LINE__, \
|
"%d [%s]\n", #condition, __FILE__, \
|
||||||
__FUNCTION__ ); \
|
__LINE__, __FUNCTION__ ); \
|
||||||
} \
|
} \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
@ -44,9 +63,4 @@
|
|||||||
error_symbol(); \
|
error_symbol(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NDEBUG
|
|
||||||
#undef assert
|
|
||||||
#define assert(x) do {} while ( 0 )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _ASSERT_H */
|
#endif /* _ASSERT_H */
|
||||||
|
Reference in New Issue
Block a user