[clang] [C++][Modules] Don't insert `#include` before GMF when `-include` used (PR #212533)
Yihan Wang via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 28 18:52:06 PDT 2026
================
@@ -922,6 +922,16 @@ static bool checkPreprocessorOptions(
}
// Compute the #include and #include_macros lines we need.
+ for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
+ StringRef File = ExistingPPOpts.MacroIncludes[I];
+ if (llvm::is_contained(PPOpts.MacroIncludes, File))
+ continue;
+
+ SuggestedPredefines += "#__include_macros \"";
+ SuggestedPredefines += File;
+ SuggestedPredefines += "\"\n##\n";
+ }
----------------
yronglin wrote:
Good question! The `ASTReader` change is unrelated to module detection. It preserves the correct implicit-input order after loading a PCH.
Normal preprocessing order is:
```
-imacros
-include-pch
-include
```
After successfully loading a PCH, `ASTReader` replaces `Predefines` with `SuggestedPredefines`. Previously, it generated the remaining inputs in the opposite order:
```
-include
-imacros
```
Eg:
```
-imacros macros.h -include-pch pch.pch -include first.h
```
If macros.h defines a macro used by first.h, the old order processes first.h before that macro is defined.
The change only swaps the two loops so SuggestedPredefines matches normal preprocessing order:
```
-imacros
-include
```
This is required when implicit PCH, -imacros, and -include are used together. It also corrects the ordering for ordinary translation units, not only module units.
https://github.com/llvm/llvm-project/pull/212533
More information about the cfe-commits
mailing list