Files
swift-mirror/test/expr/primary/super/unsupported.swift
Hamish Knight 7971056e21 [Sema] Fold SequenceExpr in pre-checking pre-walk
Doing it in the post-walk meant we ended up
walking the children twice, which lead to duplicate
diagnostics and incorrect inference of the
level of application for function references. Move
it to the pre-walk, ensuring that we resolve any
operator references before folding.
2024-07-29 00:07:45 +01:00

107 lines
3.3 KiB
Swift

// RUN: %target-typecheck-verify-swift
class Base {}
class Derived: Base {
override init() {
// expected-error@+1 {{'super' may be used only to access a superclass member, subscript, or initializer}}
let _ = super
}
deinit {
// expected-error@+2 {{'super' may be used only to access a superclass member, subscript, or initializer}}
// expected-error@+1 {{cannot call value of non-function type 'Base'}}
super()
}
var unsupported: Base {
get {
// expected-error@+1 {{'super' may be used only to access a superclass member, subscript, or initializer}}
super
}
}
subscript(_: Base) -> Bool {
true
}
func unsupported(
// expected-error@+1 {{'super' may be used only to access a superclass member, subscript, or initializer}}
_: Base = super
) {
// expected-error@+2 {{'super' may be used only to access a superclass member, subscript, or initializer}}
// expected-warning@+1 {{expression of type 'Base' is unused}}
super
// expected-error@+2 {{'super' may be used only to access a superclass member, subscript, or initializer}}
// expected-error@+1 {{cannot call value of non-function type 'Base'}}
super(0)
// expected-error@+2 {{'super' may be used only to access a superclass member, subscript, or initializer}}
// expected-warning@+1 {{expression of type 'Base' is unused}}
super
[1] // expected-warning{{expression of type '[Int]' is unused}}
// expected-error@+1 {{'super' may be used only to access a superclass member, subscript, or initializer}}
let _ = self[super]
// expected-error@+1 {{'super' may be used only to access a superclass member, subscript, or initializer}}
_ = (0, super)
func nested() {
let _ = [
// expected-error@+1 {{'super' may be used only to access a superclass member, subscript, or initializer}}
super
]
}
}
}
extension Derived {
func unsupportedInExtension() {
// expected-error@+1 {{'super' may be used only to access a superclass member, subscript, or initializer}}
let _ = super
}
}
// Do not complain about a missing/illegal parent expression unless 'super' is
// legal in context.
func unsupported() {
// expected-error@+1 {{'super' cannot be used outside of a class computed property, method, initializer, deinitializer, or subscript}}
super
}
protocol P: Derived {}
extension P {
func unsupported() {
// expected-error@+1 {{'super' cannot be used in non-class type 'P'}}
super
}
}
enum E {
var unsupported: Void {
// expected-error@+1 {{'super' cannot be used in non-class type 'E'}}
super
}
}
class Root {
// expected-error@+1 {{'super' cannot be used outside of a class computed property, method, initializer, deinitializer, or subscript}}
let sup = super
init() {
// expected-error@+1 {{'super' cannot be used in class 'Root' because it has no superclass}}
super
}
func unsupported(
// expected-error@+1 {{'super' cannot be used in class 'Root' because it has no superclass}}
_: Root = super
) {
// expected-error@+1 {{'super' cannot be used in class 'Root' because it has no superclass}}
super
struct S {
func unsupported() {
// expected-error@+1 {{'super' cannot be used in non-class type 'S'}}
super
}
}
}
}