diff --git a/clang-tools-extra/clangd/Compiler.cpp b/clang-tools-extra/clangd/Compiler.cpp --- a/clang-tools-extra/clangd/Compiler.cpp +++ b/clang-tools-extra/clangd/Compiler.cpp @@ -78,6 +78,8 @@ CI->getPreprocessorOpts().PCHThroughHeader.clear(); CI->getPreprocessorOpts().PCHWithHdrStop = false; CI->getPreprocessorOpts().PCHWithHdrStopCreate = false; + // Don't crash on `#pragma clang __debug parser_crash` + CI->getPreprocessorOpts().DisablePragmaDebugCrash = true; // Recovery expression currently only works for C++. if (CI->getLangOpts()->CPlusPlus) { diff --git a/clang-tools-extra/clangd/unittests/CompilerTests.cpp b/clang-tools-extra/clangd/unittests/CompilerTests.cpp --- a/clang-tools-extra/clangd/unittests/CompilerTests.cpp +++ b/clang-tools-extra/clangd/unittests/CompilerTests.cpp @@ -51,6 +51,11 @@ IsEmpty()); } +TEST(BuildCompilerInvocation, PragmaDebugCrash) { + TestTU TU = TestTU::withCode("#pragma clang __debug parser_crash"); + TU.build(); // no-crash +} + } // namespace } // namespace clangd } // namespace clang