// RUN: %target-swift-frontend %s -emit-ir | %FileCheck %s --check-prefix=CHECK // REQUIRES: CPU=x86_64 func blah(_: T.Type) {} // CHECK-LABEL: define{{( protected)?}} swiftcc void @_T015nested_generics13makeAMetadatayyF() public func makeAMetadata() { blah(OuterGenericStruct.InnerGenericStruct.self) blah(OuterGenericStruct.InnerConcreteStruct.self) blah(OuterGenericClass.InnerGenericClass.self) blah(OuterGenericClass.InnerConcreteClass.self) } // Type constructor for OuterGenericStruct.InnerGenericStruct // CHECK-LABEL: define linkonce_odr hidden %swift.type* @_T015nested_generics18OuterGenericStructV05InnerdE0VySi_SSGMa() // CHECK: call %swift.type* @_T015nested_generics18OuterGenericStructV05InnerdE0VMa(%swift.type* @_T0SiN, %swift.type* @_T0SSN) // CHECK: ret %swift.type // Type constructor for OuterGenericStruct.InnerGenericStruct // CHECK-LABEL: define{{( protected)?}} %swift.type* @_T015nested_generics18OuterGenericStructV05InnerdE0VMa(%swift.type*, %swift.type*) // Type constructor for OuterGenericStruct.InnerConcreteStruct // CHECK-LABEL: define linkonce_odr hidden %swift.type* @_T015nested_generics18OuterGenericStructV013InnerConcreteE0VySi_GMa() // CHECK: call %swift.type* @_T015nested_generics18OuterGenericStructV013InnerConcreteE0VMa(%swift.type* @_T0SiN) // CHECK: ret %swift.type // Type constructor for OuterGenericStruct.InnerConcreteStruct // CHECK-LABEL: define{{( protected)?}} %swift.type* @_T015nested_generics18OuterGenericStructV013InnerConcreteE0VMa(%swift.type*) public struct OuterGenericStruct { public struct InnerGenericStruct { public func method() { blah(T.self) blah(U.self) } } public struct InnerConcreteStruct { public func method() { blah(T.self) } } } // Type constructor for OuterGenericClass.InnerGenericClass // CHECK-LABEL: define linkonce_odr hidden %swift.type* @_T015nested_generics17OuterGenericClassC05InnerdE0CySi_SSGMa() // CHECK: call %swift.type* @_T015nested_generics17OuterGenericClassC05InnerdE0CMa(%swift.type* @_T0SiN, %swift.type* @_T0SSN) // Type constructor for OuterGenericClass.InnerGenericClass // CHECK-LABEL: define{{( protected)?}} %swift.type* @_T015nested_generics17OuterGenericClassC05InnerdE0CMa(%swift.type*, %swift.type*) // Type constructor for OuterGenericClass.InnerConcreteClass // CHECK-LABEL: define linkonce_odr hidden %swift.type* @_T015nested_generics17OuterGenericClassC013InnerConcreteE0CySi_GMa() // CHECK: call %swift.type* @_T015nested_generics17OuterGenericClassC013InnerConcreteE0CMa(%swift.type* @_T0SiN) // CHECK: ret %swift.type // Type constructor for OuterGenericClass.InnerConcreteClass // CHECK-LABEL: define{{( protected)?}} %swift.type* @_T015nested_generics17OuterGenericClassC013InnerConcreteE0CMa(%swift.type*) // Type constructor for OuterGenericStruct // CHECK-LABEL: define{{( protected)?}} %swift.type* @_T015nested_generics18OuterGenericStructVMa(%swift.type*) // Type constructor for OuterGenericClass // CHECK-LABEL: define{{( protected)?}} %swift.type* @_T015nested_generics17OuterGenericClassCMa(%swift.type*) public class OuterGenericClass { public class InnerGenericClass { public func method() { blah(T.self) blah(U.self) } } public class InnerConcreteClass { public func method() { blah(T.self) } } } // This used to crash while emitting value witnesses. public struct Fish {} public protocol Wet {} extension Fish where Water : Wet { public enum Fillet { case grilled case fried } }