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()
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