diff --git a/clang/include/clang/Analysis/Analyses/LifetimeSafety/Utils.h b/clang/include/clang/Analysis/Analyses/LifetimeSafety/Utils.h index 101ee083f0d95..543bbd045593c 100644 --- a/clang/include/clang/Analysis/Analyses/LifetimeSafety/Utils.h +++ b/clang/include/clang/Analysis/Analyses/LifetimeSafety/Utils.h @@ -38,6 +38,8 @@ template struct ID { template llvm::ImmutableSet join(llvm::ImmutableSet A, llvm::ImmutableSet B, typename llvm::ImmutableSet::Factory &F) { + if (A.getRootWithoutRetain() == B.getRootWithoutRetain()) + return A; if (A.getHeight() < B.getHeight()) std::swap(A, B); for (const T &E : B) @@ -70,6 +72,8 @@ llvm::ImmutableMap join(const llvm::ImmutableMap &A, const llvm::ImmutableMap &B, typename llvm::ImmutableMap::Factory &F, Joiner JoinValues, JoinKind Kind) { + if (A.getRootWithoutRetain() == B.getRootWithoutRetain()) + return A; if (A.getHeight() < B.getHeight()) return join(B, A, F, JoinValues, Kind);