================
@@ -183,7 +192,7 @@ struct ModuleDeps {
   ///
   /// This may include modules with a different context hash when it can be
   /// determined that the differences are benign for this compilation.
-  std::vector<ModuleID> ClangModuleDeps;
+  std::vector<ExtendedModuleID> ClangModuleDeps;
----------------
qiongsiwu wrote:

> Why is whether a module is Exported encoded here instead of directly as an 
> attribute in ModuleDeps?

I chose this implementation for two reasons (in addition to @Bigcheese's 
suggestion). 

1. Easy to use - I think doing it this way offers better ergonomics for the 
intended use 
[here](https://github.com/swiftlang/swift/blame/3437609eb580c24776979b97663bdb81383bee04/lib/ClangImporter/ClangModuleDependencyScanner.cpp#L300).
 If I understand it correctly, Swift can simply do `moduleName.Exported` where 
it is intended. 
2. Efficiency - I did not find a good way to store what modules are exported as 
an attribute in `ModuleDeps` after a few tries. I can store a list of 
`ModuleID`s, but that duplicates a subset of `ClangModuleDeps`. Or I can store 
an array of indices (or pointers) into `ClangModuleDeps`, and that can run into 
the potential issue where we update `ClangModuleDeps` (e.g. sorting it), and 
the pointers in the array become invalid. 

> Is it that clients need to know all the modules that export a given module?

No I don't think that is the use case. I think the use case is that the client 
wants to know if a particular dependency of a module is exported. 

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

Reply via email to