blob: 1c31093657717ced045ba2d18e149b1253adfbbe [file] [log] [blame]
// RUN: %target-swift-frontend %s -emit-ir -O | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize
// Test to make sure that methods removed by dead code elimination still appear
// in the vtable in both the nominal type descriptor and class metadata.
//
// We should be dropping the implementation, not the actual entry -- it is still
// there but filled in with a placeholder.
public class Class {
public init() {}
public func live() {}
private func dead() {}
}
// CHECK-LABEL: @"$s11dead_method5ClassCMn" ={{( dllexport)?}}{{( protected)?}} constant <{{.*}}> <{
// -- metadata accessor
// CHECK-SAME: "$s11dead_method5ClassCMa"
// -- vtable
// CHECK-SAME: %swift.method_descriptor {
// CHECK-SAME: i32 {{(1|-835911679)}},
// CHECK-SAME: @"$s11dead_method5ClassCACycfC"
// CHECK-SAME: }
// CHECK-SAME: %swift.method_descriptor {
// CHECK-SAME: i32 {{(16|-1609105392)}},
// CHECK-SAME: @"$s11dead_method5ClassC4liveyyF"
// CHECK-SAME: }
// CHECK-SAME: %swift.method_descriptor { i32 {{(16|-1887436784)}}, i32 0 }
// CHECK-SAME: }>
// CHECK-LABEL: @"$s11dead_method5ClassCMf" = internal global <{{.*}}> <{
// -- destructor
// CHECK-SAME: void (%T11dead_method5ClassC*)* {{.*}}@"$s11dead_method5ClassCfD{{(.ptrauth)?}}"
// -- value witness table
// CHECK-SAME: i8** {{@"\$sBoWV"|null}},
// -- nominal type descriptor
// CHECK-SAME: @"$s11dead_method5ClassCMn{{(.ptrauth)?}}"
// -- ivar destroyer
// CHECK-SAME: i8* null,
// -- vtable
// CHECK-SAME: %T11dead_method5ClassC* (%swift.type*)* {{.*}}@"$s11dead_method5ClassCACycfC{{(.ptrauth)?}}"
// CHECK-SAME: void (%T11dead_method5ClassC*)* {{.*}}@"$s11dead_method5ClassC4liveyyF{{(.ptrauth)?}}"
// CHECK-SAME: i8* bitcast {{.*}}@swift_deletedMethodError{{(.ptrauth)?}} to i8*)
// CHECK-SAME: }>