Skip to content

Commit

Permalink
src: update UNREACHABLE macro to take a string
Browse files Browse the repository at this point in the history
PR-URL: #26502
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
  • Loading branch information
nitsakh authored and targos committed May 20, 2019
1 parent 206ae31 commit d21e066
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/node_crypto.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3456,7 +3456,7 @@ static ManagedEVPPKey GetPublicOrPrivateKeyFromJs(
is_public = false;
break;
default:
CHECK(!"Invalid key encoding type");
UNREACHABLE("Invalid key encoding type");
}

if (is_public) {
Expand Down
2 changes: 1 addition & 1 deletion src/node_file.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ template <typename NativeT,
constexpr NativeT ToNative(uv_timespec_t ts) {
// This template has exactly two specializations below.
static_assert(std::is_arithmetic<NativeT>::value == false, "Not implemented");
UNREACHABLE();
return NativeT();
}

template <>
Expand Down
20 changes: 13 additions & 7 deletions src/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,16 @@ void DumpBacktrace(FILE* fp);

#define ABORT() node::Abort()

#define ERROR_AND_ABORT(expr) \
do { \
/* Make sure that this struct does not end up in inline code, but */ \
/* rather in a read-only data section when modifying this code. */ \
static const node::AssertionInfo args = { \
__FILE__ ":" STRINGIFY(__LINE__), #expr, PRETTY_FUNCTION_NAME \
}; \
node::Assert(args); \
} while (0)

#ifdef __GNUC__
#define LIKELY(expr) __builtin_expect(!!(expr), 1)
#define UNLIKELY(expr) __builtin_expect(!!(expr), 0)
Expand All @@ -132,12 +142,7 @@ void DumpBacktrace(FILE* fp);
#define CHECK(expr) \
do { \
if (UNLIKELY(!(expr))) { \
/* Make sure that this struct does not end up in inline code, but */ \
/* rather in a read-only data section when modifying this code. */ \
static const node::AssertionInfo args = { \
__FILE__ ":" STRINGIFY(__LINE__), #expr, PRETTY_FUNCTION_NAME \
}; \
node::Assert(args); \
ERROR_AND_ABORT(expr); \
} \
} while (0)

Expand Down Expand Up @@ -176,7 +181,8 @@ void DumpBacktrace(FILE* fp);
#endif


#define UNREACHABLE() ABORT()
#define UNREACHABLE(expr) \
ERROR_AND_ABORT("Unreachable code reached: " expr)

// TAILQ-style intrusive list node.
template <typename T>
Expand Down

0 comments on commit d21e066

Please sign in to comment.