// Matrix Construct // // Copyright (C) Matrix Construct Developers, Authors & Contributors // Copyright (C) 2016-2022 Jason Volk // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice is present in all copies. The // full license for this software is available in the LICENSE file. #pragma once #define HAVE_IRCD_SIMT_ASSERT_H // // Trapping assert() on supporting platforms. // // assert macro is ignored/untouched unless outer conditions met #if defined(__OPENCL_VERSION__) \ && !defined(assert) \ && true // assert expression is enabled or elided #if __OPENCL_VERSION__ >= 200 \ && __has_builtin(__builtin_trap) \ && !defined(NDEBUG) \ && true #define assert(expr) \ ({ \ if(unlikely(!(bool)(expr))) \ __builtin_trap(); \ }) #else #define assert(expr) #endif #endif // // Compile-time assertion alias // #if defined(__OPENCL_VERSION__) \ && !defined(static_assert) \ && true #if (__has_feature(c_static_assert) || __has_extension(c_static_assert)) #define static_assert(...) _Static_assert(__VA_ARGS__) #else #define static_assert(...) #endif #endif