summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-01-14 00:04:22 +0100
committerLéo Lam <leo@leolam.fr>2022-01-14 00:04:22 +0100
commit83c5446d852178794450f7c5833f7a047490ff31 (patch)
treec154122215e7dd3917ff4d57ed4d35eeb1b46ee1 /Source/Core
parent07fd17445c6ca4e89b0cef023ba711bb27c920aa (diff)
Fix static initialisation order fiasco issue for Version variables
Fixes a crash that could occur if the static constructor function for the MainSettings.cpp TU happened to run before the variables in Common/Version.cpp are initialised. (This is known as the static initialisation order fiasco.) By using wrapper functions, those variables are now guaranteed to be constructed on first use.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/LinearDiskCache.h4
-rw-r--r--Source/Core/Common/Version.cpp57
-rw-r--r--Source/Core/Common/Version.h15
-rw-r--r--Source/Core/Core/Config/MainSettings.cpp2
-rw-r--r--Source/Core/Core/Core.cpp2
-rw-r--r--Source/Core/Core/DolphinAnalytics.cpp8
-rw-r--r--Source/Core/Core/IOS/DolphinDevice.cpp4
-rw-r--r--Source/Core/Core/Movie.cpp2
-rw-r--r--Source/Core/Core/NetPlayClient.cpp6
-rw-r--r--Source/Core/Core/NetPlayServer.cpp2
-rw-r--r--Source/Core/Core/State.cpp2
-rw-r--r--Source/Core/DiscIO/VolumeVerifier.cpp2
-rw-r--r--Source/Core/DolphinQt/AboutDialog.cpp6
-rw-r--r--Source/Core/DolphinQt/MainWindow.cpp4
-rw-r--r--Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp4
-rw-r--r--Source/Core/DolphinQt/Updater.cpp2
-rw-r--r--Source/Core/UICommon/AutoUpdate.cpp2
-rw-r--r--Source/Core/UICommon/CommandLineParse.cpp2
-rw-r--r--Source/Core/UICommon/NetPlayIndex.cpp2
-rw-r--r--Source/Core/VideoBackends/D3DCommon/Shader.cpp2
-rw-r--r--Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp4
-rw-r--r--Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp2
22 files changed, 84 insertions, 52 deletions
diff --git a/Source/Core/Common/LinearDiskCache.h b/Source/Core/Common/LinearDiskCache.h
index 5f9f7589d4..78982109b9 100644
--- a/Source/Core/Common/LinearDiskCache.h
+++ b/Source/Core/Common/LinearDiskCache.h
@@ -149,8 +149,8 @@ private:
{
// Null-terminator is intentionally not copied.
std::memcpy(&id, "DCAC", sizeof(u32));
- std::memcpy(ver, Common::scm_rev_git_str.c_str(),
- std::min(Common::scm_rev_git_str.size(), sizeof(ver)));
+ std::memcpy(ver, Common::GetScmRevGitStr().c_str(),
+ std::min(Common::GetScmRevGitStr().size(), sizeof(ver)));
}
u32 id = 0;
diff --git a/Source/Core/Common/Version.cpp b/Source/Core/Common/Version.cpp
index f6479c2158..7801aaae30 100644
--- a/Source/Core/Common/Version.cpp
+++ b/Source/Core/Common/Version.cpp
@@ -17,28 +17,61 @@ namespace Common
#define BUILD_TYPE_STR ""
#endif
-const std::string scm_rev_str = "Dolphin "
+const std::string& GetScmRevStr()
+{
+ static const std::string scm_rev_str = "Dolphin "
#if !SCM_IS_MASTER
- "[" SCM_BRANCH_STR "] "
+ "[" SCM_BRANCH_STR "] "
#endif
#ifdef __INTEL_COMPILER
- BUILD_TYPE_STR SCM_DESC_STR "-ICC";
+ BUILD_TYPE_STR SCM_DESC_STR "-ICC";
#else
- BUILD_TYPE_STR SCM_DESC_STR;
+ BUILD_TYPE_STR SCM_DESC_STR;
#endif
+ return scm_rev_str;
+}
+
+const std::string& GetScmRevGitStr()
+{
+ static const std::string scm_rev_git_str = SCM_REV_STR;
+ return scm_rev_git_str;
+}
+
+const std::string& GetScmDescStr()
+{
+ static const std::string scm_desc_str = SCM_DESC_STR;
+ return scm_desc_str;
+}
+
+const std::string& GetScmBranchStr()
+{
+ static const std::string scm_branch_str = SCM_BRANCH_STR;
+ return scm_branch_str;
+}
+
+const std::string& GetScmDistributorStr()
+{
+ static const std::string scm_distributor_str = SCM_DISTRIBUTOR_STR;
+ return scm_distributor_str;
+}
-const std::string scm_rev_git_str = SCM_REV_STR;
-const std::string scm_desc_str = SCM_DESC_STR;
-const std::string scm_branch_str = SCM_BRANCH_STR;
-const std::string scm_distributor_str = SCM_DISTRIBUTOR_STR;
-const std::string scm_update_track_str = SCM_UPDATE_TRACK_STR;
+const std::string& GetScmUpdateTrackStr()
+{
+ static const std::string scm_update_track_str = SCM_UPDATE_TRACK_STR;
+ return scm_update_track_str;
+}
+const std::string& GetNetplayDolphinVer()
+{
#ifdef _WIN32
-const std::string netplay_dolphin_ver = SCM_DESC_STR " Win";
+ static const std::string netplay_dolphin_ver = SCM_DESC_STR " Win";
#elif __APPLE__
-const std::string netplay_dolphin_ver = SCM_DESC_STR " Mac";
+ static const std::string netplay_dolphin_ver = SCM_DESC_STR " Mac";
#else
-const std::string netplay_dolphin_ver = SCM_DESC_STR " Lin";
+ static const std::string netplay_dolphin_ver = SCM_DESC_STR " Lin";
#endif
+ return netplay_dolphin_ver;
+}
+
} // namespace Common
diff --git a/Source/Core/Common/Version.h b/Source/Core/Common/Version.h
index 7ca97af108..7aee07f84e 100644
--- a/Source/Core/Common/Version.h
+++ b/Source/Core/Common/Version.h
@@ -7,12 +7,11 @@
namespace Common
{
-// Git version number
-extern const std::string scm_desc_str;
-extern const std::string scm_branch_str;
-extern const std::string scm_rev_str;
-extern const std::string scm_rev_git_str;
-extern const std::string scm_distributor_str;
-extern const std::string scm_update_track_str;
-extern const std::string netplay_dolphin_ver;
+const std::string& GetScmDescStr();
+const std::string& GetScmBranchStr();
+const std::string& GetScmRevStr();
+const std::string& GetScmRevGitStr();
+const std::string& GetScmDistributorStr();
+const std::string& GetScmUpdateTrackStr();
+const std::string& GetNetplayDolphinVer();
} // namespace Common
diff --git a/Source/Core/Core/Config/MainSettings.cpp b/Source/Core/Core/Config/MainSettings.cpp
index 5ccd5bdfc7..e2b73ce846 100644
--- a/Source/Core/Core/Config/MainSettings.cpp
+++ b/Source/Core/Core/Config/MainSettings.cpp
@@ -381,7 +381,7 @@ const Info<bool> MAIN_FIFOPLAYER_EARLY_MEMORY_UPDATES{
// Main.AutoUpdate
const Info<std::string> MAIN_AUTOUPDATE_UPDATE_TRACK{{System::Main, "AutoUpdate", "UpdateTrack"},
- Common::scm_update_track_str};
+ Common::GetScmUpdateTrackStr()};
const Info<std::string> MAIN_AUTOUPDATE_HASH_OVERRIDE{{System::Main, "AutoUpdate", "HashOverride"},
""};
diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp
index 1687c9900f..a945d72276 100644
--- a/Source/Core/Core/Core.cpp
+++ b/Source/Core/Core/Core.cpp
@@ -982,7 +982,7 @@ void UpdateTitle(u32 ElapseTime)
}
}
- std::string message = fmt::format("{} | {} | {}", Common::scm_rev_str, SSettings, SFPS);
+ std::string message = fmt::format("{} | {} | {}", Common::GetScmRevStr(), SSettings, SFPS);
if (Config::Get(Config::MAIN_SHOW_ACTIVE_TITLE))
{
const std::string& title = SConfig::GetInstance().GetTitleDescription();
diff --git a/Source/Core/Core/DolphinAnalytics.cpp b/Source/Core/Core/DolphinAnalytics.cpp
index d03ee0f0f3..d55a5fba5e 100644
--- a/Source/Core/Core/DolphinAnalytics.cpp
+++ b/Source/Core/Core/DolphinAnalytics.cpp
@@ -248,10 +248,10 @@ void DolphinAnalytics::MakeBaseBuilder()
Common::AnalyticsReportBuilder builder;
// Version information.
- builder.AddData("version-desc", Common::scm_desc_str);
- builder.AddData("version-hash", Common::scm_rev_git_str);
- builder.AddData("version-branch", Common::scm_branch_str);
- builder.AddData("version-dist", Common::scm_distributor_str);
+ builder.AddData("version-desc", Common::GetScmDescStr());
+ builder.AddData("version-hash", Common::GetScmRevGitStr());
+ builder.AddData("version-branch", Common::GetScmBranchStr());
+ builder.AddData("version-dist", Common::GetScmDistributorStr());
// Auto-Update information.
builder.AddData("update-track", Config::Get(Config::MAIN_AUTOUPDATE_UPDATE_TRACK));
diff --git a/Source/Core/Core/IOS/DolphinDevice.cpp b/Source/Core/Core/IOS/DolphinDevice.cpp
index 3c533f9ab0..db399c97a9 100644
--- a/Source/Core/Core/IOS/DolphinDevice.cpp
+++ b/Source/Core/Core/IOS/DolphinDevice.cpp
@@ -58,10 +58,10 @@ IPCReply GetVersion(const IOCtlVRequest& request)
return IPCReply(IPC_EINVAL);
}
- const auto length = std::min(size_t(request.io_vectors[0].size), Common::scm_desc_str.size());
+ const auto length = std::min(size_t(request.io_vectors[0].size), Common::GetScmDescStr().size());
Memory::Memset(request.io_vectors[0].address, 0, request.io_vectors[0].size);
- Memory::CopyToEmu(request.io_vectors[0].address, Common::scm_desc_str.data(), length);
+ Memory::CopyToEmu(request.io_vectors[0].address, Common::GetScmDescStr().data(), length);
return IPCReply(IPC_SUCCESS);
}
diff --git a/Source/Core/Core/Movie.cpp b/Source/Core/Core/Movie.cpp
index 4f73226e60..78f36941c9 100644
--- a/Source/Core/Core/Movie.cpp
+++ b/Source/Core/Core/Movie.cpp
@@ -1471,7 +1471,7 @@ void GetSettings()
s_memcards |= (slot_a_has_raw_memcard || slot_a_has_gci_folder) << 0;
s_memcards |= (slot_b_has_raw_memcard || slot_b_has_gci_folder) << 1;
- s_revision = ConvertGitRevisionToBytes(Common::scm_rev_git_str);
+ s_revision = ConvertGitRevisionToBytes(Common::GetScmRevGitStr());
if (!Config::Get(Config::MAIN_DSP_HLE))
{
diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp
index 5497db41ac..dc2a56efdc 100644
--- a/Source/Core/Core/NetPlayClient.cpp
+++ b/Source/Core/Core/NetPlayClient.cpp
@@ -229,8 +229,8 @@ bool NetPlayClient::Connect()
{
// send connect message
sf::Packet packet;
- packet << Common::scm_rev_git_str;
- packet << Common::netplay_dolphin_ver;
+ packet << Common::GetScmRevGitStr();
+ packet << Common::GetNetplayDolphinVer();
packet << m_player_name;
Send(packet);
enet_host_flush(m_client);
@@ -283,7 +283,7 @@ bool NetPlayClient::Connect()
Player player;
player.name = m_player_name;
player.pid = m_pid;
- player.revision = Common::netplay_dolphin_ver;
+ player.revision = Common::GetNetplayDolphinVer();
// add self to player list
m_players[m_pid] = player;
diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp
index be79d45739..6b00929373 100644
--- a/Source/Core/Core/NetPlayServer.cpp
+++ b/Source/Core/Core/NetPlayServer.cpp
@@ -393,7 +393,7 @@ ConnectionError NetPlayServer::OnConnect(ENetPeer* socket, sf::Packet& rpac)
std::string npver;
rpac >> npver;
// Dolphin netplay version
- if (npver != Common::scm_rev_git_str)
+ if (npver != Common::GetScmRevGitStr())
return ConnectionError::VersionMismatch;
// game is currently running or game start is pending
diff --git a/Source/Core/Core/State.cpp b/Source/Core/Core/State.cpp
index 86877ecb50..f89c1fc79e 100644
--- a/Source/Core/Core/State.cpp
+++ b/Source/Core/Core/State.cpp
@@ -116,7 +116,7 @@ static bool DoStateVersion(PointerWrap& p, std::string* version_created_by)
version = cookie - COOKIE_BASE;
}
- *version_created_by = Common::scm_rev_str;
+ *version_created_by = Common::GetScmRevStr();
if (version > 42)
p.Do(*version_created_by);
else
diff --git a/Source/Core/DiscIO/VolumeVerifier.cpp b/Source/Core/DiscIO/VolumeVerifier.cpp
index 0a17864290..252cf427b6 100644
--- a/Source/Core/DiscIO/VolumeVerifier.cpp
+++ b/Source/Core/DiscIO/VolumeVerifier.cpp
@@ -125,7 +125,7 @@ RedumpVerifier::DownloadStatus RedumpVerifier::DownloadDatfile(const std::string
const std::optional<std::vector<u8>> result =
request.Get("http://redump.org/datfile/" + system + "/serial,version",
- {{"User-Agent", Common::scm_rev_str}});
+ {{"User-Agent", Common::GetScmRevStr()}});
const std::string output_path = GetPathForSystem(system);
diff --git a/Source/Core/DolphinQt/AboutDialog.cpp b/Source/Core/DolphinQt/AboutDialog.cpp
index b5ee68a07c..e1dce12766 100644
--- a/Source/Core/DolphinQt/AboutDialog.cpp
+++ b/Source/Core/DolphinQt/AboutDialog.cpp
@@ -47,12 +47,12 @@ AboutDialog::AboutDialog(QWidget* parent) : QDialog(parent)
<a href='https://forums.dolphin-emu.org/'>%SUPPORT%</a>
)")
.replace(QStringLiteral("%VERSION_STRING%"),
- QString::fromUtf8(Common::scm_desc_str.c_str()))
+ QString::fromUtf8(Common::GetScmDescStr().c_str()))
.replace(QStringLiteral("%BRANCH%"),
// i18n: "Branch" means the version control term, not a literal tree branch.
- tr("Branch: %1").arg(QString::fromUtf8(Common::scm_branch_str.c_str())))
+ tr("Branch: %1").arg(QString::fromUtf8(Common::GetScmBranchStr().c_str())))
.replace(QStringLiteral("%REVISION%"),
- tr("Revision: %1").arg(QString::fromUtf8(Common::scm_rev_git_str.c_str())))
+ tr("Revision: %1").arg(QString::fromUtf8(Common::GetScmRevGitStr().c_str())))
.replace(QStringLiteral("%QT_VERSION%"),
tr("Using Qt %1").arg(QStringLiteral(QT_VERSION_STR)))
.replace(QStringLiteral("%CHECK_FOR_UPDATES%"), tr("Check for updates"))
diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp
index 4585209ba3..7fc42cc44a 100644
--- a/Source/Core/DolphinQt/MainWindow.cpp
+++ b/Source/Core/DolphinQt/MainWindow.cpp
@@ -206,7 +206,7 @@ MainWindow::MainWindow(std::unique_ptr<BootParameters> boot_parameters,
const std::string& movie_path)
: QMainWindow(nullptr)
{
- setWindowTitle(QString::fromStdString(Common::scm_rev_str));
+ setWindowTitle(QString::fromStdString(Common::GetScmRevStr()));
setWindowIcon(Resources::GetAppIcon());
setUnifiedTitleAndToolBarOnMac(true);
setAcceptDrops(true);
@@ -1145,7 +1145,7 @@ void MainWindow::HideRenderWidget(bool reinit, bool is_exit)
m_rendering_to_main = false;
m_stack->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
disconnect(Host::GetInstance(), &Host::RequestTitle, this, &MainWindow::setWindowTitle);
- setWindowTitle(QString::fromStdString(Common::scm_rev_str));
+ setWindowTitle(QString::fromStdString(Common::GetScmRevStr()));
}
// The following code works around a driver bug that would lead to Dolphin crashing when changing
diff --git a/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp b/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp
index d87f61c67c..348f6de047 100644
--- a/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp
+++ b/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp
@@ -158,7 +158,7 @@ void NetPlayBrowser::Refresh()
std::map<std::string, std::string> filters;
if (m_check_hide_incompatible->isChecked())
- filters["version"] = Common::scm_desc_str;
+ filters["version"] = Common::GetScmDescStr();
if (!m_edit_name->text().isEmpty())
filters["name"] = m_edit_name->text().toStdString();
@@ -246,7 +246,7 @@ void NetPlayBrowser::UpdateList()
auto* player_count = new QTableWidgetItem(QStringLiteral("%1").arg(entry.player_count));
auto* version = new QTableWidgetItem(QString::fromStdString(entry.version));
- const bool enabled = Common::scm_desc_str == entry.version;
+ const bool enabled = Common::GetScmDescStr() == entry.version;
for (const auto& item : {region, name, password, in_game, game_id, player_count, version})
item->setFlags(enabled ? Qt::ItemIsEnabled | Qt::ItemIsSelectable : Qt::NoItemFlags);
diff --git a/Source/Core/DolphinQt/Updater.cpp b/Source/Core/DolphinQt/Updater.cpp
index 9388175a65..256a8f59c1 100644
--- a/Source/Core/DolphinQt/Updater.cpp
+++ b/Source/Core/DolphinQt/Updater.cpp
@@ -55,7 +55,7 @@ void Updater::OnUpdateAvailable(const NewVersionInformation& info)
"download. "
"You are running %2.<br> Would you like to update?<br><h4>Release Notes:</h4>")
.arg(QString::fromStdString(info.new_shortrev))
- .arg(QString::fromStdString(Common::scm_desc_str)));
+ .arg(QString::fromStdString(Common::GetScmDescStr())));
label->setTextFormat(Qt::RichText);
auto* changelog = new QTextBrowser;
diff --git a/Source/Core/UICommon/AutoUpdate.cpp b/Source/Core/UICommon/AutoUpdate.cpp
index ce316758b0..e423b9ec86 100644
--- a/Source/Core/UICommon/AutoUpdate.cpp
+++ b/Source/Core/UICommon/AutoUpdate.cpp
@@ -161,7 +161,7 @@ void AutoUpdateChecker::CheckForUpdate(std::string_view update_track,
CleanupFromPreviousUpdate();
#endif
- std::string_view version_hash = hash_override.empty() ? Common::scm_rev_git_str : hash_override;
+ std::string_view version_hash = hash_override.empty() ? Common::GetScmRevGitStr() : hash_override;
std::string url = fmt::format("https://dolphin-emu.org/update/check/v1/{}/{}/{}", update_track,
version_hash, GetPlatformID());
diff --git a/Source/Core/UICommon/CommandLineParse.cpp b/Source/Core/UICommon/CommandLineParse.cpp
index 7ac1bafe36..54093f219a 100644
--- a/Source/Core/UICommon/CommandLineParse.cpp
+++ b/Source/Core/UICommon/CommandLineParse.cpp
@@ -78,7 +78,7 @@ private:
std::unique_ptr<optparse::OptionParser> CreateParser(ParserOptions options)
{
auto parser = std::make_unique<optparse::OptionParser>();
- parser->usage("usage: %prog [options]... [FILE]...").version(Common::scm_rev_str);
+ parser->usage("usage: %prog [options]... [FILE]...").version(Common::GetScmRevStr());
parser->add_option("-u", "--user").action("store").help("User folder path");
parser->add_option("-m", "--movie").action("store").help("Play a movie file");
diff --git a/Source/Core/UICommon/NetPlayIndex.cpp b/Source/Core/UICommon/NetPlayIndex.cpp
index 925f209052..aaaa4549a8 100644
--- a/Source/Core/UICommon/NetPlayIndex.cpp
+++ b/Source/Core/UICommon/NetPlayIndex.cpp
@@ -170,7 +170,7 @@ bool NetPlayIndex::Add(const NetPlaySession& session)
"&password=" + std::to_string(session.has_password) + "&method=" + session.method +
"&server_id=" + session.server_id + "&in_game=" + std::to_string(session.in_game) +
"&port=" + std::to_string(session.port) + "&player_count=" +
- std::to_string(session.player_count) + "&version=" + Common::scm_desc_str,
+ std::to_string(session.player_count) + "&version=" + Common::GetScmDescStr(),
{{"X-Is-Dolphin", "1"}}, Common::HttpRequest::AllowedReturnCodes::All);
if (!response.has_value())
diff --git a/Source/Core/VideoBackends/D3DCommon/Shader.cpp b/Source/Core/VideoBackends/D3DCommon/Shader.cpp
index c05d3d65bc..0d7c84b8e0 100644
--- a/Source/Core/VideoBackends/D3DCommon/Shader.cpp
+++ b/Source/Core/VideoBackends/D3DCommon/Shader.cpp
@@ -115,7 +115,7 @@ std::optional<Shader::BinaryData> Shader::CompileShader(D3D_FEATURE_LEVEL featur
file << "\n";
file.write(static_cast<const char*>(errors->GetBufferPointer()), errors->GetBufferSize());
file << "\n";
- file << "Dolphin Version: " + Common::scm_rev_str + "\n";
+ file << "Dolphin Version: " + Common::GetScmRevStr() + "\n";
file << "Video Backend: " + g_video_backend->GetDisplayName();
file.close();
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
index 83761271d4..659882d015 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
@@ -363,7 +363,7 @@ bool ProgramShaderCache::CheckShaderCompileResult(GLuint id, GLenum type, std::s
File::OpenFStream(file, filename, std::ios_base::out);
file << s_glsl_header << code << info_log;
file << "\n";
- file << "Dolphin Version: " + Common::scm_rev_str + "\n";
+ file << "Dolphin Version: " + Common::GetScmRevStr() + "\n";
file << "Video Backend: " + g_video_backend->GetDisplayName();
file.close();
@@ -408,7 +408,7 @@ bool ProgramShaderCache::CheckProgramLinkResult(GLuint id, std::string_view vcod
file << info_log;
file << "\n";
- file << "Dolphin Version: " + Common::scm_rev_str + "\n";
+ file << "Dolphin Version: " + Common::GetScmRevStr() + "\n";
file << "Video Backend: " + g_video_backend->GetDisplayName();
file.close();
diff --git a/Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp b/Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp
index ec38d58009..7da5f827d4 100644
--- a/Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp
+++ b/Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp
@@ -169,7 +169,7 @@ static std::optional<SPIRVCodeVector> CompileShaderToSPV(EShLanguage stage,
}
stream << "\n";
- stream << "Dolphin Version: " + Common::scm_rev_str + "\n";
+ stream << "Dolphin Version: " + Common::GetScmRevStr() + "\n";
stream << "Video Backend: " + g_video_backend->GetDisplayName();
PanicAlertFmt("{} (written to {})", msg, filename);