From 2de52cffb18ece90883b3aa4821035ba476adfd7 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 18 Dec 2019 12:23:51 +0100 Subject: [PATCH] Clang: Fix c++98-compat warnings for MSVC toolchain Clang invoked with --driver-mode=cl will map "-Wall" to "-Weverything", thus enabling -Wc++98-compat-pedantic and way more options. Fix this by escaping "-Wall" in the cl mode, effectively passing in "/clang:-Wall" instead of "-Wall". This fixes what 5675169e564a1af0d4b47d4f1ee872e404cc2d17 addressed also for ClangTools. Change-Id: Ideb7bab923d0359e8039b61e9d53c8765de79c29 Reviewed-by: Cristian Adam Reviewed-by: Alessandro Portale --- .../clangcodemodel/clangeditordocumentprocessor.cpp | 7 ++++++- src/plugins/clangtools/clangtidyclazyrunner.cpp | 10 ++++++++-- src/plugins/cpptools/cpptoolsreuse.cpp | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 51acd3a5a6c..718b0dad288 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -441,6 +441,7 @@ public: { // Determine the driver mode from toolchain and flags. m_builder.evaluateCompilerFlags(); + m_isClMode = m_builder.isClStyle(); addLanguageOptions(); addGlobalDiagnosticOptions(); // Before addDiagnosticOptions() so users still can overwrite. @@ -498,7 +499,10 @@ private: ? CppTools::UseBuildSystemWarnings::Yes : CppTools::UseBuildSystemWarnings::No; - m_options.append(diagnosticConfig.clangOptions()); + const QStringList options = m_isClMode + ? CppTools::clangArgsForCl(diagnosticConfig.clangOptions()) + : diagnosticConfig.clangOptions(); + m_options.append(options); } void addGlobalDiagnosticOptions() @@ -537,6 +541,7 @@ private: Core::Id m_diagnosticConfigId; CppTools::UseBuildSystemWarnings m_useBuildSystemWarnings = CppTools::UseBuildSystemWarnings::No; CppTools::CompilerOptionsBuilder m_builder; + bool m_isClMode = false; QStringList m_options; }; } // namespace diff --git a/src/plugins/clangtools/clangtidyclazyrunner.cpp b/src/plugins/clangtools/clangtidyclazyrunner.cpp index 34a149c8236..976fbd9f9ad 100644 --- a/src/plugins/clangtools/clangtidyclazyrunner.cpp +++ b/src/plugins/clangtools/clangtidyclazyrunner.cpp @@ -48,11 +48,16 @@ using namespace CppTools; namespace ClangTools { namespace Internal { +static bool isClMode(const QStringList &options) +{ + return options.contains("--driver-mode=cl"); +} + static QStringList serializeDiagnosticsArguments(const QStringList &baseOptions, const QString &outputFilePath) { const QStringList serializeArgs{"-serialize-diagnostics", outputFilePath}; - if (baseOptions.contains("--driver-mode=cl")) + if (isClMode(baseOptions)) return clangArgsForCl(serializeArgs); return serializeArgs; } @@ -104,7 +109,8 @@ static QStringList clangArguments(const ClangDiagnosticConfig &diagnosticConfig, { QStringList arguments; arguments << ClangDiagnosticConfigsModel::globalDiagnosticOptions() - << diagnosticConfig.clangOptions() + << (isClMode(baseOptions) ? CppTools::clangArgsForCl(diagnosticConfig.clangOptions()) + : diagnosticConfig.clangOptions()) << baseOptions; if (LOG().isDebugEnabled()) diff --git a/src/plugins/cpptools/cpptoolsreuse.cpp b/src/plugins/cpptools/cpptoolsreuse.cpp index 3e448533743..b8677256916 100644 --- a/src/plugins/cpptools/cpptoolsreuse.cpp +++ b/src/plugins/cpptools/cpptoolsreuse.cpp @@ -366,7 +366,6 @@ static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model) config.setClangOptions({ "-Wall", "-Wextra", - "-Wno-c++98-compat" }); model.appendOrUpdate(config);