// RUN: %target-parse-verify-swift

struct X { }
struct Y { }
struct Z { }

class A {
  func f(x: X) -> X { }
  func f(y: Y) -> Y { }

  func g(z: Z) -> X { } // expected-note 2{{found this candidate}}
  func g(z: Z) -> Y { } // expected-note 2{{found this candidate}}

  class func sf(x: X) -> X { }
  class func sf(y: Y) -> Y { }

  class func sg(z: Z) -> X { } // expected-note 2{{found this candidate}}
  class func sg(z: Z) -> Y { } // expected-note 2{{found this candidate}}

  func mixed(x: X) -> X { }
  class func mixed(y: Y) -> Y { }

  func mixed2(z: Z) -> X { }
  class func mixed2(z: Z) -> Y { }
}

func test_method_overload(_ a: A, x: X, y: Y) {
  var x1 = a.f(x: x)
  x1 = x
  _ = x1

  var y1 = a.f(y: y)
  y1 = y
  _ = y1
}

func test_method_overload_coerce(_ a: A, x: inout X, y: inout Y, z: Z) {
  var fail = a.g(z: z) // expected-error{{ambiguous use of 'g(z:)'}}
  x = a.g(z: z)
  y = a.g(z: z)
}

func test_method_value_coerce(_ a: A) {
  var _ : (X) -> X = a.f
  var _ : (A) -> (X) -> X = A.f
}

func test_static_method_overload(_ a: A, x: X, y: Y) {
  var x1 = A.sf(x: x)
  x1 = x
  _ = x1

  var y1 = A.sf(y: y)
  y1 = y
  _ = y1
}

func test_static_method_overload_coerce(_ a: A, x: inout X, y: inout Y, z: Z) {
  var fail = A.sg(z: z) // expected-error{{ambiguous use of 'sg(z:)'}}
  x = A.sg(z: z)
  y = A.sg(z: z)
}

func test_static_method_value_coerce(_ a: A) {
  var _ : (X) -> X = A.sf
  var _ : (Y) -> Y = A.sf
}

func test_mixed_overload(_ a: A, x: X, y: Y) {
  var x1 = a.mixed(x: x)
  x1 = x
  var y1 = a.mixed(y: y) // expected-error{{incorrect argument label in call (have 'y:', expected 'x:')}}
  
  A.mixed(x) // expected-error{{missing argument label 'y:' in call}}
  var x2 = A.mixed(a)(x: x)
  x2 = x
  var y2 = A.mixed(y: y)
  y2 = y
}

func test_mixed_overload_coerce(_ a: A, x: inout X, y: Y, z: Z) {
  _ = a.mixed2(z: z)
  var y1 = A.mixed2(z: z)
  y1 = y
  _ = y1
  x = a.mixed2(z: z)
}

func test_mixed_method_value_coerce(_ a: A) {
  var _ : (X) -> X = a.mixed
  var _ : (Y) -> Y = A.mixed
  var _ : (Y) -> Y = a.mixed; // expected-error{{cannot convert value of type '(X) -> X' to specified type '(Y) -> Y'}}
  var _ : (A) -> (X) -> X = A.mixed
}

extension A {
  func test_method_overload(x: X, y: Y) {
    var x1 = self.f(x: x)
    x1 = x
    _ = x1
    var x2 = f(x: x)
    x2 = x
    _ = x2


    var y1 = self.f(y: y)
    y1 = y
    _ = y1
    var y2 = f(y: y)
    y2 = y
    _ = y2
  }

  func test_method_overload_coerce(x: inout X, y: inout Y, z: Z) {
    var fail = g(z: z) // expected-error{{ambiguous use of 'g(z:)'}}
    x = g(z: z)
    y = g(z: z)
  }

  func test_method_value_coerce() {
    var _ : (X) -> X = f
    var _ : (A) -> (X) -> X = A.f
    var _ : (A) -> (X) -> X = A.f
  }

  func test_mixed_overload_coerce(x: inout X, y: Y, z: Z) {
    _ = mixed2(z: z)
    x = mixed2(z: z)
  }

  func test_mixed_method_value_coerce() {
    var _ : (X) -> X = mixed
    var _ : (Y) -> Y = mixed; // expected-error{{cannot convert value of type '(X) -> X' to specified type '(Y) -> Y'}}
    var _ : (Y) -> Y = mixed; // expected-error{{cannot convert value of type '(X) -> X' to specified type '(Y) -> Y'}}
    var _ : (A) -> (X) -> X = A.mixed
  }

  class func test_method_overload_static(x: X, y: Y, z: Z) {
    var x1 = sf(x: x)
    x1 = x
    _ = x1

    var y1 = sf(y: y)
    y1 = y
    _ = y1
  }

  class func test_method_overload_coerce_static(x: inout X, y: inout Y, z: Z) {
    var fail = sg(z: z) // expected-error{{ambiguous use of 'sg(z:)'}}
    x = sg(z: z)
    y = sg(z: z)
  }

  class func test_method_value_coerce_static() {
    var _ : (X) -> X = sf
    var _ : (Y) -> Y = sf
  }

  class func test_mixed_overload_static(a: A, x: X, y: Y) {
    mixed(x) // expected-error{{missing argument label 'y:' in call}}
    var x2 = mixed(a)(x: x)
    x2 = x
    var y2 = mixed(y: y)
    y2 = y
  }

  class func test_mixed_overload_coerce_static(y: Y, z: Z) {
    var y1 = mixed2(z: z)
    y1 = y
    _ = y1
  }

  class func test_mixed_method_value_coerce_static() {
    var _ : (Y) -> Y = mixed
    var _ : (A) -> (X) -> X = mixed
  }
}

var clams : X

struct WeirdIvarLookupBehavior { 
  var clams : Y

  func f() {
    var _ : Y = clams
  }

  static func static_f() {
    // FIXME: These diagnostics still suck.
    var a : X = clams // expected-error{{member 'clams' cannot be used on type 'WeirdIvarLookupBehavior'}}
    var b : Y = clams // expected-error{{member 'clams' cannot be used on type 'WeirdIvarLookupBehavior'}}
  }
}

