Ensure struct data members are given an initial value

While I don't suspect there are any uninitialize variable bugs
present, it's still good to err on the side of safety and provide
an initial value nonetheless.
This commit is contained in:
Chris Thrasher 2024-04-11 12:40:15 -06:00
parent 95a23c2d05
commit d6e1961112
17 changed files with 86 additions and 77 deletions

View File

@ -37,8 +37,8 @@ const unsigned int blockCount = 32;
struct WorkItem
{
sf::Vertex* targetBuffer;
unsigned int index;
sf::Vertex* targetBuffer{};
unsigned int index{};
};
std::deque<WorkItem> workQueue;
@ -50,8 +50,8 @@ std::recursive_mutex workQueueMutex;
struct Setting
{
const char* name;
float* value;
const char* name{};
float* value{};
};
// Terrain noise parameters

View File

@ -74,5 +74,5 @@ private:
bool m_isLoaded{};
// NOLINTNEXTLINE(readability-identifier-naming)
static const sf::Font* s_font;
static inline const sf::Font* s_font{};
};

View File

@ -21,8 +21,6 @@ std::random_device rd;
std::mt19937 rng(rd());
} // namespace
const sf::Font* Effect::s_font = nullptr;
////////////////////////////////////////////////////////////
// "Pixelate" fragment shader
////////////////////////////////////////////////////////////

View File

@ -55,8 +55,8 @@ public:
////////////////////////////////////////////////////////////
struct Chunk
{
const std::int16_t* samples; //!< Pointer to the audio samples
std::size_t sampleCount; //!< Number of samples pointed by Samples
const std::int16_t* samples{}; //!< Pointer to the audio samples
std::size_t sampleCount{}; //!< Number of samples pointed by Samples
};
////////////////////////////////////////////////////////////

View File

@ -547,18 +547,18 @@ private:
////////////////////////////////////////////////////////////
struct StatesCache
{
bool enable; //!< Is the cache enabled?
bool glStatesSet{}; //!< Are our internal GL states set yet?
bool viewChanged; //!< Has the current view changed since last draw?
bool scissorEnabled; //!< Is scissor testing enabled?
bool stencilEnabled; //!< Is stencil testing enabled?
BlendMode lastBlendMode; //!< Cached blending mode
StencilMode lastStencilMode; //!< Cached stencil
std::uint64_t lastTextureId; //!< Cached texture
CoordinateType lastCoordinateType; //!< Texture coordinate type
bool texCoordsArrayEnabled; //!< Is GL_TEXTURE_COORD_ARRAY client state enabled?
bool useVertexCache; //!< Did we previously use the vertex cache?
std::array<Vertex, 4> vertexCache; //!< Pre-transformed vertices cache
bool enable{}; //!< Is the cache enabled?
bool glStatesSet{}; //!< Are our internal GL states set yet?
bool viewChanged{}; //!< Has the current view changed since last draw?
bool scissorEnabled{}; //!< Is scissor testing enabled?
bool stencilEnabled{}; //!< Is stencil testing enabled?
BlendMode lastBlendMode; //!< Cached blending mode
StencilMode lastStencilMode; //!< Cached stencil
std::uint64_t lastTextureId{}; //!< Cached texture
CoordinateType lastCoordinateType{}; //!< Texture coordinate type
bool texCoordsArrayEnabled{}; //!< Is GL_TEXTURE_COORD_ARRAY client state enabled?
bool useVertexCache{}; //!< Did we previously use the vertex cache?
std::array<Vertex, 4> vertexCache{}; //!< Pre-transformed vertices cache
};
////////////////////////////////////////////////////////////

View File

@ -96,7 +96,7 @@ struct SFML_GRAPHICS_API StencilValue
template <typename T>
StencilValue(T) = delete;
unsigned int value = 0u; //!< The stored stencil value
unsigned int value{}; //!< The stored stencil value
};
////////////////////////////////////////////////////////////

View File

@ -497,8 +497,8 @@ private:
/// \code
/// struct MyStruct
/// {
/// float number;
/// std::int8_t integer;
/// float number{};
/// std::int8_t integer{};
/// std::string str;
/// };
///

View File

@ -45,10 +45,10 @@ namespace sf
////////////////////////////////////////////////////////////
struct SocketSelector::SocketSelectorImpl
{
fd_set allSockets; //!< Set containing all the sockets handles
fd_set socketsReady; //!< Set containing handles of the sockets that are ready
int maxSocket; //!< Maximum socket handle
int socketCount; //!< Number of socket handles
fd_set allSockets{}; //!< Set containing all the sockets handles
fd_set socketsReady{}; //!< Set containing handles of the sockets that are ready
int maxSocket{}; //!< Maximum socket handle
int socketCount{}; //!< Number of socket handles
};

View File

