general: Enforce C4800 everywhere except in video_core

This commit is contained in:
Morph 2022-10-21 02:34:06 -04:00
parent 93297d14d8
commit e6ab1f673b
14 changed files with 57 additions and 41 deletions

View File

@ -76,6 +76,7 @@ if (MSVC)
/we4549 # 'operator1': operator before comma has no effect; did you intend 'operator2'? /we4549 # 'operator1': operator before comma has no effect; did you intend 'operator2'?
/we4555 # Expression has no effect; expected expression with side-effect /we4555 # Expression has no effect; expected expression with side-effect
/we4715 # 'function': not all control paths return a value /we4715 # 'function': not all control paths return a value
/we4826 # Conversion from 'type1' to 'type2' is sign-extended. This may cause unexpected runtime behavior.
/we4834 # Discarding return value of function with 'nodiscard' attribute /we4834 # Discarding return value of function with 'nodiscard' attribute
/we5038 # data member 'member1' will be initialized after data member 'member2' /we5038 # data member 'member1' will be initialized after data member 'member2'
/we5245 # 'function': unreferenced function with internal linkage has been removed /we5245 # 'function': unreferenced function with internal linkage has been removed

View File

@ -206,6 +206,7 @@ if (MSVC)
/we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data /we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
/we4245 # 'conversion': conversion from 'type1' to 'type2', signed/unsigned mismatch /we4245 # 'conversion': conversion from 'type1' to 'type2', signed/unsigned mismatch
/we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data /we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
/we4800 # Implicit conversion from 'type' to bool. Possible information loss
) )
else() else()
target_compile_options(audio_core PRIVATE target_compile_options(audio_core PRIVATE

View File

@ -157,6 +157,12 @@ if (MSVC)
target_compile_options(common PRIVATE target_compile_options(common PRIVATE
/W4 /W4
/WX /WX
/we4242 # 'identifier': conversion from 'type1' to 'type2', possible loss of data
/we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
/we4245 # 'conversion': conversion from 'type1' to 'type2', signed/unsigned mismatch
/we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
/we4800 # Implicit conversion from 'type' to bool. Possible information loss
) )
else() else()
target_compile_options(common PRIVATE target_compile_options(common PRIVATE

View File

@ -141,10 +141,6 @@ public:
constexpr BitField(BitField&&) noexcept = default; constexpr BitField(BitField&&) noexcept = default;
constexpr BitField& operator=(BitField&&) noexcept = default; constexpr BitField& operator=(BitField&&) noexcept = default;
[[nodiscard]] constexpr operator T() const {
return Value();
}
constexpr void Assign(const T& value) { constexpr void Assign(const T& value) {
#ifdef _MSC_VER #ifdef _MSC_VER
storage = static_cast<StorageType>((storage & ~mask) | FormatValue(value)); storage = static_cast<StorageType>((storage & ~mask) | FormatValue(value));
@ -162,6 +158,17 @@ public:
return ExtractValue(storage); return ExtractValue(storage);
} }
template <typename ConvertedToType>
[[nodiscard]] constexpr ConvertedToType As() const {
static_assert(!std::is_same_v<T, ConvertedToType>,
"Unnecessary cast. Use Value() instead.");
return static_cast<ConvertedToType>(Value());
}
[[nodiscard]] constexpr operator T() const {
return Value();
}
[[nodiscard]] constexpr explicit operator bool() const { [[nodiscard]] constexpr explicit operator bool() const {
return Value() != 0; return Value() != 0;
} }

View File

@ -774,6 +774,7 @@ if (MSVC)
/we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data /we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
/we4245 # 'conversion': conversion from 'type1' to 'type2', signed/unsigned mismatch /we4245 # 'conversion': conversion from 'type1' to 'type2', signed/unsigned mismatch
/we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data /we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
/we4800 # Implicit conversion from 'type' to bool. Possible information loss
) )
else() else()
target_compile_options(core PRIVATE target_compile_options(core PRIVATE

View File

@ -127,7 +127,7 @@ void ProgramMetadata::LoadManual(bool is_64_bit, ProgramAddressSpaceType address
} }
bool ProgramMetadata::Is64BitProgram() const { bool ProgramMetadata::Is64BitProgram() const {
return npdm_header.has_64_bit_instructions; return npdm_header.has_64_bit_instructions.As<bool>();
} }
ProgramAddressSpaceType ProgramMetadata::GetAddressSpaceType() const { ProgramAddressSpaceType ProgramMetadata::GetAddressSpaceType() const {

View File

@ -1158,27 +1158,27 @@ bool EmulatedController::IsControllerSupported(bool use_temporary_value) const {
const auto type = is_configuring && use_temporary_value ? tmp_npad_type : npad_type; const auto type = is_configuring && use_temporary_value ? tmp_npad_type : npad_type;
switch (type) { switch (type) {
case NpadStyleIndex::ProController: case NpadStyleIndex::ProController:
return supported_style_tag.fullkey; return supported_style_tag.fullkey.As<bool>();
case NpadStyleIndex::Handheld: case NpadStyleIndex::Handheld:
return supported_style_tag.handheld; return supported_style_tag.handheld.As<bool>();
case NpadStyleIndex::JoyconDual: case NpadStyleIndex::JoyconDual:
return supported_style_tag.joycon_dual; return supported_style_tag.joycon_dual.As<bool>();
case NpadStyleIndex::JoyconLeft: case NpadStyleIndex::JoyconLeft:
return supported_style_tag.joycon_left; return supported_style_tag.joycon_left.As<bool>();
case NpadStyleIndex::JoyconRight: case NpadStyleIndex::JoyconRight:
return supported_style_tag.joycon_right; return supported_style_tag.joycon_right.As<bool>();
case NpadStyleIndex::GameCube: case NpadStyleIndex::GameCube:
return supported_style_tag.gamecube; return supported_style_tag.gamecube.As<bool>();
case NpadStyleIndex::Pokeball: case NpadStyleIndex::Pokeball:
return supported_style_tag.palma; return supported_style_tag.palma.As<bool>();
case NpadStyleIndex::NES: case NpadStyleIndex::NES:
return supported_style_tag.lark; return supported_style_tag.lark.As<bool>();
case NpadStyleIndex::SNES: case NpadStyleIndex::SNES:
return supported_style_tag.lucia; return supported_style_tag.lucia.As<bool>();
case NpadStyleIndex::N64: case NpadStyleIndex::N64:
return supported_style_tag.lagoon; return supported_style_tag.lagoon.As<bool>();
case NpadStyleIndex::SegaGenesis: case NpadStyleIndex::SegaGenesis:
return supported_style_tag.lager; return supported_style_tag.lager.As<bool>();
default: default:
return false; return false;
} }

View File

@ -751,8 +751,8 @@ static void Break(Core::System& system, u32 reason, u64 info1, u64 info2) {
} }
system.GetReporter().SaveSvcBreakReport( system.GetReporter().SaveSvcBreakReport(
static_cast<u32>(break_reason.break_type.Value()), break_reason.signal_debugger, info1, static_cast<u32>(break_reason.break_type.Value()), break_reason.signal_debugger.As<bool>(),
info2, has_dumped_buffer ? std::make_optional(debug_buffer) : std::nullopt); info1, info2, has_dumped_buffer ? std::make_optional(debug_buffer) : std::nullopt);
if (!break_reason.signal_debugger) { if (!break_reason.signal_debugger) {
LOG_CRITICAL( LOG_CRITICAL(

View File

@ -164,7 +164,7 @@ protected:
u32_le size; u32_le size;
u32_le library_version; u32_le library_version;
u32_le theme_color; u32_le theme_color;
u8 play_startup_sound; bool play_startup_sound;
u64_le system_tick; u64_le system_tick;
}; };
static_assert(sizeof(CommonArguments) == 0x20, "CommonArguments has incorrect size."); static_assert(sizeof(CommonArguments) == 0x20, "CommonArguments has incorrect size.");

View File

@ -1502,25 +1502,25 @@ bool Controller_NPad::IsControllerSupported(Core::HID::NpadStyleIndex controller
Core::HID::NpadStyleTag style = GetSupportedStyleSet(); Core::HID::NpadStyleTag style = GetSupportedStyleSet();
switch (controller) { switch (controller) {
case Core::HID::NpadStyleIndex::ProController: case Core::HID::NpadStyleIndex::ProController:
return style.fullkey; return style.fullkey.As<bool>();
case Core::HID::NpadStyleIndex::JoyconDual: case Core::HID::NpadStyleIndex::JoyconDual:
return style.joycon_dual; return style.joycon_dual.As<bool>();
case Core::HID::NpadStyleIndex::JoyconLeft: case Core::HID::NpadStyleIndex::JoyconLeft:
return style.joycon_left; return style.joycon_left.As<bool>();
case Core::HID::NpadStyleIndex::JoyconRight: case Core::HID::NpadStyleIndex::JoyconRight:
return style.joycon_right; return style.joycon_right.As<bool>();
case Core::HID::NpadStyleIndex::GameCube: case Core::HID::NpadStyleIndex::GameCube:
return style.gamecube; return style.gamecube.As<bool>();
case Core::HID::NpadStyleIndex::Pokeball: case Core::HID::NpadStyleIndex::Pokeball:
return style.palma; return style.palma.As<bool>();
case Core::HID::NpadStyleIndex::NES: case Core::HID::NpadStyleIndex::NES:
return style.lark; return style.lark.As<bool>();
case Core::HID::NpadStyleIndex::SNES: case Core::HID::NpadStyleIndex::SNES:
return style.lucia; return style.lucia.As<bool>();
case Core::HID::NpadStyleIndex::N64: case Core::HID::NpadStyleIndex::N64:
return style.lagoon; return style.lagoon.As<bool>();
case Core::HID::NpadStyleIndex::SegaGenesis: case Core::HID::NpadStyleIndex::SegaGenesis:
return style.lager; return style.lager.As<bool>();
default: default:
return false; return false;
} }

View File

@ -45,6 +45,7 @@ if (MSVC)
/we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data /we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
/we4245 # 'conversion': conversion from 'type1' to 'type2', signed/unsigned mismatch /we4245 # 'conversion': conversion from 'type1' to 'type2', signed/unsigned mismatch
/we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data /we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
/we4800 # Implicit conversion from 'type' to bool. Possible information loss
) )
else() else()
target_compile_options(input_common PRIVATE target_compile_options(input_common PRIVATE

View File

@ -40,8 +40,8 @@ public:
void EnableMotion() { void EnableMotion() {
if (sdl_controller) { if (sdl_controller) {
SDL_GameController* controller = sdl_controller.get(); SDL_GameController* controller = sdl_controller.get();
has_accel = SDL_GameControllerHasSensor(controller, SDL_SENSOR_ACCEL); has_accel = SDL_GameControllerHasSensor(controller, SDL_SENSOR_ACCEL) == SDL_TRUE;
has_gyro = SDL_GameControllerHasSensor(controller, SDL_SENSOR_GYRO); has_gyro = SDL_GameControllerHasSensor(controller, SDL_SENSOR_GYRO) == SDL_TRUE;
if (has_accel) { if (has_accel) {
SDL_GameControllerSetSensorEnabled(controller, SDL_SENSOR_ACCEL, SDL_TRUE); SDL_GameControllerSetSensorEnabled(controller, SDL_SENSOR_ACCEL, SDL_TRUE);
} }

View File

@ -797,8 +797,8 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateButtonDevice(
const auto button_id = params.Get("button", 0); const auto button_id = params.Get("button", 0);
const auto keyboard_key = params.Get("code", 0); const auto keyboard_key = params.Get("code", 0);
const auto toggle = params.Get("toggle", false); const auto toggle = params.Get("toggle", false) != 0;
const auto inverted = params.Get("inverted", false); const auto inverted = params.Get("inverted", false) != 0;
input_engine->PreSetController(identifier); input_engine->PreSetController(identifier);
input_engine->PreSetButton(identifier, button_id); input_engine->PreSetButton(identifier, button_id);
input_engine->PreSetButton(identifier, keyboard_key); input_engine->PreSetButton(identifier, keyboard_key);
@ -820,8 +820,8 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateHatButtonDevice(
const auto button_id = params.Get("hat", 0); const auto button_id = params.Get("hat", 0);
const auto direction = input_engine->GetHatButtonId(params.Get("direction", "")); const auto direction = input_engine->GetHatButtonId(params.Get("direction", ""));
const auto toggle = params.Get("toggle", false); const auto toggle = params.Get("toggle", false) != 0;
const auto inverted = params.Get("inverted", false); const auto inverted = params.Get("inverted", false) != 0;
input_engine->PreSetController(identifier); input_engine->PreSetController(identifier);
input_engine->PreSetHatButton(identifier, button_id); input_engine->PreSetHatButton(identifier, button_id);
@ -879,7 +879,7 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateAnalogDevice(
.threshold = std::clamp(params.Get("threshold", 0.5f), 0.0f, 1.0f), .threshold = std::clamp(params.Get("threshold", 0.5f), 0.0f, 1.0f),
.offset = std::clamp(params.Get("offset", 0.0f), -1.0f, 1.0f), .offset = std::clamp(params.Get("offset", 0.0f), -1.0f, 1.0f),
.inverted = params.Get("invert", "+") == "-", .inverted = params.Get("invert", "+") == "-",
.toggle = static_cast<bool>(params.Get("toggle", false)), .toggle = params.Get("toggle", false) != 0,
}; };
input_engine->PreSetController(identifier); input_engine->PreSetController(identifier);
input_engine->PreSetAxis(identifier, axis); input_engine->PreSetAxis(identifier, axis);
@ -895,8 +895,8 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateTriggerDevice(
}; };
const auto button = params.Get("button", 0); const auto button = params.Get("button", 0);
const auto toggle = params.Get("toggle", false); const auto toggle = params.Get("toggle", false) != 0;
const auto inverted = params.Get("inverted", false); const auto inverted = params.Get("inverted", false) != 0;
const auto axis = params.Get("axis", 0); const auto axis = params.Get("axis", 0);
const Common::Input::AnalogProperties properties = { const Common::Input::AnalogProperties properties = {
@ -926,8 +926,8 @@ std::unique_ptr<Common::Input::InputDevice> InputFactory::CreateTouchDevice(
}; };
const auto button = params.Get("button", 0); const auto button = params.Get("button", 0);
const auto toggle = params.Get("toggle", false); const auto toggle = params.Get("toggle", false) != 0;
const auto inverted = params.Get("inverted", false); const auto inverted = params.Get("inverted", false) != 0;
const auto axis_x = params.Get("axis_x", 0); const auto axis_x = params.Get("axis_x", 0);
const Common::Input::AnalogProperties properties_x = { const Common::Input::AnalogProperties properties_x = {

View File

@ -248,7 +248,6 @@ if (MSVC)
/we4245 # 'conversion' : conversion from 'type1' to 'type2', signed/unsigned mismatch /we4245 # 'conversion' : conversion from 'type1' to 'type2', signed/unsigned mismatch
/we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data /we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
/we4800 # Implicit conversion from 'type' to bool. Possible information loss /we4800 # Implicit conversion from 'type' to bool. Possible information loss
/we4826 # Conversion from 'type1' to 'type2' is sign-extended. This may cause unexpected runtime behavior.
) )
else() else()
target_compile_options(shader_recompiler PRIVATE target_compile_options(shader_recompiler PRIVATE