diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index dcd704b22f1..5a03ffd3388 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -91,6 +91,7 @@ public: optionsBuilder.addTargetTriple(); optionsBuilder.addLanguageOption(fileKind); optionsBuilder.addOptionsForLanguage(/*checkForBorlandExtensions*/ true); + optionsBuilder.enableExceptions(); optionsBuilder.addToolchainAndProjectDefines(); optionsBuilder.undefineCppLanguageFeatureMacrosForMsvc2015(); diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp index 2ad3cdf9f18..6899cde2273 100644 --- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp +++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp @@ -169,6 +169,7 @@ public: optionsBuilder.addTargetTriple(); optionsBuilder.addLanguageOption(fileKind); optionsBuilder.addOptionsForLanguage(false); + optionsBuilder.enableExceptions(); // In gcc headers, lots of built-ins are referenced that clang does not understand. // Therefore, prevent the inclusion of the header that references them. Of course, this @@ -184,9 +185,7 @@ public: optionsBuilder.addHeaderPathOptions(); optionsBuilder.addMsvcCompatibilityVersion(); - if (type == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) - optionsBuilder.add(QLatin1String("/EHsc")); // clang-cl does not understand exceptions - else + if (type != ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) optionsBuilder.add(QLatin1String("-fPIC")); // TODO: Remove? QStringList options = optionsBuilder.options(); @@ -240,6 +239,14 @@ private: return CompilerOptionsBuilder::defineOption(); } + void enableExceptions() override + { + if (m_isMsvcToolchain) + add(QLatin1String("/EHsc")); + else + CompilerOptionsBuilder::enableExceptions(); + } + private: bool m_isMsvcToolchain; }; diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 5b176286826..43605a075bd 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -92,6 +92,12 @@ void CompilerOptionsBuilder::addTargetTriple() } } +void CompilerOptionsBuilder::enableExceptions() +{ + add(QLatin1String("-fcxx-exceptions")); + add(QLatin1String("-fexceptions")); +} + void CompilerOptionsBuilder::addHeaderPathOptions() { typedef ProjectPartHeaderPath HeaderPath; diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index 93fba1ef09f..e48cf99fdd4 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -46,6 +46,7 @@ public: // Add options based on project part virtual void addTargetTriple(); + virtual void enableExceptions(); void addHeaderPathOptions(); void addToolchainAndProjectDefines(); virtual void addLanguageOption(ProjectFile::Kind fileKind);