Revert "Clang: Stop enabling exceptions explicitly"

This reverts commit b114f77d8a as
"--driver-mode=cl" apparently still disables exceptions.

Task-number: QTCREATORBUG-23000
Change-Id: I9c49d971fafda5e1aca8445f8921e50f323d368f
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Nikolai Kosjar
2019-12-19 11:58:24 +01:00
parent 4fdd944617
commit 26693e8212
3 changed files with 33 additions and 0 deletions

View File

@@ -136,6 +136,7 @@ QStringList CompilerOptionsBuilder::build(ProjectFile::Kind fileKind,
addTargetTriple(); addTargetTriple();
updateFileLanguage(fileKind); updateFileLanguage(fileKind);
addLanguageVersionAndExtensions(); addLanguageVersionAndExtensions();
enableExceptions();
addPrecompiledHeaderOptions(usePrecompiledHeaders); addPrecompiledHeaderOptions(usePrecompiledHeaders);
addProjectConfigFileInclude(); addProjectConfigFileInclude();
@@ -270,6 +271,17 @@ void CompilerOptionsBuilder::addCompilerFlags()
add(m_compilerFlags.flags); add(m_compilerFlags.flags);
} }
void CompilerOptionsBuilder::enableExceptions()
{
// With "--driver-mode=cl" exceptions are disabled (clang 8).
// This is most likely due to incomplete exception support of clang.
// However, as we need exception support only in the frontend,
// enabling them explicitly should be fine.
if (m_projectPart.languageVersion > ::Utils::LanguageVersion::LatestC)
add("-fcxx-exceptions");
add("-fexceptions");
}
static QString creatorResourcePath() static QString creatorResourcePath()
{ {
#ifndef UNIT_TESTS #ifndef UNIT_TESTS

View File

@@ -69,6 +69,7 @@ public:
void addExtraCodeModelFlags(); void addExtraCodeModelFlags();
void addPicIfCompilerFlagsContainsIt(); void addPicIfCompilerFlagsContainsIt();
void addCompilerFlags(); void addCompilerFlags();
void enableExceptions();
void insertWrappedQtHeaders(); void insertWrappedQtHeaders();
void addLanguageVersionAndExtensions(); void addLanguageVersionAndExtensions();
void updateFileLanguage(ProjectFile::Kind fileKind); void updateFileLanguage(ProjectFile::Kind fileKind);

View File

@@ -444,6 +444,22 @@ TEST_F(CompilerOptionsBuilder, AddTargetTriple)
ASSERT_THAT(compilerOptionsBuilder.options(), ElementsAre("--target=x86_64-apple-darwin10")); ASSERT_THAT(compilerOptionsBuilder.options(), ElementsAre("--target=x86_64-apple-darwin10"));
} }
TEST_F(CompilerOptionsBuilder, EnableCExceptions)
{
projectPart.languageVersion = Utils::LanguageVersion::C99;
compilerOptionsBuilder.enableExceptions();
ASSERT_THAT(compilerOptionsBuilder.options(), ElementsAre("-fexceptions"));
}
TEST_F(CompilerOptionsBuilder, EnableCXXExceptions)
{
compilerOptionsBuilder.enableExceptions();
ASSERT_THAT(compilerOptionsBuilder.options(), ElementsAre("-fcxx-exceptions", "-fexceptions"));
}
TEST_F(CompilerOptionsBuilder, InsertWrappedQtHeaders) TEST_F(CompilerOptionsBuilder, InsertWrappedQtHeaders)
{ {
CppTools::CompilerOptionsBuilder compilerOptionsBuilder{projectPart, CppTools::CompilerOptionsBuilder compilerOptionsBuilder{projectPart,
@@ -601,6 +617,8 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptions)
"-x", "-x",
"c++", "c++",
"-std=c++17", "-std=c++17",
"-fcxx-exceptions",
"-fexceptions",
"-DprojectFoo=projectBar", "-DprojectFoo=projectBar",
"-I", IsPartOfHeader("wrappedQtHeaders"), "-I", IsPartOfHeader("wrappedQtHeaders"),
"-I", IsPartOfHeader(toNative("wrappedQtHeaders/QtCore").toStdString()), "-I", IsPartOfHeader(toNative("wrappedQtHeaders/QtCore").toStdString()),
@@ -632,6 +650,8 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptionsCl)
"--target=x86_64-apple-darwin10", "--target=x86_64-apple-darwin10",
"/TP", "/TP",
"/std:c++17", "/std:c++17",
"-fcxx-exceptions",
"-fexceptions",
"-fms-compatibility-version=19.00", "-fms-compatibility-version=19.00",
"-DprojectFoo=projectBar", "-DprojectFoo=projectBar",
"-D__FUNCSIG__=\"\"", "-D__FUNCSIG__=\"\"",