mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[AllocBoxToStack] Transfer var_decl flag.
As with the lexical flag, when creating an alloc_stack corresponding to an alloc_box, transfer the var_decl flag from any begin_borrow users of the box.
This commit is contained in:
@@ -624,12 +624,16 @@ static bool rewriteAllocBoxAsAllocStack(AllocBoxInst *ABI) {
|
||||
&& "rewriting multi-field box not implemented");
|
||||
auto ty = getSILBoxFieldType(TypeExpansionContext(*ABI->getFunction()),
|
||||
ABI->getBoxType(), ABI->getModule().Types, 0);
|
||||
auto isLexical = [&]() -> IsLexical_t {
|
||||
struct Flags {
|
||||
IsLexical_t isLexical;
|
||||
IsFromVarDecl_t isVarDecl;
|
||||
};
|
||||
auto getFlags = [&]() -> Flags {
|
||||
auto &mod = ABI->getFunction()->getModule();
|
||||
bool lexicalLifetimesEnabled =
|
||||
mod.getASTContext().SILOpts.supportsLexicalLifetimes(mod);
|
||||
if (!lexicalLifetimesEnabled)
|
||||
return IsNotLexical;
|
||||
bool sawLexical = false;
|
||||
bool sawVarDecl = false;
|
||||
// Look for lexical borrows of the alloc_box.
|
||||
GraphNodeWorklist<Operand *, 4> worklist;
|
||||
worklist.initializeRange(ABI->getUses());
|
||||
@@ -642,16 +646,20 @@ static bool rewriteAllocBoxAsAllocStack(AllocBoxInst *ABI) {
|
||||
worklist.insert(use);
|
||||
} else if (auto *bbi = dyn_cast<BeginBorrowInst>(use->getUser())) {
|
||||
if (bbi->isLexical())
|
||||
return IsLexical;
|
||||
sawLexical = true;
|
||||
if (bbi->isFromVarDecl())
|
||||
sawVarDecl = true;
|
||||
for (auto *use : bbi->getUses())
|
||||
worklist.insert(use);
|
||||
}
|
||||
}
|
||||
return IsNotLexical;
|
||||
return Flags{IsLexical_t(lexicalLifetimesEnabled && sawLexical),
|
||||
IsFromVarDecl_t(sawVarDecl)};
|
||||
};
|
||||
auto flags = getFlags();
|
||||
auto *ASI = Builder.createAllocStack(
|
||||
ABI->getLoc(), ty, ABI->getVarInfo(), ABI->hasDynamicLifetime(),
|
||||
isLexical(), IsNotFromVarDecl, DoesNotUseMoveableValueDebugInfo
|
||||
flags.isLexical, flags.isVarDecl, DoesNotUseMoveableValueDebugInfo
|
||||
#ifndef NDEBUG
|
||||
,
|
||||
true
|
||||
|
||||
@@ -48,7 +48,7 @@ struct A {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s10addressors5test0yyF : $@convention(thin) () -> () {
|
||||
func test0() {
|
||||
// CHECK: [[A:%.*]] = alloc_stack $A
|
||||
// CHECK: [[A:%.*]] = alloc_stack [var_decl] $A
|
||||
// CHECK: [[T1:%.*]] = metatype $@thin A.Type
|
||||
// CHECK: [[T0:%.*]] = function_ref @$s10addressors1AV{{[_0-9a-zA-Z]*}}fC
|
||||
// CHECK: [[AVAL:%.*]] = apply [[T0]]([[T1]])
|
||||
|
||||
@@ -172,7 +172,7 @@ final class Wallet {
|
||||
// CHECK: destroy_value [[DD]] : $Ticket
|
||||
|
||||
// CHECK-SIL-LABEL: sil hidden @$s4test6TicketO06changeB08inWalletyAA0E0CSg_tF : $@convention(method) (@guaranteed Optional<Wallet>, @owned Ticket) -> () {
|
||||
// CHECK-SIL: [[SELF_REF:%.*]] = alloc_stack [lexical] $Ticket, var, name "self", implicit
|
||||
// CHECK-SIL: [[SELF_REF:%.*]] = alloc_stack [lexical] [var_decl] $Ticket, var, name "self", implicit
|
||||
// CHECK-SIL: switch_enum {{.*}} : $Optional<Wallet>, case #Optional.some!enumelt: {{.*}}, case #Optional.none!enumelt: [[NO_WALLET_BB:bb[0-9]+]]
|
||||
//
|
||||
// >> now we begin the destruction sequence, which involves pattern matching on self to destroy its innards
|
||||
|
||||
@@ -30,8 +30,8 @@ func doSomething() {}
|
||||
|
||||
// SIL: sil hidden @$s18reference_bindings13testBindToVaryyF : $@convention(thin) () -> () {
|
||||
// SIL: bb0:
|
||||
// SIL: [[BOX:%.*]] = alloc_stack $Int, var, name "x"
|
||||
// SIL: [[INOUT_BOX:%.*]] = alloc_stack $Int, var, name "x2"
|
||||
// SIL: [[BOX:%.*]] = alloc_stack [var_decl] $Int, var, name "x"
|
||||
// SIL: [[INOUT_BOX:%.*]] = alloc_stack [var_decl] $Int, var, name "x2"
|
||||
// SIL: [[ACCESS:%.*]] = begin_access [modify] [static] [[BOX]]
|
||||
// SIL: store {{%.*}} to [[INOUT_BOX]]
|
||||
// SIL: [[FUNC:%.*]] = function_ref @$s18reference_bindings11doSomethingyyF : $@convention(thin) () -> ()
|
||||
@@ -60,7 +60,7 @@ func testBindToVar() {
|
||||
|
||||
// SIL-LABEL: sil hidden @$s18reference_bindings15testBindToInOutyySSzF : $@convention(thin) (@inout String) -> () {
|
||||
// SIL: bb0([[ARG:%.*]] : $*String):
|
||||
// SIL: [[STACK:%.*]] = alloc_stack $String
|
||||
// SIL: [[STACK:%.*]] = alloc_stack [var_decl] $String
|
||||
// SIL: [[ACCESS:%.*]] = begin_access [modify] [static] [[ARG]]
|
||||
// SIL: [[VAL:%.*]] = load [[ACCESS]]
|
||||
// SIL: store [[VAL]] to [[STACK]]
|
||||
|
||||
@@ -60,7 +60,7 @@ func readRead() {
|
||||
x = 42
|
||||
}
|
||||
// CHECK-LABEL: sil hidden @$s27access_enforcement_noescape8readReadyyF : $@convention(thin) () -> () {
|
||||
// CHECK: [[ALLOC:%.*]] = alloc_stack $Int, var, name "x"
|
||||
// CHECK: [[ALLOC:%.*]] = alloc_stack [var_decl] $Int, var, name "x"
|
||||
// CHECK-NOT: begin_access
|
||||
// CHECK: apply
|
||||
// CHECK-LABEL: } // end sil function '$s27access_enforcement_noescape8readReadyyF'
|
||||
|
||||
@@ -7,7 +7,7 @@ public struct S {
|
||||
|
||||
// CHECK-LABEL: sil [noinline] @$s23access_marker_mandatory5initSyAA1SVSi_yXltF : $@convention(thin) (Int, @guaranteed AnyObject) -> @owned S {
|
||||
// CHECK: bb0(%0 : $Int, %1 : $AnyObject):
|
||||
// CHECK: [[STK:%.*]] = alloc_stack $S, var, name "s"
|
||||
// CHECK: [[STK:%.*]] = alloc_stack [var_decl] $S, var, name "s"
|
||||
// CHECK: cond_br %{{.*}}, bb1, bb2
|
||||
// CHECK: bb1:
|
||||
// CHECK: [[WRITE:%.*]] = begin_access [modify] [static] [[STK]] : $*S
|
||||
@@ -41,7 +41,7 @@ func takeS(_ s: S) {}
|
||||
|
||||
// CHECK-LABEL: sil @$s23access_marker_mandatory14modifyAndReadS1oyyXl_tF : $@convention(thin) (@guaranteed AnyObject) -> () {
|
||||
// CHECK: bb0(%0 : $AnyObject):
|
||||
// CHECK: [[STK:%.*]] = alloc_stack $S, var, name "s"
|
||||
// CHECK: [[STK:%.*]] = alloc_stack [var_decl] $S, var, name "s"
|
||||
// CHECK: [[FINIT:%.*]] = function_ref @$s23access_marker_mandatory5initSyAA1SVSi_yXltF : $@convention(thin) (Int, @guaranteed AnyObject) -> @owned S
|
||||
// CHECK: [[INITS:%.*]] = apply [[FINIT]](%{{.*}}, %0) : $@convention(thin) (Int, @guaranteed AnyObject) -> @owned S
|
||||
// CHECK: store [[INITS]] to [[STK]] : $*S
|
||||
@@ -66,7 +66,7 @@ public func modifyAndReadS(o: AnyObject) {
|
||||
//
|
||||
// CHECK-LABEL: sil hidden @$s23access_marker_mandatory19captureStackPromoteSiycyF : $@convention(thin) () -> @owned @callee_guaranteed () -> Int {
|
||||
// CHECK-LABEL: bb0:
|
||||
// CHECK: [[STK:%.*]] = alloc_stack $Int, var, name "x"
|
||||
// CHECK: [[STK:%.*]] = alloc_stack [var_decl] $Int, var, name "x"
|
||||
// CHECK: [[WRITE:%.*]] = begin_access [modify] [static] [[STK]] : $*Int
|
||||
// CHECK: store %{{.*}} to [[WRITE]] : $*Int
|
||||
// CHECK: end_access [[WRITE]] : $*Int
|
||||
|
||||
@@ -8,7 +8,7 @@ func blackhole<T>(_ x:T) {
|
||||
|
||||
// CHECK-LABEL: sil [noinline] @$s26allocboxtostack_localapply9testapplySiyF :
|
||||
// CHECK-NOT: alloc_box
|
||||
// CHECK: [[STK:%.*]] = alloc_stack $Int, var, name "x"
|
||||
// CHECK: [[STK:%.*]] = alloc_stack [var_decl] $Int, var, name "x"
|
||||
// CHECK-LABEL: } // end sil function '$s26allocboxtostack_localapply9testapplySiyF'
|
||||
@inline(never)
|
||||
public func testapply() -> Int {
|
||||
@@ -27,7 +27,7 @@ public func testapply() -> Int {
|
||||
|
||||
// CHECK-LABEL: sil [noinline] @$s26allocboxtostack_localapply12testtryapplySiyKF :
|
||||
// CHECK-NOT: alloc_box
|
||||
// CHECK: [[STK:%.*]] = alloc_stack $Int, var, name "x"
|
||||
// CHECK: [[STK:%.*]] = alloc_stack [var_decl] $Int, var, name "x"
|
||||
// CHECK-LABEL: } // end sil function '$s26allocboxtostack_localapply12testtryapplySiyKF'
|
||||
@inline(never)
|
||||
public func testtryapply() throws -> Int {
|
||||
@@ -47,7 +47,7 @@ public func testtryapply() throws -> Int {
|
||||
|
||||
// CHECK-LABEL: sil [noinline] @$s26allocboxtostack_localapply16testpartialapplySiyF :
|
||||
// CHECK-NOT: alloc_box
|
||||
// CHECK: [[STK:%.*]] = alloc_stack $Int, var, name "x"
|
||||
// CHECK: [[STK:%.*]] = alloc_stack [var_decl] $Int, var, name "x"
|
||||
// CHECK-LABEL: } // end sil function '$s26allocboxtostack_localapply16testpartialapplySiyF'
|
||||
@inline(never)
|
||||
public func testpartialapply() -> Int {
|
||||
@@ -66,8 +66,8 @@ public func testpartialapply() -> Int {
|
||||
|
||||
// CHECK-LABEL: sil [noinline] @$s26allocboxtostack_localapply12testtwoboxesSiyF :
|
||||
// CHECK-NOT: alloc_box
|
||||
// CHECK: [[STK1:%.*]] = alloc_stack $Int, var, name "x"
|
||||
// CHECK: [[STK2:%.*]] = alloc_stack $Int, var, name "y"
|
||||
// CHECK: [[STK1:%.*]] = alloc_stack [var_decl] $Int, var, name "x"
|
||||
// CHECK: [[STK2:%.*]] = alloc_stack [var_decl] $Int, var, name "y"
|
||||
// CHECK-LABEL: } // end sil function '$s26allocboxtostack_localapply12testtwoboxesSiyF'
|
||||
@inline(never)
|
||||
public func testtwoboxes() -> Int {
|
||||
|
||||
@@ -149,7 +149,7 @@ actor BoringActor {
|
||||
// FIXME: the convenience init below is missing a hop after the call to arbitraryAsync (rdar://87485045)
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s4test14SingleVarActorC10delegatingACSb_tYacfC : $@convention(method) @async (Bool, @thick SingleVarActor.Type) -> @owned SingleVarActor {
|
||||
// CHECK: [[SELF_ALLOC:%[0-9]+]] = alloc_stack [lexical] $SingleVarActor, let, name "self", implicit
|
||||
// CHECK: [[SELF_ALLOC:%[0-9]+]] = alloc_stack [lexical] [var_decl] $SingleVarActor, let, name "self", implicit
|
||||
// ** first hop is after the call to the synchronous init, right after initializing the allocation.
|
||||
// CHECK: [[SYNC_FN:%[0-9]+]] = function_ref @$s4test14SingleVarActorC4syncACyt_tcfC : $@convention(method) (@thick SingleVarActor.Type) -> @owned SingleVarActor
|
||||
// CHECK: [[INIT1:%[0-9]+]] = apply [[SYNC_FN]]({{%[0-9]+}}) : $@convention(method) (@thick SingleVarActor.Type) -> @owned SingleVarActor
|
||||
|
||||
@@ -43,7 +43,7 @@ struct FailableStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers14FailableStructV24failBeforeInitializationACSgyt_tcfC
|
||||
// CHECK: bb0(%0 : $@thin FailableStruct.Type):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableStruct
|
||||
// CHECK: dealloc_stack [[SELF_BOX]]
|
||||
// CHECK-NEXT: [[SELF:%.*]] = enum $Optional<FailableStruct>, #Optional.none!enumelt
|
||||
// CHECK-NEXT: return [[SELF]]
|
||||
@@ -53,7 +53,7 @@ struct FailableStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers14FailableStructV30failAfterPartialInitializationACSgyt_tcfC
|
||||
// CHECK: bb0(%0 : $@thin FailableStruct.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $FailableStruct
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableStruct
|
||||
// CHECK: [[CANARY:%.*]] = apply
|
||||
// CHECK-NEXT: [[WRITE:%.*]] = begin_access [modify] [static] [[SELF_BOX]] : $*FailableStruct
|
||||
// CHECK-NEXT: [[X_ADDR:%.*]] = struct_element_addr [[WRITE]]
|
||||
@@ -71,7 +71,7 @@ struct FailableStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers14FailableStructV27failAfterFullInitializationACSgyt_tcfC
|
||||
// CHECK: bb0
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableStruct
|
||||
// CHECK: [[CANARY1:%.*]] = apply
|
||||
// CHECK-NEXT: [[WRITE:%.*]] = begin_access [modify] [static] [[SELF_BOX]] : $*FailableStruct
|
||||
// CHECK-NEXT: [[X_ADDR:%.*]] = struct_element_addr [[WRITE]]
|
||||
@@ -94,7 +94,7 @@ struct FailableStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers14FailableStructV46failAfterWholeObjectInitializationByAssignmentACSgyt_tcfC :
|
||||
// CHECK: bb0
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableStruct
|
||||
// CHECK: [[CANARY:%.*]] = apply
|
||||
// CHECK-NEXT: [[WRITE:%.*]] = begin_access [modify] [static] [[SELF_BOX]] : $*FailableStruct
|
||||
// CHECK-NEXT: store [[CANARY]] to [[WRITE]]
|
||||
@@ -110,7 +110,7 @@ struct FailableStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers14FailableStructV46failAfterWholeObjectInitializationByDelegationACSgyt_tcfC
|
||||
// CHECK: bb0
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableStruct
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers14FailableStructV6noFailACyt_tcfC
|
||||
// CHECK-NEXT: [[NEW_SELF:%.*]] = apply [[INIT_FN]](%0)
|
||||
// CHECK-NEXT: store [[NEW_SELF]] to [[SELF_BOX]]
|
||||
@@ -125,7 +125,7 @@ struct FailableStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers14FailableStructV20failDuringDelegationACSgyt_tcfC
|
||||
// CHECK: bb0
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableStruct
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers14FailableStructV24failBeforeInitializationACSgyt_tcfC
|
||||
// CHECK-NEXT: [[SELF_OPTIONAL:%.*]] = apply [[INIT_FN]](%0)
|
||||
// CHECK: [[COND:%.*]] = select_enum [[SELF_OPTIONAL]]
|
||||
@@ -194,7 +194,7 @@ struct FailableAddrOnlyStruct<T : Pachyderm> {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers22FailableAddrOnlyStructV{{[_0-9a-zA-Z]*}}failBeforeInitialization{{.*}}tcfC
|
||||
// CHECK: bb0(%0 : $*Optional<FailableAddrOnlyStruct<T>>, %1 : $@thin FailableAddrOnlyStruct<T>.Type):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableAddrOnlyStruct<T>
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableAddrOnlyStruct<T>
|
||||
// CHECK: dealloc_stack [[SELF_BOX]]
|
||||
// CHECK-NEXT: inject_enum_addr %0
|
||||
// CHECK: return
|
||||
@@ -204,7 +204,7 @@ struct FailableAddrOnlyStruct<T : Pachyderm> {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers22FailableAddrOnlyStructV{{[_0-9a-zA-Z]*}}failAfterPartialInitialization{{.*}}tcfC
|
||||
// CHECK: bb0(%0 : $*Optional<FailableAddrOnlyStruct<T>>, %1 : $@thin FailableAddrOnlyStruct<T>.Type):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableAddrOnlyStruct<T>
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableAddrOnlyStruct<T>
|
||||
// CHECK: [[X_BOX:%.*]] = alloc_stack $T
|
||||
// CHECK-NEXT: [[T_TYPE:%.*]] = metatype $@thick T.Type
|
||||
// CHECK: [[T_INIT_FN:%.*]] = witness_method $T, #Pachyderm.init!allocator
|
||||
@@ -226,7 +226,7 @@ struct FailableAddrOnlyStruct<T : Pachyderm> {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers22FailableAddrOnlyStructV{{[_0-9a-zA-Z]*}}failAfterFullInitialization{{.*}}tcfC
|
||||
// CHECK: bb0(%0 : $*Optional<FailableAddrOnlyStruct<T>>, %1 : $@thin FailableAddrOnlyStruct<T>.Type):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableAddrOnlyStruct<T>
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableAddrOnlyStruct<T>
|
||||
// CHECK: [[X_BOX:%.*]] = alloc_stack $T
|
||||
// CHECK-NEXT: [[T_TYPE:%.*]] = metatype $@thick T.Type
|
||||
// CHECK: [[T_INIT_FN:%.*]] = witness_method $T, #Pachyderm.init!allocator
|
||||
@@ -311,7 +311,7 @@ struct ThrowStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV20failBeforeDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin ThrowStruct.Type):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $ThrowStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowStruct
|
||||
// CHECK: [[UNWRAP_FN:%.*]] = function_ref @$s35definite_init_failable_initializers6unwrapyS2iKF
|
||||
// CHECK-NEXT: try_apply [[UNWRAP_FN]](%0)
|
||||
// CHECK: bb1([[RESULT:%.*]] : $Int):
|
||||
@@ -332,7 +332,7 @@ struct ThrowStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV28failBeforeOrDuringDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin ThrowStruct.Type):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $ThrowStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowStruct
|
||||
// CHECK: [[UNWRAP_FN:%.*]] = function_ref @$s35definite_init_failable_initializers6unwrapyS2iKF
|
||||
// CHECK-NEXT: try_apply [[UNWRAP_FN]](%0)
|
||||
// CHECK: bb1([[RESULT:%.*]] : $Int):
|
||||
@@ -358,7 +358,7 @@ struct ThrowStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV29failBeforeOrDuringDelegation2ACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin ThrowStruct.Type):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $ThrowStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowStruct
|
||||
// CHECK: [[UNWRAP_FN:%.*]] = function_ref @$s35definite_init_failable_initializers6unwrapyS2iKF
|
||||
// CHECK-NEXT: try_apply [[UNWRAP_FN]](%0)
|
||||
// CHECK: bb1([[RESULT:%.*]] : $Int):
|
||||
@@ -383,7 +383,7 @@ struct ThrowStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV20failDuringDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin ThrowStruct.Type):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $ThrowStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowStruct
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers11ThrowStructV4failACyt_tKcfC
|
||||
// CHECK-NEXT: try_apply [[INIT_FN]](%1)
|
||||
// CHECK: bb1([[NEW_SELF:%.*]] : $ThrowStruct):
|
||||
@@ -401,7 +401,7 @@ struct ThrowStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV19failAfterDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin ThrowStruct.Type):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $ThrowStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowStruct
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers11ThrowStructV6noFailACyt_tcfC
|
||||
// CHECK-NEXT: [[NEW_SELF:%.*]] = apply [[INIT_FN]](%1)
|
||||
// CHECK-NEXT: retain_value [[NEW_SELF]]
|
||||
@@ -425,7 +425,7 @@ struct ThrowStruct {
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV27failDuringOrAfterDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin ThrowStruct.Type):
|
||||
// CHECK-NEXT: [[BITMAP_BOX:%.*]] = alloc_stack $Builtin.Int1
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] $ThrowStruct
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] [var_decl] $ThrowStruct
|
||||
// CHECK-NEXT: [[ZERO:%.*]] = integer_literal $Builtin.Int1, 0
|
||||
// CHECK-NEXT: store [[ZERO]] to [[BITMAP_BOX]]
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers11ThrowStructV4failACyt_tKcfC
|
||||
@@ -468,7 +468,7 @@ struct ThrowStruct {
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV27failBeforeOrAfterDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin ThrowStruct.Type):
|
||||
// CHECK-NEXT: [[BITMAP_BOX:%.*]] = alloc_stack $Builtin.Int1
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] $ThrowStruct
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] [var_decl] $ThrowStruct
|
||||
// CHECK-NEXT: [[ZERO:%.*]] = integer_literal $Builtin.Int1, 0
|
||||
// CHECK-NEXT: store [[ZERO]] to [[BITMAP_BOX]]
|
||||
// CHECK: [[UNWRAP_FN:%.*]] = function_ref @$s35definite_init_failable_initializers6unwrapyS2iKF
|
||||
@@ -513,7 +513,7 @@ struct ThrowStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV16throwsToOptionalACSgSi_tcfC
|
||||
// CHECK: bb0([[ARG1:%.*]] : $Int, [[ARG2:%.*]] : $@thin ThrowStruct.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowStruct
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowStruct
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers11ThrowStructV20failDuringDelegationACSi_tKcfC
|
||||
// CHECK-NEXT: try_apply [[INIT_FN]]([[ARG1]], [[ARG2]]) : $@convention(method) (Int, @thin ThrowStruct.Type) -> (@owned ThrowStruct, @error any Error), normal [[TRY_APPLY_SUCC_BB:bb[0-9]+]], error [[TRY_APPLY_FAIL_BB:bb[0-9]+]]
|
||||
//
|
||||
@@ -574,7 +574,7 @@ struct ThrowStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV25failDuringSelfReplacementACSi_tKcfC :
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin ThrowStruct.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowStruct
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowStruct
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers11ThrowStructV4failACyt_tKcfC
|
||||
// CHECK-NEXT: try_apply [[INIT_FN]](%1)
|
||||
// CHECK: bb1([[NEW_SELF:%.*]] : $ThrowStruct):
|
||||
@@ -594,7 +594,7 @@ struct ThrowStruct {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers11ThrowStructV24failAfterSelfReplacementACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin ThrowStruct.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowStruct
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowStruct
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers11ThrowStructV6noFailACyt_tcfC
|
||||
// CHECK-NEXT: [[NEW_SELF:%.*]] = apply [[INIT_FN]](%1)
|
||||
// CHECK-NEXT: [[WRITE:%.*]] = begin_access [modify] [static] [[SELF_BOX]] : $*ThrowStruct
|
||||
@@ -750,7 +750,7 @@ class FailableBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17FailableBaseClassC20failBeforeDelegationACSgyt_tcfC
|
||||
// CHECK: bb0(%0 : $@thick FailableBaseClass.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $FailableBaseClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableBaseClass
|
||||
// CHECK: dealloc_stack [[SELF_BOX]]
|
||||
// CHECK-NEXT: [[RESULT:%.*]] = enum $Optional<FailableBaseClass>, #Optional.none!enumelt
|
||||
// CHECK-NEXT: return [[RESULT]]
|
||||
@@ -760,7 +760,7 @@ class FailableBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17FailableBaseClassC19failAfterDelegationACSgyt_tcfC
|
||||
// CHECK: bb0(%0 : $@thick FailableBaseClass.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $FailableBaseClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableBaseClass
|
||||
// CHECK: [[INIT_FN:%.*]] = class_method %0
|
||||
// CHECK-NEXT: [[NEW_SELF:%.*]] = apply [[INIT_FN]](%0)
|
||||
// CHECK-NEXT: store [[NEW_SELF]] to [[SELF_BOX]]
|
||||
@@ -775,7 +775,7 @@ class FailableBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17FailableBaseClassC20failDuringDelegationACSgyt_tcfC
|
||||
// CHECK: bb0(%0 : $@thick FailableBaseClass.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $FailableBaseClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableBaseClass
|
||||
// CHECK: [[INIT_FN:%.*]] = class_method %0
|
||||
// CHECK-NEXT: [[SELF_OPTIONAL:%.*]] = apply [[INIT_FN]](%0)
|
||||
// CHECK: [[COND:%.*]] = select_enum [[SELF_OPTIONAL]]
|
||||
@@ -831,7 +831,7 @@ class FailableDerivedClass : FailableBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers20FailableDerivedClassC27derivedFailBeforeDelegationACSgyt_tcfc
|
||||
// CHECK: bb0(%0 : $FailableDerivedClass):
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $FailableDerivedClass
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableDerivedClass
|
||||
// CHECK: store %0 to [[SELF_BOX]]
|
||||
// CHECK-NEXT: [[RELOAD_FROM_SELF_BOX:%.*]] = load [[SELF_BOX]]
|
||||
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thick FailableDerivedClass.Type
|
||||
@@ -846,7 +846,7 @@ class FailableDerivedClass : FailableBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers20FailableDerivedClassC27derivedFailDuringDelegationACSgyt_tcfc
|
||||
// CHECK: bb0([[SELF:%.*]] : $FailableDerivedClass):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $FailableDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $FailableDerivedClass
|
||||
// CHECK: store [[SELF]] to [[SELF_BOX]]
|
||||
// CHECK: [[CANARY_FUN:%.*]] = function_ref @$s35definite_init_failable_initializers6CanaryCACycfC :
|
||||
// CHECK: [[CANARY:%.*]] = apply [[CANARY_FUN]](
|
||||
@@ -923,7 +923,7 @@ class ThrowBaseClass {
|
||||
class ThrowDerivedClass : ThrowBaseClass {
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassCACyKcfc
|
||||
// CHECK: bb0([[SELF:%.*]] : $ThrowDerivedClass):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowDerivedClass
|
||||
// CHECK: store [[SELF]] to [[SELF_BOX]]
|
||||
// CHECK-NEXT: [[RELOAD_SELF:%.*]] = load [[SELF_BOX]]
|
||||
// CHECK-NEXT: [[BASE_SELF:%.*]] = upcast [[RELOAD_SELF]]
|
||||
@@ -949,7 +949,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC28failBeforeFullInitializationACSi_tKcfc
|
||||
// CHECK: bb0(%0 : $Int, [[SELF:%.*]] : $ThrowDerivedClass):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowDerivedClass
|
||||
// CHECK: store [[SELF]] to [[SELF_BOX]]
|
||||
// CHECK: [[UNWRAP_FN:%.*]] = function_ref @$s35definite_init_failable_initializers6unwrapyS2iKF
|
||||
// CHECK-NEXT: try_apply [[UNWRAP_FN]](%0)
|
||||
@@ -978,7 +978,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC28failBeforeFullInitialization0h6DuringjK0ACSi_SitKcfc
|
||||
// CHECK: bb0(%0 : $Int, %1 : $Int, %2 : $ThrowDerivedClass):
|
||||
// CHECK-NEXT: [[BITMAP_BOX:%.*]] = alloc_stack $Builtin.Int1
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] [var_decl] $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[ZERO:%.*]] = integer_literal $Builtin.Int1, 0
|
||||
// CHECK-NEXT: store [[ZERO]] to [[BITMAP_BOX]]
|
||||
// CHECK: store %2 to [[SELF_BOX]] : $*ThrowDerivedClass
|
||||
@@ -1024,7 +1024,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC27failAfterFullInitializationACSi_tKcfc
|
||||
// CHECK: bb0(%0 : $Int, %1 : $ThrowDerivedClass):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowDerivedClass
|
||||
// CHECK: store %1 to [[SELF_BOX]]
|
||||
// CHECK-NEXT: [[RELOAD_SELF:%.*]] = load [[SELF_BOX]]
|
||||
// CHECK-NEXT: [[BASE_SELF:%.*]] = upcast [[RELOAD_SELF]]
|
||||
@@ -1052,7 +1052,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC27failAfterFullInitialization0h6DuringjK0ACSi_SitKcfc
|
||||
// CHECK: bb0(%0 : $Int, %1 : $Int, %2 : $ThrowDerivedClass):
|
||||
// CHECK-NEXT: [[BITMAP_BOX:%.*]] = alloc_stack $Builtin.Int2
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] [var_decl] $ThrowDerivedClass
|
||||
// CHECK: [[ZERO:%.*]] = integer_literal $Builtin.Int2, 0
|
||||
// CHECK-NEXT: store [[ZERO]] to [[BITMAP_BOX]]
|
||||
// CHECK: store %2 to [[SELF_BOX]]
|
||||
@@ -1101,7 +1101,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC28failBeforeFullInitialization0h5AfterjK0ACSi_SitKcfc
|
||||
// CHECK: bb0(%0 : $Int, %1 : $Int, %2 : $ThrowDerivedClass):
|
||||
// CHECK-NEXT: [[BITMAP_BOX:%.*]] = alloc_stack $Builtin.Int2
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] [var_decl] $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[ZERO:%.*]] = integer_literal $Builtin.Int2, 0
|
||||
// CHECK-NEXT: store [[ZERO]] to [[BITMAP_BOX]]
|
||||
// CHECK: store %2 to [[SELF_BOX]]
|
||||
@@ -1166,7 +1166,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC28failBeforeFullInitialization0h6DuringjK00h5AfterjK0ACSi_S2itKcfc
|
||||
// CHECK: bb0(%0 : $Int, %1 : $Int, %2 : $Int, %3 : $ThrowDerivedClass):
|
||||
// CHECK-NEXT: [[BITMAP_BOX:%.*]] = alloc_stack $Builtin.Int2
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] [var_decl] $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[ZERO:%.*]] = integer_literal $Builtin.Int2, 0
|
||||
// CHECK-NEXT: store [[ZERO]] to [[BITMAP_BOX]]
|
||||
// CHECK: store %3 to [[SELF_BOX]]
|
||||
@@ -1237,7 +1237,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC20failBeforeDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thick ThrowDerivedClass.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowDerivedClass
|
||||
// CHECK: [[UNWRAP_FN:%.*]] = function_ref @$s35definite_init_failable_initializers6unwrapyS2iKF
|
||||
// CHECK-NEXT: try_apply [[UNWRAP_FN]](%0)
|
||||
// CHECK: bb1([[ARG:%.*]] : $Int):
|
||||
@@ -1258,7 +1258,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC20failDuringDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thick ThrowDerivedClass.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowDerivedClass
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers17ThrowDerivedClassCACyKcfC
|
||||
// CHECK-NEXT: try_apply [[INIT_FN]](%1)
|
||||
// CHECK: bb1([[NEW_SELF:%.*]] : $ThrowDerivedClass):
|
||||
@@ -1276,7 +1276,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC28failBeforeOrDuringDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thick ThrowDerivedClass.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowDerivedClass
|
||||
// CHECK: [[UNWRAP_FN:%.*]] = function_ref @$s35definite_init_failable_initializers6unwrapyS2iKF
|
||||
// CHECK-NEXT: try_apply [[UNWRAP_FN]](%0)
|
||||
// CHECK: bb1([[ARG:%.*]] : $Int):
|
||||
@@ -1302,7 +1302,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC29failBeforeOrDuringDelegation2ACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thick ThrowDerivedClass.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowDerivedClass
|
||||
// CHECK: [[UNWRAP_FN:%.*]] = function_ref @$s35definite_init_failable_initializers6unwrapyS2iKF
|
||||
// CHECK-NEXT: try_apply [[UNWRAP_FN]](%0)
|
||||
// CHECK: bb1([[ARG:%.*]] : $Int):
|
||||
@@ -1327,7 +1327,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC19failAfterDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thick ThrowDerivedClass.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $ThrowDerivedClass
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers17ThrowDerivedClassC6noFailACyt_tcfC
|
||||
// CHECK-NEXT: [[NEW_SELF:%.*]] = apply [[INIT_FN]](%1)
|
||||
// CHECK-NEXT: strong_retain [[NEW_SELF]]
|
||||
@@ -1351,7 +1351,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC27failDuringOrAfterDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thick ThrowDerivedClass.Type):
|
||||
// CHECK: [[BITMAP_BOX:%.*]] = alloc_stack $Builtin.Int1
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] $ThrowDerivedClass
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] [var_decl] $ThrowDerivedClass
|
||||
// CHECK: [[ZERO:%.*]] = integer_literal $Builtin.Int1, 0
|
||||
// CHECK-NEXT: store [[ZERO]] to [[BITMAP_BOX]]
|
||||
// CHECK: [[INIT_FN:%.*]] = function_ref @$s35definite_init_failable_initializers17ThrowDerivedClassCACyKcfC
|
||||
@@ -1393,7 +1393,7 @@ class ThrowDerivedClass : ThrowBaseClass {
|
||||
// CHECK-LABEL: sil hidden @$s35definite_init_failable_initializers17ThrowDerivedClassC27failBeforeOrAfterDelegationACSi_tKcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thick ThrowDerivedClass.Type):
|
||||
// CHECK-NEXT: [[BITMAP_BOX:%.*]] = alloc_stack $Builtin.Int1
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] [var_decl] $ThrowDerivedClass
|
||||
// CHECK-NEXT: [[ZERO:%.*]] = integer_literal $Builtin.Int1, 0
|
||||
// CHECK-NEXT: store [[ZERO]] to [[BITMAP_BOX]]
|
||||
// CHECK: [[UNWRAP_FN:%.*]] = function_ref @$s35definite_init_failable_initializers6unwrapyS2iKF
|
||||
|
||||
@@ -44,7 +44,7 @@ class Cat : FakeNSObject {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s40definite_init_failable_initializers_objc3CatC1n5afterACSgSi_Sbtcfc : $@convention(method) (Int, Bool, @owned Cat) -> @owned Optional<Cat>
|
||||
// CHECK: bb0([[ARG0:%.*]] : $Int, [[ARG1:%.*]] : $Bool, [[ARG2:%.*]] : $Cat):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $Cat
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $Cat
|
||||
// CHECK: store [[ARG2]] to [[SELF_BOX]] : $*Cat
|
||||
// CHECK: [[FIELD_ADDR:%.*]] = ref_element_addr [[ARG2]] : $Cat, #Cat.x
|
||||
// CHECK-NEXT: store {{%.*}} to [[FIELD_ADDR]] : $*LifetimeTracked
|
||||
@@ -103,7 +103,7 @@ class Cat : FakeNSObject {
|
||||
// CHECK-LABEL: sil hidden @$s40definite_init_failable_initializers_objc3CatC4fail5afterACSgSb_Sbtcfc : $@convention(method) (Bool, Bool, @owned Cat) -> @owned Optional<Cat>
|
||||
// CHECK: bb0([[ARG0:%.*]] : $Bool, [[ARG1:%.*]] : $Bool, [[ARG2:%.*]] : $Cat):
|
||||
// CHECK-NEXT: [[HAS_RUN_INIT_BOX:%.+]] = alloc_stack $Builtin.Int1
|
||||
// CHECK-NEXT: [[SELF_BOX:%.+]] = alloc_stack [dynamic_lifetime] $Cat
|
||||
// CHECK-NEXT: [[SELF_BOX:%.+]] = alloc_stack [dynamic_lifetime] [var_decl] $Cat
|
||||
// CHECK: store [[ARG2]] to [[SELF_BOX]] : $*Cat
|
||||
// CHECK-NEXT: [[COND:%.+]] = struct_extract [[ARG0]] : $Bool, #Bool._value
|
||||
// CHECK-NEXT: cond_br [[COND]], bb1, bb2
|
||||
|
||||
@@ -24,7 +24,7 @@ extension Hive {
|
||||
// CHECK-LABEL: sil hidden @$sSo4HiveC027definite_init_objc_factory_C0E10otherQueenABSo3BeeC_tcfC
|
||||
convenience init(otherQueen other: Bee) {
|
||||
// CHECK: bb0({{.*}}, [[META:%.*]] : $@thick Hive.Type)
|
||||
// CHECK: [[SELF_ADDR:%[0-9]+]] = alloc_stack $Hive
|
||||
// CHECK: [[SELF_ADDR:%[0-9]+]] = alloc_stack [var_decl] $Hive
|
||||
// CHECK: [[OBJC_META:%[0-9]+]] = thick_to_objc_metatype [[META]] : $@thick Hive.Type to $@objc_metatype Hive.Type
|
||||
// CHECK: [[FACTORY:%[0-9]+]] = objc_method [[OBJC_META]] : $@objc_metatype Hive.Type, #Hive.init!allocator.foreign : (Hive.Type) -> (Bee?) -> Hive?, $@convention(objc_method) (Optional<Bee>, @objc_metatype Hive.Type) -> @autoreleased Optional<Hive>
|
||||
// CHECK: apply [[FACTORY]]([[QUEEN:%[0-9]+]], [[OBJC_META]]) : $@convention(objc_method) (Optional<Bee>, @objc_metatype Hive.Type) -> @autoreleased Optional<Hive>
|
||||
|
||||
@@ -27,7 +27,7 @@ class TrivialClass : TriviallyConstructible {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s023definite_init_protocol_B012TrivialClassC5upperACSi_tcfC
|
||||
// CHECK: bb0(%0 : $Int, [[SELF_META:%.*]] : $@thick TrivialClass.Type):
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $TrivialClass
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [var_decl] $TrivialClass
|
||||
// CHECK-NEXT: debug_value
|
||||
// CHECK-NEXT: [[METATYPE:%.*]] = unchecked_trivial_bit_cast [[SELF_META]] {{.*}} to $@thick @dynamic_self TrivialClass.Type
|
||||
// CHECK-NEXT: [[RESULT:%.*]] = alloc_stack $TrivialClass
|
||||
@@ -62,7 +62,7 @@ struct TrivialStruct : TriviallyConstructible {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s023definite_init_protocol_B013TrivialStructV5upperACSi_tcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin TrivialStruct.Type):
|
||||
// CHECK-NEXT: [[SELF:%.*]] = alloc_stack $TrivialStruct
|
||||
// CHECK-NEXT: [[SELF:%.*]] = alloc_stack [var_decl] $TrivialStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $TrivialStruct
|
||||
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thick TrivialStruct.Type
|
||||
// CHECK: [[FN:%.*]] = function_ref @$s023definite_init_protocol_B022TriviallyConstructiblePAAE6middlexSi_tcfC
|
||||
@@ -92,7 +92,7 @@ struct AddressOnlyStruct : TriviallyConstructible {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s023definite_init_protocol_B017AddressOnlyStructV5upperACSi_tcfC
|
||||
// CHECK: bb0(%0 : $*AddressOnlyStruct, %1 : $Int, %2 : $@thin AddressOnlyStruct.Type):
|
||||
// CHECK-NEXT: [[SELF:%.*]] = alloc_stack $AddressOnlyStruct
|
||||
// CHECK-NEXT: [[SELF:%.*]] = alloc_stack [var_decl] $AddressOnlyStruct
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $AddressOnlyStruct
|
||||
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thick AddressOnlyStruct.Type
|
||||
// CHECK: [[FN:%.*]] = function_ref @$s023definite_init_protocol_B022TriviallyConstructiblePAAE6middlexSi_tcfC
|
||||
@@ -125,7 +125,7 @@ enum TrivialEnum : TriviallyConstructible {
|
||||
|
||||
// CHECK-LABEL: sil hidden @$s023definite_init_protocol_B011TrivialEnumO5upperACSi_tcfC
|
||||
// CHECK: bb0(%0 : $Int, %1 : $@thin TrivialEnum.Type):
|
||||
// CHECK-NEXT: [[SELF:%.*]] = alloc_stack $TrivialEnum
|
||||
// CHECK-NEXT: [[SELF:%.*]] = alloc_stack [var_decl] $TrivialEnum
|
||||
// CHECK: [[SELF_BOX:%.*]] = alloc_stack $TrivialEnum
|
||||
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thick TrivialEnum.Type
|
||||
// CHECK: [[FN:%.*]] = function_ref @$s023definite_init_protocol_B022TriviallyConstructiblePAAE6middlexSi_tcfC
|
||||
|
||||
@@ -31,7 +31,7 @@ enum ValueEnum {
|
||||
// CHECK-LABEL: sil hidden @$s25definite_init_value_types9ValueEnumO1xACSb_tcfC : $@convention(method) (Bool, @thin ValueEnum.Type) -> @owned ValueEnum
|
||||
// CHECK: bb0(%0 : $Bool, %1 : $@thin ValueEnum.Type):
|
||||
// CHECK-NEXT: [[STATE:%.*]] = alloc_stack $Builtin.Int1
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] $ValueEnum
|
||||
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack [dynamic_lifetime] [var_decl] $ValueEnum
|
||||
// CHECK-NEXT: [[INIT_STATE:%.*]] = integer_literal $Builtin.Int1, 0
|
||||
// CHECK-NEXT: store [[INIT_STATE]] to [[STATE]]
|
||||
// CHECK: [[BOOL:%.*]] = struct_extract %0 : $Bool, #Bool._value
|
||||
|
||||
@@ -144,7 +144,7 @@ func takeDictionaryPointer(_: UnsafePointer<Dictionary<Int, Int>>)
|
||||
// the test. The eagerMoveToPointer test below is sufficient.
|
||||
//
|
||||
// CHECK-LABEL: sil [stack_protection] @$s18pointer_conversion22dictionaryToRawPointeryyF : $@convention(thin) () -> () {
|
||||
// CHECK: [[A:%.*]] = alloc_stack $Dictionary<Int, Int>, var, name "d"
|
||||
// CHECK: [[A:%.*]] = alloc_stack [var_decl] $Dictionary<Int, Int>, var, name "d"
|
||||
// CHECK: [[PTR:%.*]] = address_to_pointer [stack_protection] [[A]] : $*Dictionary<Int, Int> to $Builtin.RawPointer
|
||||
// CHECK: [[UP:%.*]] = struct $UnsafeRawPointer ([[PTR]] : $Builtin.RawPointer)
|
||||
// CHECK: apply %{{.*}}([[UP]]) : $@convention(thin) (UnsafeRawPointer) -> ()
|
||||
@@ -168,7 +168,7 @@ public func dictionaryToRawPointer() {
|
||||
// never sees those pointer uses. The pointer's scope must be
|
||||
// protected by a fix_lifetime.
|
||||
// CHECK-LABEL: sil [stack_protection] @$s18pointer_conversion18eagerMoveToPointer1oyyXln_tF : $@convention(thin) (@owned AnyObject) -> () {
|
||||
// CHECK: [[A:%.*]] = alloc_stack [moveable_value_debuginfo] $AnyObject, var, name "o"
|
||||
// CHECK: [[A:%.*]] = alloc_stack [var_decl] [moveable_value_debuginfo] $AnyObject, var, name "o"
|
||||
// CHECK: [[PTR:%.*]] = address_to_pointer [stack_protection] [[A]] : $*AnyObject to $Builtin.RawPointer
|
||||
// CHECK: [[UP:%.*]] = struct $UnsafePointer<AnyObject> ([[PTR]] : $Builtin.RawPointer)
|
||||
// CHECK: apply %{{.*}}([[UP]]) : $@convention(thin) (UnsafePointer<AnyObject>) -> ()
|
||||
@@ -182,7 +182,7 @@ public func eagerMoveToPointer(@_eagerMove o: consuming AnyObject ) {
|
||||
}
|
||||
|
||||
// CHECK-LABEL: sil [stack_protection] @$s18pointer_conversion15stringToPointer2ssySS_tF : $@convention(thin) (@guaranteed String) -> () {
|
||||
// CHECK: [[A:%.*]] = alloc_stack $String, var, name "s"
|
||||
// CHECK: [[A:%.*]] = alloc_stack [var_decl] $String, var, name "s"
|
||||
// CHECK: [[PTR:%.*]] = address_to_pointer [stack_protection] [[A]] : $*String to $Builtin.RawPointer
|
||||
// CHECK: [[UP:%.*]] = struct $UnsafePointer<String> ([[PTR]] : $Builtin.RawPointer)
|
||||
// CHECK: apply {{.*}}([[UP]]) : $@convention(thin) (UnsafePointer<String>) -> ()
|
||||
@@ -197,7 +197,7 @@ public func stringToPointer(ss: String) {
|
||||
}
|
||||
|
||||
// CHECK-LABEL: sil [stack_protection] @$s18pointer_conversion19dictionaryToPointer2ddySDyS2iG_tF : $@convention(thin) (@guaranteed Dictionary<Int, Int>) -> () {
|
||||
// CHECK: [[A:%.*]] = alloc_stack $Dictionary<Int, Int>, var, name "d"
|
||||
// CHECK: [[A:%.*]] = alloc_stack [var_decl] $Dictionary<Int, Int>, var, name "d"
|
||||
// CHECK: [[PTR:%.*]] = address_to_pointer [stack_protection] [[A]] : $*Dictionary<Int, Int> to $Builtin.RawPointer
|
||||
// CHECK: [[UP:%.*]] = struct $UnsafePointer<Dictionary<Int, Int>> ([[PTR]] : $Builtin.RawPointer)
|
||||
// CHECK: apply %{{.*}}([[UP]]) : $@convention(thin) (UnsafePointer<Dictionary<Int, Int>>) -> ()
|
||||
|
||||
@@ -229,7 +229,7 @@ func nonResilient() -> some ExternalP2 {
|
||||
}
|
||||
|
||||
// CHECK-LABEL: sil @$s1A019usePairResilientNonC0yyF : $@convention(thin) () -> ()
|
||||
// CHECK: alloc_stack $Pair<MyInt64, @_opaqueReturnTypeOf("$s9External217externalResilientQryF", 0)
|
||||
// CHECK: alloc_stack [var_decl] $Pair<MyInt64, @_opaqueReturnTypeOf("$s9External217externalResilientQryF", 0)
|
||||
// CHECK: [[USEP:%.*]] = function_ref @$s1A4usePyyxAA1PRzlFs5Int64V_Tg5
|
||||
// CHECK: [[FIRST_MYVALUE3:%.*]] = struct $Int64
|
||||
// CHECK: apply [[USEP]]([[FIRST_MYVALUE3]])
|
||||
|
||||
@@ -9,7 +9,7 @@ import Synchronization
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// CHECK-LABEL: sil {{.*}} @localLoad {{.*}} {
|
||||
// CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
|
||||
// CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] [var_decl] $Atomic<Int>
|
||||
// CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]]
|
||||
// CHECK: builtin "atomicload_monotonic_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer)
|
||||
// CHECK: destroy_addr [[ATOMIC]] : $*Atomic<Int>
|
||||
@@ -22,7 +22,7 @@ func localLoad() -> Int {
|
||||
}
|
||||
|
||||
// CHECK-LABEL: sil {{.*}} @localStore {{.*}} {
|
||||
// CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
|
||||
// CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] [var_decl] $Atomic<Int>
|
||||
// CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]]
|
||||
// CHECK: builtin "atomicstore_release_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer
|
||||
// CHECK: destroy_addr [[ATOMIC]] : $*Atomic<Int>
|
||||
@@ -35,7 +35,7 @@ func localStore() {
|
||||
}
|
||||
|
||||
// CHECK-LABEL: sil {{.*}} @localExchange {{.*}} {
|
||||
// CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
|
||||
// CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] [var_decl] $Atomic<Int>
|
||||
// CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]]
|
||||
// CHECK: builtin "atomicrmw_xchg_acquire_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer
|
||||
// CHECK: destroy_addr [[ATOMIC]] : $*Atomic<Int>
|
||||
@@ -48,7 +48,7 @@ func localExchange() -> Int {
|
||||
}
|
||||
|
||||
// CHECK-LABEL: sil {{.*}} @localCompareExchange {{.*}} {
|
||||
// CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
|
||||
// CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] [var_decl] $Atomic<Int>
|
||||
// CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]]
|
||||
// CHECK: builtin "cmpxchg_seqcst_seqcst_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer
|
||||
// CHECK: destroy_addr [[ATOMIC]] : $*Atomic<Int>
|
||||
|
||||
Reference in New Issue
Block a user