From b5088cb408222eba4611e6121293166904ca48e6 Mon Sep 17 00:00:00 2001 From: Jan Svoboda Date: Wed, 25 Aug 2021 10:56:15 +0200 Subject: [PATCH] [clang][deps] Ensure deterministic order of TU '-fmodule-file=' arguments Translation units with multiple direct modular dependencies trigger a non-deterministic ordering in `clang-scan-deps`. This boils down to usage of `std::unordered_map`, which gets replaced by `std::map` in this patch. Depends on D103526. Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D103807 --- clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp | 2 +- clang/test/ClangScanDeps/modules-pch.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp index 2fd12f7..43b6a0c 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp @@ -180,7 +180,7 @@ DependencyScanningTool::getFullDependencies( private: std::vector Dependencies; std::vector PrebuiltModuleDeps; - std::unordered_map ClangModuleDeps; + std::map ClangModuleDeps; std::string ContextHash; std::vector OutputPaths; const llvm::StringSet<> &AlreadySeen; diff --git a/clang/test/ClangScanDeps/modules-pch.c b/clang/test/ClangScanDeps/modules-pch.c index b9b7ed7..1f368f9 100644 --- a/clang/test/ClangScanDeps/modules-pch.c +++ b/clang/test/ClangScanDeps/modules-pch.c @@ -90,9 +90,9 @@ // CHECK-PCH-NEXT: "command-line": [ // CHECK-PCH-NEXT: "-fno-implicit-modules", // CHECK-PCH-NEXT: "-fno-implicit-module-maps", -// CHECK-PCH-DAG: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_1]]/ModCommon1-{{.*}}.pcm", -// CHECK-PCH-DAG: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_2]]/ModCommon2-{{.*}}.pcm", -// CHECK-PCH-DAG: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_PCH]]/ModPCH-{{.*}}.pcm", +// CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_1]]/ModCommon1-{{.*}}.pcm", +// CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_2]]/ModCommon2-{{.*}}.pcm", +// CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_PCH]]/ModPCH-{{.*}}.pcm", // CHECK-PCH-NEXT: "-fmodule-map-file=[[PREFIX]]/module.modulemap", // CHECK-PCH-NEXT: "-fmodule-map-file=[[PREFIX]]/module.modulemap", // CHECK-PCH-NEXT: "-fmodule-map-file=[[PREFIX]]/module.modulemap" -- 2.7.4