diff --git a/src/api/environment.cc b/src/api/environment.cc index 0347aba35215a3..c3f2fa10a8d89f 100644 --- a/src/api/environment.cc +++ b/src/api/environment.cc @@ -661,8 +661,7 @@ Maybe InitializeContextRuntime(Local context) { } } else if (per_process::cli_options->disable_proto != "") { // Validated in ProcessGlobalArgs - FatalError("InitializeContextRuntime()", - "invalid --disable-proto mode"); + OnFatalError("InitializeContextRuntime()", "invalid --disable-proto mode"); } return Just(true); diff --git a/src/inspector_agent.cc b/src/inspector_agent.cc index 09afb2675582af..b1ba86b7b0b234 100644 --- a/src/inspector_agent.cc +++ b/src/inspector_agent.cc @@ -36,7 +36,7 @@ namespace node { namespace inspector { namespace { -using node::FatalError; +using node::OnFatalError; using v8::Context; using v8::Function; @@ -898,8 +898,8 @@ void Agent::ToggleAsyncHook(Isolate* isolate, Local fn) { USE(fn->Call(context, Undefined(isolate), 0, nullptr)); if (try_catch.HasCaught() && !try_catch.HasTerminated()) { PrintCaughtException(isolate, context, try_catch); - FatalError("\nnode::inspector::Agent::ToggleAsyncHook", - "Cannot toggle Inspector's AsyncHook, please report this."); + OnFatalError("\nnode::inspector::Agent::ToggleAsyncHook", + "Cannot toggle Inspector's AsyncHook, please report this."); } } diff --git a/src/node.h b/src/node.h index 648bbe0404b718..346b33f428508d 100644 --- a/src/node.h +++ b/src/node.h @@ -645,7 +645,8 @@ NODE_EXTERN Environment* GetCurrentEnvironment(v8::Local context); NODE_EXTERN IsolateData* GetEnvironmentIsolateData(Environment* env); NODE_EXTERN ArrayBufferAllocator* GetArrayBufferAllocator(IsolateData* data); -NODE_EXTERN void OnFatalError(const char* location, const char* message); +[[noreturn]] NODE_EXTERN void OnFatalError(const char* location, + const char* message); NODE_EXTERN void PromiseRejectCallback(v8::PromiseRejectMessage message); NODE_EXTERN bool AllowWasmCodeGenerationCallback(v8::Local context, v8::Local); diff --git a/src/node_api.cc b/src/node_api.cc index 38cd08022c2b26..096a6e580fb9e8 100644 --- a/src/node_api.cc +++ b/src/node_api.cc @@ -805,7 +805,7 @@ NAPI_NO_RETURN void NAPI_CDECL napi_fatal_error(const char* location, message_string.assign(const_cast(message), strlen(message)); } - node::FatalError(location_string.c_str(), message_string.c_str()); + node::OnFatalError(location_string.c_str(), message_string.c_str()); } napi_status NAPI_CDECL diff --git a/src/node_errors.cc b/src/node_errors.cc index 2dc9e085269222..e58e45be7bbb64 100644 --- a/src/node_errors.cc +++ b/src/node_errors.cc @@ -499,13 +499,7 @@ static void ReportFatalException(Environment* env, fflush(stderr); } -[[noreturn]] void FatalError(const char* location, const char* message) { - OnFatalError(location, message); - // to suppress compiler warning - ABORT(); -} - -void OnFatalError(const char* location, const char* message) { +[[noreturn]] void OnFatalError(const char* location, const char* message) { if (location) { FPrintF(stderr, "FATAL ERROR: %s %s\n", location, message); } else { @@ -527,7 +521,7 @@ void OnFatalError(const char* location, const char* message) { ABORT(); } -void OOMErrorHandler(const char* location, bool is_heap_oom) { +[[noreturn]] void OOMErrorHandler(const char* location, bool is_heap_oom) { const char* message = is_heap_oom ? "Allocation failed - JavaScript heap out of memory" : "Allocation failed - process out of memory"; diff --git a/src/node_errors.h b/src/node_errors.h index ac2397fe53713f..cc336536af0170 100644 --- a/src/node_errors.h +++ b/src/node_errors.h @@ -20,8 +20,8 @@ void AppendExceptionLine(Environment* env, enum ErrorHandlingMode mode); [[noreturn]] void FatalError(const char* location, const char* message); -void OnFatalError(const char* location, const char* message); -void OOMErrorHandler(const char* location, bool is_heap_oom); +[[noreturn]] void OnFatalError(const char* location, const char* message); +[[noreturn]] void OOMErrorHandler(const char* location, bool is_heap_oom); // Helpers to construct errors similar to the ones provided by // lib/internal/errors.js. diff --git a/src/node_watchdog.cc b/src/node_watchdog.cc index b714355ed8f63d..8f0a3844121e23 100644 --- a/src/node_watchdog.cc +++ b/src/node_watchdog.cc @@ -45,8 +45,7 @@ Watchdog::Watchdog(v8::Isolate* isolate, uint64_t ms, bool* timed_out) int rc; rc = uv_loop_init(&loop_); if (rc != 0) { - FatalError("node::Watchdog::Watchdog()", - "Failed to initialize uv loop."); + OnFatalError("node::Watchdog::Watchdog()", "Failed to initialize uv loop."); } rc = uv_async_init(&loop_, &async_, [](uv_async_t* signal) {