Files
swift-mirror/test/Constraints/issue-54799.swift

40 lines
1001 B
Swift

// RUN: %target-swift-frontend -typecheck -verify %s
// https://github.com/apple/swift/issues/54799
public protocol MyProtocol {}
public struct MyProtocolImpl: MyProtocol {}
public func != (lhs: MyProtocol, rhs: MyProtocol) -> MyProtocolImpl {
return MyProtocolImpl()
}
public func && (lhs: MyProtocol, rhs: MyProtocol) -> MyProtocolImpl {
return MyProtocolImpl()
}
func check(a: Double, b: Int64) -> Bool {
return a != 0 && b != 0 // Okay
}
func check1() {
let x: Int = 1
let _ = UInt(1) << x - 1 // Okay
let _ = UInt(1) << (x + 1) - 1 // Okay
}
func check2() {
let a: UInt32 = 0
let b: UInt32 = 1 << (a + 16)
let _ = a & b // Okay
}
func check3() {
let a: UInt32 = 0
let b = 1 << (a + 16)
let _ = a & b // Not okay, because 'b: Int'!
// expected-error@-1 {{binary operator '&' cannot be applied to operands of type 'UInt32' and 'Int'}}
// expected-note@-2 {{overloads for '&' exist with these partially matching parameter lists: (Int, Int), (UInt32, UInt32)}}
}