File: deinit_recursive_branching.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (23 lines) | stat: -rw-r--r-- 1,355 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// RUN: %target-swift-emit-silgen %s | %FileCheck %s

// Non-linearly recursive structures should not get optimized
class Tree {
  var left: Tree?
  var right: Tree?
}

// CHECK: sil hidden [ossa] @$s26deinit_recursive_branching4TreeCfd : $@convention(method) (@guaranteed Tree) -> @owned Builtin.NativeObject {
// CHECK: // [[SELF:%.*]] "self"
// CHECK: bb0([[SELF]] : @guaranteed $Tree):
// CHECK:   [[LEFT:%.*]] = ref_element_addr [[SELF]] : $Tree, #Tree.left
// CHECK:   [[LEFT_ACCESS:%.*]] = begin_access [deinit] [static] [[LEFT]] : $*Optional<Tree>
// CHECK:   destroy_addr [[LEFT_ACCESS]] : $*Optional<Tree>
// CHECK:   end_access [[LEFT_ACCESS]] : $*Optional<Tree>
// CHECK:   [[RIGHT:%.*]] = ref_element_addr [[SELF]] : $Tree, #Tree.right
// CHECK:   [[RIGHT_ACCESS:%.*]] = begin_access [deinit] [static] [[RIGHT]] : $*Optional<Tree>
// CHECK:   destroy_addr [[RIGHT_ACCESS]] : $*Optional<Tree>
// CHECK:   end_access [[RIGHT_ACCESS]] : $*Optional<Tree>                // id: %9
// CHECK:   [[SELF_NATIVE:%.*]] = unchecked_ref_cast [[SELF]] : $Tree to $Builtin.NativeObject
// CHECK:   [[SELF_NATIVE_OWNED:%.*]] = unchecked_ownership_conversion [[SELF_NATIVE]] : $Builtin.NativeObject, @guaranteed to @owned
// CHECK:   return [[SELF_NATIVE_OWNED]] : $Builtin.NativeObject
// CHECK: } // end sil function '$s26deinit_recursive_branching4TreeCfd'