From e3c4b670a4c365c01dc4a3719c72bde734e0d6b4 Mon Sep 17 00:00:00 2001 From: Refael Ackermann Date: Tue, 18 Dec 2018 09:55:56 -0500 Subject: [PATCH] src: workaround MSVC compiler bug PR-URL: https://github.com/nodejs/node/pull/25596 Fixes: https://github.com/nodejs/node/issues/25593 Refs: https://developercommunity.visualstudio.com/content/problem/432157/dynamic-initializers-out-of-order.html Reviewed-By: Bartosz Sosnowski Reviewed-By: Anna Henningsen --- src/node_options.cc | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/node_options.cc b/src/node_options.cc index 8bd8b827faa109..b7b924501a24ff 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -107,6 +107,20 @@ void EnvironmentOptions::CheckOptions(std::vector* errors) { namespace options_parser { +// Explicitly access the singelton instances in their dependancy order. +// This was moved here to workaround a compiler bug. +// Refs: https://github.com/nodejs/node/issues/25593 + +#if HAVE_INSPECTOR +const DebugOptionsParser DebugOptionsParser::instance; +#endif // HAVE_INSPECTOR + +const EnvironmentOptionsParser EnvironmentOptionsParser::instance; + +const PerIsolateOptionsParser PerIsolateOptionsParser::instance; + +const PerProcessOptionsParser PerProcessOptionsParser::instance; + // XXX: If you add an option here, please also add it to doc/node.1 and // doc/api/cli.md // TODO(addaleax): Make that unnecessary. @@ -143,10 +157,6 @@ DebugOptionsParser::DebugOptionsParser() { AddAlias("--debug-brk=", { "--inspect-port", "--debug-brk" }); } -#if HAVE_INSPECTOR -const DebugOptionsParser DebugOptionsParser::instance; -#endif // HAVE_INSPECTOR - EnvironmentOptionsParser::EnvironmentOptionsParser() { AddOption("--experimental-modules", "experimental ES Module support and caching modules", @@ -282,8 +292,6 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { #endif // HAVE_INSPECTOR } -const EnvironmentOptionsParser EnvironmentOptionsParser::instance; - PerIsolateOptionsParser::PerIsolateOptionsParser() { AddOption("--track-heap-objects", "track heap object allocations for heap snapshots", @@ -341,8 +349,6 @@ PerIsolateOptionsParser::PerIsolateOptionsParser() { &PerIsolateOptions::get_per_env_options); } -const PerIsolateOptionsParser PerIsolateOptionsParser::instance; - PerProcessOptionsParser::PerProcessOptionsParser() { AddOption("--title", "the process title to use on startup", @@ -449,8 +455,6 @@ PerProcessOptionsParser::PerProcessOptionsParser() { &PerProcessOptions::get_per_isolate_options); } -const PerProcessOptionsParser PerProcessOptionsParser::instance; - inline std::string RemoveBrackets(const std::string& host) { if (!host.empty() && host.front() == '[' && host.back() == ']') return host.substr(1, host.size() - 2);