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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits