================
@@ -263,6 +263,10 @@ makeCommonInvocationForModuleBuild(CompilerInvocation CI) {
   // units.
   CI.getFrontendOpts().Inputs.clear();
   CI.getFrontendOpts().OutputFile.clear();
+  CI.getFrontendOpts().GenReducedBMI = false;
+  CI.getFrontendOpts().ModuleOutputPath.clear();
+  CI.getHeaderSearchOpts().ModulesSkipHeaderSearchPaths = false;
+  CI.getHeaderSearchOpts().ModulesSkipDiagnosticOptions = false;
----------------
jansvoboda11 wrote:

The `setBuildingModule(false)` call only applies to the top-level TU. Clang 
modules that are imported by that TU have that set to `true`. My thinking was 
that when we're scanning a C++ TU with named modules enabled and another C++ TU 
with named modules disabled, they could theoretically still share the scanning 
PCMs for Clang modules. (Is this assumption correct?) We can only achieve that 
sharing if we remove the flags implied by named C++ modules enablement from the 
scan invocation (`GenReducedBMI`, `ModuleOutputPath`). Your change in 
`DependencyScannerImpl.cpp` looks good, but it'd be good to have a test that 
checks the scanner itself doesn't produce more than one PCM variant in this 
scenario.

Can you clarify why you're now also resetting `ModulesSkipHeaderSearchPaths` 
and `ModulesSkipDiagnosticOptions` for the build command lines here in 
`ModuleDepCollector.cpp`? AFAIK these are only used within the scanner to 
increase performance - they don't make it into the build invocations, nor 
should the driver invocations that scanner takes as an input have them enabled.

https://github.com/llvm/llvm-project/pull/161486
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to