From 26693e82126de15145a04c3428a10f6c15120532 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 19 Dec 2019 11:58:24 +0100 Subject: [PATCH] Revert "Clang: Stop enabling exceptions explicitly" This reverts commit b114f77d8a633341b617a5cadd04e5977beae65d as "--driver-mode=cl" apparently still disables exceptions. Task-number: QTCREATORBUG-23000 Change-Id: I9c49d971fafda5e1aca8445f8921e50f323d368f Reviewed-by: Cristian Adam --- .../cpptools/compileroptionsbuilder.cpp | 12 +++++++++++ src/plugins/cpptools/compileroptionsbuilder.h | 1 + .../unittest/compileroptionsbuilder-test.cpp | 20 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index ee534757ea1..3804c3feb26 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -136,6 +136,7 @@ QStringList CompilerOptionsBuilder::build(ProjectFile::Kind fileKind, addTargetTriple(); updateFileLanguage(fileKind); addLanguageVersionAndExtensions(); + enableExceptions(); addPrecompiledHeaderOptions(usePrecompiledHeaders); addProjectConfigFileInclude(); @@ -270,6 +271,17 @@ void CompilerOptionsBuilder::addCompilerFlags() 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() { #ifndef UNIT_TESTS diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index 5b7c682407e..b2c8313771e 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -69,6 +69,7 @@ public: void addExtraCodeModelFlags(); void addPicIfCompilerFlagsContainsIt(); void addCompilerFlags(); + void enableExceptions(); void insertWrappedQtHeaders(); void addLanguageVersionAndExtensions(); void updateFileLanguage(ProjectFile::Kind fileKind); diff --git a/tests/unit/unittest/compileroptionsbuilder-test.cpp b/tests/unit/unittest/compileroptionsbuilder-test.cpp index df110727071..2a6bfd8462f 100644 --- a/tests/unit/unittest/compileroptionsbuilder-test.cpp +++ b/tests/unit/unittest/compileroptionsbuilder-test.cpp @@ -444,6 +444,22 @@ TEST_F(CompilerOptionsBuilder, AddTargetTriple) 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) { CppTools::CompilerOptionsBuilder compilerOptionsBuilder{projectPart, @@ -601,6 +617,8 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptions) "-x", "c++", "-std=c++17", + "-fcxx-exceptions", + "-fexceptions", "-DprojectFoo=projectBar", "-I", IsPartOfHeader("wrappedQtHeaders"), "-I", IsPartOfHeader(toNative("wrappedQtHeaders/QtCore").toStdString()), @@ -632,6 +650,8 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptionsCl) "--target=x86_64-apple-darwin10", "/TP", "/std:c++17", + "-fcxx-exceptions", + "-fexceptions", "-fms-compatibility-version=19.00", "-DprojectFoo=projectBar", "-D__FUNCSIG__=\"\"",