From cf77bb7cfce08dbbbf8b923da8f3fa76ca372d14 Mon Sep 17 00:00:00 2001 From: Eladash Date: Mon, 25 Jul 2022 23:24:55 +0300 Subject: [PATCH] Savestates/MSVC: Replace bugged std::unique (compiler bug) --- rpcs3/Emu/Memory/vm.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp index 66de860bbf..86ed89c666 100644 --- a/rpcs3/Emu/Memory/vm.cpp +++ b/rpcs3/Emu/Memory/vm.cpp @@ -2008,10 +2008,27 @@ namespace vm if (loc) loc->get_shared_memory(shared); } - shared.erase(std::unique(shared.begin(), shared.end(), [](auto& a, auto& b) { return a.first == b.first; }), shared.end()); - std::map shared_map; +#ifndef _MSC_VER + shared.erase(std::unique(shared.begin(), shared.end(), [](auto& a, auto& b) { return a.first == b.first; }), shared.end()); +#else + // Workaround for bugged std::unique + for (auto it = shared.begin(); it != shared.end();) + { + if (shared_map.count(it->first)) + { + it = shared.erase(it); + continue; + } + + shared_map.emplace(it->first, 0); + it++; + } + + shared_map.clear(); +#endif + for (auto& p : shared) { shared_map.emplace(p.first, &p - shared.data());