// RUN: %target-swift-frontend -O -Xllvm -sil-inline-generics=false -Xllvm -sil-partial-specialization=false -primary-file %s -emit-sil -o - | %FileCheck %s // check if the compiler does not crash if a function is specialized // which contains a collection cast class MyClass {} class KeyClass : Hashable { var hashValue : Int { return 0 } } func ==(lhs: KeyClass, rhs: KeyClass) -> Bool { return true } // CHECK-LABEL: sil hidden @{{.*}}arrayUpCast{{.*}} func arrayUpCast(_ arr: [Ct]) -> [MyClass] { // CHECK: apply %{{[0-9]*}}(%{{[0-9]*}}) return arr // CHECK: return } // CHECK-LABEL: sil hidden @{{.*}}arrayDownCast{{.*}} func arrayDownCast(_ arr: [MyClass]) -> [Ct] { // CHECK: apply %{{[0-9]*}}(%{{[0-9]*}}) return arr as! [Ct] // CHECK: return } // CHECK-LABEL: sil hidden @{{.*}}dictUpCast{{.*}} func dictUpCast(_ dict: [KeyClass:Ct]) -> [KeyClass:MyClass] { // CHECK: apply %{{[0-9]*}}(%{{[0-9]*}}) return dict as [KeyClass:MyClass] // CHECK: return } // CHECK-LABEL: sil hidden @{{.*}}dictDownCast{{.*}} func dictDownCast(_ dict: [KeyClass:MyClass]) -> [KeyClass:Ct] { // CHECK: apply %{{[0-9]*}}(%{{[0-9]*}}) return dict as! [KeyClass:Ct] // CHECK: return } func setUpCast(_ s: Set) -> Set { // CHECK: apply %{{[0-9]*}}(%{{[0-9]*}}) return s as Set // CHECK: return } func setDownCast(_ s : Set) -> Set { // CHECK: apply %{{[0-9]*}}(%{{[0-9]*}}) return s as! Set // CHECK: return } let arr: [MyClass] = [MyClass()] arrayUpCast(arr) arrayDownCast(arr) let dict: [KeyClass:MyClass] = [KeyClass() : MyClass()] dictUpCast(dict) dictDownCast(dict) let s: Set = Set() setUpCast(s) setDownCast(s)