Files
swift-mirror/test/decl/init/basic_init.swift
fischertony 78f4b9dba9 Skip redecl errors for inits that conflict with an inherited init
This can only happen when the conflicting init is within an extension.
It is the override checker's responsibility to emit a sensible diagnostic here.
2019-04-18 22:04:29 +03:00

51 lines
1.7 KiB
Swift

// RUN: %target-typecheck-verify-swift
class Foo {
func bar(_: bar) {} // expected-error{{use of undeclared type 'bar'}}
}
class C {
var triangle : triangle // expected-error{{use of undeclared type 'triangle'}}
init() {}
}
typealias t = t // expected-error {{type alias 't' references itself}}
// expected-note@-1{{type declared here}}
extension Foo {
convenience init() {} // expected-error{{invalid redeclaration of synthesized 'init()'}}
}
class InitClass {
init(arg: Bool) {} // expected-note{{add '@objc' to make this declaration overridable}}
@objc init(baz: Int) {} // expected-note{{overridden declaration is here}}
@objc dynamic init(bar: Int) {}
}
class InitSubclass: InitClass {}
// expected-note@-1 {{'init(bar:)' previously overridden here}}
// expected-note@-2 {{'init(baz:)' previously overridden here}}
extension InitSubclass {
convenience init(arg: Bool) {} // expected-error{{overriding non-@objc declarations from extensions is not supported}}
convenience override init(baz: Int) {}
// expected-error@-1 {{cannot override a non-dynamic class declaration from an extension}}
// expected-error@-2 {{'init(baz:)' has already been overridden}}
convenience override init(bar: Int) {} // expected-error{{'init(bar:)' has already been overridden}}
}
struct InitStruct {
let foo: Int
}
extension InitStruct {
init(foo: Int) {} // expected-error{{invalid redeclaration of synthesized memberwise 'init(foo:)'}}
}
// <rdar://problem/17564699> QoI: Structs should get convenience initializers
struct MyStruct {
init(k: Int) {
}
convenience init() { // expected-error {{delegating initializers in structs are not marked with 'convenience'}} {{3-15=}}
self.init(k: 1)
}
}