diff --git a/src/plugins/cpptools/builtineditordocumentparser.cpp b/src/plugins/cpptools/builtineditordocumentparser.cpp index 2331ff28877..df5b1158f04 100644 --- a/src/plugins/cpptools/builtineditordocumentparser.cpp +++ b/src/plugins/cpptools/builtineditordocumentparser.cpp @@ -32,12 +32,29 @@ #include "cppsourceprocessor.h" #include "editordocumenthandle.h" +#include + #include using namespace CPlusPlus; using namespace CppTools; using namespace CppTools::Internal; +static QByteArray overwrittenToolchainDefines(const ProjectPart &projectPart) +{ + QByteArray defines; + + // MSVC's predefined macros like __FUNCSIG__ expand to itself. + // We can't parse this, so redefine to the empty string literal. + if (projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) { + defines += "#define __FUNCSIG__ \"\"\n" + "#define __FUNCDNAME__ \"\"\n" + "#define __FUNCTION__ \"\"\n"; + } + + return defines; +} + BuiltinEditorDocumentParser::BuiltinEditorDocumentParser(const QString &filePath) : BaseEditorDocumentParser(filePath) { @@ -74,6 +91,7 @@ void BuiltinEditorDocumentParser::updateHelper(const InMemoryInfo &info) if (const ProjectPart::Ptr part = baseState.projectPart) { configFile += part->toolchainDefines; + configFile += overwrittenToolchainDefines(*part.data()); configFile += part->projectDefines; headerPaths = part->headerPaths; projectConfigFile = part->projectConfigFile; diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 7a94dbb5809..3b9c1869103 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -190,6 +190,12 @@ const char pp_configuration[] = "#define _Pragma(x)\n" // C99 _Pragma operator + "#define __func__ \"\"\n" + + // ### add macros for gcc + "#define __PRETTY_FUNCTION__ \"\"\n" + "#define __FUNCTION__ \"\"\n" + // ### add macros for win32 "#define __cdecl\n" "#define __stdcall\n"