@ -53,14 +53,14 @@ namespace
{
struct DrmFb
{
gbm_bo* bo;
std::uint32_t fbId;
gbm_bo* bo{};
std::uint32_t fbId{};
};
bool initialized = false;
sf::priv::Drm drmNode;
drmEventContext drmEventCtx;
pollfd pollFD;
drmEventContext drmEventCtx{};
pollfd pollFD{};
gbm_device* gbmDevice = nullptr;
int contextCount = 0;
EGLDisplay display = EGL_NO_DISPLAY;

View File

@ -43,16 +43,16 @@ namespace sf::priv
{
struct Drm
{
int fileDescriptor;
int fileDescriptor{};
drmModeModeInfoPtr mode;
std::uint32_t crtcId;
std::uint32_t connectorId;
drmModeModeInfoPtr mode{};
std::uint32_t crtcId{};
std::uint32_t connectorId{};
drmModeCrtcPtr originalCrtc;
drmModeCrtcPtr originalCrtc{};
drmModeConnectorPtr savedConnector;
drmModeEncoderPtr savedEncoder;
drmModeConnectorPtr savedConnector{};
drmModeEncoderPtr savedEncoder{};
};
class WindowImplDRM;

View File

@ -425,7 +425,7 @@ struct GlContext::Impl
// Structure to track which unshared object belongs to which context
struct UnsharedGlObject
{
std::uint64_t contextId;
std::uint64_t contextId{};
std::shared_ptr<void> object;
};

View File

@ -564,17 +564,12 @@ m_cursorGrabbed(m_fullscreen)
struct WMHints
{
unsigned long flags;
unsigned long functions;
unsigned long decorations;
long inputMode;
unsigned long state;
};
auto hints = WMHints();
hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
hints.decorations = 0;
hints.functions = 0;
unsigned long flags{MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS};
unsigned long functions{};
unsigned long decorations{};
long inputMode{};
unsigned long state{};
} hints;
if (style & Style::Titlebar)
{

View File

@ -79,9 +79,9 @@ IDirectInput8W* directInput = nullptr;
struct JoystickRecord
{
GUID guid;
unsigned int index;
bool plugged;
GUID guid{};
unsigned int index{};
bool plugged{};
};
using JoystickList = std::vector<JoystickRecord>;
@ -89,8 +89,8 @@ JoystickList joystickList;
struct JoystickBlacklistEntry
{
unsigned int vendorId;
unsigned int productId;
unsigned int vendorId{};
unsigned int productId{};
};
using JoystickBlacklist = std::vector<JoystickBlacklistEntry>;

View File

@ -286,12 +286,12 @@ int WglContext::selectBestPixelFormat(HDC deviceContext, unsigned int bitsPerPix
// we can cache the result of the lookup instead of having to perform it multiple times for the same inputs
struct PixelFormatCacheEntry
{
unsigned int bitsPerPixel;
unsigned int depthBits;
unsigned int stencilBits;
unsigned int antialiasingLevel;
bool pbuffer;
int bestFormat;
unsigned int bitsPerPixel{};
unsigned int depthBits{};
unsigned int stencilBits{};
unsigned int antialiasingLevel{};
bool pbuffer{};
int bestFormat{};
};
static std::mutex cacheMutex;

View File

@ -96,9 +96,10 @@ namespace sf::priv
////////////////////////////////////////////////////////////
struct WindowImpl::JoystickStatesImpl
{
JoystickState states[Joystick::Count]; //!< Previous state of the joysticks
JoystickState states[Joystick::Count]{}; //!< Previous state of the joysticks
};
////////////////////////////////////////////////////////////
std::unique_ptr<WindowImpl> WindowImpl::create(
VideoMode mode,

View File

@ -54,15 +54,15 @@
/// Modifiers states
struct ModifiersState
{
BOOL rightShiftWasDown;
BOOL leftShiftWasDown;
BOOL rightCommandWasDown;
BOOL leftCommandWasDown;
BOOL rightAlternateWasDown;
BOOL leftAlternateWasDown;
BOOL leftControlWasDown;
BOOL rightControlWasDown;
BOOL capsLockWasOn;
BOOL rightShiftWasDown{};
BOOL leftShiftWasDown{};
BOOL rightCommandWasDown{};
BOOL leftCommandWasDown{};
BOOL rightAlternateWasDown{};
BOOL leftAlternateWasDown{};
BOOL leftControlWasDown{};
BOOL rightControlWasDown{};
BOOL capsLockWasOn{};
};

View File

@ -1,9 +1,24 @@
#include <SFML/Audio/SoundStream.hpp>
#include <catch2/catch_test_macros.hpp>
#include <type_traits>
static_assert(!std::is_constructible_v<sf::SoundStream>);
static_assert(!std::is_copy_constructible_v<sf::SoundStream>);
static_assert(!std::is_copy_assignable_v<sf::SoundStream>);
static_assert(!std::is_nothrow_move_constructible_v<sf::SoundStream>);
static_assert(!std::is_nothrow_move_assignable_v<sf::SoundStream>);
TEST_CASE("[Audio] sf::SoundStream")
{
SECTION("Type traits")
{
STATIC_CHECK(!std::is_constructible_v<sf::SoundStream>);
STATIC_CHECK(!std::is_copy_constructible_v<sf::SoundStream>);
STATIC_CHECK(!std::is_copy_assignable_v<sf::SoundStream>);
STATIC_CHECK(!std::is_nothrow_move_constructible_v<sf::SoundStream>);
STATIC_CHECK(!std::is_nothrow_move_assignable_v<sf::SoundStream>);
}
SECTION("Chunk")
{
const sf::SoundStream::Chunk chunk;
CHECK(chunk.samples == nullptr);
CHECK(chunk.sampleCount == 0);
}
}