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 @@ -80,6 +80,15 @@ CI.getFrontendOpts().PluginArgs.clear(); CI.getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; CI.getFrontendOpts().ActionName.clear(); + + // These options mostly affect codegen, and aren't relevant to clangd. And + // clang will die immediately when these files are not existed. + // Disable these uninteresting options to make clangd more robust. + CI.getLangOpts()->NoSanitizeFiles.clear(); + CI.getLangOpts()->XRayAttrListFiles.clear(); + CI.getLangOpts()->ProfileListFiles.clear(); + CI.getLangOpts()->XRayAlwaysInstrumentFiles.clear(); + CI.getLangOpts()->XRayNeverInstrumentFiles.clear(); } std::unique_ptr diff --git a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp --- a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp +++ b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp @@ -824,6 +824,19 @@ EXPECT_THAT(*TU.build().getDiagnostics(), IsEmpty()); } +TEST(DiagnosticTest, IgnoreBEFilelistOptions) { + auto TU = TestTU::withCode(""); + TU.ExtraArgs.push_back("-Xclang"); + for (const auto *DisableOption : + {"-fsanitize-ignorelist=null", "-fprofile-list=null", + "-fxray-always-instrument=null", "-fxray-never-instrument=null", + "-fxray-attr-list=null"}) { + TU.ExtraArgs.push_back(DisableOption); + EXPECT_THAT(*TU.build().getDiagnostics(), IsEmpty()); + TU.ExtraArgs.pop_back(); + } +} + // Recursive main-file include is diagnosed, and doesn't crash. TEST(DiagnosticsTest, RecursivePreamble) { auto TU = TestTU::withCode(R"cpp(