From 3154002fb6b20981ad5de8b677199d30df565b47 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 13 Feb 2019 19:08:57 +0100 Subject: [PATCH] ClangPchManager: Fix PchTaskMerger We forgot to remove the duplicates for used macros. Task-number: QTCREATORBUG-21955 Change-Id: I051b8199ba5dd0a173d80c9e526bf745d3bcd777 Reviewed-by: Ivan Donchevskii --- .../clangpchmanagerbackend/source/pchtasksmerger.cpp | 5 +++-- .../clangpchmanagerbackend/source/usedmacrofilter.h | 9 ++++++--- tests/unit/unittest/pchtasksmerger-test.cpp | 6 +++--- tests/unit/unittest/usedmacrofilter-test.cpp | 10 +++++++++- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/tools/clangpchmanagerbackend/source/pchtasksmerger.cpp b/src/tools/clangpchmanagerbackend/source/pchtasksmerger.cpp index 636d9a32364..50851a838a0 100644 --- a/src/tools/clangpchmanagerbackend/source/pchtasksmerger.cpp +++ b/src/tools/clangpchmanagerbackend/source/pchtasksmerger.cpp @@ -71,7 +71,7 @@ bool PchTasksMerger::hasDuplicates(const CompilerMacros &compilerMacros) return first.key == second.key; }); - return found == compilerMacros.end(); + return found != compilerMacros.end(); } IncludeSearchPaths mergeIncludeSearchPaths(IncludeSearchPaths &&first, IncludeSearchPaths &&second) @@ -89,7 +89,8 @@ bool PchTasksMerger::mergePchTasks(PchTask &firstTask, PchTask &secondTask) CompilerMacros macros = mergeMacros(firstTask.compilerMacros, secondTask.compilerMacros); - secondTask.isMerged = hasDuplicates(macros); + secondTask.isMerged = !hasDuplicates(macros); + if (secondTask.isMerged && firstTask.language == secondTask.language) { firstTask.projectPartIds = merge(std::move(firstTask.projectPartIds), diff --git a/src/tools/clangpchmanagerbackend/source/usedmacrofilter.h b/src/tools/clangpchmanagerbackend/source/usedmacrofilter.h index 0b39ae1f4f2..fe08cf71ac9 100644 --- a/src/tools/clangpchmanagerbackend/source/usedmacrofilter.h +++ b/src/tools/clangpchmanagerbackend/source/usedmacrofilter.h @@ -93,8 +93,8 @@ public: return std::tie(first.key, first.value) < std::tie(second.key, second.value); }); - systemCompilerMacros = filtercompilerMacros(indexedCompilerMacro, systemUsedMacros); - projectCompilerMacros = filtercompilerMacros(indexedCompilerMacro, projectUsedMacros); + systemCompilerMacros = filterCompilerMacros(indexedCompilerMacro, systemUsedMacros); + projectCompilerMacros = filterCompilerMacros(indexedCompilerMacro, projectUsedMacros); } private: @@ -150,10 +150,13 @@ private: std::sort(filtertedMacros.begin(), filtertedMacros.end()); + auto newEnd = std::unique(filtertedMacros.begin(), filtertedMacros.end()); + filtertedMacros.erase(newEnd, filtertedMacros.end()); + return filtertedMacros; } - static CompilerMacros filtercompilerMacros(const CompilerMacros &indexedCompilerMacro, + static CompilerMacros filterCompilerMacros(const CompilerMacros &indexedCompilerMacro, const Utils::SmallStringVector &usedMacros) { CompilerMacros filtertedCompilerMacros; diff --git a/tests/unit/unittest/pchtasksmerger-test.cpp b/tests/unit/unittest/pchtasksmerger-test.cpp index e878438f339..c279da505e7 100644 --- a/tests/unit/unittest/pchtasksmerger-test.cpp +++ b/tests/unit/unittest/pchtasksmerger-test.cpp @@ -173,7 +173,7 @@ TEST_F(PchTasksMerger, MacrosCanBeMerged) CompilerMacros compilerMacros1{{"ER", "2", 2}, {"QI"}, {"SE", "4", 1}, {"SAN", "3", 3}}; CompilerMacros compilerMacros2{{"BA"}, {"ER", "2", 2}, {"YI", "1", 1}, {"SAN", "3", 3}}; - auto canBeMerged = Merger::hasDuplicates(Merger::mergeMacros(compilerMacros1, compilerMacros2)); + auto canBeMerged = !Merger::hasDuplicates(Merger::mergeMacros(compilerMacros1, compilerMacros2)); ASSERT_TRUE(canBeMerged); } @@ -183,7 +183,7 @@ TEST_F(PchTasksMerger, MacrosCannotBeMergedBecauseDifferentValue) CompilerMacros compilerMacros1{{"ER", "2", 2}, {"SE", "4", 1}, {"SAN", "3", 3}}; CompilerMacros compilerMacros2{{"ER", "1", 2}, {"YI", "1", 1}, {"SAN", "3", 3}}; - auto canBeMerged = Merger::hasDuplicates(Merger::mergeMacros(compilerMacros1, compilerMacros2)); + auto canBeMerged = !Merger::hasDuplicates(Merger::mergeMacros(compilerMacros1, compilerMacros2)); ASSERT_FALSE(canBeMerged); } @@ -193,7 +193,7 @@ TEST_F(PchTasksMerger, MacrosCannotBeMergedBecauseUndefinedMacro) CompilerMacros compilerMacros1{{"ER", "2", 2}, {"SE", "4", 1}, {"YI"}, {"SAN", "3", 3}}; CompilerMacros compilerMacros2{{"ER", "2", 2}, {"YI", "1", 1}, {"SAN", "3", 3}}; - auto canBeMerged = Merger::hasDuplicates(Merger::mergeMacros(compilerMacros1, compilerMacros2)); + auto canBeMerged = !Merger::hasDuplicates(Merger::mergeMacros(compilerMacros1, compilerMacros2)); ASSERT_FALSE(canBeMerged); } diff --git a/tests/unit/unittest/usedmacrofilter-test.cpp b/tests/unit/unittest/usedmacrofilter-test.cpp index b02cd7e5e02..bdde5417afb 100644 --- a/tests/unit/unittest/usedmacrofilter-test.cpp +++ b/tests/unit/unittest/usedmacrofilter-test.cpp @@ -46,7 +46,15 @@ protected: {3, SourceType::ProjectInclude, 0}, {4, SourceType::TopSystemInclude, 0}, {5, SourceType::TopProjectInclude, 0}}; - UsedMacros usedMacros{{"YI", 1}, {"ER", 2}, {"LIU", 2}, {"QI", 3}, {"SAN", 3}, {"SE", 4}, {"WU", 5}}; + UsedMacros usedMacros{{"YI", 1}, + {"ER", 2}, + {"SE", 2}, + {"LIU", 2}, + {"QI", 3}, + {"WU", 3}, + {"SAN", 3}, + {"SE", 4}, + {"WU", 5}}; CompilerMacros compileMacros{{"YI", "1", 1}, {"ER", "2", 2}, {"SAN", "3", 3},