mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
50 lines
1.4 KiB
Swift
50 lines
1.4 KiB
Swift
// RUN: %target-swift-frontend -disable-type-layout -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize -DINT_32=i32
|
|
|
|
struct A<T1, T2>
|
|
{
|
|
var b: T1
|
|
var c: T2
|
|
var d: B<T1, T2>
|
|
}
|
|
struct B<T1, T2>
|
|
{
|
|
var c: T1
|
|
var d: T2
|
|
}
|
|
|
|
struct C<T1>
|
|
{}
|
|
struct D<T2>
|
|
{}
|
|
|
|
struct Foo<A1, A2>
|
|
{
|
|
var a: A1
|
|
var b: Bar<A1, A2>
|
|
}
|
|
|
|
struct Bar<A1, A2> {
|
|
}
|
|
|
|
public protocol Proto { }
|
|
|
|
public struct EmptyStruct {}
|
|
|
|
public struct GenericStruct<T : Proto> {
|
|
var empty: EmptyStruct = EmptyStruct()
|
|
var dummy: Int = 0
|
|
var opt: Optional<T> = nil
|
|
|
|
public init() {}
|
|
}
|
|
|
|
// CHECK-LABEL: define{{.*}} swiftcc void @"$s15generic_structs13GenericStructVACyxGycfC"
|
|
// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s15generic_structs13GenericStructVMa"([[INT]] 0, %swift.type* %T, i8** %T.Proto)
|
|
// CHECK: [[TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
|
// CHECK: [[PTR:%.*]] = bitcast %swift.type* [[TYPE]] to [[INT_32]]*
|
|
// CHECK: [[FIELDOFFSET:%.*]] = getelementptr inbounds [[INT_32]], [[INT_32]]* [[PTR]], [[INT]] [[IDX:6|10]]
|
|
// CHECK: [[OFFSET:%.*]] = load [[INT_32]], [[INT_32]]* [[FIELDOFFSET]]
|
|
// CHECK: [[ADDROFOPT:%.*]] = getelementptr inbounds i8, i8* {{.*}}, [[INT_32]] [[OFFSET]]
|
|
// CHECK: [[OPTPTR:%.*]] = bitcast i8* [[ADDROFOPT]] to %TSq*
|
|
// CHECK: call %TSq* @"$sxSg15generic_structs5ProtoRzlWOb"(%TSq* {{.*}}, %TSq* [[OPTPTR]]
|