ChuanqiXu9 wrote: > Could you share the rest of the "no transitive change" patches, or at least > their outline? I'm curious what else goes into making that work.
Oh, I haven't started them. The patch in my mind includes two at least: (1) Add a new block recording the semantical hash value of the current named module. (2) A similar patch for DeclID to refactor the existing linear offset to {ModuleFileIndex, LocalDeclID} patch. BTW, with (2), maybe we can refactor the existing super large vector of Decls, `DeclsLoaded`, in the ASTReader into a array of vectors or into a map. But this may not be included in the series of the patches. The motivation for (1) is that: ``` export module a; export import b; ... ``` We want the BMI of `a` to change all the time if `b` changes. Also for the motivation example, if we changed the definition of `funcB` into `inline`, ``` //--- A.cppm export module A; export inline int funcA() { return 43; } //--- B.cppm export module B; import A; export inline int funcB() { return funcA(); } ``` We hope the BMI of module B will change after the function A changes. But the declaration level hash may be tricky, so probably we need to change the BMI of the module B after the module A changes as the initial step. So the result may be, we need to add a new hash or signature value to the BMI for named modules: ``` signature = hash_combine(hash value of the current buffer, combined hash value of the signature export imported modules, combined hash value of touched non-export import modules) ``` (Maybe we need to do this for all module types) Maybe we can reuse the existing ASTSignature or we need to add a new block. But I am sure about this point now. https://github.com/llvm/llvm-project/pull/86912 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits