blob: 4686629fff8e7770263eebf46e121ea9f8afb909 [file] [log] [blame]
// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s
import Builtin
protocol P {}
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dont_crash(
// CHECK: [[TYPE_ADDR:%.*]] = getelementptr inbounds %T27fixed_size_buffer_peepholes1PP, %T27fixed_size_buffer_peepholes1PP* %0, i32 0, i32 1
// CHECK: [[TYPE:%.*]] = load %swift.type*, %swift.type** [[TYPE_ADDR]]
// CHECK: call {{.*}} @__swift_project_boxed_opaque_existential_1
// CHECK: [[PTR:%.*]] = bitcast %swift.type* [[TYPE]] to i8***
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds i8**, i8*** [[PTR]], {{(i64|i32)}} -1
// CHECK: [[VWT:%.*]] = load i8**, i8*** [[VWT_ADDR]]
// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds i8*, i8** [[VWT]], {{(i64|i32)}} 2
// CHECK: [[WITNESS:%.*]] = load i8*, i8** [[WITNESS_ADDR]]
// CHECK: [[INITWITHCOPY:%.*]] = bitcast i8* [[WITNESS]] to %swift.opaque* (%swift.opaque*, %swift.opaque*, %swift.type*)*
// CHECK: call %swift.opaque* [[INITWITHCOPY]](
sil @dont_crash : $@convention(thin) (@in P) -> () {
entry(%p : $*P):
%0 = alloc_stack $P
%1 = open_existential_addr immutable_access %p : $*P to $*@opened("4E4E7668-C798-11E6-9B9F-685B3589058E") P
%2 = init_existential_addr %0 : $*P, $@opened("4E4E7668-C798-11E6-9B9F-685B3589058E") P
copy_addr %1 to [initialization] %2 : $*@opened("4E4E7668-C798-11E6-9B9F-685B3589058E") P
destroy_addr %2 : $*@opened("4E4E7668-C798-11E6-9B9F-685B3589058E") P
deinit_existential_addr %0 : $*P
dealloc_stack %0 : $*P
return undef: $()
}