Bitcoin Core  27.99.0
P2P Digital Currency
Classes | Macros | Functions
check.h File Reference
#include <attributes.h>
#include <cassert>
#include <stdexcept>
#include <string>
#include <string_view>
#include <utility>
Include dependency graph for check.h:

Go to the source code of this file.

Classes

class  NonFatalCheckError
 

Macros

#define STR_INTERNAL_BUG(msg)   StrFormatInternalBug((msg), __FILE__, __LINE__, __func__)
 
#define CHECK_NONFATAL(condition)    inline_check_non_fatal(condition, __FILE__, __LINE__, __func__, #condition)
 Identity function. More...
 
#define Assert(val)   inline_assertion_check<true>(val, __FILE__, __LINE__, __func__, #val)
 Identity function. More...
 
#define Assume(val)   inline_assertion_check<false>(val, __FILE__, __LINE__, __func__, #val)
 Assume is the identity function. More...
 
#define NONFATAL_UNREACHABLE()
 NONFATAL_UNREACHABLE() is a macro that is used to mark unreachable code. More...
 

Functions

std::string StrFormatInternalBug (std::string_view msg, std::string_view file, int line, std::string_view func)
 
template<typename T >
T && inline_check_non_fatal (LIFETIMEBOUND T &&val, const char *file, int line, const char *func, const char *assertion)
 Helper for CHECK_NONFATAL() More...
 
void assertion_fail (std::string_view file, int line, std::string_view func, std::string_view assertion)
 Helper for Assert() More...
 
template<bool IS_ASSERT, typename T >
T && inline_assertion_check (LIFETIMEBOUND T &&val, [[maybe_unused]] const char *file, [[maybe_unused]] int line, [[maybe_unused]] const char *func, [[maybe_unused]] const char *assertion)
 Helper for Assert()/Assume() More...
 

Macro Definition Documentation

◆ Assert

#define Assert (   val)    inline_assertion_check<true>(val, __FILE__, __LINE__, __func__, #val)

Identity function.

Abort if the value compares equal to zero

Definition at line 77 of file check.h.

◆ Assume

#define Assume (   val)    inline_assertion_check<false>(val, __FILE__, __LINE__, __func__, #val)

Assume is the identity function.

  • Should be used to run non-fatal checks. In debug builds it behaves like Assert()/assert() to notify developers and testers about non-fatal errors. In production it doesn't warn or log anything.
  • For fatal errors, use Assert().
  • For non-fatal errors in interactive sessions (e.g. RPC or command line interfaces), CHECK_NONFATAL() might be more appropriate.

Definition at line 89 of file check.h.

◆ CHECK_NONFATAL

#define CHECK_NONFATAL (   condition)     inline_check_non_fatal(condition, __FILE__, __LINE__, __func__, #condition)

Identity function.

Throw a NonFatalCheckError when the condition evaluates to false

This should only be used

  • where the condition is assumed to be true, not for error handling or validating user input
  • where a failure to fulfill the condition is recoverable and does not abort the program

For example in RPC code, where it is undesirable to crash the whole program, this can be generally used to replace asserts or recoverable logic errors. A NonFatalCheckError in RPC code is caught and passed as a string to the RPC caller, which can then report the issue to the developers.

Definition at line 73 of file check.h.

◆ NONFATAL_UNREACHABLE

#define NONFATAL_UNREACHABLE ( )
Value:
"Unreachable code reached (non-fatal)", __FILE__, __LINE__, __func__)

NONFATAL_UNREACHABLE() is a macro that is used to mark unreachable code.

It throws a NonFatalCheckError.

Definition at line 94 of file check.h.

◆ STR_INTERNAL_BUG

#define STR_INTERNAL_BUG (   msg)    StrFormatInternalBug((msg), __FILE__, __LINE__, __func__)

Definition at line 60 of file check.h.

Function Documentation

◆ assertion_fail()

void assertion_fail ( std::string_view  file,
int  line,
std::string_view  func,
std::string_view  assertion 
)

Helper for Assert()

Definition at line 32 of file check.cpp.

Here is the caller graph for this function:

◆ inline_assertion_check()

template<bool IS_ASSERT, typename T >
T&& inline_assertion_check ( LIFETIMEBOUND T &&  val,
[[maybe_unused] ] const char *  file,
[[maybe_unused] ] int  line,
[[maybe_unused] ] const char *  func,
[[maybe_unused] ] const char *  assertion 
)

Helper for Assert()/Assume()

Definition at line 43 of file check.h.

Here is the call graph for this function:

◆ inline_check_non_fatal()

template<typename T >
T&& inline_check_non_fatal ( LIFETIMEBOUND T &&  val,
const char *  file,
int  line,
const char *  func,
const char *  assertion 
)

Helper for CHECK_NONFATAL()

Definition at line 26 of file check.h.

◆ StrFormatInternalBug()

std::string StrFormatInternalBug ( std::string_view  msg,
std::string_view  file,
int  line,
std::string_view  func 
)

Definition at line 19 of file check.cpp.

Here is the call graph for this function: