Files
swift-mirror/test/decl/protocol/indirectly_recursive_requirement.swift
Doug Gregor de66b0c25c [GSB] Warn about redeclarations of associated types from inherited protocols.
Introduce a warning about redeclaring the associated types from an
inherited protocol in the protocol being checked:

* If the new declaration is an associated type, note that the
  declaration could be replaced by requirements in the protocol's
  where clause.
* If the new declaration is a typealias, note that it could be
  replaced by a same-type constraint in the protocol's where clause.
2017-04-24 07:55:42 -07:00

36 lines
725 B
Swift

// RUN: %target-typecheck-verify-swift
protocol Incrementable {
func successor() -> Self
}
protocol _ForwardIndex {
associatedtype Distance = MyInt // expected-note{{declared here}}
}
protocol ForwardIndex : _ForwardIndex {
}
protocol _BidirectionalIndex : _ForwardIndex {
func predecessor() -> Self
}
protocol BidirectionalIndex : ForwardIndex, _BidirectionalIndex {
}
protocol _RandomAccessIndex : _BidirectionalIndex {
associatedtype Distance // expected-warning{{redeclaration of associated type 'Distance}}
}
protocol RandomAccessIndex
: BidirectionalIndex, _RandomAccessIndex {}
struct MyInt : RandomAccessIndex
{
typealias Distance = MyInt
func predecessor() -> MyInt {
return self
}
}