diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 8130df3fe..bc23530f3 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -3,6 +3,8 @@ # Suppress warnings from external libraries if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") add_compile_options(/W0) +else() + add_compile_options(-Wno-error) endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) @@ -112,6 +114,8 @@ add_library(nihstro-headers INTERFACE) target_include_directories(nihstro-headers INTERFACE ./nihstro/include) if (MSVC) target_compile_options(nihstro-headers INTERFACE /W0) +else() + target_compile_options(nihstro-headers INTERFACE -Wno-error) endif() # Open Source Archives @@ -195,6 +199,11 @@ if (ENABLE_WEB_SERVICE) add_library(cpp-jwt INTERFACE) target_include_directories(cpp-jwt INTERFACE ./cpp-jwt/include) target_compile_definitions(cpp-jwt INTERFACE CPP_JWT_USE_VENDORED_NLOHMANN_JSON) + if (MSVC) + target_compile_options(cpp-jwt INTERFACE /W0) + else() + target_compile_options(cpp-jwt INTERFACE -Wno-error) + endif() endif() # lodepng diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f05f35ff0..8676db5fd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -102,6 +102,10 @@ else() -Wno-attributes ) + if (CITRA_WARNINGS_AS_ERRORS) + add_compile_options(-Werror) + endif() + if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) add_compile_options("-stdlib=libc++") endif() diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 91728029a..e9ea0cb37 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -56,35 +56,6 @@ std::condition_variable running_cv; } // Anonymous namespace -static bool DisplayAlertMessage(const char* caption, const char* text, bool yes_no) { - JNIEnv* env = IDCache::GetEnvForThread(); - - // Execute the Java method. - jboolean result = env->CallStaticBooleanMethod( - IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertMsg(), ToJString(env, caption), - ToJString(env, text), yes_no ? JNI_TRUE : JNI_FALSE); - - return result != JNI_FALSE; -} - -static std::string DisplayAlertPrompt(const char* caption, const char* text, int buttonConfig) { - JNIEnv* env = IDCache::GetEnvForThread(); - - jstring value = reinterpret_cast(env->CallStaticObjectMethod( - IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertPrompt(), ToJString(env, caption), - ToJString(env, text), buttonConfig)); - - return GetJString(env, value); -} - -static int AlertPromptButton() { - JNIEnv* env = IDCache::GetEnvForThread(); - - // Execute the Java method. - return static_cast(env->CallStaticIntMethod(IDCache::GetNativeLibraryClass(), - IDCache::GetAlertPromptButton())); -} - static jobject ToJavaCoreError(Core::System::ResultStatus result) { static const std::map CoreErrorNameMap{ {Core::System::ResultStatus::ErrorSystemFiles, "ErrorSystemFiles"}, diff --git a/src/common/dynamic_library/ffmpeg.cpp b/src/common/dynamic_library/ffmpeg.cpp index 0a1f0a280..1da17faf4 100644 --- a/src/common/dynamic_library/ffmpeg.cpp +++ b/src/common/dynamic_library/ffmpeg.cpp @@ -31,7 +31,7 @@ av_hwframe_ctx_init_func av_hwframe_ctx_init; av_hwframe_get_buffer_func av_hwframe_get_buffer; av_hwframe_transfer_data_func av_hwframe_transfer_data; av_int_list_length_for_size_func av_int_list_length_for_size; -#if LIBAVCODEC_VERSION_MAJOR >= 59 +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100 av_opt_child_class_iterate_func av_opt_child_class_iterate; #else av_opt_child_class_next_func av_opt_child_class_next; @@ -166,7 +166,7 @@ static bool LoadAVUtil() { LOAD_SYMBOL(avutil, av_hwframe_get_buffer); LOAD_SYMBOL(avutil, av_hwframe_transfer_data); LOAD_SYMBOL(avutil, av_int_list_length_for_size); -#if LIBAVCODEC_VERSION_MAJOR >= 59 +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100 LOAD_SYMBOL(avutil, av_opt_child_class_iterate); #else LOAD_SYMBOL(avutil, av_opt_child_class_next); diff --git a/src/common/dynamic_library/ffmpeg.h b/src/common/dynamic_library/ffmpeg.h index 023847179..67eac1787 100644 --- a/src/common/dynamic_library/ffmpeg.h +++ b/src/common/dynamic_library/ffmpeg.h @@ -47,7 +47,7 @@ typedef int (*av_hwframe_ctx_init_func)(AVBufferRef*); typedef int (*av_hwframe_get_buffer_func)(AVBufferRef*, AVFrame*, int); typedef int (*av_hwframe_transfer_data_func)(AVFrame*, const AVFrame*, int); typedef unsigned (*av_int_list_length_for_size_func)(unsigned, const void*, uint64_t); -#if LIBAVCODEC_VERSION_MAJOR >= 59 +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100 typedef const AVClass* (*av_opt_child_class_iterate_func)(const AVClass*, void**); #else typedef const AVClass* (*av_opt_child_class_next_func)(const AVClass*, const AVClass*); @@ -85,7 +85,7 @@ extern av_hwframe_ctx_init_func av_hwframe_ctx_init; extern av_hwframe_get_buffer_func av_hwframe_get_buffer; extern av_hwframe_transfer_data_func av_hwframe_transfer_data; extern av_int_list_length_for_size_func av_int_list_length_for_size; -#if LIBAVCODEC_VERSION_MAJOR >= 59 +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100 extern av_opt_child_class_iterate_func av_opt_child_class_iterate; #else extern av_opt_child_class_next_func av_opt_child_class_next; diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp index af88a5e7b..3a68e7349 100644 --- a/src/common/file_util.cpp +++ b/src/common/file_util.cpp @@ -102,12 +102,11 @@ static void StripTailDirSlashes(std::string& fname) { } bool Exists(const std::string& filename) { - struct stat file_info; - std::string copy(filename); StripTailDirSlashes(copy); #ifdef _WIN32 + struct stat file_info; // Windows needs a slash to identify a driver root if (copy.size() != 0 && copy.back() == ':') copy += DIR_SEP_CHR; @@ -116,6 +115,7 @@ bool Exists(const std::string& filename) { #elif ANDROID int result = AndroidStorage::FileExists(filename) ? 0 : -1; #else + struct stat file_info; int result = stat(copy.c_str(), &file_info); #endif @@ -699,7 +699,7 @@ static const std::string& GetHomeDirectory() { * @return The directory path * @sa http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html */ -static const std::string GetUserDirectory(const std::string& envvar) { +[[maybe_unused]] static const std::string GetUserDirectory(const std::string& envvar) { const char* directory = getenv(envvar.c_str()); std::string user_dir; diff --git a/src/common/misc.cpp b/src/common/misc.cpp index 59258749b..1a95e29be 100644 --- a/src/common/misc.cpp +++ b/src/common/misc.cpp @@ -16,19 +16,33 @@ // Call directly after the command or use the error num. // This function might change the error code. std::string GetLastErrorMsg() { - constexpr std::size_t buff_size = 255; - char err_str[buff_size]; - std::size_t msg_len; - #ifdef _WIN32 - msg_len = - FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr); + LPSTR err_str; + + DWORD res = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_IGNORE_INSERTS, + nullptr, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + reinterpret_cast(&err_str), 1, nullptr); + if (!res) { + return "(FormatMessageA failed to format error)"; + } + std::string ret(err_str); + LocalFree(err_str); + return ret; +#else + char err_str[255]; +#if (defined(__GLIBC__) || __ANDROID_API__ >= 23) && \ + (_GNU_SOURCE || (_POSIX_C_SOURCE < 200112L && _XOPEN_SOURCE < 600)) + // Thread safe (GNU-specific) + const char* str = strerror_r(errno, err_str, sizeof(err_str)); + return std::string(str); #else // Thread safe (XSI-compliant) - strerror_r(errno, err_str, buff_size); - msg_len = strnlen(err_str, buff_size); -#endif - - return std::string(err_str, msg_len); + int second_err = strerror_r(errno, err_str, sizeof(err_str)); + if (second_err != 0) { + return "(strerror_r failed to format error)"; + } + return std::string(err_str); +#endif // GLIBC etc. +#endif // _WIN32 } diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp index 0b5e19858..1637c01f1 100644 --- a/src/common/string_util.cpp +++ b/src/common/string_util.cpp @@ -170,7 +170,7 @@ static std::wstring CPToUTF16(u32 code_page, const std::string& input) { MultiByteToWideChar(code_page, 0, input.data(), static_cast(input.size()), nullptr, 0); if (size == 0) { - return L""; + return {}; } std::wstring output(size, L'\0'); diff --git a/src/core/arm/skyeye_common/armstate.cpp b/src/core/arm/skyeye_common/armstate.cpp index 078b4db24..4971d8c2e 100644 --- a/src/core/arm/skyeye_common/armstate.cpp +++ b/src/core/arm/skyeye_common/armstate.cpp @@ -110,7 +110,7 @@ void ARMul_State::Reset() { Reg[13] = 0x10000000; Reg[15] = 0; - Cpsr = static_cast(INTBITS) | SVC32MODE; + Cpsr = static_cast(INTBITS) | static_cast(SVC32MODE); Mode = SVC32MODE; Bank = SVCBANK; diff --git a/src/core/cheats/cheats.cpp b/src/core/cheats/cheats.cpp index 14fd02775..26a77edee 100644 --- a/src/core/cheats/cheats.cpp +++ b/src/core/cheats/cheats.cpp @@ -52,7 +52,7 @@ void CheatEngine::AddCheat(const std::shared_ptr& cheat) { void CheatEngine::RemoveCheat(std::size_t index) { std::unique_lock lock(cheats_list_mutex); - if (index < 0 || index >= static_cast(cheats_list.size())) { + if (index < 0 || index >= cheats_list.size()) { LOG_ERROR(Core_Cheats, "Invalid index {}", index); return; } @@ -61,7 +61,7 @@ void CheatEngine::RemoveCheat(std::size_t index) { void CheatEngine::UpdateCheat(std::size_t index, const std::shared_ptr& new_cheat) { std::unique_lock lock(cheats_list_mutex); - if (index < 0 || index >= static_cast(cheats_list.size())) { + if (index < 0 || index >= cheats_list.size()) { LOG_ERROR(Core_Cheats, "Invalid index {}", index); return; } diff --git a/src/core/dumping/ffmpeg_backend.cpp b/src/core/dumping/ffmpeg_backend.cpp index c0c8a4f46..caef31ca8 100644 --- a/src/core/dumping/ffmpeg_backend.cpp +++ b/src/core/dumping/ffmpeg_backend.cpp @@ -59,21 +59,25 @@ void FFmpegStream::Flush() { SendFrame(nullptr); } -void FFmpegStream::WritePacket(AVPacket& packet) { - FFmpeg::av_packet_rescale_ts(&packet, codec_context->time_base, stream->time_base); - packet.stream_index = stream->index; +void FFmpegStream::WritePacket(AVPacket* packet) { + FFmpeg::av_packet_rescale_ts(packet, codec_context->time_base, stream->time_base); + packet->stream_index = stream->index; { std::lock_guard lock{*format_context_mutex}; - FFmpeg::av_interleaved_write_frame(format_context, &packet); + FFmpeg::av_interleaved_write_frame(format_context, packet); } } void FFmpegStream::SendFrame(AVFrame* frame) { // Initialize packet - AVPacket packet; - FFmpeg::av_init_packet(&packet); - packet.data = nullptr; - packet.size = 0; + AVPacket* packet = FFmpeg::av_packet_alloc(); + if (!packet) { + LOG_ERROR(Render, "Frame dropped: av_packet_alloc failed"); + } + SCOPE_EXIT({ FFmpeg::av_packet_free(&packet); }); + + packet->data = nullptr; + packet->size = 0; // Encode frame if (FFmpeg::avcodec_send_frame(codec_context.get(), frame) < 0) { @@ -82,7 +86,7 @@ void FFmpegStream::SendFrame(AVFrame* frame) { } int error = 1; while (error >= 0) { - error = FFmpeg::avcodec_receive_packet(codec_context.get(), &packet); + error = FFmpeg::avcodec_receive_packet(codec_context.get(), packet); if (error == AVERROR(EAGAIN) || error == AVERROR_EOF) return; if (error < 0) { @@ -485,7 +489,7 @@ bool FFmpegAudioStream::Init(FFmpegMuxer& muxer) { } codec_context->time_base.num = 1; codec_context->time_base.den = codec_context->sample_rate; -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) // lavc 59.24.100 codec_context->ch_layout = AV_CHANNEL_LAYOUT_STEREO; #else codec_context->channel_layout = AV_CH_LAYOUT_STEREO; @@ -527,7 +531,7 @@ bool FFmpegAudioStream::Init(FFmpegMuxer& muxer) { audio_frame->format = codec_context->sample_fmt; audio_frame->sample_rate = codec_context->sample_rate; -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) // lavc 59.24.100 auto num_channels = codec_context->ch_layout.nb_channels; audio_frame->ch_layout = codec_context->ch_layout; SwrContext* context = nullptr; @@ -1003,7 +1007,7 @@ void GetOptionList(std::vector& out, const AVClass* av_class, bool s } const AVClass* child_class = nullptr; -#if LIBAVCODEC_VERSION_MAJOR >= 59 +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100 void* iter = nullptr; while ((child_class = FFmpeg::av_opt_child_class_iterate(av_class, &iter))) { #else diff --git a/src/core/dumping/ffmpeg_backend.h b/src/core/dumping/ffmpeg_backend.h index 115731f67..c8eb0ae3f 100644 --- a/src/core/dumping/ffmpeg_backend.h +++ b/src/core/dumping/ffmpeg_backend.h @@ -37,7 +37,7 @@ public: protected: ~FFmpegStream(); - void WritePacket(AVPacket& packet); + void WritePacket(AVPacket* packet); void SendFrame(AVFrame* frame); struct AVCodecContextDeleter { @@ -52,6 +52,12 @@ protected: } }; + struct AVPacketDeleter { + void operator()(AVPacket* packet) const { + av_packet_free(&packet); + } + }; + AVFormatContext* format_context{}; std::mutex* format_context_mutex{}; std::unique_ptr codec_context{}; diff --git a/src/core/file_sys/archive_backend.h b/src/core/file_sys/archive_backend.h index 77f041d7e..0fada0f23 100644 --- a/src/core/file_sys/archive_backend.h +++ b/src/core/file_sys/archive_backend.h @@ -31,7 +31,7 @@ enum class LowPathType : u32 { }; union Mode { - u32 hex; + u32 hex = 0; BitField<0, 1, u32> read_flag; BitField<1, 1, u32> write_flag; BitField<2, 1, u32> create_flag; diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index b807bc261..600465241 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h @@ -90,7 +90,7 @@ union CoreVersion { major.Assign(major_ver); } - u32 raw; + u32 raw = 0; BitField<8, 8, u32> revision; BitField<16, 8, u32> minor; BitField<24, 8, u32> major; diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 6c7b93d05..a6ccf9525 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include +#include #include #include #include @@ -288,7 +289,7 @@ void ThreadManager::DebugThreadQueue() { for (auto& t : thread_list) { u32 priority = ready_queue.contains(t.get()); - if (priority != -1) { + if (priority != UINT_MAX) { LOG_DEBUG(Kernel, "0x{:02X} {}", priority, t->GetObjectId()); } } diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp index 9a2956b31..3b2c6e113 100644 --- a/src/core/hle/service/cfg/cfg.cpp +++ b/src/core/hle/service/cfg/cfg.cpp @@ -904,7 +904,7 @@ void Module::SetSystemSetupNeeded(bool setup_needed) { } bool Module::IsSystemSetupNeeded() { - u32 block; + u32 block{}; GetConfigInfoBlock(SystemSetupRequiredBlockID, sizeof(block), 0xC, &block); return (block & 0xFFFF) == 0; } diff --git a/src/core/hle/service/ir/extra_hid.cpp b/src/core/hle/service/ir/extra_hid.cpp index 5e7511033..eff81c711 100644 --- a/src/core/hle/service/ir/extra_hid.cpp +++ b/src/core/hle/service/ir/extra_hid.cpp @@ -204,12 +204,11 @@ void ExtraHID::HandleReadCalibrationDataRequest(const std::vector& request_b return; } - std::vector response(5); + std::vector response(5 + size); response[0] = static_cast(ResponseID::ReadCalibrationData); std::memcpy(&response[1], &request.offset, sizeof(request.offset)); std::memcpy(&response[3], &request.size, sizeof(request.size)); - response.insert(response.end(), calibration_data.begin() + offset, - calibration_data.begin() + offset + size); + std::memcpy(&response[5], calibration_data.data() + offset, size); Send(response); } diff --git a/src/core/hle/service/nwm/uds_data.cpp b/src/core/hle/service/nwm/uds_data.cpp index 6cc381a43..396bc8548 100644 --- a/src/core/hle/service/nwm/uds_data.cpp +++ b/src/core/hle/service/nwm/uds_data.cpp @@ -303,6 +303,7 @@ std::vector GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node std::memcpy(eapol_buffer.data(), &eapol_start, sizeof(eapol_start)); std::vector buffer = GenerateLLCHeader(EtherType::EAPoL); + buffer.reserve(buffer.size() + sizeof(EAPoLStartPacket)); buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end()); return buffer; } @@ -366,6 +367,7 @@ std::vector GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 netw std::memcpy(eapol_buffer.data(), &eapol_logoff, sizeof(eapol_logoff)); std::vector buffer = GenerateLLCHeader(EtherType::EAPoL); + buffer.reserve(buffer.size() + sizeof(EAPoLStartPacket)); buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end()); return buffer; } diff --git a/src/core/hle/service/soc_u.cpp b/src/core/hle/service/soc_u.cpp index 7be6624d6..eba312ee3 100644 --- a/src/core/hle/service/soc_u.cpp +++ b/src/core/hle/service/soc_u.cpp @@ -519,9 +519,9 @@ struct CTRPollFD { CTRPollFD result; result.events.hex = Events::TranslateTo3DS(fd.events, has_libctru_bug).hex; result.revents.hex = Events::TranslateTo3DS(fd.revents, has_libctru_bug).hex; - for (auto iter = socu.open_sockets.begin(); iter != socu.open_sockets.end(); ++iter) { - if (iter->second.socket_fd == fd.fd) { - result.fd = iter->first; + for (const auto& socket : socu.open_sockets) { + if (socket.second.socket_fd == fd.fd) { + result.fd = socket.first; break; } } @@ -662,7 +662,8 @@ struct CTRAddrInfo { }; ctr_addr.ai_addrlen = static_cast(ctr_addr.ai_addr.raw.len); if (addr.ai_canonname) - std::strncpy(ctr_addr.ai_canonname, addr.ai_canonname, sizeof(ctr_addr.ai_canonname)); + std::strncpy(ctr_addr.ai_canonname, addr.ai_canonname, + sizeof(ctr_addr.ai_canonname) - 1); return ctr_addr; } diff --git a/src/core/movie.cpp b/src/core/movie.cpp index 2348fe827..c2d085d29 100644 --- a/src/core/movie.cpp +++ b/src/core/movie.cpp @@ -45,7 +45,7 @@ struct ControllerState { union { struct { union { - u16_le hex; + u16_le hex = 0; BitField<0, 1, u16> a; BitField<1, 1, u16> b; @@ -96,7 +96,7 @@ struct ControllerState { struct { union { - u32_le hex; + u32_le hex = 0; BitField<0, 5, u32> battery_level; BitField<5, 1, u32> zl_not_held; @@ -136,7 +136,7 @@ static u64 GetInputCount(const std::vector& input) { break; } - ControllerState state; + ControllerState state{}; std::memcpy(&state, input.data() + pos, sizeof(ControllerState)); if (state.type == ControllerStateType::PadAndCircle) { input_count++; @@ -238,7 +238,7 @@ void Movie::CheckInputEnd() { } void Movie::Play(Service::HID::PadState& pad_state, s16& circle_pad_x, s16& circle_pad_y) { - ControllerState s; + ControllerState s{}; std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); current_byte += sizeof(ControllerState); current_input++; @@ -270,7 +270,7 @@ void Movie::Play(Service::HID::PadState& pad_state, s16& circle_pad_x, s16& circ } void Movie::Play(Service::HID::TouchDataEntry& touch_data) { - ControllerState s; + ControllerState s{}; std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); current_byte += sizeof(ControllerState); @@ -287,7 +287,7 @@ void Movie::Play(Service::HID::TouchDataEntry& touch_data) { } void Movie::Play(Service::HID::AccelerometerDataEntry& accelerometer_data) { - ControllerState s; + ControllerState s{}; std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); current_byte += sizeof(ControllerState); @@ -304,7 +304,7 @@ void Movie::Play(Service::HID::AccelerometerDataEntry& accelerometer_data) { } void Movie::Play(Service::HID::GyroscopeDataEntry& gyroscope_data) { - ControllerState s; + ControllerState s{}; std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); current_byte += sizeof(ControllerState); @@ -321,7 +321,7 @@ void Movie::Play(Service::HID::GyroscopeDataEntry& gyroscope_data) { } void Movie::Play(Service::IR::PadState& pad_state, s16& c_stick_x, s16& c_stick_y) { - ControllerState s; + ControllerState s{}; std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); current_byte += sizeof(ControllerState); @@ -339,7 +339,7 @@ void Movie::Play(Service::IR::PadState& pad_state, s16& c_stick_x, s16& c_stick_ } void Movie::Play(Service::IR::ExtraHIDResponse& extra_hid_response) { - ControllerState s; + ControllerState s{}; std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); current_byte += sizeof(ControllerState); @@ -371,7 +371,7 @@ void Movie::Record(const Service::HID::PadState& pad_state, const s16& circle_pa const s16& circle_pad_y) { current_input++; - ControllerState s; + ControllerState s{}; s.type = ControllerStateType::PadAndCircle; s.pad_and_circle.a.Assign(static_cast(pad_state.a)); @@ -396,7 +396,7 @@ void Movie::Record(const Service::HID::PadState& pad_state, const s16& circle_pa } void Movie::Record(const Service::HID::TouchDataEntry& touch_data) { - ControllerState s; + ControllerState s{}; s.type = ControllerStateType::Touch; s.touch.x = touch_data.x; @@ -407,7 +407,7 @@ void Movie::Record(const Service::HID::TouchDataEntry& touch_data) { } void Movie::Record(const Service::HID::AccelerometerDataEntry& accelerometer_data) { - ControllerState s; + ControllerState s{}; s.type = ControllerStateType::Accelerometer; s.accelerometer.x = accelerometer_data.x; @@ -418,7 +418,7 @@ void Movie::Record(const Service::HID::AccelerometerDataEntry& accelerometer_dat } void Movie::Record(const Service::HID::GyroscopeDataEntry& gyroscope_data) { - ControllerState s; + ControllerState s{}; s.type = ControllerStateType::Gyroscope; s.gyroscope.x = gyroscope_data.x; @@ -430,7 +430,7 @@ void Movie::Record(const Service::HID::GyroscopeDataEntry& gyroscope_data) { void Movie::Record(const Service::IR::PadState& pad_state, const s16& c_stick_x, const s16& c_stick_y) { - ControllerState s; + ControllerState s{}; s.type = ControllerStateType::IrRst; s.ir_rst.x = c_stick_x; @@ -442,7 +442,7 @@ void Movie::Record(const Service::IR::PadState& pad_state, const s16& c_stick_x, } void Movie::Record(const Service::IR::ExtraHIDResponse& extra_hid_response) { - ControllerState s; + ControllerState s{}; s.type = ControllerStateType::ExtraHidResponse; s.extra_hid_response.battery_level.Assign(extra_hid_response.buttons.battery_level); diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index d88bdd896..29fe97117 100644 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp @@ -1018,7 +1018,7 @@ public: } Common::ParamPackage GetNextInput() override { - SDL_Event event; + SDL_Event event{}; while (state.event_queue.Pop(event)) { if (event.type != SDL_JOYAXISMOTION || std::abs(event.jaxis.value / 32767.0) < 0.5) { continue; diff --git a/src/network/packet.cpp b/src/network/packet.cpp index 8fc5feabd..1b62fdf60 100644 --- a/src/network/packet.cpp +++ b/src/network/packet.cpp @@ -85,42 +85,42 @@ Packet& Packet::operator>>(u8& out_data) { } Packet& Packet::operator>>(s16& out_data) { - s16 value; + s16 value = 0; Read(&value, sizeof(value)); out_data = ntohs(value); return *this; } Packet& Packet::operator>>(u16& out_data) { - u16 value; + u16 value = 0; Read(&value, sizeof(value)); out_data = ntohs(value); return *this; } Packet& Packet::operator>>(s32& out_data) { - s32 value; + s32 value = 0; Read(&value, sizeof(value)); out_data = ntohl(value); return *this; } Packet& Packet::operator>>(u32& out_data) { - u32 value; + u32 value = 0; Read(&value, sizeof(value)); out_data = ntohl(value); return *this; } Packet& Packet::operator>>(s64& out_data) { - s64 value; + s64 value = 0; Read(&value, sizeof(value)); out_data = ntohll(value); return *this; } Packet& Packet::operator>>(u64& out_data) { - u64 value; + u64 value = 0; Read(&value, sizeof(value)); out_data = ntohll(value); return *this; diff --git a/src/video_core/geometry_pipeline.cpp b/src/video_core/geometry_pipeline.cpp index bd46cc1ba..af64490bd 100644 --- a/src/video_core/geometry_pipeline.cpp +++ b/src/video_core/geometry_pipeline.cpp @@ -150,7 +150,7 @@ public: setup.uniforms.f[0] = Common::MakeVec(vertex_num, vertex_num, vertex_num, vertex_num); // The second uniform register and so on are used for receiving input vertices - buffer_cur = setup.uniforms.f + 1; + buffer_cur = setup.uniforms.f.data() + 1; main_vertex_num = regs.pipeline.variable_vertex_main_num_minus_1 + 1; total_vertex_num = val; @@ -200,7 +200,7 @@ private: template void save(Archive& ar, const unsigned int version) const { serialize_common(this, ar, version); - auto buffer_idx = static_cast(buffer_cur - setup.uniforms.f); + auto buffer_idx = static_cast(buffer_cur - setup.uniforms.f.data()); ar << buffer_idx; } @@ -209,7 +209,7 @@ private: serialize_common(this, ar, version); u32 buffer_idx; ar >> buffer_idx; - buffer_cur = setup.uniforms.f + buffer_idx; + buffer_cur = setup.uniforms.f.data() + buffer_idx; } BOOST_SERIALIZATION_SPLIT_MEMBER() @@ -229,7 +229,7 @@ public: vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1; ASSERT(vs_output_num == regs.pipeline.gs_config.stride_minus_1 + 1); std::size_t vertex_num = regs.pipeline.gs_config.fixed_vertex_num_minus_1 + 1; - buffer_cur = buffer_begin = setup.uniforms.f + regs.pipeline.gs_config.start_index; + buffer_cur = buffer_begin = setup.uniforms.f.data() + regs.pipeline.gs_config.start_index; buffer_end = buffer_begin + vs_output_num * vertex_num; } @@ -273,9 +273,9 @@ private: template void save(Archive& ar, const unsigned int version) const { serialize_common(this, ar, version); - auto buffer_offset = static_cast(buffer_begin - setup.uniforms.f); - auto buffer_idx = static_cast(buffer_cur - setup.uniforms.f); - auto buffer_size = static_cast(buffer_end - setup.uniforms.f); + auto buffer_offset = static_cast(buffer_begin - setup.uniforms.f.data()); + auto buffer_idx = static_cast(buffer_cur - setup.uniforms.f.data()); + auto buffer_size = static_cast(buffer_end - setup.uniforms.f.data()); ar << buffer_offset; ar << buffer_idx; ar << buffer_size; @@ -288,9 +288,9 @@ private: ar >> buffer_offset; ar >> buffer_idx; ar >> buffer_size; - buffer_begin = setup.uniforms.f + buffer_offset; - buffer_cur = setup.uniforms.f + buffer_idx; - buffer_end = setup.uniforms.f + buffer_size; + buffer_begin = setup.uniforms.f.data() + buffer_offset; + buffer_cur = setup.uniforms.f.data() + buffer_idx; + buffer_end = setup.uniforms.f.data() + buffer_size; } BOOST_SERIALIZATION_SPLIT_MEMBER() diff --git a/src/video_core/pica.cpp b/src/video_core/pica.cpp index 74f408c57..f0263136d 100644 --- a/src/video_core/pica.cpp +++ b/src/video_core/pica.cpp @@ -32,8 +32,7 @@ void Shutdown() { template void Zero(T& o) { - static_assert(std::is_trivially_copyable_v, - "It's undefined behavior to memset a non-trivially copyable type"); + static_assert(std::is_trivial_v, "It's undefined behavior to memset a non-trivial type"); memset(&o, 0, sizeof(o)); } @@ -56,10 +55,10 @@ State::State() : geometry_pipeline(*this) { void State::Reset() { Zero(regs); - Zero(vs); - Zero(gs); + vs = {}; + gs = {}; Zero(cmd_list); - Zero(immediate); + immediate = {}; primitive_assembler.Reconfigure(PipelineRegs::TriangleTopology::List); vs_float_regs_counter = 0; vs_uniform_write_buffer.fill(0); diff --git a/src/video_core/shader/shader.h b/src/video_core/shader/shader.h index dc98b7cab..7c998e68b 100644 --- a/src/video_core/shader/shader.h +++ b/src/video_core/shader/shader.h @@ -241,7 +241,7 @@ private: struct Uniforms { // The float uniforms are accessed by the shader JIT using SSE instructions, and are // therefore required to be 16-byte aligned. - alignas(16) Common::Vec4 f[96]; + alignas(16) std::array, 96> f; std::array b; std::array, 4> i;