forked from qt-creator/qt-creator
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:
@@ -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),
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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},
|
||||||
|
Reference in New Issue
Block a user