// RUN: %target-typecheck-verify-swift -module-name ModuleName

protocol ClassProtocol : class {
  init()
  init?(failable: Void)
  init(throwing: Void) throws
}

class C : ClassProtocol {
  required init() {}
  required init?(failable: Void) {}
  required init(throwing: Void) throws {}
}

class D : C {}

func testWeakVariableBindingDiag() throws {
  weak var c1 = C() // expected-warning {{instance will be immediately deallocated because variable 'c1' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c1' declared here}}
  // expected-note@-3 {{'c1' declared here}}

  c1 = C() // expected-warning {{instance will be immediately deallocated because variable 'c1' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c2: C? = ModuleName.C() // expected-warning {{instance will be immediately deallocated because variable 'c2' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c2' declared here}}
  // expected-note@-3 {{'c2' declared here}}

  c2 = C() // expected-warning {{instance will be immediately deallocated because variable 'c2' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c3: C? = D() // expected-warning {{instance will be immediately deallocated because variable 'c3' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c3' declared here}}
  // expected-note@-3 {{'c3' declared here}}

  c3 = D() // expected-warning {{instance will be immediately deallocated because variable 'c3' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c4 = C(failable: ()) // expected-warning {{instance will be immediately deallocated because variable 'c4' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c4' declared here}}
  // expected-note@-3 {{'c4' declared here}}

  c4 = C(failable: ()) // expected-warning {{instance will be immediately deallocated because variable 'c4' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c5: C? = C(failable: ()) // expected-warning {{instance will be immediately deallocated because variable 'c5' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c5' declared here}}
  // expected-note@-3 {{'c5' declared here}}

  c5 = C(failable: ()) // expected-warning {{instance will be immediately deallocated because variable 'c5' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c6: C? = D(failable: ()) // expected-warning {{instance will be immediately deallocated because variable 'c6' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c6' declared here}}
  // expected-note@-3 {{'c6' declared here}}

  c6 = D(failable: ()) // expected-warning {{instance will be immediately deallocated because variable 'c6' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c7 = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c7' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c7' declared here}}
  // expected-note@-3 {{'c7' declared here}}

  c7 = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c7' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c8: C? = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c8' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c8' declared here}}
  // expected-note@-3 {{'c8' declared here}}

  c8 = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c8' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c9: C? = try D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c9' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c9' declared here}}
  // expected-note@-3 {{'c9' declared here}}

  c9 = try D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c9' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c10 = try! C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c10' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c10' declared here}}
  // expected-note@-3 {{'c10' declared here}}

  c10 = try! C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c10' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c11: C? = try! C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c11' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c11' declared here}}
  // expected-note@-3 {{'c11' declared here}}

  c11 = try! C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c11' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c12: C? = try! D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c12' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c12' declared here}}
  // expected-note@-3 {{'c12' declared here}}

  c12 = try! D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c12' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c13 = try? C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c13' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c13' declared here}}
  // expected-note@-3 {{'c13' declared here}}

  c13 = try? C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c13' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c14: C? = try? C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c14' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c14' declared here}}
  // expected-note@-3 {{'c14' declared here}}

  c14 = try? C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c14' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  weak var c15: C? = try? D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c15' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c15' declared here}}
  // expected-note@-3 {{'c15' declared here}}

  c15 = try? D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c15' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  _ = c1; _ = c2; _ = c3; _ = c4; _ = c5; _ = c6; _ = c7; _ = c8; _ = c9; _ = c10; _ = c11; _ = c12; _ = c13; _ = c14; _ = c15
}

