mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Code like that is usually indicative of programmer error, and does not round-trip through module interface files since there is no source syntax to refer to an outer generic parameter. For source compatibility this is a warning, but becomes an error with -swift-version 6. Fixes rdar://problem/108385980 and https://github.com/apple/swift/issues/62767.
71 lines
1.5 KiB
Swift
71 lines
1.5 KiB
Swift
// RUN: %target-typecheck-verify-swift -parse-as-library
|
|
|
|
struct S {
|
|
func foo() {
|
|
super.foo() // expected-error{{'super' cannot be used outside of class members}}
|
|
}
|
|
}
|
|
|
|
class D : B {
|
|
func b_foo() -> Int { return super.foo }
|
|
|
|
override func bar(_ a: Float) -> Int { return super.bar(a) }
|
|
|
|
func bas() -> (Int, UnicodeScalar, String) {
|
|
return (super.zim(), super.zang(), super.zung())
|
|
}
|
|
|
|
override var zippity : Int { return super.zippity }
|
|
}
|
|
|
|
extension D {
|
|
func d_ext_foo() -> Int {
|
|
return super.foo
|
|
}
|
|
}
|
|
|
|
class B {
|
|
var foo : Int = 0
|
|
func bar(_ a: Float) -> Int {}
|
|
|
|
func zim() -> Int {}
|
|
func zang() -> UnicodeScalar {}
|
|
func zung() -> String {}
|
|
|
|
var zippity : Int { return 123 }
|
|
|
|
func zoo() { super.zoo() } // expected-error{{'super' members cannot be referenced in a root class}}
|
|
|
|
}
|
|
|
|
class X<T> {
|
|
func method<U>(_ x: T, y: U) { }
|
|
}
|
|
|
|
class Y<U> : X<Int> {
|
|
func otherMethod<V>(_ x: Int, y: V) {
|
|
super.method(x, y: y)
|
|
}
|
|
}
|
|
|
|
func use_d(_ d: D) -> Int {
|
|
_ = d.b_foo()
|
|
_ = d.bar(1.0)
|
|
_ = d.bas()
|
|
|
|
return d.zippity
|
|
}
|
|
|
|
func not_method() {
|
|
super.foo() // expected-error{{'super' cannot be used outside of class members}}
|
|
}
|
|
|
|
// rdar://problem/50819554 - inability to properly resolve superclass shouldn't crash the solver
|
|
func test_that_invalid_supertype_ref_doesnt_crash() {
|
|
final class Node: ManagedBuffer<AnyObject, Undefined> { // expected-error {{cannot find type 'Undefined' in scope}}
|
|
static func create() {
|
|
super.create()
|
|
}
|
|
}
|
|
}
|