================
@@ -92,16 +92,10 @@ bool Preprocessor::EnterSourceFile(FileID FID, 
ConstSearchDirIterator CurDir,
   }
 
   Lexer *TheLexer = new Lexer(FID, *InputFile, *this, IsFirstIncludeOfFile);
-  if (getPreprocessorOpts().DependencyDirectivesForFile &&
-      FID != PredefinesFileID) {
-    if (OptionalFileEntryRef File = SourceMgr.getFileEntryRefForID(FID)) {
-      if (std::optional<ArrayRef<dependency_directives_scan::Directive>>
-              DepDirectives =
-                  getPreprocessorOpts().DependencyDirectivesForFile(*File)) {
-        TheLexer->DepDirectives = *DepDirectives;
-      }
-    }
-  }
+  if (GetDependencyDirectives && FID != PredefinesFileID)
+    if (OptionalFileEntryRef File = SourceMgr.getFileEntryRefForID(FID))
+      if (auto MaybeDepDirectives = GetDependencyDirectives(FileMgr, *File))
----------------
jansvoboda11 wrote:

> Apologies if this is obvious, but what is the difference between the 
> `FileMgr` in the `Preprocessor` compared to the `FileMgr` that's tied to the 
> CompilerInstance object created in 
> https://github.com/llvm/llvm-project/pull/136178/files#diff-9190b5361d3722e679a0ea59ff46cc21f6d10d6e61049d73b3bc2e1ea56eb8f6R1243
>  ?

There is none, it's the same object.

> IOW, why is the potential assignment of DepDirectivesGetter's attributes on 
> each call to the function & not during assignment of the function object?

Because there's no other `API` on `std::function` besides `operator()` so 
there's no way to set the new `FileManager` while making the copy in 
`CompilerInstance::cloneForModuleCompileImpl()`.

Let me know if this explanation makes sense.

Maybe there is an argument to be made to replace `std::function` with something 
like:

```c++
struct DepDirectivesGetter {
  virtual std::unique_ptr<DepDirectivesGetter> cloneFor(FileManager &) = 0;
  virtual std::optional<ArrayRef<dependency_directives_scan::Directive>> 
operator()(FileEntryRef) = 0;
}
```

https://github.com/llvm/llvm-project/pull/136178
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to