// RUN: %target-sil-opt -enable-sil-verify-all %s -allocbox-to-stack -enable-lexical-lifetimes | %FileCheck %s sil_stage raw import Builtin struct Int { var _value: Builtin.Int64 } struct Bool { var _value: Builtin.Int1 } protocol Error {} // CHECK-LABEL: sil [ossa] @promote_nonlexical // CHECK: alloc_stack $ // CHECK-NOT: alloc_box // CHECK-NOT: destroy_value // CHECK: return // CHECK-LABEL: } // end sil function 'promote_nonlexical' sil [ossa] @promote_nonlexical : $@convention(thin) (Int) -> Int { bb0(%0 : $Int): %1 = alloc_box ${ var Int } %1a = project_box %1 : ${ var Int }, 0 store %0 to [trivial] %1a : $*Int %3 = load [trivial] %1a : $*Int destroy_value %1 : ${ var Int } return %3 : $Int } // CHECK-LABEL: sil [ossa] @promote_lexical // CHECK: alloc_stack [lexical] // CHECK-NOT: alloc_box // CHECK-NOT: destroy_value // CHECK: return // CHECK-LABEL: } // end sil function 'promote_lexical' sil [ossa] @promote_lexical : $@convention(thin) (Int) -> Int { bb0(%0 : $Int): %1 = alloc_box ${ var Int } %b = begin_borrow [lexical] %1 : ${ var Int } %1a = project_box %b : ${ var Int }, 0 store %0 to [trivial] %1a : $*Int %3 = load [trivial] %1a : $*Int end_borrow %b : ${ var Int } destroy_value %1 : ${ var Int } return %3 : $Int }