From f6b8302efdcf62677fbf35873ac8b42d485868b6 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 5 Dec 2018 09:23:29 +0100 Subject: [PATCH] Clang: Stop forwarding toolchain macros ...for clang code model and clang tools use case. This means that compiler detection code will see clang now instead of the toolchain that is configured in the kit. While providing the toolchain macros worked fine for the general case, it always was problematic for compiler detection code. By not providing the toolchain macros we are more close to the real clang compiler invocation. That is, rely on clang to do the right thing. Allow to go back to old behavior with QTC_CLANG_USE_TOOLCHAIN_MACROS=1 as this will be useful checking differences for debugging. Fixes: QTCREATORBUG-19543 Change-Id: I23ffd761d83f35ca1a22269c3ef07a2dc62358bd Reviewed-by: Marco Bubke Reviewed-by: Ivan Donchevskii --- src/plugins/clangcodemodel/clangutils.cpp | 2 +- src/plugins/clangtools/clangtoolruncontrol.cpp | 2 +- src/plugins/cpptools/compileroptionsbuilder.cpp | 15 ++++++--------- src/plugins/cpptools/compileroptionsbuilder.h | 3 ++- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 91770b95578..daed860fb90 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -69,7 +69,7 @@ public: LibClangOptionsBuilder(const ProjectPart &projectPart) : CompilerOptionsBuilder(projectPart, UseSystemHeader::No, - UseToolchainMacros::Yes, + useToolChainMacros(), UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, QString(CLANG_VERSION), diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index 1a01f0e3112..681cd8568d3 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -193,7 +193,7 @@ static AnalyzeUnits toAnalyzeUnits(const FileInfos &fileInfos) for (const FileInfo &fileInfo : fileInfos) { CompilerOptionsBuilder optionsBuilder(*fileInfo.projectPart, UseSystemHeader::No, - UseToolchainMacros::Yes, + CompilerOptionsBuilder::useToolChainMacros(), UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, QString(CLANG_VERSION), diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 8f561772eb7..b70f5ca5bdb 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -117,7 +117,6 @@ QStringList CompilerOptionsBuilder::build(ProjectFile::Kind fileKind, undefineClangVersionMacrosForMsvc(); undefineCppLanguageFeatureMacrosForMsvc2015(); addDefineFunctionMacrosMsvc(); - addBoostWorkaroundMacros(); addToolchainFlags(); addPrecompiledHeaderOptions(usePrecompiledHeaders); @@ -596,14 +595,6 @@ void CompilerOptionsBuilder::addDefineFunctionMacrosMsvc() } } -void CompilerOptionsBuilder::addBoostWorkaroundMacros() -{ - if (m_projectPart.toolchainType != ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID - && m_projectPart.toolchainType != ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) { - addMacros({{"BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING", "(39, 1, true, \"T = \")"}}); - } -} - QString CompilerOptionsBuilder::includeDirOptionForPath(const QString &path) const { if (m_useSystemHeader == UseSystemHeader::No @@ -707,4 +698,10 @@ void CompilerOptionsBuilder::undefineClangVersionMacrosForMsvc() } } +UseToolchainMacros CompilerOptionsBuilder::useToolChainMacros() +{ + return qEnvironmentVariableIntValue("QTC_CLANG_USE_TOOLCHAIN_MACROS") ? UseToolchainMacros::Yes + : UseToolchainMacros::No; +} + } // namespace CppTools diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index 5228993ffa0..fbd038f474e 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -69,7 +69,6 @@ public: void addMsvcCompatibilityVersion(); void undefineCppLanguageFeatureMacrosForMsvc2015(); void addDefineFunctionMacrosMsvc(); - void addBoostWorkaroundMacros(); void addProjectConfigFileInclude(); void undefineClangVersionMacrosForMsvc(); @@ -78,6 +77,8 @@ public: void add(const QString &option) { m_options.append(option); } virtual void addExtraOptions() {} + static UseToolchainMacros useToolChainMacros(); + private: bool excludeDefineDirective(const ProjectExplorer::Macro ¯o) const; QString includeDirOptionForPath(const QString &path) const;