Skip to content

Commit a6ae23d

Browse files
committed
[test] Add rudimentary test for transparent bounds checking helpers
1 parent 0826ac6 commit a6ae23d

File tree

1 file changed

+17
-18
lines changed

1 file changed

+17
-18
lines changed

test/stdlib/RangeContainsInlining.swift

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,37 @@
22
// RUN: %target-swift-emit-ir -primary-file %s -O 2>&1 | %FileCheck %s
33
// RUN: %target-swift-emit-ir -primary-file %s -Osize 2>&1 | %FileCheck %s
44

5-
// CHECK-LABEL: define hidden swiftcc i1 @"$s17RangeContainsPerf08halfOpenB0ySbSnySiG_SitF"
6-
// CHECK-NOT: call swiftcc
7-
// CHECK: icmp
8-
// CHECK-NOT: call swiftcc
9-
// CHECK-LABEL: }
10-
func halfOpenContains(_ r: Range<Int>, _ i: Int) -> Bool {
11-
r.contains(i)
12-
}
5+
// We expect calls to `Range.contains`, `ClosedRange.contains` and `~=` over a
6+
// `Range` instance to result in direct bound comparisons in all compilation
7+
// modes, including unoptimized builds. (These are often used to implement
8+
// bounds checking.)
9+
//
10+
// The sample functions below use bounds of different integer types to avoid
11+
// them tail-calling each other.
1312

14-
// CHECK-LABEL: define hidden swiftcc i1 @"$s17RangeContainsPerf06closedB0ySbSNySiG_SitF"
13+
// CHECK-LABEL: define swiftcc i1 @"$s21RangeContainsInlining08halfOpenB0ySbSnys4Int8VG_ADtF"
1514
// CHECK-NOT: call swiftcc
1615
// CHECK: icmp
1716
// CHECK-NOT: call swiftcc
18-
// CHECK-LABEL: }
19-
func closedContains(_ r: ClosedRange<Int>, _ i: Int) -> Bool {
17+
// CHECK-LABEL: {{^}}}
18+
public func halfOpenContains(_ r: Range<Int8>, _ i: Int8) -> Bool {
2019
r.contains(i)
2120
}
2221

23-
// CHECK-LABEL: define hidden swiftcc i1 @"$s17RangeContainsPerf20halfOpenPatternMatchySbSnySiG_SitF"
22+
// CHECK-LABEL: define swiftcc i1 @"$s21RangeContainsInlining06closedB0ySbSNys5Int16VG_ADtF"
2423
// CHECK-NOT: call swiftcc
2524
// CHECK: icmp
2625
// CHECK-NOT: call swiftcc
27-
// CHECK-LABEL: }
28-
func halfOpenPatternMatch(_ r: Range<Int>, _ i: Int) -> Bool {
29-
r ~= i
26+
// CHECK-LABEL: {{^}}}
27+
public func closedContains(_ r: ClosedRange<Int16>, _ i: Int16) -> Bool {
28+
r.contains(i)
3029
}
3130

32-
// CHECK-LABEL: define hidden swiftcc i1 @"$s17RangeContainsPerf18closedPatternMatchySbSNySiG_SitF"
31+
// CHECK-LABEL: define swiftcc i1 @"$s21RangeContainsInlining20halfOpenPatternMatchySbSnys5Int32VG_ADtF"
3332
// CHECK-NOT: call swiftcc
3433
// CHECK: icmp
3534
// CHECK-NOT: call swiftcc
36-
// CHECK-LABEL: }
37-
func closedPatternMatch(_ r: ClosedRange<Int>, _ i: Int) -> Bool {
35+
// CHECK-LABEL: {{^}}}
36+
public func halfOpenPatternMatch(_ r: Range<Int32>, _ i: Int32) -> Bool {
3837
r ~= i
3938
}

0 commit comments

Comments
 (0)