2022-10-11 00:39:55 +02:00
|
|
|
// 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.
|
|
|
|
//
|
|
|
|
|
2022-10-18 22:14:48 +02:00
|
|
|
// assert macro is ignored/untouched unless outer conditions met
|
|
|
|
#if defined(__OPENCL_VERSION__) \
|
|
|
|
&& !defined(assert) \
|
|
|
|
&& true
|
|
|
|
|
|
|
|
// assert expression is enabled or elided
|
2022-10-11 00:39:55 +02:00
|
|
|
#if __OPENCL_VERSION__ >= 200 \
|
2022-10-18 22:14:48 +02:00
|
|
|
&& __has_builtin(__builtin_trap) \
|
2022-10-11 00:39:55 +02:00
|
|
|
&& !defined(NDEBUG) \
|
2022-10-18 22:14:48 +02:00
|
|
|
&& true
|
|
|
|
#define assert(expr) \
|
|
|
|
({ \
|
|
|
|
if(unlikely(!(bool)(expr))) \
|
|
|
|
__builtin_trap(); \
|
2022-10-11 00:39:55 +02:00
|
|
|
})
|
|
|
|
#else
|
2022-10-18 22:14:48 +02:00
|
|
|
#define assert(expr)
|
2022-10-11 00:39:55 +02:00
|
|
|
#endif
|
2022-10-18 22:14:48 +02:00
|
|
|
|
2022-10-11 00:39:55 +02:00
|
|
|
#endif
|
2022-11-04 18:33:05 +01:00
|
|
|
|
|
|
|
//
|
|
|
|
// 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
|