blob: 8b3b7be05f0cc7d8b5a9989fe037f58551d95df0 [file] [log] [blame]
// RUN: %target-typecheck-verify-swift
// User-written default constructor
struct X {
init() {}
}
X() // expected-warning{{unused}}
// User-written memberwise constructor
struct Y {
var i : Int, f : Float
init(i : Int, f : Float) {}
}
Y(i: 1, f: 1.5) // expected-warning{{unused}}
// User-written memberwise constructor with default
struct Z {
var a : Int
var b : Int
init(a : Int, b : Int = 5) {
self.a = a
self.b = b
}
}
Z(a: 1, b: 2) // expected-warning{{unused}}
// User-written init suppresses implicit constructors.
struct A {
var i, j : Int
init(x : Int) { // expected-note {{'init(x:)' declared here}}
i = x
j = x
}
}
A() // expected-error{{missing argument for parameter 'x'}}
A(x: 1) // expected-warning{{unused}}
A(1, 1) // expected-error{{extra argument in call}}
// No user-written constructors; implicit constructors are available.
struct B {
var i : Int = 0, j : Float = 0.0
}
extension B {
init(x : Int) {
self.i = x
self.j = 1.5
}
}
B() // expected-warning{{unused}}
B(x: 1) // expected-warning{{unused}}
B(i: 1, j: 2.5) // expected-warning{{unused}}
struct F { // expected-note {{'init(d:b:c:)' declared here}}
var d : D
var b : B
var c : C
}
struct C {
var d : D
// suppress implicit initializers
init(d : D) { } // expected-note {{'init(d:)' declared here}}
}
struct D {
var i : Int
init(i : Int) { }
}
extension D {
init() { i = 17 }
}
F() // expected-error{{missing arguments for parameters 'd', 'b', 'c' in call}}
D() // okay // expected-warning{{unused}}
B() // okay // expected-warning{{unused}}
C() // expected-error{{missing argument for parameter 'd'}}
struct E {
init(x : Wonka) { } // expected-error{{use of undeclared type 'Wonka'}}
}
var e : E
//----------------------------------------------------------------------------
// Argument/parameter name separation
//----------------------------------------------------------------------------
class ArgParamSep {
init(_ b: Int, _: Int, forInt int: Int, c _: Int, d: Int) { }
}
// Tests for crashes.
// rdar://14082378
struct NoCrash1a {
init(_: NoCrash1b) {} // expected-error {{use of undeclared type 'NoCrash1b'}}
}
var noCrash1c : NoCrash1a
class MissingDef {
init() // expected-error{{initializer requires a body}}
}