1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 ******************************************************************************
5 *
6 *   Copyright (C) 2002-2011, International Business Machines
7 *   Corporation and others.  All Rights Reserved.
8 *
9 ******************************************************************************
10 *
11 * File uassert.h
12 *
13 *  Contains the U_ASSERT and UPRV_UNREACHABLE macros
14 *
15 ******************************************************************************
16 */
17 #ifndef U_ASSERT_H
18 #define U_ASSERT_H
19 
20 /* utypes.h is included to get the proper define for uint8_t */
21 #include "unicode/utypes.h"
22 /* for abort */
23 #include <stdlib.h>
24 
25 /**
26  * \def U_ASSERT
27  * By default, U_ASSERT just wraps the C library assert macro.
28  * By changing the definition here, the assert behavior for ICU can be changed
29  * without affecting other non - ICU uses of the C library assert().
30 */
31 #if U_DEBUG
32 #   include <assert.h>
33 #   define U_ASSERT(exp) assert(exp)
34 #elif U_CPLUSPLUS_VERSION
35 #   define U_ASSERT(exp) (void)0
36 #else
37 #   define U_ASSERT(exp)
38 #endif
39 
40 /**
41  * \def UPRV_UNREACHABLE
42  * This macro is used to unconditionally abort if unreachable code is ever executed.
43  * @internal
44 */
45 #if defined(UPRV_UNREACHABLE)
46     // Use the predefined value.
47 #else
48 #   define UPRV_UNREACHABLE abort()
49 #endif
50 
51 #endif
52