From 2306af36000c75682443743b62d9e4803c42e139 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Fri, 5 Oct 2018 16:51:33 +0200 Subject: [PATCH] Handle cases when std::optional does not contain a value --- src/citra_qt/configuration/configure_input.cpp | 2 +- src/core/core.cpp | 1 + src/core/hle/kernel/shared_memory.cpp | 4 +++- src/core/hle/service/apt/applet_manager.h | 1 - src/core/hle/service/apt/apt.cpp | 6 ++++-- src/core/memory.cpp | 4 +++- src/input_common/udp/udp.cpp | 2 +- src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 1 + src/video_core/shader/shader_jit_x64_compiler.cpp | 1 + 9 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/citra_qt/configuration/configure_input.cpp b/src/citra_qt/configuration/configure_input.cpp index 425ea8efb..a0312d827 100644 --- a/src/citra_qt/configuration/configure_input.cpp +++ b/src/citra_qt/configuration/configure_input.cpp @@ -317,7 +317,7 @@ void ConfigureInput::setPollingResult(const Common::ParamPackage& params, bool a poller->Stop(); } - if (!abort) { + if (!abort && input_setter) { (*input_setter)(params); } diff --git a/src/core/core.cpp b/src/core/core.cpp index 91af11905..708e686dd 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -116,6 +116,7 @@ System::ResultStatus System::Load(EmuWindow& emu_window, const std::string& file } } + ASSERT(system_mode.first); ResultStatus init_result{Init(emu_window, *system_mode.first)}; if (init_result != ResultStatus::Success) { LOG_CRITICAL(Core, "Failed to initialize system (Error {})!", diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp index 94816d4ed..f5b9dad2c 100644 --- a/src/core/hle/kernel/shared_memory.cpp +++ b/src/core/hle/kernel/shared_memory.cpp @@ -147,7 +147,9 @@ ResultCode SharedMemory::Map(Process* target_process, VAddr address, MemoryPermi if (base_address == 0 && target_address == 0) { // Calculate the address at which to map the memory block. - target_address = *Memory::PhysicalToVirtualAddress(linear_heap_phys_address); + auto maybe_vaddr = Memory::PhysicalToVirtualAddress(linear_heap_phys_address); + ASSERT(maybe_vaddr); + target_address = *maybe_vaddr; } // Map the memory block into the target process diff --git a/src/core/hle/service/apt/applet_manager.h b/src/core/hle/service/apt/applet_manager.h index d71920d80..340b2653c 100644 --- a/src/core/hle/service/apt/applet_manager.h +++ b/src/core/hle/service/apt/applet_manager.h @@ -142,7 +142,6 @@ public: private: /// Parameter data to be returned in the next call to Glance/ReceiveParameter. - /// TODO(Subv): Use std::optional once we migrate to C++17. std::optional next_parameter; static constexpr std::size_t NumAppletSlot = 4; diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 72202e7ba..3a73b363b 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -205,8 +205,10 @@ void Module::Interface::GetSharedFont(Kernel::HLERequestContext& ctx) { // The shared font has to be relocated to the new address before being passed to the // application. - VAddr target_address = - *Memory::PhysicalToVirtualAddress(apt->shared_font_mem->linear_heap_phys_address); + auto maybe_vaddr = + Memory::PhysicalToVirtualAddress(apt->shared_font_mem->linear_heap_phys_address); + ASSERT(maybe_vaddr); + VAddr target_address = *maybe_vaddr; if (!apt->shared_font_relocated) { BCFNT::RelocateSharedFont(apt->shared_font_mem, target_address); apt->shared_font_relocated = true; diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 560b12a26..52252c932 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -433,7 +433,9 @@ void RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode mode) { VAddr overlap_start = std::max(start, region_start); VAddr overlap_end = std::min(end, region_end); - PAddr physical_start = *TryVirtualToPhysicalAddress(overlap_start); + auto maybe_paddr = TryVirtualToPhysicalAddress(overlap_start); + ASSERT(maybe_paddr); + PAddr physical_start = *maybe_paddr; u32 overlap_size = overlap_end - overlap_start; auto* rasterizer = VideoCore::g_renderer->Rasterizer(); diff --git a/src/input_common/udp/udp.cpp b/src/input_common/udp/udp.cpp index 53404114f..d94278def 100644 --- a/src/input_common/udp/udp.cpp +++ b/src/input_common/udp/udp.cpp @@ -42,7 +42,7 @@ public: std::unique_ptr Create(const Common::ParamPackage& params) override { { std::lock_guard guard(status->update_mutex); - status->touch_calibration.reset(); + status->touch_calibration.emplace(); // These default values work well for DS4 but probably not other touch inputs status->touch_calibration->min_x = params.Get("min_x", 100); status->touch_calibration->min_y = params.Get("min_y", 50); diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index e0389d5b0..e943236de 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -948,6 +948,7 @@ Surface FindMatch(const SurfaceCache& surface_cache, const SurfaceParams& params return std::make_pair(surface->CanSubRect(params), surface->GetInterval()); }); IsMatch_Helper(std::integral_constant{}, [&] { + ASSERT(validate_interval); auto copy_interval = params.FromInterval(*validate_interval).GetCopyableInterval(surface); bool matched = boost::icl::length(copy_interval & *validate_interval) != 0 && diff --git a/src/video_core/shader/shader_jit_x64_compiler.cpp b/src/video_core/shader/shader_jit_x64_compiler.cpp index a78bd28a5..42af3ee28 100644 --- a/src/video_core/shader/shader_jit_x64_compiler.cpp +++ b/src/video_core/shader/shader_jit_x64_compiler.cpp @@ -600,6 +600,7 @@ void JitShader::Compile_BREAKC(Instruction instr) { Compile_Assert(looping, "BREAKC must be inside a LOOP"); if (looping) { Compile_EvaluateCondition(instr); + ASSERT(loop_break_label); jnz(*loop_break_label); } }