/Users/brunogarcia/projects/bitcoin-core-dev/src/util/check.cpp
Line | Count | Source |
1 | | // Copyright (c) 2022-present The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
4 | | |
5 | | #include <util/check.h> |
6 | | |
7 | | #include <bitcoin-build-config.h> // IWYU pragma: keep |
8 | | |
9 | | #include <clientversion.h> |
10 | | #include <tinyformat.h> |
11 | | |
12 | | #include <cstdio> |
13 | | #include <cstdlib> |
14 | | #include <source_location> |
15 | | #include <string> |
16 | | #include <string_view> |
17 | | |
18 | | std::string StrFormatInternalBug(std::string_view msg, const std::source_location& loc) |
19 | 0 | { |
20 | 0 | return strprintf("Internal bug detected: %s\n%s:%d (%s)\n"Line | Count | Source | 1172 | 0 | #define strprintf tfm::format |
|
21 | 0 | "%s %s\n" |
22 | 0 | "Please report this issue here: %s\n", |
23 | 0 | msg, loc.file_name(), loc.line(), loc.function_name(), |
24 | 0 | CLIENT_NAME, FormatFullVersion(), CLIENT_BUGREPORT); Line | Count | Source | 98 | 0 | #define CLIENT_NAME "Bitcoin Core" |
| CLIENT_NAME, FormatFullVersion(), CLIENT_BUGREPORT); Line | Count | Source | 95 | 0 | #define CLIENT_BUGREPORT "https://github.com/bitcoin/bitcoin/issues" |
|
25 | 0 | } |
26 | | |
27 | | NonFatalCheckError::NonFatalCheckError(std::string_view msg, const std::source_location& loc) |
28 | 0 | : std::runtime_error{StrFormatInternalBug(msg, loc)} |
29 | 0 | { |
30 | 0 | } |
31 | | |
32 | | bool g_detail_test_only_CheckFailuresAreExceptionsNotAborts{false}; |
33 | | |
34 | | void assertion_fail(const std::source_location& loc, std::string_view assertion) |
35 | 0 | { |
36 | 0 | if (g_detail_test_only_CheckFailuresAreExceptionsNotAborts) { |
37 | 0 | throw NonFatalCheckError{assertion, loc}; |
38 | 0 | } |
39 | 0 | auto str = strprintf("%s:%s %s: Assertion `%s' failed.\n", loc.file_name(), loc.line(), loc.function_name(), assertion);Line | Count | Source | 1172 | 0 | #define strprintf tfm::format |
|
40 | | fwrite(str.data(), 1, str.size(), stderr); |
41 | 0 | std::abort(); |
42 | 0 | } |
43 | | |
44 | | std::atomic<bool> g_enable_dynamic_fuzz_determinism{false}; |