[PATCH] D55468: Use zip_longest for iterator range comparisons. NFC.
Michael Kruse via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Dec 9 15:20:17 PST 2018
Meinersbur updated this revision to Diff 177447.
Meinersbur added a comment.
- Fix xor
- Store tuple elements in variables
Repository:
rC Clang
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D55468/new/
https://reviews.llvm.org/D55468
Files:
lib/Sema/SemaOverload.cpp
lib/Serialization/ASTReaderDecl.cpp
Index: lib/Serialization/ASTReaderDecl.cpp
===================================================================
--- lib/Serialization/ASTReaderDecl.cpp
+++ lib/Serialization/ASTReaderDecl.cpp
@@ -2913,25 +2913,30 @@
// Note that pass_object_size attributes are represented in the function's
// ExtParameterInfo, so we don't need to check them here.
- // Return false if any of the enable_if expressions of A and B are different.
llvm::FoldingSetNodeID Cand1ID, Cand2ID;
auto AEnableIfAttrs = A->specific_attrs<EnableIfAttr>();
auto BEnableIfAttrs = B->specific_attrs<EnableIfAttr>();
- auto AEnableIf = AEnableIfAttrs.begin();
- auto BEnableIf = BEnableIfAttrs.begin();
- for (; AEnableIf != AEnableIfAttrs.end() && BEnableIf != BEnableIfAttrs.end();
- ++BEnableIf, ++AEnableIf) {
+
+ for (auto Pair : zip_longest(AEnableIfAttrs, BEnableIfAttrs)) {
+ Optional<EnableIfAttr *> Cand1A = std::get<0>(Pair);
+ Optional<EnableIfAttr *> Cand2A = std::get<1>(Pair);
+
+ // Return false if the number of enable_if attributes is different.
+ if (!Cand1A || !Cand2A)
+ return false;
+
Cand1ID.clear();
Cand2ID.clear();
- AEnableIf->getCond()->Profile(Cand1ID, A->getASTContext(), true);
- BEnableIf->getCond()->Profile(Cand2ID, B->getASTContext(), true);
+ (*Cand1A)->getCond()->Profile(Cand1ID, A->getASTContext(), true);
+ (*Cand2A)->getCond()->Profile(Cand2ID, B->getASTContext(), true);
+
+ // Return false if any of the enable_if expressions of A and B are
+ // different.
if (Cand1ID != Cand2ID)
return false;
}
-
- // Return false if the number of enable_if attributes was different.
- return AEnableIf == AEnableIfAttrs.end() && BEnableIf == BEnableIfAttrs.end();
+ return true;
}
/// Determine whether the two declarations refer to the same entity.
Index: lib/Sema/SemaOverload.cpp
===================================================================
--- lib/Sema/SemaOverload.cpp
+++ lib/Sema/SemaOverload.cpp
@@ -8977,25 +8977,28 @@
auto Cand1Attrs = Cand1->specific_attrs<EnableIfAttr>();
auto Cand2Attrs = Cand2->specific_attrs<EnableIfAttr>();
- auto Cand1I = Cand1Attrs.begin();
llvm::FoldingSetNodeID Cand1ID, Cand2ID;
- for (EnableIfAttr *Cand2A : Cand2Attrs) {
- Cand1ID.clear();
- Cand2ID.clear();
+ for (auto Pair : zip_longest(Cand1Attrs, Cand2Attrs)) {
+ Optional<EnableIfAttr *> Cand1A = std::get<0>(Pair);
+ Optional<EnableIfAttr *> Cand2A = std::get<1>(Pair);
// It's impossible for Cand1 to be better than (or equal to) Cand2 if Cand1
- // has fewer enable_if attributes than Cand2.
- auto Cand1A = Cand1I++;
- if (Cand1A == Cand1Attrs.end())
+ // has fewer enable_if attributes than Cand2, and vice versa.
+ if (!Cand1A)
return Comparison::Worse;
+ if (!Cand2A)
+ return Comparison::Better;
+
+ Cand1ID.clear();
+ Cand2ID.clear();
- Cand1A->getCond()->Profile(Cand1ID, S.getASTContext(), true);
- Cand2A->getCond()->Profile(Cand2ID, S.getASTContext(), true);
+ (*Cand1A)->getCond()->Profile(Cand1ID, S.getASTContext(), true);
+ (*Cand2A)->getCond()->Profile(Cand2ID, S.getASTContext(), true);
if (Cand1ID != Cand2ID)
return Comparison::Worse;
}
- return Cand1I == Cand1Attrs.end() ? Comparison::Equal : Comparison::Better;
+ return Comparison::Equal;
}
static bool isBetterMultiversionCandidate(const OverloadCandidate &Cand1,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55468.177447.patch
Type: text/x-patch
Size: 3445 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181209/c49921b5/attachment.bin>
More information about the cfe-commits
mailing list