From 7955d0a06e77dac09be4df9d6ec712e32028a7a8 Mon Sep 17 00:00:00 2001 From: Mat Sutcliffe Date: Fri, 16 Apr 2021 22:32:01 +0100 Subject: [PATCH] Remove workarounds for fixed bugs --- mkspecs/features/warnings.pri | 14 +------ src/blackcore/fsd/fsdclient.cpp | 3 +- src/blackcore/pluginmanagerweatherdata.cpp | 3 +- src/blackgui/models/columnformatters.cpp | 4 -- src/blackgui/models/columnformatters.h | 5 ++- src/blackmisc/atomicfile.cpp | 7 +--- src/blackmisc/datacache.h | 1 - src/blackmisc/identifier.cpp | 41 +------------------ src/blackmisc/metaclass.h | 3 +- src/blackmisc/mixin/mixinhash.h | 17 +------- src/blackmisc/pq/measurementunit.h | 2 +- .../simulation/interpolatorspline.cpp | 3 +- src/blackmisc/statusmessage.cpp | 7 ---- src/blackmisc/valuecache.cpp | 11 +---- src/blackmisc/valuecache.h | 5 ++- 15 files changed, 16 insertions(+), 110 deletions(-) diff --git a/mkspecs/features/warnings.pri b/mkspecs/features/warnings.pri index 716831b22..5c1b71499 100644 --- a/mkspecs/features/warnings.pri +++ b/mkspecs/features/warnings.pri @@ -9,6 +9,7 @@ gcc:QMAKE_CXXFLAGS_USE_PRECOMPILE = -Winvalid-pch $$QMAKE_CXXFLAGS_USE_PRECOMPIL gcc|llvm:QMAKE_CXXFLAGS_WARN_ON *= -Wzero-as-null-pointer-constant gcc:QMAKE_CXXFLAGS_WARN_ON += -isystem $$[QT_INSTALL_HEADERS]/QtCore llvm:QMAKE_CXXFLAGS_WARN_ON *= -Wno-system-headers +gcc:!clang:QMAKE_CXXFLAGS_WARN_ON *= -Wsuggest-override # elevated warnings swiftConfig(allowNoisyWarnings) { @@ -32,19 +33,6 @@ else { DEFINES *= QT_NO_DEPRECATED_WARNINGS } -# gcc 5 can warn about missing override keyword, -# gcc 6 can do it without thousands of warnings in qt headers -gcc: !clang { - GCC_VERSION = $$system($$QMAKE_CXX -dumpversion) - GCC_MAJOR = $$section(GCC_VERSION, ., 0, 0) - greaterThan(GCC_MAJOR, 5) { - QMAKE_CXXFLAGS_WARN_ON *= -Wsuggest-override - } - greaterThan(GCC_MAJOR, 4):swiftConfig(allowNoisyWarnings) { - QMAKE_CXXFLAGS_WARN_ON *= -Wsuggest-override - } -} - # clazy - Qt-aware linter equals(QMAKE_CXX, clazy)|equals(QMAKE_CXX, clazy-cl) { CLAZY_WARNINGS *= level3 no-reserve-candidates qrequiredresult-candidates diff --git a/src/blackcore/fsd/fsdclient.cpp b/src/blackcore/fsd/fsdclient.cpp index e5a4c7ebb..72766a7b5 100644 --- a/src/blackcore/fsd/fsdclient.cpp +++ b/src/blackcore/fsd/fsdclient.cpp @@ -1665,11 +1665,10 @@ namespace BlackCore this->insertLatestOffsetTime(callsign, diff); int count = 0; - static const qint64 minOffsetTime = CFsdSetup::c_interimPositionTimeOffsetMsec; // no longer needed with C++17 const qint64 avgTimeMs = this->averageOffsetTimeMs(callsign, count, 3); // latest average qint64 offsetTime = CFsdSetup::c_positionTimeOffsetMsec; - if (avgTimeMs < minOffsetTime && count >= 3) + if (avgTimeMs < CFsdSetup::c_interimPositionTimeOffsetMsec && count >= 3) { offsetTime = CFsdSetup::c_interimPositionTimeOffsetMsec; } diff --git a/src/blackcore/pluginmanagerweatherdata.cpp b/src/blackcore/pluginmanagerweatherdata.cpp index 587685ada..f3a7bb92a 100644 --- a/src/blackcore/pluginmanagerweatherdata.cpp +++ b/src/blackcore/pluginmanagerweatherdata.cpp @@ -49,8 +49,7 @@ namespace BlackCore QString iid = json["IID"].toString(); if (iid == QStringLiteral("org.swift-project.blackcore.weatherdata")) { - // PluginExtended() instead of {} to silence wrong warning for gcc < 5.X - auto it = m_plugins.insert(pluginIdentifier(json), PluginExtended()); + auto it = m_plugins.insert(pluginIdentifier(json), {}); it->info.convertFromJson(json); } } diff --git a/src/blackgui/models/columnformatters.cpp b/src/blackgui/models/columnformatters.cpp index 955a8725e..8a7160517 100644 --- a/src/blackgui/models/columnformatters.cpp +++ b/src/blackgui/models/columnformatters.cpp @@ -30,10 +30,6 @@ namespace BlackGui { namespace Models { - CDefaultFormatter::CDefaultFormatter(int alignment, bool i18n, const QList &supportedRoles) : - m_supportedRoles(supportedRoles), m_alignment(alignment), m_useI18n(i18n) - {} - Qt::ItemFlags CDefaultFormatter::flags(Qt::ItemFlags flags, bool editable) const { return editable ? (flags | Qt::ItemIsEditable) : (flags & ~Qt::ItemIsEditable); diff --git a/src/blackgui/models/columnformatters.h b/src/blackgui/models/columnformatters.h index 01974d88c..4a18d8afd 100644 --- a/src/blackgui/models/columnformatters.h +++ b/src/blackgui/models/columnformatters.h @@ -38,8 +38,9 @@ namespace BlackGui { public: //! Constructor - //! \fixme Defining this inline causes ICE in Clang on Windows - CDefaultFormatter(int alignment = alignDefault(), bool i18n = true, const QList &supportedRoles = { Qt::DisplayRole }); + CDefaultFormatter(int alignment = alignDefault(), bool i18n = true, const QList &supportedRoles = { Qt::DisplayRole }) : + m_supportedRoles(supportedRoles), m_alignment(alignment), m_useI18n(i18n) + {} //! Virtual destructor virtual ~CDefaultFormatter() {} diff --git a/src/blackmisc/atomicfile.cpp b/src/blackmisc/atomicfile.cpp index 03311086a..3935f93af 100644 --- a/src/blackmisc/atomicfile.cpp +++ b/src/blackmisc/atomicfile.cpp @@ -72,12 +72,7 @@ namespace BlackMisc CAtomicFile::~CAtomicFile() { -#if __cplusplus >= 201700L - const bool ex = std::uncaught_exceptions() > 0; -#else - const bool ex = std::uncaught_exception(); -#endif - if (ex) { QFile::close(); } + if (std::uncaught_exceptions() > 0) { QFile::close(); } } void CAtomicFile::close() diff --git a/src/blackmisc/datacache.h b/src/blackmisc/datacache.h index 261568822..6a345fc3c 100644 --- a/src/blackmisc/datacache.h +++ b/src/blackmisc/datacache.h @@ -384,7 +384,6 @@ namespace BlackMisc //! If the value is currently being loaded, wait for it to finish loading, and call the notification slot, if any. void synchronize() { - // does not compile on gcc without "this" -> this->m_page auto *queue = this->m_page->template findChild(); Q_ASSERT(queue); this->admit(); diff --git a/src/blackmisc/identifier.cpp b/src/blackmisc/identifier.cpp index 2672e60fe..5c4fe20a6 100644 --- a/src/blackmisc/identifier.cpp +++ b/src/blackmisc/identifier.cpp @@ -16,14 +16,6 @@ #include #include -#ifdef Q_OS_WIN -#include -#endif - -#ifdef Q_OS_MAC -#include -#endif - //! \private Escape characters not allowed in dbus paths QString toDBusPath(const QString &s) { @@ -69,40 +61,9 @@ enum UuidStringLen = sizeof("00000000-0000-0000-0000-000000000000") }; -QByteArray getMachineUniqueIdImpl() -{ - // TODO RR: Remove the workaround branches as soon as the following two changes are published in 5.12.2 (TBC) - // https://codereview.qt-project.org/#/c/249256 - // https://codereview.qt-project.org/#/c/249399 - - QByteArray machineUniqueId; -#ifdef Q_OS_MAC - char uuid[UuidStringLen]; - size_t uuidlen = sizeof(uuid); - int ret = sysctlbyname("kern.uuid", uuid, &uuidlen, nullptr, 0); - if (ret == 0 && uuidlen == sizeof(uuid)) - { - machineUniqueId = QByteArray(uuid, uuidlen - 1); - } -#elif defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - HKEY key = nullptr; - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Cryptography", 0, KEY_READ | KEY_WOW64_64KEY, &key) == ERROR_SUCCESS) - { - wchar_t buffer[UuidStringLen]; - DWORD size = sizeof(buffer); - bool ok = (RegQueryValueEx(key, L"MachineGuid", nullptr, nullptr, reinterpret_cast(buffer), &size) == ERROR_SUCCESS); - RegCloseKey(key); - if (ok) { machineUniqueId = QStringView(buffer, (size - 1) / 2).toLatin1(); } - } -#else - machineUniqueId = QSysInfo::machineUniqueId(); -#endif - return machineUniqueId; -} - QByteArray cachedMachineUniqueId() { - static const QByteArray machineUniqueId = getMachineUniqueIdImpl(); + static const QByteArray machineUniqueId = QSysInfo::machineUniqueId(); return machineUniqueId; } diff --git a/src/blackmisc/metaclass.h b/src/blackmisc/metaclass.h index 64a36e7d0..a2866b0e1 100644 --- a/src/blackmisc/metaclass.h +++ b/src/blackmisc/metaclass.h @@ -298,8 +298,7 @@ namespace BlackMisc template using index = std::integral_constant; - // Trailing return type needed to work around MSVC "function returning auto can not be used before it has been defined" with /permissive- - constexpr static auto members() -> decltype(MetaClass::getMemberList()) { return MetaClass::getMemberList(); } + constexpr static auto members() { return MetaClass::getMemberList(); } }; // *INDENT-ON* diff --git a/src/blackmisc/mixin/mixinhash.h b/src/blackmisc/mixin/mixinhash.h index 41fc4eb63..82abed4a4 100644 --- a/src/blackmisc/mixin/mixinhash.h +++ b/src/blackmisc/mixin/mixinhash.h @@ -39,21 +39,6 @@ namespace BlackMisc // Alternative would be to qualify all our invokations of the global qHash as ::qHash. using ::qHash; - namespace Private - { - //! \cond PRIVATE - // Work around MSVC2015 bug affecting generic lambda - template - struct Hasher - { - template - void operator()(const U &member) { m_hash ^= qHash(member.in(m_object)); } - const T &m_object; - uint &m_hash; - }; - //! \endcond - } - namespace Mixin { /*! @@ -76,7 +61,7 @@ namespace BlackMisc { uint hash = baseHash(static_cast *>(&value)); constexpr auto meta = introspect().without(MetaFlags()); - meta.forEachMember(Private::Hasher { value, hash }); + meta.forEachMember([ & ](const auto &member) { hash ^= qHash(member.in(value)); }); return hash; } diff --git a/src/blackmisc/pq/measurementunit.h b/src/blackmisc/pq/measurementunit.h index b4aad2763..5254626d9 100644 --- a/src/blackmisc/pq/measurementunit.h +++ b/src/blackmisc/pq/measurementunit.h @@ -226,7 +226,7 @@ namespace BlackMisc ConverterFunction m_fromDefault = nullptr; //!< convert to this unit from default unit }; - //! Workaround to constant-initialize QLatin1String on platforms without constexpr strlen. + //! Constant-initialize QLatin1String without using strlen. template static constexpr QLatin1String constQLatin1(const char (&str)[N]) { diff --git a/src/blackmisc/simulation/interpolatorspline.cpp b/src/blackmisc/simulation/interpolatorspline.cpp index 4ab7517a5..cdd42a320 100644 --- a/src/blackmisc/simulation/interpolatorspline.cpp +++ b/src/blackmisc/simulation/interpolatorspline.cpp @@ -134,8 +134,7 @@ namespace BlackMisc } // set some default values - const qint64 defaultValueMs = CFsdSetup::c_interimPositionTimeOffsetMsec; // CLANG cannot use reference in qMax - const qint64 os = qMax(defaultValueMs, m_s[2].getTimeOffsetMs()); + const qint64 os = qMax(CFsdSetup::c_interimPositionTimeOffsetMsec, m_s[2].getTimeOffsetMs()); m_s[0].addMsecs(-os); // oldest, Ref T297 default offset time to fill data m_s[2].addMsecs(os); // latest, Ref T297 default offset time to fill data if (m_currentSituations.isEmpty()) { return false; } diff --git a/src/blackmisc/statusmessage.cpp b/src/blackmisc/statusmessage.cpp index cb7c24c36..3061852b8 100644 --- a/src/blackmisc/statusmessage.cpp +++ b/src/blackmisc/statusmessage.cpp @@ -61,13 +61,6 @@ namespace BlackMisc } } - // needed because these constants are odr-used (just like traditional C++98 static const) - // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54483 - const StatusSeverity CStatusMessage::SeverityDebug; - const StatusSeverity CStatusMessage::SeverityInfo; - const StatusSeverity CStatusMessage::SeverityWarning; - const StatusSeverity CStatusMessage::SeverityError; - CStatusMessage::CStatusMessage(const CLogCategory &category) : CMessageBase(category), ITimestampBased(QDateTime::currentMSecsSinceEpoch()) {} diff --git a/src/blackmisc/valuecache.cpp b/src/blackmisc/valuecache.cpp index f13b6db22..5e1652d68 100644 --- a/src/blackmisc/valuecache.cpp +++ b/src/blackmisc/valuecache.cpp @@ -72,10 +72,6 @@ namespace BlackMisc // CValueCachePacket //////////////////////////////// - CValueCachePacket::CValueCachePacket(bool saved, bool valuesChanged) : - m_saved(saved), m_valuesChanged(valuesChanged) - {} - CValueCachePacket::CValueCachePacket(const CVariantMap &values, qint64 timestamp, bool saved, bool valuesChanged) : m_saved(saved), m_valuesChanged(valuesChanged) { @@ -570,12 +566,7 @@ namespace BlackMisc { if (m_page) { -#if __cplusplus >= 201700L - const bool ex = std::uncaught_exceptions() > 0; -#else - const bool ex = std::uncaught_exception(); -#endif - if (ex) { m_page->abandonBatch(); } + if (std::uncaught_exceptions() > 0) { m_page->abandonBatch(); } else { m_page->endBatch(); } } } diff --git a/src/blackmisc/valuecache.h b/src/blackmisc/valuecache.h index 1f879c49e..e31426f2d 100644 --- a/src/blackmisc/valuecache.h +++ b/src/blackmisc/valuecache.h @@ -78,8 +78,9 @@ namespace BlackMisc using base_type = CDictionary; //! Constructor. - //! \fixme Defining this inline causes ICE in Clang on Windows - CValueCachePacket(bool saved = false, bool valuesChanged = true); + CValueCachePacket(bool saved = false, bool valuesChanged = true) : + m_saved(saved), m_valuesChanged(valuesChanged) + {} //! Construct from CVariantMap and a timestamp. CValueCachePacket(const CVariantMap &values, qint64 timestamp, bool saved = false, bool valuesChanged = true);