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 *>
10141015ProtocolDependenciesRequest::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