diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-11-08 12:05:46 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-11-08 13:14:19 +0000 |
commit | c8c642dde0ab32a25942e970a8a332694f47c10c (patch) | |
tree | 2f539260ee06e2ccfb7eb86801503ea655ed51a2 /src/plugins | |
parent | 4a09a6a2cfcad5014a4ab2617bf131c2437df1b8 (diff) | |
download | qt-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.cpp | 3 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodemodelsettings.cpp | 5 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodemodelsettings.h | 1 |
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; |