Skip to content

Commit d7f8445

Browse files
committed
RequirementMachine: Filter duplicates in ProtocolDependenciesRequest
1 parent 653977a commit d7f8445

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

lib/AST/RequirementMachine/RequirementLowering.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "swift/AST/TypeMatcher.h"
3434
#include "swift/AST/TypeRepr.h"
3535
#include "llvm/ADT/SmallVector.h"
36+
#include "llvm/ADT/SetVector.h"
3637
#include "RequirementMachine.h"
3738
#include "RewriteContext.h"
3839
#include "RewriteSystem.h"
@@ -1014,7 +1015,7 @@ ArrayRef<ProtocolDecl *>
10141015
ProtocolDependenciesRequest::evaluate(Evaluator &evaluator,
10151016
ProtocolDecl *proto) const {
10161017
auto &ctx = proto->getASTContext();
1017-
SmallVector<ProtocolDecl *, 4> result;
1018+
SmallSetVector<ProtocolDecl *, 4> result;
10181019

10191020
// If we have a serialized requirement signature, deserialize it and
10201021
// look at conformance requirements.
@@ -1026,7 +1027,7 @@ ProtocolDependenciesRequest::evaluate(Evaluator &evaluator,
10261027
== RequirementMachineMode::Disabled)) {
10271028
for (auto req : proto->getRequirementSignature().getRequirements()) {
10281029
if (req.getKind() == RequirementKind::Conformance) {
1029-
result.push_back(req.getProtocolDecl());
1030+
result.insert(req.getProtocolDecl());
10301031
}
10311032
}
10321033

@@ -1038,7 +1039,7 @@ ProtocolDependenciesRequest::evaluate(Evaluator &evaluator,
10381039
// signature. Look at the structural requirements instead.
10391040
for (auto req : proto->getStructuralRequirements()) {
10401041
if (req.req.getKind() == RequirementKind::Conformance)
1041-
result.push_back(req.req.getProtocolDecl());
1042+
result.insert(req.req.getProtocolDecl());
10421043
}
10431044

10441045
return ctx.AllocateCopy(result);

0 commit comments

Comments
 (0)