public class Object { public init() {} } public class Subclass : Object {} open class Base { open func takesT(_: T) {} open func takesInt(_: Int) {} open func takesReference(_: Object) {} open func returnsSuperclass() -> Object { fatalError() } } open class Derived : Base { // Re-abstraction required, no new vtable entry open override func takesT(_: Int) {} // New vtable entry open override func takesInt(_: Int?) {} // Override has different formal type but is ABI-compatible open override func takesReference(_: Object?) {} // Override has a more specific return type but is ABI-compatible open override func returnsSuperclass() -> Subclass { fatalError() } }