File: coverage_property_wrapper_backing.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 (112 lines) | stat: -rw-r--r-- 5,103 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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// This uses '-primary-file' to ensure we're conservative with lazy SIL emission.
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -profile-generate -profile-coverage-mapping -emit-sorted-sil -emit-sil -module-name coverage_property_wrapper_backing -primary-file %s | %FileCheck %s
// RUN: %target-swift-frontend -profile-generate -profile-coverage-mapping -emit-ir %s

@propertyWrapper
struct Wrapper<T> {
  var wrappedValue: T
  init(wrappedValue: T, _ x: Int) {
    self.wrappedValue = wrappedValue
  }
}

@propertyWrapper
struct PassThroughWrapper<T> {
  var wrappedValue: T
}

// rdar://99931619 – Make sure we emit the profiler increment for the backing
// initializer.

// CHECK-LABEL: sil hidden @$s33coverage_property_wrapper_backing1SV1iSivpfP : $@convention(thin) (Int) -> Wrapper<Int>
// CHECK:       increment_profiler_counter 0
// CHECK:       function_ref @$sSb6randomSbyFZ
// CHECK:       cond_br {{%[0-9]+}}, [[BB:bb[0-9]]]
// CHECK:       [[BB]]:
// CHECK-NEXT:  increment_profiler_counter 1

// CHECK-LABEL: sil hidden @$s33coverage_property_wrapper_backing1UV1xSivpfP : $@convention(thin) (Int) -> Wrapper<Int>
// CHECK:       function_ref @$sSb6randomSbyFZ : $@convention(method) (@thin Bool.Type) -> Bool
// CHECK:       cond_br {{%[0-9]+}}, [[BB_TRUE:bb[0-9]+]], [[BB_FALSE:bb[0-9]+]]
//
// CHECK:       [[BB_FALSE]]:
// CHECK:       integer_literal {{.*}}, 2
//
// CHECK:       [[BB_TRUE]]:
// CHECK:       increment_profiler_counter 1
// CHECK:       integer_literal {{.*}}, 1

// CHECK-LABEL: sil hidden [transparent] @$s33coverage_property_wrapper_backing1UV2_{{.*}}7WrapperVySiGvpfi : $@convention(thin) () -> Int
// CHECK:       increment_profiler_counter 0
// CHECK:       function_ref @$sSb6randomSbyFZ : $@convention(method) (@thin Bool.Type) -> Bool
// CHECK:       cond_br {{%[0-9]+}}, [[BB_TRUE:bb[0-9]+]], [[BB_FALSE:bb[0-9]+]]

// CHECK:       [[BB_FALSE]]:
// CHECK:       integer_literal {{.*}}, 4
//
// CHECK:       [[BB_TRUE]]:
// CHECK:       increment_profiler_counter 1
// CHECK:       integer_literal {{.*}}, 3

struct S {
  // CHECK-LABEL: sil_coverage_map {{.*}} "$s33coverage_property_wrapper_backing1SV1iSivpfP" {{.*}} // property wrapper backing initializer of coverage_property_wrapper_backing.S.i
  // CHECK-NEXT:  [[@LINE+4]]:4 -> [[@LINE+4]]:30 : 0
  // CHECK-NEXT:  [[@LINE+3]]:24 -> [[@LINE+3]]:25 : 1
  // CHECK-NEXT:  [[@LINE+2]]:28 -> [[@LINE+2]]:29 : (0 - 1)
  // CHECK-NEXT:  }
  @Wrapper(.random() ? 1 : 2)
  var i = 3
  // CHECK-LABEL: sil_coverage_map {{.*}} "$s33coverage_property_wrapper_backing1SV2_i{{.*}}" {{.*}} // variable initialization expression of coverage_property_wrapper_backing.S.(_i in {{.*}}) : coverage_property_wrapper_backing.Wrapper<Swift.Int>
  // CHECK-NEXT: [[@LINE-2]]:11 -> [[@LINE-2]]:12 : 0
  // CHECK-NEXT: }
}

struct T {
  // The backing initializer for j has no user-written code, so no coverage map needed.
  // CHECK-NOT: sil_coverage_map {{.*}} "s33coverage_property_wrapper_backing1TV1jSivpfP"
  @PassThroughWrapper
  var j = 3

  // FIXME: Ideally the region here would only span the length of the @Wrapper
  // argument list.
  // CHECK-LABEL: sil_coverage_map {{.*}} "$s33coverage_property_wrapper_backing1TV1kSivpfP" {{.*}} // property wrapper backing initializer of coverage_property_wrapper_backing.T.k
  // CHECK-NEXT:  [[@LINE+4]]:4 -> [[@LINE+5]]:30 : 0
  // CHECK-NEXT:  [[@LINE+4]]:24 -> [[@LINE+4]]:25 : 1
  // CHECK-NEXT:  [[@LINE+3]]:28 -> [[@LINE+3]]:29 : (0 - 1)
  // CHECK-NEXT:  }
  @PassThroughWrapper
  @Wrapper(.random() ? 1 : 2)
  var k = 3
}

// rdar://118939162 - Make sure we don't include the initialization expression
// in the backing initializer.
struct U {
  // CHECK-LABEL: sil_coverage_map {{.*}} // property wrapper backing initializer of coverage_property_wrapper_backing.U.x
  // CHECK-NEXT:  [[@LINE+4]]:4  -> [[@LINE+4]]:30 : 0
  // CHECK-NEXT:  [[@LINE+3]]:24 -> [[@LINE+3]]:25 : 1
  // CHECK-NEXT:  [[@LINE+2]]:28 -> [[@LINE+2]]:29 : (0 - 1)
  // CHECK-NEXT:  }
  @Wrapper(.random() ? 1 : 2)
  var x = if .random() { 3 } else { 4 }
  // CHECK-LABEL: sil_coverage_map {{.*}} // variable initialization expression of coverage_property_wrapper_backing.U.(_x
  // CHECK-NEXT:  [[@LINE-2]]:11 -> [[@LINE-2]]:40 : 0
  // CHECK-NEXT:  [[@LINE-3]]:14 -> [[@LINE-3]]:23 : 0
  // CHECK-NEXT:  [[@LINE-4]]:24 -> [[@LINE-4]]:29 : 1
  // CHECK-NEXT:  [[@LINE-5]]:35 -> [[@LINE-5]]:40 : (0 - 1)
  // CHECK-NEXT:  }
}

struct V {
  // CHECK-LABEL: sil_coverage_map {{.*}} // property wrapper backing initializer of coverage_property_wrapper_backing.V.x
  // CHECK-NEXT:  [[@LINE+2]]:4  -> [[@LINE+2]]:14 : 0
  // CHECK-NEXT:  }
  @Wrapper(0)
  var x = switch Bool.random() { case true: 0 case false: 0 }
  // CHECK-LABEL: sil_coverage_map {{.*}} // variable initialization expression of coverage_property_wrapper_backing.V.(_x
  // CHECK-NEXT:  [[@LINE-2]]:11 -> [[@LINE-2]]:62 : 0
  // CHECK-NEXT:  [[@LINE-3]]:18 -> [[@LINE-3]]:31 : 0
  // CHECK-NEXT:  [[@LINE-4]]:34 -> [[@LINE-4]]:46 : 1
  // CHECK-NEXT:  [[@LINE-5]]:47 -> [[@LINE-5]]:60 : 2
  // CHECK-NEXT:  }
}