diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/yt/assert | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/yt/assert')
-rw-r--r-- | library/cpp/yt/assert/assert.cpp | 29 | ||||
-rw-r--r-- | library/cpp/yt/assert/assert.h | 76 | ||||
-rw-r--r-- | library/cpp/yt/assert/ya.make | 9 |
3 files changed, 114 insertions, 0 deletions
diff --git a/library/cpp/yt/assert/assert.cpp b/library/cpp/yt/assert/assert.cpp new file mode 100644 index 0000000000..095357cdfa --- /dev/null +++ b/library/cpp/yt/assert/assert.cpp @@ -0,0 +1,29 @@ +#include "assert.h" + +#include <util/system/yassert.h> +#include <util/system/compiler.h> + +namespace NYT::NDetail { + +//////////////////////////////////////////////////////////////////////////////// + +Y_WEAK void AssertTrapImpl( + TStringBuf trapType, + TStringBuf expr, + TStringBuf file, + int line, + TStringBuf function) +{ + // Map to Arcadia assert, poorly... + ::NPrivate::Panic( + ::NPrivate::TStaticBuf(file.data(), file.length()), + line, + function.data(), + expr.data(), + "%s", + trapType.data()); +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT::NDetail diff --git a/library/cpp/yt/assert/assert.h b/library/cpp/yt/assert/assert.h new file mode 100644 index 0000000000..7a9e761a3a --- /dev/null +++ b/library/cpp/yt/assert/assert.h @@ -0,0 +1,76 @@ +#pragma once + +#include <util/system/compiler.h> +#include <util/system/src_root.h> + +#include <util/generic/strbuf.h> + +namespace NYT { + +//////////////////////////////////////////////////////////////////////////////// + +namespace NDetail { + +[[noreturn]] +void AssertTrapImpl( + TStringBuf trapType, + TStringBuf expr, + TStringBuf file, + int line, + TStringBuf function); + +} // namespace NDetail + +#ifdef __GNUC__ + #define YT_BUILTIN_TRAP() __builtin_trap() +#else + #define YT_BUILTIN_TRAP() std::terminate() +#endif + +#define YT_ASSERT_TRAP(trapType, expr) \ + ::NYT::NDetail::AssertTrapImpl(TStringBuf(trapType), TStringBuf(expr), __SOURCE_FILE_IMPL__.As<TStringBuf>(), __LINE__, TStringBuf(__FUNCTION__)); \ + Y_UNREACHABLE() \ + +#ifdef NDEBUG + #define YT_ASSERT(expr) \ + do { \ + if (false) { \ + (void) (expr); \ + } \ + } while (false) +#else + #define YT_ASSERT(expr) \ + do { \ + if (Y_UNLIKELY(!(expr))) { \ + YT_ASSERT_TRAP("YT_ASSERT", #expr); \ + } \ + } while (false) +#endif + +//! Same as |YT_ASSERT| but evaluates and checks the expression in both release and debug mode. +#define YT_VERIFY(expr) \ + do { \ + if (Y_UNLIKELY(!(expr))) { \ + YT_ASSERT_TRAP("YT_VERIFY", #expr); \ + } \ + } while (false) + +//! Fatal error code marker. Abnormally terminates the current process. +#ifdef YT_COMPILING_UDF + #define YT_ABORT() __YT_BUILTIN_ABORT() +#else + #define YT_ABORT() \ + do { \ + YT_ASSERT_TRAP("YT_ABORT", ""); \ + } while (false) +#endif + +//! Unimplemented code marker. Abnormally terminates the current process. +#define YT_UNIMPLEMENTED() \ + do { \ + YT_ASSERT_TRAP("YT_UNIMPLEMENTED", ""); \ + } while (false) + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT diff --git a/library/cpp/yt/assert/ya.make b/library/cpp/yt/assert/ya.make new file mode 100644 index 0000000000..df74a4f1fa --- /dev/null +++ b/library/cpp/yt/assert/ya.make @@ -0,0 +1,9 @@ +LIBRARY() + +OWNER(g:yt) + +SRCS( + assert.cpp +) + +END() |