File: coverage_pound_if_exec.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 (129 lines) | stat: -rw-r--r-- 4,563 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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// RUN: %empty-directory(%t)

// RUN: %target-build-swift %s -profile-generate -profile-coverage-mapping -o %t/main

// This unusual use of 'sh' allows the path of the profraw file to be
// substituted by %target-run.
// RUN: %target-codesign %t/main
// RUN: %target-run sh -c 'env LLVM_PROFILE_FILE=$1 $2' -- %t/default.profraw %t/main

// RUN: %llvm-profdata merge %t/default.profraw -o %t/default.profdata
// RUN: %llvm-cov export -summary-only %t/main -instr-profile=%t/default.profdata | %FileCheck --check-prefix SUMMARY %s
// RUN: %llvm-cov show %t/main -instr-profile=%t/default.profdata | %FileCheck --implicit-check-not "{{[ ]*\|[ ]*[0-9]+}}" %s

// REQUIRES: profile_runtime
// REQUIRES: executable_test
// REQUIRES: OS=macosx

// The line count here excludes the inactive regions.
// SUMMARY: "lines":{"count":41,"covered":0

// This test works by marking active lines with the pattern. The implicit
// CHECK-NOT in the FileCheck invocation ensures everything else is a skipped
// region (or doesn't have any coverage mapping such as these comments).

func poundIfDecl() -> Int {  // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #if true
    #if true
    return 1                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
    #else
    return 2
    #endif
  #else
    #if true
    return 3
    #else
    return 4
    #endif
  #endif
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}

func poundIfMember(
  _ x: [Int]
) -> [Int] {                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  return x                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #if false
    .map { $0 + 1 }
  #endif
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}

func poundIfAttr() -> Any {  // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
#if false
  @objc
#endif
  class C {}                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  return C()                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}

func poundIfSwitch(
  _ x: Bool
) -> Int {                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  switch x {                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #if true
  case true:                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
    return 0                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #else
  case false:
    return 0
  #endif
  #if false
  case false:
    return 1
  #endif
  case false:                // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
    return 0                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  }                          // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}

func poundIfMember() {       // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  struct S {                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
#if false
    var foo: Int
#else
    var foo: Int             // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
#endif
  }                          // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}

func poundIfDecl2() -> Int { // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #if true
  struct S {                 // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
    var foo: Int             // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  }                          // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #else
  struct S {
    var foo: Int
  }
  #endif
  return S(foo: 0).foo       // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}

func emptyPoundIf1(
) -> Int {                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #if false
  #endif
  return 0                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}

func emptyPoundIf2(
) -> Int {                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #if true
  #endif
  return 0                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}

func emptyPoundIf3(
) -> Int {                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #if true
  #else
  #endif
  return 0                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}

func poundEndIfSameLine(
) -> Int {                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #if true
  return 0                   // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}
  #else
  return 1#endif
}                            // CHECK: [[@LINE]]{{[ ]*\|[ ]*[0-9]+}}