forked from qt-creator/qt-creator
Clang: Fix crash if updating pch info
Function-local variable 'updateParams' was referenced after destruction. Change-Id: Iac9663ba4ca9c3a603bc530f57f419b734782694 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
@@ -161,7 +161,7 @@ void PchManager::updatePchInfo(ClangProjectSettings *cps,
|
|||||||
const ClangProjectSettings::PchUsage pchUsage = cps->pchUsage();
|
const ClangProjectSettings::PchUsage pchUsage = cps->pchUsage();
|
||||||
|
|
||||||
void (*updateFunction)(QFutureInterface<void> &future,
|
void (*updateFunction)(QFutureInterface<void> &future,
|
||||||
const PchManager::UpdateParams ¶ms) = 0;
|
const PchManager::UpdateParams params) = 0;
|
||||||
QString message;
|
QString message;
|
||||||
if (pchUsage == ClangProjectSettings::PchUse_None
|
if (pchUsage == ClangProjectSettings::PchUse_None
|
||||||
|| (pchUsage == ClangProjectSettings::PchUse_Custom && customPchFile.isEmpty())) {
|
|| (pchUsage == ClangProjectSettings::PchUse_Custom && customPchFile.isEmpty())) {
|
||||||
@@ -181,9 +181,8 @@ void PchManager::updatePchInfo(ClangProjectSettings *cps,
|
|||||||
QTC_ASSERT(updateFunction && !message.isEmpty(), return);
|
QTC_ASSERT(updateFunction && !message.isEmpty(), return);
|
||||||
|
|
||||||
Core::MessageManager::write(message, Core::MessageManager::Silent);
|
Core::MessageManager::write(message, Core::MessageManager::Silent);
|
||||||
const UpdateParams updateParams = UpdateParams(customPchFile, projectParts);
|
QFuture<void> future = QtConcurrent::run(updateFunction,
|
||||||
QFuture<void> future
|
UpdateParams(customPchFile, projectParts));
|
||||||
= QtConcurrent::run<void, const UpdateParams &>(updateFunction, updateParams);
|
|
||||||
m_pchGenerationWatcher.setFuture(future);
|
m_pchGenerationWatcher.setFuture(future);
|
||||||
Core::ProgressManager::addTask(future, tr("Precompiling..."), "Key.Tmp.Precompiling");
|
Core::ProgressManager::addTask(future, tr("Precompiling..."), "Key.Tmp.Precompiling");
|
||||||
}
|
}
|
||||||
@@ -237,7 +236,8 @@ CppTools::ProjectFile::Kind getPrefixFileKind(bool hasObjectiveC, bool hasCPlusP
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PchManager::doPchInfoUpdateNone(QFutureInterface<void> &future, const PchManager::UpdateParams ¶ms)
|
void PchManager::doPchInfoUpdateNone(QFutureInterface<void> &future,
|
||||||
|
const PchManager::UpdateParams params)
|
||||||
{
|
{
|
||||||
future.setProgressRange(0, 1);
|
future.setProgressRange(0, 1);
|
||||||
PchInfo::Ptr emptyPch = PchInfo::createEmpty();
|
PchInfo::Ptr emptyPch = PchInfo::createEmpty();
|
||||||
@@ -246,7 +246,8 @@ void PchManager::doPchInfoUpdateNone(QFutureInterface<void> &future, const PchMa
|
|||||||
future.setProgressValue(1);
|
future.setProgressValue(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PchManager::doPchInfoUpdateFuzzy(QFutureInterface<void> &future, const PchManager::UpdateParams ¶ms)
|
void PchManager::doPchInfoUpdateFuzzy(QFutureInterface<void> &future,
|
||||||
|
const PchManager::UpdateParams params)
|
||||||
{
|
{
|
||||||
QHash<QString, QSet<QString> > includes, frameworks;
|
QHash<QString, QSet<QString> > includes, frameworks;
|
||||||
QHash<QString, QSet<QByteArray> > definesPerPCH;
|
QHash<QString, QSet<QByteArray> > definesPerPCH;
|
||||||
@@ -338,7 +339,8 @@ void PchManager::doPchInfoUpdateFuzzy(QFutureInterface<void> &future, const PchM
|
|||||||
future.setProgressValue(future.progressValue() + 1);
|
future.setProgressValue(future.progressValue() + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PchManager::doPchInfoUpdateExact(QFutureInterface<void> &future, const PchManager::UpdateParams ¶ms)
|
void PchManager::doPchInfoUpdateExact(QFutureInterface<void> &future,
|
||||||
|
const PchManager::UpdateParams params)
|
||||||
{
|
{
|
||||||
future.setProgressRange(0, params.projectParts.size() + 1);
|
future.setProgressRange(0, params.projectParts.size() + 1);
|
||||||
future.setProgressValue(0);
|
future.setProgressValue(0);
|
||||||
@@ -370,7 +372,8 @@ void PchManager::doPchInfoUpdateExact(QFutureInterface<void> &future, const PchM
|
|||||||
future.setProgressValue(future.progressValue() + 1);
|
future.setProgressValue(future.progressValue() + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PchManager::doPchInfoUpdateCustom(QFutureInterface<void> &future, const PchManager::UpdateParams ¶ms)
|
void PchManager::doPchInfoUpdateCustom(QFutureInterface<void> &future,
|
||||||
|
const PchManager::UpdateParams params)
|
||||||
{
|
{
|
||||||
future.setProgressRange(0, 1);
|
future.setProgressRange(0, 1);
|
||||||
future.setProgressValue(0);
|
future.setProgressValue(0);
|
||||||
|
@@ -85,10 +85,10 @@ private:
|
|||||||
void updatePchInfo(ClangProjectSettings *cps,
|
void updatePchInfo(ClangProjectSettings *cps,
|
||||||
const QList<ProjectPart::Ptr> &projectParts);
|
const QList<ProjectPart::Ptr> &projectParts);
|
||||||
|
|
||||||
static void doPchInfoUpdateNone(QFutureInterface<void> &future, const UpdateParams ¶ms);
|
static void doPchInfoUpdateNone(QFutureInterface<void> &future, const UpdateParams params);
|
||||||
static void doPchInfoUpdateFuzzy(QFutureInterface<void> &future, const UpdateParams ¶ms);
|
static void doPchInfoUpdateFuzzy(QFutureInterface<void> &future, const UpdateParams params);
|
||||||
static void doPchInfoUpdateExact(QFutureInterface<void> &future, const UpdateParams ¶ms);
|
static void doPchInfoUpdateExact(QFutureInterface<void> &future, const UpdateParams params);
|
||||||
static void doPchInfoUpdateCustom(QFutureInterface<void> &future, const UpdateParams ¶ms);
|
static void doPchInfoUpdateCustom(QFutureInterface<void> &future, const UpdateParams params);
|
||||||
|
|
||||||
void setPCHInfo(const QList<ProjectPart::Ptr> &projectParts,
|
void setPCHInfo(const QList<ProjectPart::Ptr> &projectParts,
|
||||||
const PchInfo::Ptr &pchInfo,
|
const PchInfo::Ptr &pchInfo,
|
||||||
|
Reference in New Issue
Block a user