From fdd695c35c271bd467fd9da8a67589d733443c67 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 2 Feb 2018 15:18:40 +0100 Subject: [PATCH] Clang: Disable crash recovery in libclang ...because 1. We already run in a separate process. 2. It's not entirely clear in which state we end up after a crash, except for: 3. A "crashed" translation unit won't be freed, even when calling clang_disposeTranslationUnit(). This avoids undefined behavior within clangbackend and accumulated leaking memory in the long run. On the other side, crashes within libclang will crash clangbackend now, too. Change-Id: I0789c52db08ace2f7e181e3b7bdfc9f595f75e8d Reviewed-by: Ivan Donchevskii --- src/libs/clangsupport/clangcodemodelconnectionclient.cpp | 1 + src/tools/clangbackend/clangbackendmain.cpp | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/clangsupport/clangcodemodelconnectionclient.cpp b/src/libs/clangsupport/clangcodemodelconnectionclient.cpp index 33d89870249..56186e24dc6 100644 --- a/src/libs/clangsupport/clangcodemodelconnectionclient.cpp +++ b/src/libs/clangsupport/clangcodemodelconnectionclient.cpp @@ -53,6 +53,7 @@ ClangCodeModelConnectionClient::ClangCodeModelConnectionClient( Utils::Environment environment; environment.set(QStringLiteral("LIBCLANG_NOTHREADS"), QString()); + environment.set(QStringLiteral("LIBCLANG_DISABLE_CRASH_RECOVERY"), QString()); m_processCreator.setEnvironment(environment); stdErrPrefixer().setPrefix("clangbackend.stderr: "); diff --git a/src/tools/clangbackend/clangbackendmain.cpp b/src/tools/clangbackend/clangbackendmain.cpp index 28b7f251b6d..338fec79822 100644 --- a/src/tools/clangbackend/clangbackendmain.cpp +++ b/src/tools/clangbackend/clangbackendmain.cpp @@ -82,7 +82,6 @@ int main(int argc, char *argv[]) const QString connection = processArguments(application); - clang_toggleCrashRecovery(true); clang_enableStackTraces(); ClangCodeModelServer clangCodeModelServer;