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 5675169e56 addressed also
for ClangTools.

Change-Id: Ideb7bab923d0359e8039b61e9d53c8765de79c29
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Nikolai Kosjar
2019-12-18 12:23:51 +01:00
parent 62fd368473
commit 2de52cffb1
3 changed files with 14 additions and 4 deletions

View File

@@ -441,6 +441,7 @@ public:
{ {
// Determine the driver mode from toolchain and flags. // Determine the driver mode from toolchain and flags.
m_builder.evaluateCompilerFlags(); m_builder.evaluateCompilerFlags();
m_isClMode = m_builder.isClStyle();
addLanguageOptions(); addLanguageOptions();
addGlobalDiagnosticOptions(); // Before addDiagnosticOptions() so users still can overwrite. addGlobalDiagnosticOptions(); // Before addDiagnosticOptions() so users still can overwrite.
@@ -498,7 +499,10 @@ private:
? CppTools::UseBuildSystemWarnings::Yes ? CppTools::UseBuildSystemWarnings::Yes
: CppTools::UseBuildSystemWarnings::No; : 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() void addGlobalDiagnosticOptions()
@@ -537,6 +541,7 @@ private:
Core::Id m_diagnosticConfigId; Core::Id m_diagnosticConfigId;
CppTools::UseBuildSystemWarnings m_useBuildSystemWarnings = CppTools::UseBuildSystemWarnings::No; CppTools::UseBuildSystemWarnings m_useBuildSystemWarnings = CppTools::UseBuildSystemWarnings::No;
CppTools::CompilerOptionsBuilder m_builder; CppTools::CompilerOptionsBuilder m_builder;
bool m_isClMode = false;
QStringList m_options; QStringList m_options;
}; };
} // namespace } // namespace

View File

@@ -48,11 +48,16 @@ using namespace CppTools;
namespace ClangTools { namespace ClangTools {
namespace Internal { namespace Internal {
static bool isClMode(const QStringList &options)
{
return options.contains("--driver-mode=cl");
}
static QStringList serializeDiagnosticsArguments(const QStringList &baseOptions, static QStringList serializeDiagnosticsArguments(const QStringList &baseOptions,
const QString &outputFilePath) const QString &outputFilePath)
{ {
const QStringList serializeArgs{"-serialize-diagnostics", outputFilePath}; const QStringList serializeArgs{"-serialize-diagnostics", outputFilePath};
if (baseOptions.contains("--driver-mode=cl")) if (isClMode(baseOptions))
return clangArgsForCl(serializeArgs); return clangArgsForCl(serializeArgs);
return serializeArgs; return serializeArgs;
} }
@@ -104,7 +109,8 @@ static QStringList clangArguments(const ClangDiagnosticConfig &diagnosticConfig,
{ {
QStringList arguments; QStringList arguments;
arguments << ClangDiagnosticConfigsModel::globalDiagnosticOptions() arguments << ClangDiagnosticConfigsModel::globalDiagnosticOptions()
<< diagnosticConfig.clangOptions() << (isClMode(baseOptions) ? CppTools::clangArgsForCl(diagnosticConfig.clangOptions())
: diagnosticConfig.clangOptions())
<< baseOptions; << baseOptions;
if (LOG().isDebugEnabled()) if (LOG().isDebugEnabled())

View File

@@ -366,7 +366,6 @@ static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
config.setClangOptions({ config.setClangOptions({
"-Wall", "-Wall",
"-Wextra", "-Wextra",
"-Wno-c++98-compat"
}); });
model.appendOrUpdate(config); model.appendOrUpdate(config);