From b0fe4d190d56c97d1f3b0e71a54f91b5744ae82d Mon Sep 17 00:00:00 2001 From: PabloMK7 Date: Sun, 7 Dec 2025 22:27:50 +0100 Subject: [PATCH] core: Temporary workaround for MSVC compiler bug (#1505) --- src/core/hle/service/service.cpp | 2 +- src/core/hle/service/service.h | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index 148d60185..6ead40057 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp @@ -178,7 +178,7 @@ void ServiceFrameworkBase::ReportUnimplementedFunction(u32* cmd_buf, const Funct void ServiceFrameworkBase::HandleSyncRequest(Kernel::HLERequestContext& context) { auto itr = handlers.find(context.CommandHeader().command_id.Value()); const FunctionInfoBase* info = itr == handlers.end() ? nullptr : &itr->second; - if (info == nullptr || info->handler_callback == nullptr) { + if (info == nullptr || !info->implemented) { context.ReportUnimplemented(); return ReportUnimplementedFunction(context.CommandBuffer(), info); } diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index fbe368c2c..3dddf39d4 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h @@ -82,6 +82,7 @@ private: struct FunctionInfoBase { u32 command_id; + bool implemented; HandlerFnP handler_callback; const char* name; }; @@ -96,6 +97,8 @@ private: void RegisterHandlersBase(const FunctionInfoBase* functions, std::size_t n); void ReportUnimplementedFunction(u32* cmd_buf, const FunctionInfoBase* info); + void Empty(Kernel::HLERequestContext& ctx) {} + /// Identifier string used to connect to the service. std::string service_name; /// Maximum number of concurrent sessions that this service can handle. @@ -134,9 +137,11 @@ protected: */ constexpr FunctionInfo(u32 command_id, HandlerFnP handler_callback, const char* name) : FunctionInfoBase{ - command_id, + command_id, handler_callback != nullptr, // Type-erase member function pointer by casting it down to the base class. - static_cast>(handler_callback), name} {} + handler_callback ? static_cast>(handler_callback) + : &ServiceFrameworkBase::Empty, + name} {} }; /**