| // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s | %FileCheck %s |
| |
| import Builtin |
| |
| protocol P {} |
| |
| // CHECK-LABEL: define{{( 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: $() |
| } |