hokein created this revision. hokein added a reviewer: sammccall. Herald added subscribers: kadircet, arphaman. Herald added a project: All. hokein requested review of this revision. Herald added subscribers: MaskRay, ilya-biryukov. Herald added a project: clang-tools-extra.
These options doesn't affect the AST generation, and clang will crash (CreateOrDie in ASTContext) immedidately when the provided file are not existed. Disable them in clangd to make clangd more robust. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D140960 Files: clang-tools-extra/clangd/Compiler.cpp clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp Index: clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp +++ 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( Index: clang-tools-extra/clangd/Compiler.cpp =================================================================== --- clang-tools-extra/clangd/Compiler.cpp +++ 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 only affect the codegen in the backend, 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<CompilerInvocation>
Index: clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp +++ 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( Index: clang-tools-extra/clangd/Compiler.cpp =================================================================== --- clang-tools-extra/clangd/Compiler.cpp +++ 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 only affect the codegen in the backend, 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<CompilerInvocation>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits