summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2018-11-08 12:05:46 +0100
committerNikolai Kosjar <nikolai.kosjar@qt.io>2018-11-08 13:14:19 +0000
commitc8c642dde0ab32a25942e970a8a332694f47c10c (patch)
tree2f539260ee06e2ccfb7eb86801503ea655ed51a2 /src/plugins
parent4a09a6a2cfcad5014a4ab2617bf131c2437df1b8 (diff)
downloadqt-creator-c8c642dde0ab32a25942e970a8a332694f47c10c.tar.gz
Clang: Fix crash when removing diagnostic config
1. Create some Qt Console Application from the wizard 2. Open Tools > Options > C++ > Code Model 2.1 Click "Manage..." and create a custom configuration "custom" and finish with OK. 2.2 Set "custom" as diagnostic config. 3. Analyze > "Clang-Tidy and Clazy..." 3.1 Use "Custom Settings" 3.2 Click "Manage..." and remove "custom" ==> Crash The crash happened because the code model used an invalid diagnostic config id. The invalid id came from the settings, which were not correctly upated. Fixes: QTCREATORBUG-21273 Change-Id: I5242f7c92e121eec8558fa7923139bb3d759c676 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp3
-rw-r--r--src/plugins/cpptools/cppcodemodelsettings.cpp5
-rw-r--r--src/plugins/cpptools/cppcodemodelsettings.h1
3 files changed, 9 insertions, 0 deletions
diff --git a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp
index 70432047cf..06d8478b50 100644
--- a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp
+++ b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp
@@ -126,6 +126,9 @@ void ClangDiagnosticConfigsSelectionWidget::connectToClangDiagnosticConfigsDialo
= settings->clangCustomDiagnosticConfigs();
const ClangDiagnosticConfigs currentDiagnosticConfigs = widget->customConfigs();
if (oldDiagnosticConfigs != currentDiagnosticConfigs) {
+ const ClangDiagnosticConfigsModel configsModel(currentDiagnosticConfigs);
+ if (!configsModel.hasConfigWithId(settings->clangDiagnosticConfigId()))
+ settings->resetClangDiagnosticConfigId();
settings->setClangCustomDiagnosticConfigs(currentDiagnosticConfigs);
settings->toSettings(Core::ICore::settings());
}
diff --git a/src/plugins/cpptools/cppcodemodelsettings.cpp b/src/plugins/cpptools/cppcodemodelsettings.cpp
index b7ebb1ddaa..7a5c987740 100644
--- a/src/plugins/cpptools/cppcodemodelsettings.cpp
+++ b/src/plugins/cpptools/cppcodemodelsettings.cpp
@@ -195,6 +195,11 @@ void CppCodeModelSettings::setClangDiagnosticConfigId(const Core::Id &configId)
m_clangDiagnosticConfigId = configId;
}
+void CppCodeModelSettings::resetClangDiagnosticConfigId()
+{
+ m_clangDiagnosticConfigId = initialClangDiagnosticConfigId();
+}
+
const ClangDiagnosticConfig CppCodeModelSettings::clangDiagnosticConfig() const
{
const ClangDiagnosticConfigsModel configsModel(m_clangCustomDiagnosticConfigs);
diff --git a/src/plugins/cpptools/cppcodemodelsettings.h b/src/plugins/cpptools/cppcodemodelsettings.h
index bc91fbd1b8..92e52554c2 100644
--- a/src/plugins/cpptools/cppcodemodelsettings.h
+++ b/src/plugins/cpptools/cppcodemodelsettings.h
@@ -55,6 +55,7 @@ public:
public:
Core::Id clangDiagnosticConfigId() const;
void setClangDiagnosticConfigId(const Core::Id &configId);
+ void resetClangDiagnosticConfigId();
const ClangDiagnosticConfig clangDiagnosticConfig() const;
ClangDiagnosticConfigs clangCustomDiagnosticConfigs() const;