ClangPchManager: Fix PchTaskMerger

We forgot to remove the duplicates for used macros.

Task-number: QTCREATORBUG-21955
Change-Id: I051b8199ba5dd0a173d80c9e526bf745d3bcd777
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Marco Bubke
2019-02-13 19:08:57 +01:00
parent 716a96a55b
commit 3154002fb6
4 changed files with 21 additions and 9 deletions

View File

@@ -71,7 +71,7 @@ bool PchTasksMerger::hasDuplicates(const CompilerMacros &compilerMacros)
return first.key == second.key; return first.key == second.key;
}); });
return found == compilerMacros.end(); return found != compilerMacros.end();
} }
IncludeSearchPaths mergeIncludeSearchPaths(IncludeSearchPaths &&first, IncludeSearchPaths &&second) IncludeSearchPaths mergeIncludeSearchPaths(IncludeSearchPaths &&first, IncludeSearchPaths &&second)
@@ -89,7 +89,8 @@ bool PchTasksMerger::mergePchTasks(PchTask &firstTask, PchTask &secondTask)
CompilerMacros macros = mergeMacros(firstTask.compilerMacros, secondTask.compilerMacros); CompilerMacros macros = mergeMacros(firstTask.compilerMacros, secondTask.compilerMacros);
secondTask.isMerged = hasDuplicates(macros); secondTask.isMerged = !hasDuplicates(macros);
if (secondTask.isMerged && firstTask.language == secondTask.language) { if (secondTask.isMerged && firstTask.language == secondTask.language) {
firstTask.projectPartIds = merge(std::move(firstTask.projectPartIds), firstTask.projectPartIds = merge(std::move(firstTask.projectPartIds),

View File

@@ -93,8 +93,8 @@ public:
return std::tie(first.key, first.value) < std::tie(second.key, second.value); return std::tie(first.key, first.value) < std::tie(second.key, second.value);
}); });
systemCompilerMacros = filtercompilerMacros(indexedCompilerMacro, systemUsedMacros); systemCompilerMacros = filterCompilerMacros(indexedCompilerMacro, systemUsedMacros);
projectCompilerMacros = filtercompilerMacros(indexedCompilerMacro, projectUsedMacros); projectCompilerMacros = filterCompilerMacros(indexedCompilerMacro, projectUsedMacros);
} }
private: private:
@@ -150,10 +150,13 @@ private:
std::sort(filtertedMacros.begin(), filtertedMacros.end()); std::sort(filtertedMacros.begin(), filtertedMacros.end());
auto newEnd = std::unique(filtertedMacros.begin(), filtertedMacros.end());
filtertedMacros.erase(newEnd, filtertedMacros.end());
return filtertedMacros; return filtertedMacros;
} }
static CompilerMacros filtercompilerMacros(const CompilerMacros &indexedCompilerMacro, static CompilerMacros filterCompilerMacros(const CompilerMacros &indexedCompilerMacro,
const Utils::SmallStringVector &usedMacros) const Utils::SmallStringVector &usedMacros)
{ {
CompilerMacros filtertedCompilerMacros; CompilerMacros filtertedCompilerMacros;

View File

@@ -173,7 +173,7 @@ TEST_F(PchTasksMerger, MacrosCanBeMerged)
CompilerMacros compilerMacros1{{"ER", "2", 2}, {"QI"}, {"SE", "4", 1}, {"SAN", "3", 3}}; CompilerMacros compilerMacros1{{"ER", "2", 2}, {"QI"}, {"SE", "4", 1}, {"SAN", "3", 3}};
CompilerMacros compilerMacros2{{"BA"}, {"ER", "2", 2}, {"YI", "1", 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); ASSERT_TRUE(canBeMerged);
} }
@@ -183,7 +183,7 @@ TEST_F(PchTasksMerger, MacrosCannotBeMergedBecauseDifferentValue)
CompilerMacros compilerMacros1{{"ER", "2", 2}, {"SE", "4", 1}, {"SAN", "3", 3}}; CompilerMacros compilerMacros1{{"ER", "2", 2}, {"SE", "4", 1}, {"SAN", "3", 3}};
CompilerMacros compilerMacros2{{"ER", "1", 2}, {"YI", "1", 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); ASSERT_FALSE(canBeMerged);
} }
@@ -193,7 +193,7 @@ TEST_F(PchTasksMerger, MacrosCannotBeMergedBecauseUndefinedMacro)
CompilerMacros compilerMacros1{{"ER", "2", 2}, {"SE", "4", 1}, {"YI"}, {"SAN", "3", 3}}; CompilerMacros compilerMacros1{{"ER", "2", 2}, {"SE", "4", 1}, {"YI"}, {"SAN", "3", 3}};
CompilerMacros compilerMacros2{{"ER", "2", 2}, {"YI", "1", 1}, {"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); ASSERT_FALSE(canBeMerged);
} }

View File

@@ -46,7 +46,15 @@ protected:
{3, SourceType::ProjectInclude, 0}, {3, SourceType::ProjectInclude, 0},
{4, SourceType::TopSystemInclude, 0}, {4, SourceType::TopSystemInclude, 0},
{5, SourceType::TopProjectInclude, 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}, CompilerMacros compileMacros{{"YI", "1", 1},
{"ER", "2", 2}, {"ER", "2", 2},
{"SAN", "3", 3}, {"SAN", "3", 3},