-
Notifications
You must be signed in to change notification settings - Fork 10.5k
/
Copy pathissue-54799.swift
39 lines (30 loc) · 1001 Bytes
/
issue-54799.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 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)}}
}