0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-10-31 19:08:59 +01:00
construct/include/ircd/simt/assert.h

53 lines
1.2 KiB
C

// Matrix Construct
//
// Copyright (C) Matrix Construct Developers, Authors & Contributors
// Copyright (C) 2016-2022 Jason Volk <jason@zemos.net>
//
// 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