Files
swift-mirror/test/Constraints/one_way_constraints.swift
Holly Borla 607c298493 [Diagnostics] Refactor diagnoseAmbigutiyWithFixes to use the differences between
solutions in order to figure out the source of ambiguity.
2020-02-11 14:52:41 -08:00

29 lines
1.3 KiB
Swift

// RUN: %target-typecheck-verify-swift -swift-version 4 -parse-stdlib
import Swift
func int8Or16(_ x: Int8) -> Int8 { return x }
func int8Or16(_ x: Int16) -> Int16 { return x }
// Explicit one-way constraints for testing purposes.
func testTernaryOneWay(b: Bool) {
// Okay: backward inference works.
let _: Float = b ? 3.14159 : 17
// Errors due to one-way inference.
let _: Float = b ? Builtin.one_way(3.14159) // expected-error{{cannot convert value of type 'Double' to specified type 'Float'}}
: 17
let _: Float = b ? 3.14159 // expected-error {{cannot convert value of type 'Int' to specified type 'Float'}}
: Builtin.one_way(17)
let _: Float = b ? Builtin.one_way(3.14159) // expected-error {{cannot convert value of type 'Int' to specified type 'Float'}}
: Builtin.one_way(17)
// Okay: default still works.
let _: Double = b ? Builtin.one_way(3.14159) : 17
let _: Double = b ? 3.14159 : Builtin.one_way(17)
// FIXME: expected-error@-1{{cannot convert value of type 'Int' to specified type 'Double'}}
// The above fails because we are minimizing the set of partial solutions
// for the integer literal 17, so we don't try it as a Double
let _: Int8 = b ? Builtin.one_way(int8Or16(17)) : Builtin.one_way(int8Or16(42))
}