[clang] [Doc] Update documentation for no-transitive-change (PR #96453)

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 25 19:39:45 PDT 2024


================
@@ -652,6 +652,134 @@ in the future. The expected roadmap for Reduced BMIs as of Clang 19.x is:
    comes, the term BMI will refer to the Reduced BMI and the Full BMI will only
    be meaningful to build systems which elect to support two-phase compilation.
 
+Experimental No Transitive Change
+---------------------------------
+
+Starting with clang19.x, we introduced an experimental feature: the non-transitive
+change for modules, aimed at reducing unnecessary recompilations. For example,
----------------
ChuanqiXu9 wrote:

Done. The suggestion looks good. What do you mean for `an example`? There are a following example. Do you mean a example that makes the BMI change but actually it can avoid that?

An example may be:

```
// A.cppm
export module A;
export int a();
```

```
// B.cppm
export module B;
import A;
export inline int b() { return a(); }
```

and we add a unrelated function to A:

```
// A.cppm
export module A;
export int a0();
export int a();
```

Now the users may think the change is unrelated to B and the BMI of B should keep unchanged. But we can't do that since the used DeclID for `a` in module B become to `<1, 1>` instead of `<1, 0>` since the new declaration changes the DeclID. 

Is this the example you want? I didn't post this since I feel it has too many implementation details.

https://github.com/llvm/llvm-project/pull/96453


More information about the cfe-commits mailing list