Files
swift-mirror/test/SILOptimizer/moveonly_objectchecker.sil
2024-07-23 11:05:33 -07:00

52 lines
2.1 KiB
Plaintext

// RUN: %target-sil-opt -sil-move-only-object-checker -enable-experimental-feature MoveOnlyClasses -enable-sil-verify-all -move-only-diagnostics-silently-emit-diagnostics %s | %FileCheck %s
sil_stage raw
import Swift
class Klass: ~Copyable {}
sil @classUseMoveOnlyWithoutEscaping : $@convention(thin) (@guaranteed Klass) -> ()
// CHECK-LABEL: sil [ossa] @chainErrorTest : $@convention(thin) (@guaranteed Klass) -> () {
// CHECK-NOT: copy_value
// CHECK: explicit_copy_value
// CHECK-NOT: copy_value
// CHECK: explicit_copy_value
// CHECK-NOT: copy_value
// CHECK: } // end sil function 'chainErrorTest'
sil [ossa] @chainErrorTest : $@convention(thin) (@guaranteed Klass) -> () {
bb0(%0 : @guaranteed $Klass):
%1 = copy_value %0 : $Klass
%2 = mark_unresolved_non_copyable_value [no_consume_or_assign] %1 : $Klass
debug_value %2 : $Klass, let, name "x", argno 1
%4 = copy_value %2 : $Klass
%5 = move_value [lexical] %4 : $Klass
%6 = mark_unresolved_non_copyable_value [consumable_and_assignable] %5 : $Klass
debug_value %6 : $Klass, let, name "x2"
%8 = copy_value %6 : $Klass
%9 = move_value [lexical] %8 : $Klass
%10 = mark_unresolved_non_copyable_value [consumable_and_assignable] %9 : $Klass
debug_value %10 : $Klass, let, name "y2"
%12 = copy_value %10 : $Klass
%13 = move_value [lexical] %12 : $Klass
%14 = mark_unresolved_non_copyable_value [consumable_and_assignable] %13 : $Klass
debug_value %14 : $Klass, let, name "k2"
%16 = copy_value %6 : $Klass
%17 = move_value [lexical] %16 : $Klass
%18 = mark_unresolved_non_copyable_value [consumable_and_assignable] %17 : $Klass
debug_value %18 : $Klass, let, name "k3"
%20 = copy_value %18 : $Klass
%21 = move_value %20 : $Klass
destroy_value %21 : $Klass
%23 = function_ref @classUseMoveOnlyWithoutEscaping : $@convention(thin) (@guaranteed Klass) -> ()
%24 = apply %23(%14) : $@convention(thin) (@guaranteed Klass) -> ()
destroy_value %18 : $Klass
destroy_value %14 : $Klass
destroy_value %10 : $Klass
destroy_value %6 : $Klass
destroy_value %2 : $Klass
%30 = tuple ()
return %30 : $()
}