[clang] [clang][modules] Cache failures for explicit modules (PR #215968)

Jan Svoboda via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 12 23:35:08 PDT 2026


https://github.com/jansvoboda11 created https://github.com/llvm/llvm-project/pull/215968

Explicit module files are a (binary) input to the compilation. Just like any other input file they are expected to not change during compilation. There's no reason to disable failure caching in the `FileManager` for them.

>From 2a5c2ff9a202d29466206374da0feb4abd141e3f Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Thu, 13 Aug 2026 08:31:52 +0200
Subject: [PATCH] [clang][modules] Cache failures for explicit modules

Explicit module files are a (binary) input to the compilation. Just like any other input file they are expected to not change during compilation. There's no reason to disable failure caching in the `FileManager` for them.
---
 clang/lib/Serialization/ModuleManager.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Serialization/ModuleManager.cpp b/clang/lib/Serialization/ModuleManager.cpp
index 920cf07736407..cbb9de32f2b15 100644
--- a/clang/lib/Serialization/ModuleManager.cpp
+++ b/clang/lib/Serialization/ModuleManager.cpp
@@ -56,7 +56,7 @@ ModuleManager::makeKey(const ModuleFileName &Name) const {
       return ModuleFileKey(Buf);
   } else {
     if (auto ModuleFile = FileMgr.getOptionalFileRef(Name, /*OpenFile=*/true,
-                                                     /*CacheFailure=*/false,
+                                                     /*CacheFailure=*/true,
                                                      /*IsText=*/false))
       return ModuleFileKey(*ModuleFile);
   }
@@ -206,7 +206,7 @@ AddModuleResult ModuleManager::addModule(
           FileName == StringRef("-")
               ? FileMgr.getSTDIN()
               : FileMgr.getFileRef(FileName, /*OpenFile=*/true,
-                                   /*CacheFailure=*/false,
+                                   /*CacheFailure=*/true,
                                    /*IsText=*/false);
       if (!Entry)
         return Entry.takeError();



More information about the cfe-commits mailing list