From 379113680c451a8769057ba077939303b78185f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 18 Jun 2019 00:17:43 +0200 Subject: [PATCH 1/3] Fix static analysis warning about access outside array (d[ins] = s[ins * 4] * t[0]) --- Core/MIPS/MIPSIntVFPU.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Core/MIPS/MIPSIntVFPU.cpp b/Core/MIPS/MIPSIntVFPU.cpp index bab74cb85a..0a1e0abc93 100644 --- a/Core/MIPS/MIPSIntVFPU.cpp +++ b/Core/MIPS/MIPSIntVFPU.cpp @@ -363,6 +363,9 @@ namespace MIPSInt case 7: sprefixAdd = VFPU_MAKE_CONSTANTS(VFPUConst::ONE, VFPUConst::ONE, VFPUConst::ONE, VFPUConst::ONE); break; + default: + _dbg_assert_msg_(CPU, 0, "Unknown matrix init op"); + break; } ApplyPrefixST(&prefixed[off * 4], VFPURewritePrefix(VFPU_CTRL_SPREFIX, sprefixRemove, sprefixAdd), V_Quad); WriteMatrix(prefixed, sz, vd); @@ -1562,7 +1565,7 @@ namespace MIPSInt int vd = _VD; int vs = _VS; int vt = _VT; - int ins = (op >> 23) & 7; + int ins = (op >> 23) & 3; VectorSize sz = (VectorSize)(ins + 1); MatrixSize msz = (MatrixSize)(ins + 1); From a0dc85a9d73109886295a3afc249631b32ecff49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 18 Jun 2019 00:18:40 +0200 Subject: [PATCH 2/3] Fix a bunch of inconsequential uninitialized variables --- Core/MIPS/MIPSIntVFPU.cpp | 2 +- GPU/Common/GPUDebugInterface.h | 20 ++++++++++---------- ext/native/thin3d/VulkanQueueRunner.h | 4 ++-- ext/native/thin3d/VulkanRenderManager.h | 6 +++--- ext/native/ui/ui_screen.h | 12 ++++++------ ext/native/ui/view.h | 4 ++-- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Core/MIPS/MIPSIntVFPU.cpp b/Core/MIPS/MIPSIntVFPU.cpp index 0a1e0abc93..3e5144c018 100644 --- a/Core/MIPS/MIPSIntVFPU.cpp +++ b/Core/MIPS/MIPSIntVFPU.cpp @@ -346,7 +346,7 @@ namespace MIPSInt int off = GetMatrixSide(sz) - 1; u32 sprefixRemove = VFPU_ANY_SWIZZLE(); - u32 sprefixAdd; + u32 sprefixAdd = 0; switch ((op >> 16) & 0xF) { case 3: { diff --git a/GPU/Common/GPUDebugInterface.h b/GPU/Common/GPUDebugInterface.h index 66cd8fca35..d02521be54 100644 --- a/GPU/Common/GPUDebugInterface.h +++ b/GPU/Common/GPUDebugInterface.h @@ -79,7 +79,7 @@ inline GPUDebugBufferFormat &operator |=(GPUDebugBufferFormat &lhs, const GPUDeb } struct GPUDebugBuffer { - GPUDebugBuffer() : alloc_(false), data_(NULL) { + GPUDebugBuffer() { } GPUDebugBuffer(void *data, u32 stride, u32 height, GEBufferFormat fmt, bool reversed = false) @@ -100,7 +100,7 @@ struct GPUDebugBuffer { : alloc_(false), data_((u8 *)data), stride_(stride), height_(height), fmt_(fmt), flipped_(false) { } - GPUDebugBuffer(GPUDebugBuffer &&other) { + GPUDebugBuffer(GPUDebugBuffer &&other) noexcept { alloc_ = other.alloc_; data_ = other.data_; height_ = other.height_; @@ -108,14 +108,14 @@ struct GPUDebugBuffer { flipped_ = other.flipped_; fmt_ = other.fmt_; other.alloc_ = false; - other.data_ = NULL; + other.data_ = nullptr; } ~GPUDebugBuffer() { Free(); } - GPUDebugBuffer &operator = (GPUDebugBuffer &&other) { + GPUDebugBuffer &operator = (GPUDebugBuffer &&other) noexcept { if (this != &other) { Free(); alloc_ = other.alloc_; @@ -125,7 +125,7 @@ struct GPUDebugBuffer { flipped_ = other.flipped_; fmt_ = other.fmt_; other.alloc_ = false; - other.data_ = NULL; + other.data_ = nullptr; } return *this; @@ -164,12 +164,12 @@ struct GPUDebugBuffer { private: u32 PixelSize(GPUDebugBufferFormat fmt) const; - bool alloc_; - u8 *data_; - u32 stride_; - u32 height_; + bool alloc_ = false; + u8 *data_ = nullptr; + u32 stride_ = 0; + u32 height_ = 0; GPUDebugBufferFormat fmt_; - bool flipped_; + bool flipped_ = false; }; struct GPUDebugVertex { diff --git a/ext/native/thin3d/VulkanQueueRunner.h b/ext/native/thin3d/VulkanQueueRunner.h index 911ef1ab0b..17f0acb69a 100644 --- a/ext/native/thin3d/VulkanQueueRunner.h +++ b/ext/native/thin3d/VulkanQueueRunner.h @@ -246,8 +246,8 @@ private: VulkanContext *vulkan_; - VkFramebuffer backbuffer_; - VkImage backbufferImage_; + VkFramebuffer backbuffer_ = VK_NULL_HANDLE; + VkImage backbufferImage_ = VK_NULL_HANDLE; VkRenderPass backbufferRenderPass_ = VK_NULL_HANDLE; VkRenderPass framebufferRenderPass_ = VK_NULL_HANDLE; diff --git a/ext/native/thin3d/VulkanRenderManager.h b/ext/native/thin3d/VulkanRenderManager.h index cfac32d75c..84f7cbeed2 100644 --- a/ext/native/thin3d/VulkanRenderManager.h +++ b/ext/native/thin3d/VulkanRenderManager.h @@ -288,8 +288,8 @@ private: FrameData frameData_[VulkanContext::MAX_INFLIGHT_FRAMES]; // Submission time state - int curWidth_; - int curHeight_; + int curWidth_ = -1; + int curHeight_ = -1; bool insideFrame_ = false; VKRStep *curRenderStep_ = nullptr; std::vector steps_; @@ -310,7 +310,7 @@ private: }; std::vector framebuffers_; std::vector swapchainImages_; - uint32_t swapchainImageCount_; + uint32_t swapchainImageCount_ = 0; struct DepthBufferInfo { VkFormat format = VK_FORMAT_UNDEFINED; VkImage image = VK_NULL_HANDLE; diff --git a/ext/native/ui/ui_screen.h b/ext/native/ui/ui_screen.h index 99a6c486eb..c7090e23dd 100644 --- a/ext/native/ui/ui_screen.h +++ b/ext/native/ui/ui_screen.h @@ -109,7 +109,7 @@ private: class ListPopupScreen : public PopupScreen { public: - ListPopupScreen(std::string title) : PopupScreen(title), showButtons_(false) {} + ListPopupScreen(std::string title) : PopupScreen(title) {} ListPopupScreen(std::string title, const std::vector &items, int selected, std::function callback, bool showButtons = false) : PopupScreen(title, "OK", "Cancel"), adaptor_(items, selected), callback_(callback), showButtons_(showButtons) { } @@ -135,13 +135,13 @@ protected: virtual bool ShowButtons() const override { return showButtons_; } virtual void CreatePopupContents(UI::ViewGroup *parent) override; UI::StringVectorListAdaptor adaptor_; - UI::ListView *listView_; + UI::ListView *listView_ = nullptr; private: UI::EventReturn OnListChoice(UI::EventParams &e); std::function callback_; - bool showButtons_; + bool showButtons_ = false; std::set hidden_; }; @@ -169,7 +169,7 @@ namespace UI { class SliderPopupScreen : public PopupScreen { public: SliderPopupScreen(int *value, int minValue, int maxValue, const std::string &title, int step = 1, const std::string &units = "") - : PopupScreen(title, "OK", "Cancel"), units_(units), value_(value), minValue_(minValue), maxValue_(maxValue), step_(step) {} + : PopupScreen(title, "OK", "Cancel"), units_(units), value_(value), minValue_(minValue), maxValue_(maxValue), step_(step) {} virtual void CreatePopupContents(ViewGroup *parent) override; void SetNegativeDisable(const std::string &str) { @@ -185,8 +185,8 @@ private: EventReturn OnTextChange(EventParams ¶ms); EventReturn OnSliderChange(EventParams ¶ms); virtual void OnCompleted(DialogResult result) override; - Slider *slider_; - UI::TextEdit *edit_; + Slider *slider_ = nullptr; + UI::TextEdit *edit_ = nullptr; std::string units_; std::string negativeLabel_; int *value_; diff --git a/ext/native/ui/view.h b/ext/native/ui/view.h index 2ca22d1c38..7486ac4cd6 100644 --- a/ext/native/ui/view.h +++ b/ext/native/ui/view.h @@ -552,8 +552,8 @@ private: float paddingLeft_; float paddingRight_; int step_; - int repeat_; - int repeatCode_; + int repeat_ = 0; + int repeatCode_ = 0; }; class SliderFloat : public Clickable { From eb3faf5370ad514d3c5c2ad12cf2c5efabe36632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 18 Jun 2019 01:08:25 +0200 Subject: [PATCH 3/3] Fix some further static analysis warnings --- Core/Screenshot.cpp | 11 +++++------ GPU/Common/GPUDebugInterface.h | 2 +- ext/native/thin3d/VulkanRenderManager.cpp | 2 +- ext/native/ui/ui_screen.h | 2 +- ext/native/ui/view.h | 2 +- ext/native/util/text/wrap_text.h | 2 +- 6 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Core/Screenshot.cpp b/Core/Screenshot.cpp index 46694c35a1..2a2ddcf27c 100644 --- a/Core/Screenshot.cpp +++ b/Core/Screenshot.cpp @@ -237,26 +237,24 @@ static bool ConvertPixelTo8888RGBA(GPUDebugBufferFormat fmt, u8 &r, u8 &g, u8 &b } const u8 *ConvertBufferToScreenshot(const GPUDebugBuffer &buf, bool alpha, u8 *&temp, u32 &w, u32 &h) { - int pixelSize = alpha ? 4 : 3; + size_t pixelSize = alpha ? 4 : 3; GPUDebugBufferFormat nativeFmt = alpha ? GPU_DBG_FORMAT_8888 : GPU_DBG_FORMAT_888_RGB; w = std::min(w, buf.GetStride()); h = std::min(h, buf.GetHeight()); // The temp buffer will be freed by the caller if set, and can be the return value. - if (buf.GetFlipped() || buf.GetFormat() != nativeFmt) { - temp = new u8[pixelSize * w * h]; - } else { - temp = nullptr; - } + temp = nullptr; const u8 *buffer = buf.GetData(); if (buf.GetFlipped() && buf.GetFormat() == nativeFmt) { + temp = new u8[pixelSize * w * h]; // Silly OpenGL reads upside down, we flip to another buffer for simplicity. for (u32 y = 0; y < h; y++) { memcpy(temp + y * w * pixelSize, buffer + (buf.GetHeight() - y - 1) * buf.GetStride() * pixelSize, w * pixelSize); } } else if (buf.GetFormat() < GPU_DBG_FORMAT_FLOAT && buf.GetFormat() != nativeFmt) { + temp = new u8[pixelSize * w * h]; // Let's boil it down to how we need to interpret the bits. int baseFmt = buf.GetFormat() & ~(GPU_DBG_FORMAT_REVERSE_FLAG | GPU_DBG_FORMAT_BRSWAP_FLAG); bool rev = (buf.GetFormat() & GPU_DBG_FORMAT_REVERSE_FLAG) != 0; @@ -284,6 +282,7 @@ const u8 *ConvertBufferToScreenshot(const GPUDebugBuffer &buf, bool alpha, u8 *& } } } else if (buf.GetFormat() != nativeFmt) { + temp = new u8[pixelSize * w * h]; bool flip = buf.GetFlipped(); // This is pretty inefficient. diff --git a/GPU/Common/GPUDebugInterface.h b/GPU/Common/GPUDebugInterface.h index d02521be54..93c100e4fc 100644 --- a/GPU/Common/GPUDebugInterface.h +++ b/GPU/Common/GPUDebugInterface.h @@ -168,7 +168,7 @@ private: u8 *data_ = nullptr; u32 stride_ = 0; u32 height_ = 0; - GPUDebugBufferFormat fmt_; + GPUDebugBufferFormat fmt_ = GPU_DBG_FORMAT_INVALID; bool flipped_ = false; }; diff --git a/ext/native/thin3d/VulkanRenderManager.cpp b/ext/native/thin3d/VulkanRenderManager.cpp index 5cd79d4dcb..2938590d67 100644 --- a/ext/native/thin3d/VulkanRenderManager.cpp +++ b/ext/native/thin3d/VulkanRenderManager.cpp @@ -156,7 +156,7 @@ void VulkanRenderManager::CreateBackbuffers() { VkCommandBuffer cmdInit = GetInitCmd(); for (uint32_t i = 0; i < swapchainImageCount_; i++) { - SwapchainImageData sc_buffer; + SwapchainImageData sc_buffer{}; sc_buffer.image = swapchainImages[i]; VkImageViewCreateInfo color_image_view = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; diff --git a/ext/native/ui/ui_screen.h b/ext/native/ui/ui_screen.h index c7090e23dd..c044e961a0 100644 --- a/ext/native/ui/ui_screen.h +++ b/ext/native/ui/ui_screen.h @@ -190,7 +190,7 @@ private: std::string units_; std::string negativeLabel_; int *value_; - int sliderValue_; + int sliderValue_ = 0; int minValue_; int maxValue_; int step_; diff --git a/ext/native/ui/view.h b/ext/native/ui/view.h index 7486ac4cd6..45d0538d44 100644 --- a/ext/native/ui/view.h +++ b/ext/native/ui/view.h @@ -580,7 +580,7 @@ private: float paddingLeft_; float paddingRight_; int repeat_; - int repeatCode_; + int repeatCode_ = 0; }; // Basic button that modifies a bitfield based on the pressed status. Supports multitouch. diff --git a/ext/native/util/text/wrap_text.h b/ext/native/util/text/wrap_text.h index 7418a8022e..61049bccef 100644 --- a/ext/native/util/text/wrap_text.h +++ b/ext/native/util/text/wrap_text.h @@ -31,7 +31,7 @@ protected: // Position the current word starts at. float x_ = 0.0f; // Most recent width of word since last index. - float wordWidth_; + float wordWidth_ = 0.0f; // Force the next word to cut partially and wrap. bool forceEarlyWrap_ = false; };