[llvm-branch-commits] [clang] [serialization] No transitive type change (PR #92511)
Ilya Biryukov via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Jun 19 09:55:29 PDT 2024
================
@@ -6659,13 +6655,22 @@ void ASTWriter::MacroRead(serialization::MacroID ID, MacroInfo *MI) {
}
void ASTWriter::TypeRead(TypeIdx Idx, QualType T) {
- // Always take the highest-numbered type index. This copes with an interesting
+ // Always take the type index that comes in later module files.
+ // This copes with an interesting
// case for chained AST writing where we schedule writing the type and then,
// later, deserialize the type from another AST. In this case, we want to
- // keep the higher-numbered entry so that we can properly write it out to
+ // keep the just writing entry so that we can properly write it out to
// the AST file.
TypeIdx &StoredIdx = TypeIdxs[T];
- if (Idx.getIndex() >= StoredIdx.getIndex())
+
+ // Ignore it if the type comes from the current being written module file.
+ unsigned ModuleFileIndex = StoredIdx.getModuleFileIndex();
+ if (ModuleFileIndex == 0 && StoredIdx.getValue())
+ return;
+
+ // Otherwise, keep the highest ID since the module file comes later has
+ // higher module file indexes.
+ if (Idx.getValue() >= StoredIdx.getValue())
----------------
ilya-biryukov wrote:
```suggestion
if (Idx.getModuleFileIndex() >= StoredIdx.getModuleFileIndex())
```
This seems to align better with what the comment for the code are saying. If this does not work, I might be missing something.
https://github.com/llvm/llvm-project/pull/92511
More information about the llvm-branch-commits
mailing list