xref: /rk3399_ARM-atf/drivers/ti/common/include/ti_build_assert.h (revision a28114d66a6d43db4accef5fd5d6dab6c059e584)
1*8a46d04dSKamlesh Gurudasani /*
2*8a46d04dSKamlesh Gurudasani  * Copyright (c) 2025-2026 Texas Instruments Incorporated - https://www.ti.com
3*8a46d04dSKamlesh Gurudasani  *
4*8a46d04dSKamlesh Gurudasani  * SPDX-License-Identifier: BSD-3-Clause
5*8a46d04dSKamlesh Gurudasani  */
6*8a46d04dSKamlesh Gurudasani 
7*8a46d04dSKamlesh Gurudasani /*
8*8a46d04dSKamlesh Gurudasani  * Build-Time Assertions
9*8a46d04dSKamlesh Gurudasani  *
10*8a46d04dSKamlesh Gurudasani  * This header provides a macro for performing compile-time assertions and
11*8a46d04dSKamlesh Gurudasani  * validation of constant expressions during the build process.
12*8a46d04dSKamlesh Gurudasani  */
13*8a46d04dSKamlesh Gurudasani 
14*8a46d04dSKamlesh Gurudasani #ifndef TI_BUILD_ASSERT_H
15*8a46d04dSKamlesh Gurudasani #define TI_BUILD_ASSERT_H
16*8a46d04dSKamlesh Gurudasani 
17*8a46d04dSKamlesh Gurudasani /*
18*8a46d04dSKamlesh Gurudasani  * Compile-time assertion that evaluates to zero
19*8a46d04dSKamlesh Gurudasani  *
20*8a46d04dSKamlesh Gurudasani  * Similar to CASSERT (include/lib/cassert.h) but differs in that it evaluates
21*8a46d04dSKamlesh Gurudasani  * to zero, making it usable inline within expressions. CASSERT generates a
22*8a46d04dSKamlesh Gurudasani  * typedef statement and cannot be used inside an expression.
23*8a46d04dSKamlesh Gurudasani  *
24*8a46d04dSKamlesh Gurudasani  * If the condition is false, the array has negative size causing a compilation
25*8a46d04dSKamlesh Gurudasani  * error. If true, evaluates to zero (sizeof(char[1]) - 1). Useful in macro
26*8a46d04dSKamlesh Gurudasani  * expressions where a build-time check is needed without affecting the value.
27*8a46d04dSKamlesh Gurudasani  */
28*8a46d04dSKamlesh Gurudasani #define TI_BUILD_ASSERT_OR_ZERO(cond) \
29*8a46d04dSKamlesh Gurudasani 	(sizeof(char[(cond) ? 1 : -1]) - 1)
30*8a46d04dSKamlesh Gurudasani 
31*8a46d04dSKamlesh Gurudasani #endif /* TI_BUILD_ASSERT_H */
32