mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
115 lines
4.8 KiB
Swift
115 lines
4.8 KiB
Swift
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s | %FileCheck %s
|
|
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -disable-reflection-names -emit-ir %s | %FileCheck %s --check-prefix=STRIP_REFLECTION_NAMES
|
|
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -disable-reflection-metadata -emit-ir %s | %FileCheck %s --check-prefix=STRIP_REFLECTION_METADATA
|
|
|
|
// STRIP_REFLECTION_NAMES_DAG: {{.*}}swift3_reflect
|
|
// STRIP_REFLECTION_NAMES_DAG: {{.*}}swift3_fieldmd
|
|
// STRIP_REFLECTION_NAMES_DAG: {{.*}}swift3_assocty
|
|
// STRIP_REFLECTION_NAMES-DAG: {{.*}}swift3_capture
|
|
// STRIP_REFLECTION_NAMES-DAG: {{.*}}swift3_typeref
|
|
// STRIP_REFLECTION_NAMES-NOT: {{.*}}swift3_reflstr
|
|
// STRIP_REFLECTION_NAMES-NOT: {{.*}}swift3_builtin
|
|
|
|
// STRIP_REFLECTION_NAMES-DAG: @_T019reflection_metadata10MyProtocol_pMF = internal constant {{.*}}swift3_fieldmd
|
|
|
|
// STRIP_REFLECTION_METADATA-NOT: {{.*}}swift3_reflect
|
|
// STRIP_REFLECTION_METADATA-NOT: {{.*}}swift3_fieldmd
|
|
// STRIP_REFLECTION_METADATA-NOT: {{.*}}swift3_assocty
|
|
// STRIP_REFLECTION_METADATA-NOT: {{.*}}swift3_capture
|
|
// STRIP_REFLECTION_METADATA-NOT: {{.*}}swift3_typeref
|
|
// STRIP_REFLECTION_METADATA-NOT: {{.*}}swift3_reflstr
|
|
// STRIP_REFLECTION_METADATA-NOT: {{.*}}swift3_builtin
|
|
|
|
// CHECK-DAG: @__swift_reflection_version = linkonce_odr hidden constant i16 {{[0-9]+}}
|
|
// CHECK-DAG: private constant [2 x i8] c"i\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [3 x i8] c"ms\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [3 x i8] c"me\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [3 x i8] c"mc\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [2 x i8] c"C\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [2 x i8] c"S\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [2 x i8] c"E\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [2 x i8] c"I\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [2 x i8] c"t\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [4 x i8] c"mgs\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [4 x i8] c"mge\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [4 x i8] c"mgc\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [3 x i8] c"GC\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [3 x i8] c"GS\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
// CHECK-DAG: private constant [3 x i8] c"GE\00", section "{{[^"]*}}swift3_reflstr{{[^"]*}}"
|
|
|
|
// CHECK-DAG: @"\01l__swift3_reflection_descriptor" = private constant { {{.*}} } { i32 1, i32 1, i32 2, {{.*}} }
|
|
|
|
// CHECK-DAG: @_T019reflection_metadata10MyProtocol_pMF = internal constant {{.*}}swift3_fieldmd
|
|
// CHECK-DAG: @_T019reflection_metadata7MyClassCMF = internal constant {{.*}}swift3_fieldmd
|
|
// CHECK-DAG: @_T019reflection_metadata11ConformanceVAA10MyProtocolAAMA = internal constant {{.*}}swift3_assocty
|
|
// CHECK-DAG: @_T019reflection_metadata8MyStructVMF = internal constant {{.*}}swift3_fieldmd
|
|
// CHECK-DAG: @_T019reflection_metadata6MyEnumOMF = internal constant {{.*}}swift3_fieldmd
|
|
// CHECK-DAG: @_T019reflection_metadata14MyGenericClassCMF = internal constant {{.*}}swift3_fieldmd
|
|
// CHECK-DAG: @_T019reflection_metadata15MyGenericStructVMF = internal constant {{.*}}swift3_fieldmd
|
|
// CHECK-DAG: @_T019reflection_metadata13MyGenericEnumOMF = internal constant {{.*}}swift3_fieldmd
|
|
|
|
public protocol MyProtocol {
|
|
associatedtype Inner
|
|
var inner: Inner { get }
|
|
}
|
|
|
|
public class MyClass {
|
|
let i: Int
|
|
let ms: MyStruct
|
|
let me: MyEnum
|
|
public init(i: Int, ms: MyStruct, me: MyEnum) {
|
|
self.i = i
|
|
self.ms = ms
|
|
self.me = me
|
|
}
|
|
}
|
|
|
|
public struct Conformance : MyProtocol {
|
|
public var inner: Int = 0
|
|
}
|
|
|
|
public struct MyStruct {
|
|
let i: Int
|
|
let mc: MyClass
|
|
let me: MyEnum
|
|
}
|
|
|
|
public enum MyEnum {
|
|
case C(MyClass)
|
|
indirect case S(MyStruct)
|
|
indirect case E(MyEnum)
|
|
case I(Int)
|
|
}
|
|
|
|
public class MyGenericClass<T : MyProtocol> {
|
|
let t: T
|
|
let i: T.Inner
|
|
let mgs: MyGenericStruct<T>
|
|
let mge: MyGenericEnum<T>
|
|
|
|
public init(t: T, i: T.Inner, mgs: MyGenericStruct<T>, mge: MyGenericEnum<T>) {
|
|
self.t = t
|
|
self.i = i
|
|
self.mgs = mgs
|
|
self.mge = mge
|
|
}
|
|
}
|
|
|
|
public struct MyGenericStruct<T : MyProtocol> {
|
|
let t: T
|
|
let i: T.Inner
|
|
let mgc: MyGenericClass<T>
|
|
let mge: MyGenericEnum<T>
|
|
}
|
|
|
|
public enum MyGenericEnum<T : MyProtocol> {
|
|
case GC(MyGenericClass<T>)
|
|
indirect case GS(MyGenericStruct<T>)
|
|
indirect case GE(MyGenericEnum<T>)
|
|
case I(Int)
|
|
}
|
|
|
|
public func makeSomeClosures<T : MyProtocol>(t: T) -> (() -> ()) {
|
|
return { _ = t }
|
|
}
|