GCC: Remedy NRVO Fails

Using the `-Wnrvo` flag introduced by GCC 14, I identified a few places where NRVO was clearly intended, but is fumbled.
This commit is contained in:
mitaclaw 2024-12-13 14:02:12 -08:00
parent ada646a795
commit 5745f0f90d
6 changed files with 13 additions and 21 deletions

View File

@ -95,8 +95,7 @@ Result<FileStatus> FileHandle::GetStatus() const
Result<FileHandle> FileSystem::CreateAndOpenFile(Uid uid, Gid gid, const std::string& path, Result<FileHandle> FileSystem::CreateAndOpenFile(Uid uid, Gid gid, const std::string& path,
Modes modes) Modes modes)
{ {
Result<FileHandle> file = OpenFile(uid, gid, path, Mode::ReadWrite); if (Result<FileHandle> file = OpenFile(uid, gid, path, Mode::ReadWrite))
if (file.Succeeded())
return file; return file;
const ResultCode result = CreateFile(uid, gid, path, 0, modes); const ResultCode result = CreateFile(uid, gid, path, 0, modes);

View File

@ -692,7 +692,6 @@ std::string VolumeVerifier::GetPartitionName(std::optional<u32> type) const
if (!type) if (!type)
return "???"; return "???";
std::string name = NameForPartitionType(*type, false);
if (ShouldHaveMasterpiecePartitions() && *type > 0xFF) if (ShouldHaveMasterpiecePartitions() && *type > 0xFF)
{ {
// i18n: This string is referring to a game mode in Super Smash Bros. Brawl called Masterpieces // i18n: This string is referring to a game mode in Super Smash Bros. Brawl called Masterpieces
@ -702,9 +701,9 @@ std::string VolumeVerifier::GetPartitionName(std::optional<u32> type) const
// (French), Clásicos (Spanish), Capolavori (Italian), 클래식 게임 체험판 (Korean). // (French), Clásicos (Spanish), Capolavori (Italian), 클래식 게임 체험판 (Korean).
// If your language is not one of the languages above, consider leaving the string untranslated // If your language is not one of the languages above, consider leaving the string untranslated
// so that people will recognize it as the name of the game mode. // so that people will recognize it as the name of the game mode.
name = Common::FmtFormatT("{0} (Masterpiece)", name); return Common::FmtFormatT("{0} (Masterpiece)", NameForPartitionType(*type, false));
} }
return name; return NameForPartitionType(*type, false);
} }
bool VolumeVerifier::IsDebugSigned() const bool VolumeVerifier::IsDebugSigned() const

View File

@ -39,8 +39,7 @@ static std::unique_ptr<DiscIO::FileInfo> GetFileInfo(const DiscIO::Volume& disc_
if (!filesystem) if (!filesystem)
return nullptr; return nullptr;
std::unique_ptr<DiscIO::FileInfo> info = filesystem->FindFileInfo(path); return filesystem->FindFileInfo(path);
return info;
} }
static bool VolumeSupported(const DiscIO::Volume& disc_volume) static bool VolumeSupported(const DiscIO::Volume& disc_volume)

View File

@ -835,10 +835,9 @@ std::string GameFile::GetFileFormatName() const
default: default:
{ {
std::string name = DiscIO::GetName(m_blob_type, true);
if (m_is_nkit) if (m_is_nkit)
name = Common::FmtFormatT("{0} (NKit)", name); return Common::FmtFormatT("{0} (NKit)", DiscIO::GetName(m_blob_type, true));
return name; return DiscIO::GetName(m_blob_type, true);
} }
} }
} }

View File

@ -183,14 +183,11 @@ TextureInfo::NameDetails TextureInfo::CalculateTextureName() const
const u64 tex_hash = XXH64(m_ptr, m_texture_size, 0); const u64 tex_hash = XXH64(m_ptr, m_texture_size, 0);
const u64 tlut_hash = tlut_size ? XXH64(tlut, tlut_size, 0) : 0; const u64 tlut_hash = tlut_size ? XXH64(tlut, tlut_size, 0) : 0;
NameDetails result; return {.base_name = fmt::format("{}{}x{}{}", format_prefix, m_raw_width, m_raw_height,
result.base_name = fmt::format("{}{}x{}{}", format_prefix, m_raw_width, m_raw_height, m_mipmaps_enabled ? "_m" : ""),
m_mipmaps_enabled ? "_m" : ""); .texture_name = fmt::format("{:016x}", tex_hash),
result.texture_name = fmt::format("{:016x}", tex_hash); .tlut_name = tlut_size ? fmt::format("_{:016x}", tlut_hash) : "",
result.tlut_name = tlut_size ? fmt::format("_{:016x}", tlut_hash) : ""; .format_name = fmt::to_string(static_cast<int>(m_texture_format))};
result.format_name = fmt::to_string(static_cast<int>(m_texture_format));
return result;
} }
bool TextureInfo::IsDataValid() const bool TextureInfo::IsDataValid() const

View File

@ -57,11 +57,10 @@ VertexLoaderX64::VertexLoaderX64(const TVtxDesc& vtx_desc, const VAT& vtx_att)
OpArg VertexLoaderX64::GetVertexAddr(CPArray array, VertexComponentFormat attribute) OpArg VertexLoaderX64::GetVertexAddr(CPArray array, VertexComponentFormat attribute)
{ {
OpArg data = MDisp(src_reg, m_src_ofs);
if (IsIndexed(attribute)) if (IsIndexed(attribute))
{ {
int bits = attribute == VertexComponentFormat::Index8 ? 8 : 16; int bits = attribute == VertexComponentFormat::Index8 ? 8 : 16;
LoadAndSwap(bits, scratch1, data); LoadAndSwap(bits, scratch1, MDisp(src_reg, m_src_ofs));
m_src_ofs += bits / 8; m_src_ofs += bits / 8;
if (array == CPArray::Position) if (array == CPArray::Position)
{ {
@ -74,7 +73,7 @@ OpArg VertexLoaderX64::GetVertexAddr(CPArray array, VertexComponentFormat attrib
} }
else else
{ {
return data; return MDisp(src_reg, m_src_ofs);
} }
} }