mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
28 lines
1.1 KiB
Swift
28 lines
1.1 KiB
Swift
// RUN: %target-swift-frontend -module-name A -enable-cond-fail-message-annotation -primary-file %s -O -emit-ir | %FileCheck %s
|
|
|
|
// REQUIRES: swift_stdlib_no_asserts,optimized_stdlib
|
|
// REQUIRES: PTRSIZE=64
|
|
|
|
public func test(_ a: [Int], _ i: Int) -> Int {
|
|
return a[i + 1]
|
|
}
|
|
|
|
// CHECK: define{{.*}} swiftcc i64 @"$s1A4testySiSaySiG_SitF"(ptr{{.*}} %0, i64 %1)
|
|
|
|
// CHECK: [[ADD:%.*]] = tail call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %1, i64 1)
|
|
// CHECK: [[IDX:%.*]] = extractvalue { i64, i1 } [[ADD]], 0
|
|
// CHECK: [[OVERFLOW:%.*]] = extractvalue { i64, i1 } [[ADD]], 1
|
|
// CHECK: br i1 [[OVERFLOW]], {{.*}}!annotation ![[ARITH_OVERFLOW:[0-9]+]]
|
|
|
|
// CHECK: [[C0:%.*]] = icmp slt i64 [[IDX]], 0
|
|
// CHECK: br i1 [[C0]], {{.*}}!annotation ![[ARRAY_INDEX_OUT_OF_BOUNDS:[0-9]+]]
|
|
|
|
// CHECK: [[SIZE_ADDR:%.*]] = getelementptr
|
|
// CHECK: [[SIZE:%.*]] = load i64, ptr [[SIZE_ADDR]]
|
|
// CHECK: [[C1:%.*]] = icmp samesign ult i64 [[IDX]], [[SIZE]]
|
|
// CHECK: br i1 [[C1]], {{.*}}!annotation ![[ARRAY_INDEX_OUT_OF_BOUNDS]]
|
|
|
|
|
|
// CHECK-DAG: ![[ARITH_OVERFLOW]] = !{!"arithmetic overflow"}
|
|
// CHECK-DAG: ![[ARRAY_INDEX_OUT_OF_BOUNDS]] = !{!"Index out of range"}
|