[clang] [clang][modules-driver] Precompile std modules independently of -o and final phase (PR #199289)

Naveen Seth Hanig via cfe-commits cfe-commits at lists.llvm.org
Wed May 27 01:51:44 PDT 2026


naveen-seth wrote:

Currently, the `-cc1` jobs for `std.cppm` and `std.compat.cppm` are generated in the same way as any other `.cppm` input specified on the `-fmodules-driver` command line. We implicitly add them to the input list at the beginning of `BuildCompilation`, and remove them later if they are not needed.
(This is done because all -cc1 jobs need to exist before the dependency scan. The -cc1 jobs for the Standard library modules are still only scanned if really needed.)

For this command line:

```
clang++ -std=c++23 -fmodules-driver main.cpp
```

we would get:

```
clang -cc1 -emit-obj -o /tmp/std.o -fmodules-reduced-bmi -fmodule-output=...
clang -cc1 -emit-obj -o /tmp/std.compat.o -fmodules-reduced-bmi -fmodule-output=...
clang -cc1 -emit-obj -o /tmp/main.o ...
```

This is bad because we do not need to compile object files for the standard library modules. Instead, we only want something like:

```
clang -cc1 -emit-reduced-bmi -o /tmp/std.pcm
```

Because `std.cppm` is currently handled like any other `.cppm` input, this also causes problems with `-o`, since `-o` is usually not allowed with multiple inputs.

The Standard library modules are a special kind of input that needs special handling during `BuildCompilation`, so adding a dedicated input kind for them solves these problems.

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


More information about the cfe-commits mailing list