[clang] [Feat] Allow Finding across only parts of an AST. (PR #127423)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 20 15:01:26 PST 2025
matts1 wrote:
> I'm not a modules or matcher expert, but this doesn't match my (perhaps uninformed) understanding. I thought that when we import a module, it _is_ part of our TU, similarly to when we include a header.
You are correct. I phrased it very poorly. I'll reclarify - if we have a header file we depend on, then if the header file came from a different module, it would have already been checked when we compiled that module, so there's no need to recheck it.
> I thought what we wanted to do was avoid walking the parts of the AST that come from a module but aren't used in the TU, and therefore haven't been deserialized.
Consider:
```c
// module.cpp
#include "module.h"
```
```c
// lib.cpp
#include "lib.h"
#include "module.h"
```
To compile `lib`, we perform something along the lines of:
```sh
clang++ -emit-module -o module.pcm -add-plugin raw-ptr-plugin module.cpp
clang++ -emit-module -o lib.pcm -add-plugin raw-ptr-plugin lib.cpp -fmodule-file module.pcm
```
The raw plugin will check `module.cpp` and `module.h` in the first action. Thus, there is no need to bother checking `module.h` when compiling `lib`, because it is in a different module. We could only check parts of `module.h` that we depend on, but that still seems to be redundant.
https://github.com/llvm/llvm-project/pull/127423
More information about the cfe-commits
mailing list