mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
130 lines
3.7 KiB
Swift
130 lines
3.7 KiB
Swift
// RUN: %target-swift-frontend -parse-as-library -enable-experimental-feature Embedded %s -O -wmo -sil-verify-all -module-name=test -emit-ir | %FileCheck %s
|
|
|
|
// Also do an end-to-end test to check all components, including IRGen.
|
|
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift -parse-as-library -enable-experimental-feature Embedded -O -wmo -module-name=test %s -o %t/a.out
|
|
// RUN: %target-run %t/a.out | %FileCheck %s -check-prefix=CHECK-OUTPUT
|
|
|
|
// REQUIRES: executable_test,swift_stdlib_no_asserts,optimized_stdlib
|
|
|
|
// Check if the optimizer is able to convert array literals to constant statically initialized arrays.
|
|
|
|
// CHECK-DAG: @"$e4test11arrayLookupyS2iFTv_r" = {{.*}} constant {{.*}} @"$es20__StaticArrayStorageCN", {{.*}} -1
|
|
// CHECK-DAG: @"$e4test11returnArraySaySiGyFTv_r" = {{.*}} constant {{.*}} @"$es20__StaticArrayStorageCN", {{.*}} -1
|
|
// CHECK-DAG: @"$e4test9passArrayyyFTv_r" = {{.*}} constant {{.*}} @"$es20__StaticArrayStorageCN", {{.*}} -1
|
|
// CHECK-DAG: @"$e4test9passArrayyyFTv0_r" = {{.*}} constant {{.*}} @"$es20__StaticArrayStorageCN", {{.*}} -1
|
|
// CHECK-DAG: @"$e4test10storeArrayyyFTv_r" = {{.*}} constant {{.*}} @"$es20__StaticArrayStorageCN", {{.*}} -1
|
|
// CHECK-DAG: @"$e4test3StrV9staticLet_WZTv_r" = {{.*}} constant {{.*}} @"$es20__StaticArrayStorageCN", {{.*}} -1
|
|
// CHECK-DAG: @"$e4test3StrV9staticVar_WZTv_r" = {{.*}} constant {{.*}} @"$es20__StaticArrayStorageCN", {{.*}} -1
|
|
// CHECK-DAG: @"$e4test3StrV9staticVarSaySiGvpZ" = global {{.*}} ptr @"$e4test3StrV9staticVar_WZTv_r"
|
|
// CHECK-DAG: @"$e4test3StrV14twoDimensionalSaySaySiGGvpZ" = global {{.*}} ptr @"$e4test3StrV14twoDimensional_WZTv{{[0-9]*}}_r"
|
|
|
|
// Currently, constant static arrays only work on Darwin platforms.
|
|
// REQUIRES: VENDOR=apple
|
|
// REQUIRES: swift_feature_Embedded
|
|
|
|
|
|
public struct Str {
|
|
public static let staticLet = [ 200, 201, 202 ]
|
|
public static var staticVar = [ 300, 301, 302 ]
|
|
public static var twoDimensional = [[1, 2], [3, 4], [5, 6]]
|
|
}
|
|
|
|
@inline(never)
|
|
public func arrayLookup(_ i: Int) -> Int {
|
|
let lookupTable = [10, 11, 12]
|
|
return lookupTable[i]
|
|
}
|
|
|
|
@inline(never)
|
|
public func returnArray() -> [Int] {
|
|
return [20, 21]
|
|
}
|
|
|
|
@inline(never)
|
|
public func modifyArray() -> [Int] {
|
|
var a = returnArray()
|
|
a[1] = 27
|
|
return a
|
|
}
|
|
|
|
public var gg: [Int]?
|
|
|
|
@inline(never)
|
|
public func receiveArray(_ a: [Int]) {
|
|
gg = a
|
|
}
|
|
|
|
@inline(never)
|
|
public func passArray() {
|
|
receiveArray([27, 28])
|
|
receiveArray([29])
|
|
}
|
|
|
|
@inline(never)
|
|
public func storeArray() {
|
|
gg = [227, 228]
|
|
}
|
|
|
|
public func stringArray() -> [StaticString] {
|
|
return ["a", "b", "c", "d"]
|
|
}
|
|
|
|
@main struct Main {
|
|
static func main() {
|
|
|
|
// CHECK-OUTPUT: [200, 201, 202]
|
|
printArray(Str.staticLet)
|
|
|
|
// CHECK-OUTPUT: [300, 301, 302]
|
|
printArray(Str.staticVar)
|
|
|
|
// CHECK-OUTPUT: [1, 2]
|
|
// CHECK-OUTPUT-NEXT: [3, 4]
|
|
// CHECK-OUTPUT-NEXT: [5, 6]
|
|
for x in Str.twoDimensional {
|
|
printArray(x)
|
|
}
|
|
|
|
// CHECK-OUTPUT-NEXT: 11
|
|
print(arrayLookup(1))
|
|
|
|
// CHECK-OUTPUT-NEXT: [20, 21]
|
|
printArray(returnArray())
|
|
|
|
// CHECK-OUTPUT-NEXT: [20, 27]
|
|
// CHECK-OUTPUT-NEXT: [20, 27]
|
|
// CHECK-OUTPUT-NEXT: [20, 27]
|
|
// CHECK-OUTPUT-NEXT: [20, 27]
|
|
// CHECK-OUTPUT-NEXT: [20, 27]
|
|
for _ in 0..<5 {
|
|
printArray(modifyArray())
|
|
}
|
|
|
|
passArray()
|
|
// CHECK-OUTPUT-NEXT: [29]
|
|
printArray(gg!)
|
|
|
|
storeArray()
|
|
// CHECK-OUTPUT-NEXT: [227, 228]
|
|
printArray(gg!)
|
|
|
|
for c in stringArray() {
|
|
// CHECK-OUTPUT-NEXT: a
|
|
// CHECK-OUTPUT-NEXT: b
|
|
// CHECK-OUTPUT-NEXT: c
|
|
// CHECK-OUTPUT-NEXT: d
|
|
print(c)
|
|
}
|
|
}
|
|
}
|
|
|
|
func printArray(_ a: [Int]) {
|
|
print("[", terminator: "")
|
|
for (i, x) in a.enumerated() {
|
|
print(x, terminator: i == a.count - 1 ? "" : ", ")
|
|
}
|
|
print("]")
|
|
}
|
|
|