Botan  2.1.0
Crypto and TLS for C++11
assert.h
Go to the documentation of this file.
1 /*
2 * Runtime assertion checking
3 * (C) 2010 Jack Lloyd
4 *
5 * Botan is released under the Simplified BSD License (see license.txt)
6 */
7 
8 #ifndef BOTAN_ASSERTION_CHECKING_H__
9 #define BOTAN_ASSERTION_CHECKING_H__
10 
11 #include <botan/build.h>
12 
13 namespace Botan {
14 
15 /**
16 * Called when an assertion fails
17 */
18 BOTAN_NORETURN void BOTAN_DLL assertion_failure(const char* expr_str,
19  const char* assertion_made,
20  const char* func,
21  const char* file,
22  int line);
23 
24 /**
25 * Make an assertion
26 */
27 #define BOTAN_ASSERT(expr, assertion_made) \
28  do { \
29  if(!(expr)) \
30  Botan::assertion_failure(#expr, \
31  assertion_made, \
32  BOTAN_CURRENT_FUNCTION, \
33  __FILE__, \
34  __LINE__); \
35  } while(0)
36 
37 /**
38 * Make an assertion
39 */
40 #define BOTAN_ASSERT_NOMSG(expr) \
41  do { \
42  if(!(expr)) \
43  Botan::assertion_failure(#expr, \
44  "", \
45  BOTAN_CURRENT_FUNCTION, \
46  __FILE__, \
47  __LINE__); \
48  } while(0)
49 
50 /**
51 * Assert that value1 == value2
52 */
53 #define BOTAN_ASSERT_EQUAL(expr1, expr2, assertion_made) \
54  do { \
55  if((expr1) != (expr2)) \
56  Botan::assertion_failure(#expr1 " == " #expr2, \
57  assertion_made, \
58  BOTAN_CURRENT_FUNCTION, \
59  __FILE__, \
60  __LINE__); \
61  } while(0)
62 
63 /**
64 * Assert that expr1 (if true) implies expr2 is also true
65 */
66 #define BOTAN_ASSERT_IMPLICATION(expr1, expr2, msg) \
67  do { \
68  if((expr1) && !(expr2)) \
69  Botan::assertion_failure(#expr1 " implies " #expr2, \
70  msg, \
71  BOTAN_CURRENT_FUNCTION, \
72  __FILE__, \
73  __LINE__); \
74  } while(0)
75 
76 /**
77 * Assert that a pointer is not null
78 */
79 #define BOTAN_ASSERT_NONNULL(ptr) \
80  do { \
81  if((ptr) == nullptr) \
82  Botan::assertion_failure(#ptr " is not null", \
83  "", \
84  BOTAN_CURRENT_FUNCTION, \
85  __FILE__, \
86  __LINE__); \
87  } while(0)
88 
89 /**
90 * Mark variable as unused
91 */
92 #define BOTAN_UNUSED(v) static_cast<void>(v)
93 
94 }
95 
96 #endif
void assertion_failure(const char *expr_str, const char *assertion_made, const char *func, const char *file, int line)
Definition: assert.cpp:13
Definition: alg_id.cpp:13
#define BOTAN_NORETURN
Definition: compiler.h:94