@@ -410,24 +410,30 @@ CoverageMapping::load(ArrayRef<StringRef> ObjectFilenames,
410410 }
411411
412412 if (BIDFetcher) {
413- const auto &Compare = [](object::BuildIDRef A, object::BuildIDRef B) {
413+ const auto &CompareLT = [](object::BuildIDRef A, object::BuildIDRef B) {
414414 return StringRef (reinterpret_cast <const char *>(A.data ()), A.size ()) <
415415 StringRef (reinterpret_cast <const char *>(B.data ()), B.size ());
416416 };
417+ const auto &CompareEQ = [](object::BuildIDRef A, object::BuildIDRef B) {
418+ return StringRef (reinterpret_cast <const char *>(A.data ()), A.size ()) ==
419+ StringRef (reinterpret_cast <const char *>(B.data ()), B.size ());
420+ };
417421 std::vector<object::BuildID> ProfileBinaryIDs;
418422 if (Error E = ProfileReader->readBinaryIds (ProfileBinaryIDs))
419423 return createFileError (ProfileFilename, std::move (E));
420- llvm::sort (ProfileBinaryIDs, Compare);
421- std::unique (ProfileBinaryIDs.begin (), ProfileBinaryIDs.end (), Compare);
424+ llvm::sort (ProfileBinaryIDs, CompareLT);
425+ ProfileBinaryIDs.erase (llvm::unique (ProfileBinaryIDs, CompareEQ),
426+ ProfileBinaryIDs.end ());
422427
423428 SmallVector<object::BuildIDRef> BinaryIDsToFetch;
424429 if (!ProfileBinaryIDs.empty ()) {
425- llvm::sort (FoundBinaryIDs, Compare);
426- std::unique (FoundBinaryIDs.begin (), FoundBinaryIDs.end (), Compare);
430+ llvm::sort (FoundBinaryIDs, CompareLT);
431+ FoundBinaryIDs.erase (llvm::unique (FoundBinaryIDs, CompareEQ),
432+ FoundBinaryIDs.end ());
427433 std::set_difference (
428434 ProfileBinaryIDs.begin (), ProfileBinaryIDs.end (),
429435 FoundBinaryIDs.begin (), FoundBinaryIDs.end (),
430- std::inserter (BinaryIDsToFetch, BinaryIDsToFetch.end ()), Compare );
436+ std::inserter (BinaryIDsToFetch, BinaryIDsToFetch.end ()), CompareLT );
431437 }
432438
433439 for (object::BuildIDRef BinaryID : BinaryIDsToFetch) {
0 commit comments