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

Reply via email to