[clang] [CIR] Run the CIR lowering pipeline without a live ASTContext and accept serialized .cir as cc1 input (PR #219048)

Bruno Cardoso Lopes via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 1 18:56:36 PDT 2026


================
@@ -2485,10 +2495,10 @@ void LoweringPreparePass::buildCUDAModuleCtor() {
           .getName()
           .getValue();
 
-  llvm::vfs::FileSystem &vfs =
-      astCtx->getSourceManager().getFileManager().getVirtualFileSystem();
+  llvm::vfs::FileSystem &gpuBinaryVFS =
----------------
bcardosolopes wrote:

I went in assuming this was a new dependency and it isn't, it used to come off `astCtx->getSourceManager().getFileManager().getVirtualFileSystem()`, so threading it explicitly is honest. Two problems with the shape though.

The fallback is silent. Before this, it was always the invocation's VFS. Now if nobody calls `setVFS` you quietly read the real filesystem, so a build under `-ivfsoverlay` or an in-memory VFS picks up the wrong fatbin and says nothing about it. If the pass needs a VFS, require one and error when it's missing. Defaulting to the real FS is the kind of thing that gets debugged for a day.

Second, a LoweringPrepare pass holding an `IntrusiveRefCntPtr<vfs::FileSystem>` and calling `getBufferForFile` is a transform doing I/O. Can the fatbin be resolved before the pipeline and put in the module, so the pass stays IR to IR? That also stops you having to thread a filesystem into the `.cir` input path, which has no invocation VFS to give it.

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


More information about the cfe-commits mailing list