CompilationDatabaseProjectManager: Fix flags extraction

The code would blindly remove all "options" starting with /, which meant
that all file paths arguments got lost on Unix-like hosts.

Fixes: QTCREATORBUG-22949
Change-Id: I43e2b1e57ed0e9ced9da8fa46d98d9ac25f83d13
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Christian Kandeler
2022-06-15 17:18:01 +02:00
parent 917f0d151b
commit b6adaab3ea
2 changed files with 11 additions and 8 deletions

View File

@@ -36,6 +36,7 @@
#include <projectexplorer/toolchain.h>
#include <projectexplorer/toolchainmanager.h>
#include <utils/algorithm.h>
#include <utils/hostosinfo.h>
#include <QtTest>
@@ -239,13 +240,15 @@ void CompilationDatabaseTests::testFilterCommand()
"SemaCodeComplete");
testData.getFilteredFlags();
QCOMPARE(testData.flags,
(QStringList{"/Zc:inline", "/Zc:strictStrings", "/Zc:rvalueCast", "/Zi"}));
QCOMPARE(testData.headerPaths,
toUserHeaderPaths(QStringList{"C:/build-qt_llvm-msvc2017_64bit-Debug/tools\\clang\\lib\\Sema"}));
QCOMPARE(testData.macros, (Macros{{"UNICODE", "1"}, {"_HAS_EXCEPTIONS", "0"}, {"WIN32", "1"},
{"_WINDOWS", "1"}}));
QCOMPARE(testData.fileKind, CppEditor::ProjectFile::Kind::CXXSource);
if (Utils::HostOsInfo::isWindowsHost()) {
QCOMPARE(testData.flags,
(QStringList{"/Zc:inline", "/Zc:strictStrings", "/Zc:rvalueCast", "/Zi"}));
QCOMPARE(testData.headerPaths,
toUserHeaderPaths(QStringList{"C:/build-qt_llvm-msvc2017_64bit-Debug/tools\\clang\\lib\\Sema"}));
QCOMPARE(testData.macros, (Macros{{"UNICODE", "1"}, {"_HAS_EXCEPTIONS", "0"}, {"WIN32", "1"},
{"_WINDOWS", "1"}}));
QCOMPARE(testData.fileKind, CppEditor::ProjectFile::Kind::CXXSource);
}
}
void CompilationDatabaseTests::testFileKindDifferentFromExtension()

View File

@@ -206,7 +206,7 @@ void filteredFlags(const QString &fileName,
}
// Skip all remaining Windows flags except feature flags.
if (flag.startsWith("/") && !flag.startsWith("/Z"))
if (Utils::HostOsInfo::isWindowsHost() && flag.startsWith("/") && !flag.startsWith("/Z"))
continue;
filtered.push_back(flag);