aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2020-08-29 23:34:18 +0300
committerOrgad Shaneh <orgads@gmail.com>2020-09-02 15:26:19 +0000
commita408bcfd3d05a071fb546c5986643ea2f0332ea2 (patch)
tree65304020e18d818d83953bfe3620e36d1e2a735c
parent6d519554513bd0fa711b403681611f0b7561de12 (diff)
Clang: Add conditions for adding exceptions flag
For GCC it can be deduced from the compiler flags, so no correction is needed. For MSVC it can be deduced from the detected defines. Amends 26693e82126de15145a04c3428a10f6c15120532. Change-Id: Ie4850f328a2afdb3e5158c58f8c30a2644d9c592 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.cpp14
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.h1
-rw-r--r--tests/unit/unittest/compileroptionsbuilder-test.cpp40
3 files changed, 52 insertions, 3 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp
index 0192386ddb..49457718a7 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.cpp
+++ b/src/plugins/cpptools/compileroptionsbuilder.cpp
@@ -35,6 +35,7 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectmacro.h>
+#include <utils/algorithm.h>
#include <utils/cpplanguage_details.h>
#include <utils/fileutils.h>
#include <utils/qtcassert.h>
@@ -137,7 +138,7 @@ QStringList CompilerOptionsBuilder::build(ProjectFile::Kind fileKind,
addTargetTriple();
updateFileLanguage(fileKind);
addLanguageVersionAndExtensions();
- enableExceptions();
+ addMsvcExceptions();
addPrecompiledHeaderOptions(usePrecompiledHeaders);
addProjectConfigFileInclude();
@@ -273,6 +274,17 @@ void CompilerOptionsBuilder::addCompilerFlags()
add(m_compilerFlags.flags);
}
+void CompilerOptionsBuilder::addMsvcExceptions()
+{
+ if (!m_clStyle)
+ return;
+ if (Utils::anyOf(m_projectPart.toolChainMacros, [](const ProjectExplorer::Macro &macro) {
+ return macro.key == "_CPPUNWIND";
+ })) {
+ enableExceptions();
+ }
+}
+
void CompilerOptionsBuilder::enableExceptions()
{
// With "--driver-mode=cl" exceptions are disabled (clang 8).
diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h
index ee7e373312..356adaed1c 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 addMsvcExceptions();
void enableExceptions();
void insertWrappedQtHeaders();
void insertWrappedMingwHeaders();
diff --git a/tests/unit/unittest/compileroptionsbuilder-test.cpp b/tests/unit/unittest/compileroptionsbuilder-test.cpp
index 76fe2be066..1376bed6b8 100644
--- a/tests/unit/unittest/compileroptionsbuilder-test.cpp
+++ b/tests/unit/unittest/compileroptionsbuilder-test.cpp
@@ -650,8 +650,6 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptions)
"-x",
"c++",
"-std=c++17",
- "-fcxx-exceptions",
- "-fexceptions",
"-DprojectFoo=projectBar",
"-I", IsPartOfHeader("wrappedQtHeaders"),
"-I", IsPartOfHeader(toNative("wrappedQtHeaders/QtCore").toStdString()),
@@ -683,6 +681,44 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptionsCl)
"--target=x86_64-apple-darwin10",
"/TP",
"/std:c++17",
+ "-fms-compatibility-version=19.00",
+ "-DprojectFoo=projectBar",
+ "-D__FUNCSIG__=\"\"",
+ "-D__FUNCTION__=\"\"",
+ "-D__FUNCDNAME__=\"\"",
+ "-I", IsPartOfHeader("wrappedQtHeaders"),
+ "-I", IsPartOfHeader(toNative("wrappedQtHeaders/QtCore").toStdString()),
+ "-I", toNative("/tmp/path"),
+ "-I", toNative("/tmp/system_path"),
+ "/clang:-isystem",
+ "/clang:" + toNative(CLANG_RESOURCE_DIR ""),
+ "/clang:-isystem",
+ "/clang:" + toNative("/tmp/builtin_path")));
+}
+
+TEST_F(CompilerOptionsBuilder, BuildAllOptionsClWithExceptions)
+{
+ projectPart.toolchainType = ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID;
+ projectPart.toolChainMacros.append(ProjectExplorer::Macro{"_CPPUNWIND", "1"});
+ CppTools::CompilerOptionsBuilder compilerOptionsBuilder(projectPart,
+ CppTools::UseSystemHeader::No,
+ CppTools::UseTweakedHeaderPaths::Yes,
+ CppTools::UseLanguageDefines::No,
+ CppTools::UseBuildSystemWarnings::No,
+ "dummy_version",
+ "");
+
+ compilerOptionsBuilder.build(ProjectFile::CXXSource, CppTools::UsePrecompiledHeaders::No);
+
+ ASSERT_THAT(compilerOptionsBuilder.options(),
+ ElementsAre("-nostdinc",
+ "-nostdinc++",
+ "--driver-mode=cl",
+ "/Zs",
+ "-m64",
+ "--target=x86_64-apple-darwin10",
+ "/TP",
+ "/std:c++17",
"-fcxx-exceptions",
"-fexceptions",
"-fms-compatibility-version=19.00",