forked from qt-creator/qt-creator
CppEditor: Always use "clang:std=" for specifying the language version
... when in clang-cl mode. We observe strange behavior when keeping the MSVC /std:c++xx syntax, namely that files that are not specified in the compilation database appear to get parsed without a language version. The problem does not occur when passing the flag via "clang:". Fixes: QTCREATORBUG-27764 Change-Id: I0035e5fef6dfd37fbbe396b538f38fc29b23923b Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -473,16 +473,16 @@ void CompilerOptionsBuilder::addLanguageVersionAndExtensions()
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case LanguageVersion::CXX14:
|
case LanguageVersion::CXX14:
|
||||||
option = "/std:c++14";
|
option = "-clang:std=c++14";
|
||||||
break;
|
break;
|
||||||
case LanguageVersion::CXX17:
|
case LanguageVersion::CXX17:
|
||||||
option = "/std:c++17";
|
option = "-clang:std=c++17";
|
||||||
break;
|
break;
|
||||||
case LanguageVersion::CXX20:
|
case LanguageVersion::CXX20:
|
||||||
option = "/std:c++20";
|
option = "-clang:std=c++20";
|
||||||
break;
|
break;
|
||||||
case LanguageVersion::CXX2b:
|
case LanguageVersion::CXX2b:
|
||||||
option = "/std:c++latest";
|
option = "-clang:std=c++2b";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -910,12 +910,10 @@ void CompilerOptionsBuilder::evaluateCompilerFlags()
|
|||||||
theOption[0] = '-';
|
theOption[0] = '-';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clang-cl (as of Clang 12) frontend doesn't know about -std:c++20
|
|
||||||
// but the clang front end knows about -std=c++20
|
|
||||||
// https://github.com/llvm/llvm-project/blob/release/12.x/clang/lib/Driver/ToolChains/Clang.cpp#L5855
|
|
||||||
if (toolChain == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID ||
|
if (toolChain == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID ||
|
||||||
toolChain == ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) {
|
toolChain == ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) {
|
||||||
theOption.replace("-std:c++20", "-clang:-std=c++20");
|
theOption.replace("-std:c++latest", "-clang:-std=c++2b");
|
||||||
|
theOption.replace("-std:c++", "-clang:-std=c++");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_compilerFlags.flags.append(theOption);
|
m_compilerFlags.flags.append(theOption);
|
||||||
|
@@ -192,7 +192,7 @@ void CompilerOptionsBuilderTest::testLanguageVersionIsExplicitlySetIfNotProvided
|
|||||||
UseTweakedHeaderPaths::No, UseLanguageDefines::Yes};
|
UseTweakedHeaderPaths::No, UseLanguageDefines::Yes};
|
||||||
compilerOptionsBuilder.build(ProjectFile::CXXSource, UsePrecompiledHeaders::No);
|
compilerOptionsBuilder.build(ProjectFile::CXXSource, UsePrecompiledHeaders::No);
|
||||||
|
|
||||||
QVERIFY(compilerOptionsBuilder.options().contains("/std:c++17"));
|
QVERIFY(compilerOptionsBuilder.options().contains("-clang:std=c++17"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompilerOptionsBuilderTest::testAddWordWidth()
|
void CompilerOptionsBuilderTest::testAddWordWidth()
|
||||||
@@ -633,7 +633,7 @@ void CompilerOptionsBuilderTest::testBuildAllOptionsMsvc()
|
|||||||
[&t](const QString &o) { return o.contains(t.toNative("wrappedQtHeaders/QtCore")); });
|
[&t](const QString &o) { return o.contains(t.toNative("wrappedQtHeaders/QtCore")); });
|
||||||
QCOMPARE(compilerOptionsBuilder.options(),
|
QCOMPARE(compilerOptionsBuilder.options(),
|
||||||
(QStringList{"-nostdinc", "-nostdinc++", "--driver-mode=cl", "/Zs", "-m64",
|
(QStringList{"-nostdinc", "-nostdinc++", "--driver-mode=cl", "/Zs", "-m64",
|
||||||
"--target=x86_64-apple-darwin10", "/TP", "/std:c++17",
|
"--target=x86_64-apple-darwin10", "/TP", "-clang:std=c++17",
|
||||||
"-fms-compatibility-version=19.00", "-DprojectFoo=projectBar",
|
"-fms-compatibility-version=19.00", "-DprojectFoo=projectBar",
|
||||||
"-D__FUNCSIG__=\"void __cdecl someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580(void)\"",
|
"-D__FUNCSIG__=\"void __cdecl someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580(void)\"",
|
||||||
"-D__FUNCTION__=\"someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580\"",
|
"-D__FUNCTION__=\"someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580\"",
|
||||||
@@ -662,7 +662,7 @@ void CompilerOptionsBuilderTest::testBuildAllOptionsMsvcWithExceptions()
|
|||||||
[&t](const QString &o) { return o.contains(t.toNative("wrappedQtHeaders/QtCore")); });
|
[&t](const QString &o) { return o.contains(t.toNative("wrappedQtHeaders/QtCore")); });
|
||||||
QCOMPARE(compilerOptionsBuilder.options(),
|
QCOMPARE(compilerOptionsBuilder.options(),
|
||||||
(QStringList{"-nostdinc", "-nostdinc++", "--driver-mode=cl", "/Zs", "-m64",
|
(QStringList{"-nostdinc", "-nostdinc++", "--driver-mode=cl", "/Zs", "-m64",
|
||||||
"--target=x86_64-apple-darwin10", "/TP", "/std:c++17", "-fcxx-exceptions",
|
"--target=x86_64-apple-darwin10", "/TP", "-clang:std=c++17", "-fcxx-exceptions",
|
||||||
"-fexceptions", "-fms-compatibility-version=19.00",
|
"-fexceptions", "-fms-compatibility-version=19.00",
|
||||||
"-DprojectFoo=projectBar",
|
"-DprojectFoo=projectBar",
|
||||||
"-D__FUNCSIG__=\"void __cdecl someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580(void)\"",
|
"-D__FUNCSIG__=\"void __cdecl someLegalAndLongishFunctionNameThatWorksAroundQTCREATORBUG-24580(void)\"",
|
||||||
|
Reference in New Issue
Block a user