mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
136 lines
5.7 KiB
Swift
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()
|
|
}
|
|
}
|