func testUnownedVariableBindingDiag() throws {
  unowned(unsafe) var c = C() // expected-warning {{instance will be immediately deallocated because variable 'c' is 'unowned(unsafe)'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c' declared here}}
  // expected-note@-3 {{'c' declared here}}

  c = C() // expected-warning {{instance will be immediately deallocated because variable 'c' is 'unowned(unsafe)'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c1 = C() // expected-warning {{instance will be immediately deallocated because variable 'c1' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c1' declared here}}
  // expected-note@-3 {{'c1' declared here}}

  c1 = C() // expected-warning {{instance will be immediately deallocated because variable 'c1' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c2: C = ModuleName.C() // expected-warning {{instance will be immediately deallocated because variable 'c2' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c2' declared here}}
  // expected-note@-3 {{'c2' declared here}}

  c2 = C() // expected-warning {{instance will be immediately deallocated because variable 'c2' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c3: C = D() // expected-warning {{instance will be immediately deallocated because variable 'c3' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c3' declared here}}
  // expected-note@-3 {{'c3' declared here}}

  c3 = D() // expected-warning {{instance will be immediately deallocated because variable 'c3' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c4 = C(failable: ())! // expected-warning {{instance will be immediately deallocated because variable 'c4' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c4' declared here}}
  // expected-note@-3 {{'c4' declared here}}

  c4 = C(failable: ())! // expected-warning {{instance will be immediately deallocated because variable 'c4' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c5: C = C(failable: ())! // expected-warning {{instance will be immediately deallocated because variable 'c5' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c5' declared here}}
  // expected-note@-3 {{'c5' declared here}}

  c5 = C(failable: ())! // expected-warning {{instance will be immediately deallocated because variable 'c5' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c6: C = D(failable: ())! // expected-warning {{instance will be immediately deallocated because variable 'c6' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c6' declared here}}
  // expected-note@-3 {{'c6' declared here}}

  c6 = D(failable: ())! // expected-warning {{instance will be immediately deallocated because variable 'c6' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c7 = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c7' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c7' declared here}}
  // expected-note@-3 {{'c7' declared here}}

  c7 = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c7' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c8: C = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c8' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c8' declared here}}
  // expected-note@-3 {{'c8' declared here}}

  c8 = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c8' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c9: C = try D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c9' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c9' declared here}}
  // expected-note@-3 {{'c9' declared here}}

  c9 = try D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c9' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c10 = try! C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c10' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c10' declared here}}
  // expected-note@-3 {{'c10' declared here}}

  c10 = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c10' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c11: C = try! C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c11' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c11' declared here}}
  // expected-note@-3 {{'c11' declared here}}

  c11 = try C(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c11' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c12: C = try! D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c12' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c12' declared here}}
  // expected-note@-3 {{'c12' declared here}}

  c12 = try D(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 'c12' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c13 = (try? C(throwing: ()))! // expected-warning {{instance will be immediately deallocated because variable 'c13' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c13' declared here}}
  // expected-note@-3 {{'c13' declared here}}

  c13 = (try? C(throwing: ()))! // expected-warning {{instance will be immediately deallocated because variable 'c13' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c14: C = (try? C(throwing: ()))! // expected-warning {{instance will be immediately deallocated because variable 'c14' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c14' declared here}}
  // expected-note@-3 {{'c14' declared here}}

  c14 = (try? C(throwing: ()))! // expected-warning {{instance will be immediately deallocated because variable 'c14' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned var c15: C = (try? D(throwing: ()))! // expected-warning {{instance will be immediately deallocated because variable 'c15' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c15' declared here}}
  // expected-note@-3 {{'c15' declared here}}

  c15 = (try? D(throwing: ()))! // expected-warning {{instance will be immediately deallocated because variable 'c15' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  _ = c; _ = c1; _ = c2; _ = c3; _ = c4; _ = c5; _ = c6; _ = c7; _ = c8; _ = c9; _ = c10; _ = c11; _ = c12; _ = c13; _ = c14; _ = c15
}

func testMultipleBindingDiag() {
  weak var c1 = C(), c2: C? = C(), c3: C? = D()
  // expected-warning@-1 {{instance will be immediately deallocated because variable 'c1' is 'weak'}}
  // expected-note@-2 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-3 {{'c1' declared here}}
  // expected-warning@-4 {{instance will be immediately deallocated because variable 'c2' is 'weak'}}
  // expected-note@-5 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-6 {{'c2' declared here}}
  // expected-warning@-7 {{instance will be immediately deallocated because variable 'c3' is 'weak'}}
  // expected-note@-8 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-9 {{'c3' declared here}}

  unowned let c4 = C(), c5: C = C(), c6: C = D()
  // expected-warning@-1 {{instance will be immediately deallocated because variable 'c4' is 'unowned'}}
  // expected-note@-2 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-3 {{'c4' declared here}}
  // expected-warning@-4 {{instance will be immediately deallocated because variable 'c5' is 'unowned'}}
  // expected-note@-5 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-6 {{'c5' declared here}}
  // expected-warning@-7 {{instance will be immediately deallocated because variable 'c6' is 'unowned'}}
  // expected-note@-8 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-9 {{'c6' declared here}}

  _ = c1; _ = c2; _ = c3; _ = c4; _ = c5; _ = c6
}

func testTupleAndParenBinding() throws {
  weak var ((c1), c2, c3): (C?, C?, C?) = (C() as C, (D()), try D(throwing: ()))
  // expected-warning@-1 {{instance will be immediately deallocated because variable 'c1' is 'weak'}}
  // expected-note@-2 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-3 {{'c1' declared here}}
  // expected-warning@-4 {{instance will be immediately deallocated because variable 'c2' is 'weak'}}
  // expected-note@-5 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-6 {{'c2' declared here}}
  // expected-warning@-7 {{instance will be immediately deallocated because variable 'c3' is 'weak'}}
  // expected-note@-8 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-9 {{'c3' declared here}}

  unowned let ((c4), c5, c6): (C, C, C) = (C() as C, (D()), try D(throwing: ()))
  // expected-warning@-1 {{instance will be immediately deallocated because variable 'c4' is 'unowned'}}
  // expected-note@-2 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-3 {{'c4' declared here}}
  // expected-warning@-4 {{instance will be immediately deallocated because variable 'c5' is 'unowned'}}
  // expected-note@-5 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-6 {{'c5' declared here}}
  // expected-warning@-7 {{instance will be immediately deallocated because variable 'c6' is 'unowned'}}
  // expected-note@-8 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-9 {{'c6' declared here}}

  _ = c1; _ = c2; _ = c3; _ = c4; _ = c5; _ = c6
}

func testInitializationThroughClassArchetypeDiag<T : ClassProtocol>(_ t: T, _ p: ClassProtocol) throws {
  weak var t1: T? = T() // expected-warning {{instance will be immediately deallocated because variable 't1' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'t1' declared here}}

  weak var t2: ClassProtocol? = T(failable: ()) // expected-warning {{instance will be immediately deallocated because variable 't2' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'t2' declared here}}

  unowned let t3 = try type(of: t).init(throwing: ()) // expected-warning {{instance will be immediately deallocated because variable 't3' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'t3' declared here}}

  unowned(unsafe) let t4 = type(of: p).init() // expected-warning {{instance will be immediately deallocated because variable 't4' is 'unowned(unsafe)'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'t4' declared here}}

  let optionalTType: T.Type? = T.self
  let optionalPType: ClassProtocol.Type? = type(of: p)

  weak var t5 = optionalTType?.init(failable: ()) // expected-warning {{instance will be immediately deallocated because variable 't5' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'t5' declared here}}

  unowned(unsafe) let t6 = try (optionalPType?.init(throwing: ()))! // expected-warning {{instance will be immediately deallocated because variable 't6' is 'unowned(unsafe)'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'t6' declared here}}

  _ = t1; _ = t2; _ = t3; _ = t4; _ = t5; _ = t6
}

weak var topLevelC = C() // expected-warning {{instance will be immediately deallocated because variable 'topLevelC' is 'weak'}}
// expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
// expected-note@-2 {{'topLevelC' declared here}}
// expected-note@-3 {{'topLevelC' declared here}}

topLevelC = C() // expected-warning {{instance will be immediately deallocated because variable 'topLevelC' is 'weak'}}
// expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

unowned var topLevelC1 = C() // expected-warning {{instance will be immediately deallocated because variable 'topLevelC1' is 'unowned'}}
// expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
// expected-note@-2 {{'topLevelC1' declared here}}
// expected-note@-3 {{'topLevelC1' declared here}}

topLevelC1 = C() // expected-warning {{instance will be immediately deallocated because variable 'topLevelC1' is 'unowned'}}
// expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

struct S {
  weak var c: C? // expected-note {{'c' declared here}}

  unowned var c1 = C() // expected-warning {{instance will be immediately deallocated because property 'c1' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c1' declared here}}
  // expected-note@-3 {{'c1' declared here}}

  mutating func foo() {
    c = D() // expected-warning {{instance will be immediately deallocated because property 'c' is 'weak'}}
    // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

    c1 = D() // expected-warning {{instance will be immediately deallocated because property 'c1' is 'unowned'}}
    // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  }
}

class C1 {
  weak var c: C? // expected-note {{'c' declared here}}

  unowned var c1 = C() // expected-warning {{instance will be immediately deallocated because property 'c1' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c1' declared here}}
  // expected-note@-3 {{'c1' declared here}}

  func foo() {
    c = D() // expected-warning {{instance will be immediately deallocated because property 'c' is 'weak'}}
    // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

    c1 = D() // expected-warning {{instance will be immediately deallocated because property 'c1' is 'unowned'}}
    // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  }
}

func testInitializationThroughMetaclassDiag(_ t: C.Type) {
  weak var c1: C? = t.init() // expected-warning {{instance will be immediately deallocated because variable 'c1' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c1' declared here}}

  let optionaCType: C.Type? = t
  weak var c2 = optionaCType?.init(failable: ()) // expected-warning {{instance will be immediately deallocated because variable 'c2' is 'weak'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c2' declared here}}

  _ = c1; _ = c2
}

func testInitializationThroughTupleElementDiag() {
  unowned var c1 = ((C() as C, C() as C) as (C, C)).0 // expected-warning {{instance will be immediately deallocated because variable 'c1' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-2 {{'c1' declared here}}
  // expected-note@-3 {{'c1' declared here}}

  c1 = ((C() as C, C() as C) as (C, C)).0 // expected-warning {{instance will be immediately deallocated because variable 'c1' is 'unowned'}}
  // expected-note@-1 {{a strong reference is required to prevent the instance from being deallocated}}

  unowned let (c2, c3) = ((C() as C, C()) as (C, C), 5).0
  // expected-warning@-1 {{instance will be immediately deallocated because variable 'c2' is 'unowned'}}
  // expected-note@-2 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-3 {{'c2' declared here}}
  // expected-warning@-4 {{instance will be immediately deallocated because variable 'c3' is 'unowned'}}
  // expected-note@-5 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-6 {{'c3' declared here}}

  _ = c1; _ = c2; _ = c3
}

class E<T> {}

func testGenericWeakClassDiag() {
  weak var e = E<String>()
  // expected-warning@-1 {{instance will be immediately deallocated because variable 'e' is 'weak'}}
  // expected-note@-2 {{a strong reference is required to prevent the instance from being deallocated}}
  // expected-note@-3 {{'e' declared here}}

  _ = e
}

// The diagnostic doesn't currently support tuple shuffles.
func testDontDiagnoseThroughTupleShuffles() {
  unowned let (c1, (c2, c3)): (c: C, (b: C, a: C)) = ((a: D(), b: C()), c: D())
  unowned let c4 = ((a: C(), b: C()) as (b: C, a: C)).0

  _ = c1; _ = c2; _ = c3; _ = c4
}

extension Optional {
  init(dontDiagnoseOnThis: Void) {
    self = nil
  }
}

func testDontDiagnoseOnUnrelatedInitializer() {
  weak var c = C?(dontDiagnoseOnThis: ())
  unowned let c1 = C?(dontDiagnoseOnThis: ())!
  _ = c; _ = c1
}

class F {
  var c: C?
  func makeC() -> C { return C() }
}

func testDontDiagnoseThroughMembers() {
  weak var c1 = F().c
  weak var c2 = F().makeC()
  _ = c1; _ = c2
}

func testDontDiagnoseOnStrongVariable() {
  var c1 = C()
  c1 = C()
  _ = c1
}

func testDontDiagnoseThroughImmediatelyEvaluatedClosure() {
  weak var c1 = { C() }()
  unowned let c2 = { C() }()
  _ = c1; _ = c2
}


