Clang: Work around eating memory with gcc/clang/-fno-rtti/boost

Boost recognizes a misconfigured compiler in rtti emulation mode
(-fno-rtti) as our libclang command line is special. Even worse, it does
not seem to stop instantiating templates and allocating memory
afterwards.

For the former to fix, we need to rework our command line (in master).

The latter can be work arounded by defining
BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING with a value for gcc/clang.
See also
https://www.boost.org/doc/libs/1_64_0/doc/html/BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING.html

Task-number: QTCREATORBUG-19543
Change-Id: Iddb5be2d1f1966018e5ab535a8f7475fe7911284
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Nikolai Kosjar
2018-11-29 09:30:27 +01:00
parent 7bdc858d77
commit 12dce3ef7d
2 changed files with 10 additions and 0 deletions

View File

@@ -84,6 +84,7 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind,
undefineClangVersionMacrosForMsvc();
undefineCppLanguageFeatureMacrosForMsvc2015();
addDefineFunctionMacrosMsvc();
addBoostWorkaroundMacros();
addToolchainFlags();
addPrecompiledHeaderOptions(pchUsage);
@@ -560,6 +561,14 @@ void CompilerOptionsBuilder::addDefineFunctionMacrosMsvc()
addMacros({{"__FUNCSIG__", "\"\""}, {"__FUNCTION__", "\"\""}, {"__FUNCDNAME__", "\"\""}});
}
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

View File

@@ -87,6 +87,7 @@ public:
void addMsvcCompatibilityVersion();
void undefineCppLanguageFeatureMacrosForMsvc2015();
void addDefineFunctionMacrosMsvc();
void addBoostWorkaroundMacros();
void addProjectConfigFileInclude();
void undefineClangVersionMacrosForMsvc();