Files
swift-mirror/test/expr/postfix/init/unqualified.swift
2024-11-06 13:55:02 -08:00

136 lines
5.7 KiB
Swift

// RUN: %target-typecheck-verify-swift
// https://github.com/apple/swift/issues/43464
class Aaron {
init(x: Int) {
func foo() {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{11-11=self.}}
// expected-error@+1 {{type of expression is ambiguous without a type annotation}}
_ = init
}
}
convenience init() {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{5-5=self.}}
// expected-error@+1 {{cannot convert value of type 'Bool' to expected argument type 'Int'}}
init(x: true)
// FIXME: self.init considered initializer delegation in nested function?
// expected-error@+2 {{initializer delegation ('self.init') cannot be nested in another expression}}
// expected-error@+1 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{22-22=self.}}
func foo() { _ = init() }
}
required init(y: Int) {}
static func aaronFn() {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{9-9=self.}}
// expected-error@+1 {{incorrect argument label in call (have 'z:', expected 'y:')}}
_ = init(z: 0)
}
// Make sure we recover and assume 'self.init'.
// expected-error@+3 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{45-45=self.}}
// expected-error@+2 {{cannot convert value of type 'Aaron' to specified type 'Int'}}
// expected-error@+1 {{incorrect argument label in call (have 'z:', expected 'y:')}}
static var aaronVar: Aaron { let _: Int = init(z: 0) }
}
class Theodosia: Aaron {
init() {
// Make sure we recover and assume 'super.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'super.'?}} {{5-5=super.}}
// expected-error@+1 {{cannot convert value of type 'Bool' to expected argument type 'Int'}}
init(x: true)
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{22-22=self.}}
// expected-error@+1 {{type of expression is ambiguous without a type annotation}}
func foo() { _ = init }
}
required init(y: Int) {}
static func theodosiaFn() {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{9-9=self.}}
// expected-error@+1 {{incorrect argument label in call (have 'z:', expected 'y:')}}
_ = init(z: 0)
// FIXME: We could optimistically parse this as an expression instead
// expected-error@+2 {{initializers may only be declared within a type}}
// expected-error@+1 {{expected parameter type following ':'}}
init(z: 0)
}
static var theodosiaVar: Aaron {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{9-9=self.}}
// expected-error@+1 {{incorrect argument label in call (have 'z:', expected 'y:')}}
_ = init(z: 0)
}
}
struct AaronStruct {
init(x: Int) {}
init() {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{5-5=self.}}
// expected-error@+1 {{incorrect argument label in call (have 'y:', expected 'x:')}}
init(y: 1)
func foo() {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{11-11=self.}}
// expected-error@+1 {{incorrect argument label in call (have 'y:', expected 'x:')}}
_ = init(y: 1)
}
}
static func aaronFn() {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{9-9=self.}}
// expected-error@+1 {{incorrect argument label in call (have 'y:', expected 'x:')}}
_ = init(y: 1)
// FIXME: We could optimistically parse this as an expression instead
// expected-error@+2 {{initializers may only be declared within a type}}
// expected-error@+1 {{expected parameter type following ':'}}
init(y: 1)
}
static var aaronVar: Aaron {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{9-9=self.}}
// expected-error@+1 {{incorrect argument label in call (have 'y:', expected 'x:')}}
_ = init(y: 1)
// FIXME: We could optimistically parse this as an expression instead
// expected-error@+3 {{initializers may only be declared within a type}}
// expected-error@+2 {{consecutive statements on a line must be separated by ';'}}
// expected-error@+1 {{non-void function should return a value}}
return init()
}
}
enum AaronEnum: Int {
case A = 1
init(x: Int) {
// Make sure we recover and assume 'self.init'.
// expected-error@+2 {{initializer expression requires explicit access; did you mean to prepend it with 'self.'?}} {{5-5=self.}}
// expected-error@+1 {{cannot convert value of type 'String' to expected argument type 'Int'}}
init(rawValue: "")!
}
}
do {
func foo() {
// expected-error@+1 {{initializer expression requires explicit access}} {none}}
_ = init()
}
}