[clang] [llvm] [clang] Use the VFS in `CrossTranslationUnitContext` (PR #175097)
Jan Svoboda via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 9 09:41:29 PST 2026
https://github.com/jansvoboda11 updated https://github.com/llvm/llvm-project/pull/175097
>From 3d88763270f0205ed50d024b249f306166518b4a Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Thu, 8 Jan 2026 15:31:32 -0800
Subject: [PATCH 1/2] [clang] Use the VFS in `CrossTranslationUnitContext`
---
clang/lib/CrossTU/CrossTranslationUnit.cpp | 23 ++++++++++++++++++++--
llvm/CMakeLists.txt | 2 +-
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/clang/lib/CrossTU/CrossTranslationUnit.cpp b/clang/lib/CrossTU/CrossTranslationUnit.cpp
index a3fc2cf6bfb3c..ad2defb233a7a 100644
--- a/clang/lib/CrossTU/CrossTranslationUnit.cpp
+++ b/clang/lib/CrossTU/CrossTranslationUnit.cpp
@@ -623,7 +623,26 @@ CrossTranslationUnitContext::ASTLoader::loadFromSource(
return CreateASTUnitFromCommandLine(
CommandLineArgs.begin(), (CommandLineArgs.end()),
CI.getPCHContainerOperations(), DiagOpts, Diags,
- CI.getHeaderSearchOpts().ResourceDir);
+ CI.getHeaderSearchOpts().ResourceDir,
+ /*StorePreamblesInMemory=*/false,
+ /*PreambleStoragePath=*/StringRef(),
+ /*OnlyLocalDecls=*/false,
+ /*CaptureDiagnostics=*/CaptureDiagsKind::None,
+ /*RemappedFiles=*/{},
+ /*RemappedFilesKeepOriginalName=*/true,
+ /*PrecompilePreambleAfterNParses=*/0,
+ /*TUKind=*/TU_Complete,
+ /*CacheCodeCompletionResults=*/false,
+ /*IncludeBriefCommentsInCodeCompletion=*/false,
+ /*AllowPCHWithCompilerErrors=*/false,
+ /*SkipFunctionBodies=*/SkipFunctionBodiesScope::None,
+ /*SingleFileParse=*/false,
+ /*UserFilesAreVolatile=*/false,
+ /*ForSerialization=*/false,
+ /*RetainExcludedConditionalBlocks=*/false,
+ /*ModuleFormat=*/std::nullopt,
+ /*ErrAST=*/nullptr,
+ /*VFS=*/CI.getVirtualFileSystemPtr());
}
llvm::Expected<InvocationListTy>
@@ -710,7 +729,7 @@ llvm::Error CrossTranslationUnitContext::ASTLoader::lazyInitInvocationList() {
return llvm::make_error<IndexError>(PreviousParsingResult);
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> FileContent =
- llvm::MemoryBuffer::getFile(InvocationListFilePath);
+ CI.getVirtualFileSystem().getBufferForFile(InvocationListFilePath);
if (!FileContent) {
PreviousParsingResult = index_error_code::invocation_list_file_not_found;
return llvm::make_error<IndexError>(PreviousParsingResult);
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index f0e4f5d7d6f60..467bc5ebd996c 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -697,7 +697,7 @@ else()
option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON)
endif()
-option(LLVM_ENABLE_IO_SANDBOX "Enable IO sandboxing in supported tools" OFF)
+option(LLVM_ENABLE_IO_SANDBOX "Enable IO sandboxing in supported tools" ON) # TODO: Set to OFF before merging.
option(LLVM_ENABLE_EXPENSIVE_CHECKS "Enable expensive checks" OFF)
set(LLVM_ABI_BREAKING_CHECKS "WITH_ASSERTS" CACHE STRING
>From 522c8686cee66830fe823e11ed4568f4efc255b6 Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Fri, 9 Jan 2026 09:41:16 -0800
Subject: [PATCH 2/2] Fix Linux distro detection earlier
---
clang/lib/CrossTU/CrossTranslationUnit.cpp | 24 ++++------------------
1 file changed, 4 insertions(+), 20 deletions(-)
diff --git a/clang/lib/CrossTU/CrossTranslationUnit.cpp b/clang/lib/CrossTU/CrossTranslationUnit.cpp
index ad2defb233a7a..7496deb74cb67 100644
--- a/clang/lib/CrossTU/CrossTranslationUnit.cpp
+++ b/clang/lib/CrossTU/CrossTranslationUnit.cpp
@@ -24,6 +24,7 @@
#include "llvm/ADT/Statistic.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/IOSandbox.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/YAMLParser.h"
@@ -620,29 +621,12 @@ CrossTranslationUnitContext::ASTLoader::loadFromSource(
auto Diags = llvm::makeIntrusiveRefCnt<DiagnosticsEngine>(DiagID, *DiagOpts,
DiagClient);
+ // This runs the driver which isn't expected to be free of sandbox violations.
+ auto BypassSandbox = llvm::sys::sandbox::scopedDisable();
return CreateASTUnitFromCommandLine(
CommandLineArgs.begin(), (CommandLineArgs.end()),
CI.getPCHContainerOperations(), DiagOpts, Diags,
- CI.getHeaderSearchOpts().ResourceDir,
- /*StorePreamblesInMemory=*/false,
- /*PreambleStoragePath=*/StringRef(),
- /*OnlyLocalDecls=*/false,
- /*CaptureDiagnostics=*/CaptureDiagsKind::None,
- /*RemappedFiles=*/{},
- /*RemappedFilesKeepOriginalName=*/true,
- /*PrecompilePreambleAfterNParses=*/0,
- /*TUKind=*/TU_Complete,
- /*CacheCodeCompletionResults=*/false,
- /*IncludeBriefCommentsInCodeCompletion=*/false,
- /*AllowPCHWithCompilerErrors=*/false,
- /*SkipFunctionBodies=*/SkipFunctionBodiesScope::None,
- /*SingleFileParse=*/false,
- /*UserFilesAreVolatile=*/false,
- /*ForSerialization=*/false,
- /*RetainExcludedConditionalBlocks=*/false,
- /*ModuleFormat=*/std::nullopt,
- /*ErrAST=*/nullptr,
- /*VFS=*/CI.getVirtualFileSystemPtr());
+ CI.getHeaderSearchOpts().ResourceDir);
}
llvm::Expected<InvocationListTy>
More information about the cfe-commits
mailing list