diff options
author | Tim Blechmann <tim@klingt.org> | 2024-04-24 12:55:58 +0800 |
---|---|---|
committer | Tim Blechmann <tim@klingt.org> | 2024-04-30 13:37:53 +0000 |
commit | 88988c900d9bca3967816f8a3d0e30bf4178ed0f (patch) | |
tree | 9da3911569bb77fccb5f626021c3e7310afb622b | |
parent | 4949768067cfc8a16c0cef958928e94147842bb8 (diff) |
QmlCompiler: fix unity builds
`deduplicate` was declared in two translation units, which is breaking
unity builds. Moving the definition to QQmlJSUtils fixes the builds and
makes the code more robust towards potential ODR violations in case the
function is ever changed in one TU, but not in the other.
Change-Id: I57627399d50d284ce031af245fd4ad5aa1ab6405
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r-- | src/qmlcompiler/qqmljsbasicblocks.cpp | 12 | ||||
-rw-r--r-- | src/qmlcompiler/qqmljsoptimizations.cpp | 13 | ||||
-rw-r--r-- | src/qmlcompiler/qqmljsutils_p.h | 8 |
3 files changed, 13 insertions, 20 deletions
diff --git a/src/qmlcompiler/qqmljsbasicblocks.cpp b/src/qmlcompiler/qqmljsbasicblocks.cpp index 671cac0d25..392a8b9ba7 100644 --- a/src/qmlcompiler/qqmljsbasicblocks.cpp +++ b/src/qmlcompiler/qqmljsbasicblocks.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "qqmljsbasicblocks_p.h" +#include "qqmljsutils_p.h" #include <QtQml/private/qv4instr_moth_p.h> @@ -101,15 +102,6 @@ void QQmlJSBasicBlocks::dumpDOTGraph() } } -template<typename Container> -void deduplicate(Container &container) -{ - std::sort(container.begin(), container.end()); - auto erase = std::unique(container.begin(), container.end()); - container.erase(erase, container.end()); -} - - QQmlJSCompilePass::BlocksAndAnnotations QQmlJSBasicBlocks::run(const Function *function, QQmlJSAotCompiler::Flags compileFlags, bool &basicBlocksValidationFailed) @@ -156,7 +148,7 @@ QQmlJSBasicBlocks::run(const Function *function, QQmlJSAotCompiler::Flags compil reset(); decode(byteCode.constData(), static_cast<uint>(byteCode.size())); for (auto it = m_basicBlocks.begin(), end = m_basicBlocks.end(); it != end; ++it) - deduplicate(it->second.jumpOrigins); + QQmlJSUtils::deduplicate(it->second.jumpOrigins); } if (compileFlags.testFlag(QQmlJSAotCompiler::ValidateBasicBlocks) || qv4ValidateBasicBlocks()) { diff --git a/src/qmlcompiler/qqmljsoptimizations.cpp b/src/qmlcompiler/qqmljsoptimizations.cpp index ecef117c53..1d0a7cf415 100644 --- a/src/qmlcompiler/qqmljsoptimizations.cpp +++ b/src/qmlcompiler/qqmljsoptimizations.cpp @@ -3,6 +3,7 @@ #include "qqmljsoptimizations_p.h" #include "qqmljsbasicblocks_p.h" +#include "qqmljsutils_p.h" QT_BEGIN_NAMESPACE @@ -28,14 +29,6 @@ struct PendingBlock bool registerActive = false; }; -template <typename Container> -void deduplicate(Container &container) -{ - std::sort(container.begin(), container.end()); - auto erase = std::unique(container.begin(), container.end()); - container.erase(erase, container.end()); -} - template<typename ContainerA, typename ContainerB> static bool containsAny(const ContainerA &container, const ContainerB &elements) { @@ -529,8 +522,8 @@ void QQmlJSOptimizations::populateBasicBlocks() } } - deduplicate(block.readTypes); - deduplicate(block.readRegisters); + QQmlJSUtils::deduplicate(block.readTypes); + QQmlJSUtils::deduplicate(block.readRegisters); } } diff --git a/src/qmlcompiler/qqmljsutils_p.h b/src/qmlcompiler/qqmljsutils_p.h index 9eb6840f9d..eaa834bec9 100644 --- a/src/qmlcompiler/qqmljsutils_p.h +++ b/src/qmlcompiler/qqmljsutils_p.h @@ -364,6 +364,14 @@ struct Q_QMLCOMPILER_EXPORT QQmlJSUtils static std::variant<QString, QQmlJS::DiagnosticMessage> sourceDirectoryPath(const QQmlJSImporter *importer, const QString &buildDirectoryPath); + + template <typename Container> + static void deduplicate(Container &container) + { + std::sort(container.begin(), container.end()); + auto erase = std::unique(container.begin(), container.end()); + container.erase(erase, container.end()); + } }; bool Q_QMLCOMPILER_EXPORT canStrictlyCompareWithVar( |