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());