From: <sv...@op...> - 2025-07-16 19:45:16
|
Author: manx Date: Wed Jul 16 21:45:02 2025 New Revision: 23773 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23773 Log: [Fix] mpt/filemode/: Work-around bogus -Wmaybe-uninitialized warning with GCC 14 -O3 in std::optional::reset(). Modified: trunk/OpenMPT/src/mpt/filemode/fd.hpp trunk/OpenMPT/src/mpt/filemode/iostream.hpp trunk/OpenMPT/src/mpt/filemode/stdfile.hpp trunk/OpenMPT/src/mpt/filemode/stdio.hpp Modified: trunk/OpenMPT/src/mpt/filemode/fd.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/filemode/fd.hpp Wed Jul 16 16:55:10 2025 (r23772) +++ trunk/OpenMPT/src/mpt/filemode/fd.hpp Wed Jul 16 21:45:02 2025 (r23773) @@ -6,6 +6,9 @@ #include "mpt/base/detect.hpp" +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) +#include "mpt/base/macros.hpp" +#endif #include "mpt/base/namespace.hpp" #include "mpt/exception/runtime_error.hpp" #include "mpt/filemode/filemode.hpp" @@ -55,6 +58,10 @@ } } public: +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif explicit fd_guard(mpt::filemode::mode new_mode) : old_mode(-1) { switch (new_mode) { @@ -76,6 +83,10 @@ fd_guard(fd_guard &&) = delete; fd_guard & operator=(const fd_guard &) = delete; fd_guard & operator=(fd_guard &&) = delete; +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif ~fd_guard() { if (old_mode != -1) { old_mode = setmode(get_fd(), old_mode); @@ -109,6 +120,10 @@ return fd; } public: +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif explicit fd_guard(mpt::filemode::mode new_mode) : old_mode(-1) { switch (new_mode) { @@ -134,6 +149,10 @@ fd_guard(fd_guard &&) = delete; fd_guard & operator=(const fd_guard &) = delete; fd_guard & operator=(fd_guard &&) = delete; +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif ~fd_guard() { if (old_mode != -1) { old_mode = _setmode(get_fd(), old_mode); @@ -163,6 +182,10 @@ } } public: +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif explicit fd_guard(mpt::filemode::mode /* new_mode */) { return; } @@ -170,7 +193,13 @@ fd_guard(fd_guard &&) = delete; fd_guard & operator=(const fd_guard &) = delete; fd_guard & operator=(fd_guard &&) = delete; - ~fd_guard() = default; +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif + ~fd_guard() { + return; + } }; #endif Modified: trunk/OpenMPT/src/mpt/filemode/iostream.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/filemode/iostream.hpp Wed Jul 16 16:55:10 2025 (r23772) +++ trunk/OpenMPT/src/mpt/filemode/iostream.hpp Wed Jul 16 21:45:02 2025 (r23773) @@ -6,6 +6,9 @@ #include "mpt/base/detect.hpp" +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) +#include "mpt/base/macros.hpp" +#endif #include "mpt/base/namespace.hpp" #include "mpt/filemode/filemode.hpp" #include "mpt/filemode/stdfile.hpp" @@ -62,6 +65,10 @@ } } public: +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif explicit iostream_guard(mpt::filemode::mode mode) { guard.emplace(mode); } @@ -69,6 +76,10 @@ iostream_guard(iostream_guard &&) = delete; iostream_guard & operator=(const iostream_guard &) = delete; iostream_guard & operator=(iostream_guard &&) = delete; +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif ~iostream_guard() { if constexpr (which != mpt::filemode::stdio::input) { get_stream().flush(); Modified: trunk/OpenMPT/src/mpt/filemode/stdfile.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/filemode/stdfile.hpp Wed Jul 16 16:55:10 2025 (r23772) +++ trunk/OpenMPT/src/mpt/filemode/stdfile.hpp Wed Jul 16 21:45:02 2025 (r23773) @@ -6,6 +6,9 @@ #include "mpt/base/detect.hpp" +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) +#include "mpt/base/macros.hpp" +#endif #include "mpt/base/namespace.hpp" #include "mpt/filemode/fd.hpp" #include "mpt/filemode/filemode.hpp" @@ -52,6 +55,10 @@ return file; } public: +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif explicit FILE_guard(mpt::filemode::mode new_mode) { std::fflush(get_FILE()); guard.emplace(new_mode); @@ -60,6 +67,10 @@ FILE_guard(FILE_guard &&) = delete; FILE_guard & operator=(const FILE_guard &) = delete; FILE_guard & operator=(FILE_guard &&) = delete; +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif ~FILE_guard() { std::fflush(get_FILE()); guard.reset(); Modified: trunk/OpenMPT/src/mpt/filemode/stdio.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/filemode/stdio.hpp Wed Jul 16 16:55:10 2025 (r23772) +++ trunk/OpenMPT/src/mpt/filemode/stdio.hpp Wed Jul 16 21:45:02 2025 (r23773) @@ -6,6 +6,9 @@ #include "mpt/base/detect.hpp" +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) +#include "mpt/base/macros.hpp" +#endif #include "mpt/base/namespace.hpp" #include "mpt/filemode/fd.hpp" #include "mpt/filemode/filemode.hpp" @@ -37,6 +40,10 @@ private: std::variant<std::monostate, mpt::filemode::iostream_guard<which>, mpt::filemode::FILE_guard<which>, mpt::filemode::fd_guard<which>> guard; public: +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif explicit stdio_guard(mpt::filemode::api api, mpt::filemode::mode mode) { switch (api) { case mpt::filemode::api::iostream: @@ -57,6 +64,10 @@ stdio_guard(stdio_guard &&) = delete; stdio_guard & operator=(const stdio_guard &) = delete; stdio_guard & operator=(stdio_guard &&) = delete; +#if MPT_GCC_AT_LEAST(14, 0, 0) && MPT_GCC_BEFORE(15, 1, 0) + // work-around bogus -Wmaybe-uninitialized + MPT_ATTR_NOINLINE MPT_DECL_NOINLINE +#endif ~stdio_guard() { guard.template emplace<std::monostate>(); } |