[clang] sort additional module maps when serializing
authorRichard Howell <rhow@fb.com>
Fri, 9 Sep 2022 17:49:44 +0000 (10:49 -0700)
committerRichard Howell <rhow@fb.com>
Mon, 12 Sep 2022 19:00:43 +0000 (12:00 -0700)
Sort additional module maps when serializing pcm files. This ensures
the `MODULE_MAP_FILE` record is deterministic across repeated builds.

Reviewed By: benlangmuir

Differential Revision: https://reviews.llvm.org/D133611

clang/lib/Serialization/ASTWriter.cpp

index 1e835a4..838c6e3 100644 (file)
@@ -1282,7 +1282,12 @@ void ASTWriter::WriteControlBlock(Preprocessor &PP, ASTContext &Context,
     if (auto *AdditionalModMaps =
             Map.getAdditionalModuleMapFiles(WritingModule)) {
       Record.push_back(AdditionalModMaps->size());
-      for (const FileEntry *F : *AdditionalModMaps)
+      SmallVector<const FileEntry *, 1> ModMaps(AdditionalModMaps->begin(),
+                                                AdditionalModMaps->end());
+      llvm::sort(ModMaps, [](const FileEntry *A, const FileEntry *B) {
+        return A->getName() < B->getName();
+      });
+      for (const FileEntry *F : ModMaps)
         AddPath(F->getName(), Record);
     } else {
       Record.push_back(0);