From 8441bb0933bb1d4765540443226252b6a1e1b297 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 4 Apr 2018 12:03:39 +0200 Subject: [PATCH] Clang: Avoid warnings about unknown warning options ...as they are generated by e.g. Q_OBJECT use. Previously we have avoided Q_OBJECT warnings by using -Wno-unknown-pragmas (Qt Creator build with libclang 3.9). With the upgrade to libclang 5.0 GCC pragmas can now be parsed by clang and the related warning option thus changed to -Wunknown-warning-option. Note that previously -Wno-unknown-pragmas was part of every built-in configuration and visible in the UI. Now that option and the new one are added behind the scenes (not visible in the UI anymore) so that every diagnostic configuration, also the copied/customized ones, will profit from it. Still, by putting this hidden options first on the command line, the user can overwrite them with his own configuration if desired. Task-number: QTCREATORBUG-17460 Change-Id: I68aaec1b4791522bd8dc4e5fdb405cc5b9c9f514 Reviewed-by: Ivan Donchevskii --- .../clangcodemodel/clangeditordocumentprocessor.cpp | 10 ++++++++++ src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp | 11 +++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 9771c1115b9..69b487534a0 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -439,6 +439,7 @@ public: , m_projectPart(projectPart) { addLanguageOptions(); + addGlobalDiagnosticOptions(); // Before addDiagnosticOptions() so users still can overwrite. addDiagnosticOptions(); addGlobalOptions(); addPrecompiledHeaderOptions(); @@ -519,6 +520,15 @@ private: addXclangArg("-plugin-arg-clang-lazy", checks); } + void addGlobalDiagnosticOptions() + { + m_options.append({ + // Avoid undesired warnings from e.g. Q_OBJECT + QStringLiteral("-Wno-unknown-pragmas"), + QStringLiteral("-Wno-unknown-warning-option") + }); + } + void addGlobalOptions() { if (!m_projectPart.project) diff --git a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp index 4580e82801d..d06afa909b0 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp @@ -33,11 +33,6 @@ namespace CppTools { -static QStringList commonWarnings() -{ - return { QStringLiteral("-Wno-unknown-pragmas") }; -} - static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &model) { ClangDiagnosticConfig config; @@ -48,7 +43,7 @@ static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &mode config.setClangOptions(QStringList{ QStringLiteral("-Wall"), QStringLiteral("-Wextra"), - } + commonWarnings()); + }); model.appendOrUpdate(config); } @@ -60,7 +55,7 @@ static void addConfigForPedanticWarnings(ClangDiagnosticConfigsModel &model) config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel", "Pedantic Warnings")); config.setIsReadOnly(true); - config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")} + commonWarnings()); + config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")}); model.appendOrUpdate(config); } @@ -86,7 +81,7 @@ static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model) QStringLiteral("-Wno-switch-enum"), QStringLiteral("-Wno-missing-prototypes"), // Not optimal for C projects. QStringLiteral("-Wno-used-but-marked-unused"), // e.g. QTest::qWait - } + commonWarnings()); + }); model.appendOrUpdate(config); }