Spaces:
Sleeping
Sleeping
// Copyright (c) ONNX Project Contributors | |
/* | |
* SPDX-License-Identifier: Apache-2.0 | |
*/ | |
// ATTENTION: The code in this file is highly EXPERIMENTAL. | |
// Adventurous users should note that the APIs will probably change. | |
namespace ONNX_NAMESPACE { | |
struct assert_error : public std::runtime_error { | |
public: | |
explicit assert_error(const std::string& msg) : runtime_error(msg) {} | |
}; | |
struct tensor_error : public assert_error { | |
public: | |
explicit tensor_error(const std::string& msg) : assert_error(msg) {} | |
}; | |
std::string barf(const char* fmt, ...); | |
[[noreturn]] void throw_assert_error(std::string&); | |
[[noreturn]] void throw_tensor_error(std::string&); | |
} // namespace ONNX_NAMESPACE | |
if (_ONNX_EXPECT(!(cond), 0)) { \ | |
std::string error_msg = \ | |
::ONNX_NAMESPACE::barf("%s:%u: %s: Assertion `%s` failed.", __FILE__, __LINE__, __func__, | |
throw_assert_error(error_msg); \ | |
} | |
// The following is used to prevent MSVC from passing the whole __VA_ARGS__ list | |
// as the first parameter value to a macro call. | |
// Note: msg must be a string literal | |
if (_ONNX_EXPECT(!(cond), 0)) { \ | |
std::string error_msg = ::ONNX_NAMESPACE::barf( \ | |
"%s:%u: %s: Assertion `%s` failed: " msg, __FILE__, __LINE__, __func__, | |
throw_assert_error(error_msg); \ | |
} | |
// The trailing ' ' argument is a hack to deal with the extra comma when ... is empty. | |
// Another way to solve this is ##__VA_ARGS__ in _ONNX_ASSERTM, but this is a non-portable | |
// extension we shouldn't use. | |
if (_ONNX_EXPECT(!(cond), 0)) { \ | |
std::string error_msg = ::ONNX_NAMESPACE::barf( \ | |
"%s:%u: %s: Assertion `%s` failed: " msg, __FILE__, __LINE__, __func__, | |
throw_tensor_error(error_msg); \ | |
} | |