[clang-tools-extra] [clangd] Fix SIGSEGV crash when receiving a textDocument/didOpen request with the URI pointing to a directory (PR #177834)

Nathan Ridge via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 29 22:17:10 PST 2026


HighCommander4 wrote:

I ran the test case in a debug build. That triggers an assertion failure, I think before reaching the code that would segfault:

```
clangd: clang/lib/Basic/FileManager.cpp:403: FileEntryRef clang::FileManager::getVirtualFileRef(StringRef, off_t, time_t): Assertion `DirInfo && "The directory of a virtual file should already be in the cache."' failed.
#10 0x00007fcce50b1ce7 clang::FileManager::getVirtualFileRef(llvm::StringRef, long, long) clang/lib/Basic/FileManager.cpp:406:21
#11 0x00007fcce32a4317 InitializeFileRemapping(clang::DiagnosticsEngine&, clang::SourceManager&, clang::FileManager&, clang::PreprocessorOptions const&) clang/lib/Frontend/CompilerInstance.cpp:410:17
#12 0x00007fcce32a3986 clang::CompilerInstance::createPreprocessor(clang::TranslationUnitKind) clang/lib/Frontend/CompilerInstance.cpp:469:3
#13 0x00007fcce33af557 clang::FrontendAction::BeginSourceFile(clang::CompilerInstance&, clang::FrontendInputFile const&) clang/lib/Frontend/FrontendAction.cpp:1064:3
#14 0x00007fcce34181c7 clang::PrecompiledPreamble::Build(clang::CompilerInvocation const&, llvm::MemoryBuffer const*, clang::PreambleBounds, llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine>, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::shared_ptr<clang::PCHContainerOperations>, bool, llvm::StringRef, clang::PreambleCallbacks&) clang/lib/Frontend/PrecompiledPreamble.cpp:512:7
#15 0x00007fccea8a2fe9 clang::clangd::buildPreamble(llvm::StringRef, clang::CompilerInvocation, clang::clangd::ParseInputs const&, bool, std::function<void (clang::clangd::CapturedASTCtx, std::shared_ptr<clang::include_cleaner::PragmaIncludes const>)>, clang::clangd::PreambleBuildStats*) clang-tools-extra/clangd/Preamble.cpp:641:24
#16 0x00007fcceaa15b32 clang::clangd::(anonymous namespace)::PreambleThread::build(clang::clangd::(anonymous namespace)::PreambleThread::Request) clang-tools-extra/clangd/TUScheduler.cpp:1088:17
#17 0x00007fcceaa1540d clang::clangd::(anonymous namespace)::PreambleThread::run() clang-tools-extra/clangd/TUScheduler.cpp:513:9
#18 0x00007fcceaa15174 clang::clangd::(anonymous namespace)::ASTWorker::create(llvm::StringRef, clang::clangd::GlobalCompilationDatabase const&, clang::clangd::TUScheduler::ASTCache&, clang::clangd::TUScheduler::HeaderIncluderCache&, clang::clangd::AsyncTaskRunner*, clang::clangd::Semaphore&, clang::clangd::TUScheduler::Options const&, clang::clangd::ParsingCallbacks&)::$_1::operator()() const clang-tools-extra/clangd/TUScheduler.cpp:828:62
```

https://github.com/llvm/llvm-project/pull/177834


More information about the cfe-commits mailing list