Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e074dae

Browse files
committed
C#: Limit number of non-required CFG splits
1 parent 7d11eb5 commit e074dae

2 files changed

Lines changed: 278 additions & 12 deletions

File tree

csharp/ql/src/semmle/code/csharp/controlflow/internal/Splitting.qll

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ private import semmle.code.csharp.controlflow.Guards as Guards
1313
private import ControlFlow
1414
private import SuccessorTypes
1515

16+
/** The maximum number of splits allowed for a given node. */
17+
private int maxSplits() { result = 7 }
18+
1619
cached
1720
private module Cached {
1821
cached
@@ -41,11 +44,13 @@ private module Cached {
4144
TSplitsNil() or
4245
TSplitsCons(SplitInternal head, Splits tail) {
4346
exists(
44-
ControlFlowElement pred, Splits predSplits, ControlFlowElement succ, Completion c, int rnk
45-
|
46-
case2aFromRank(pred, predSplits, succ, tail, c, rnk + 1)
47+
ControlFlowElement pred, Splits predSplits, ControlFlowElement succ, Completion c, int rnk,
48+
int numberOfSplits
4749
|
50+
case2aFromRank(pred, predSplits, succ, tail, c, rnk + 1, numberOfSplits) and
4851
head = case2aSomeAtRank(pred, predSplits, succ, c, rnk)
52+
|
53+
numberOfSplits < maxSplits() or head.getKind().isMandatory()
4954
)
5055
}
5156

@@ -93,6 +98,13 @@ abstract class SplitKind extends TSplitKind {
9398
*/
9499
abstract int getListOrder();
95100

101+
/**
102+
* Holds if a split of this kind is mandatory. That is, a split of this kind must
103+
* be taken into account, regardless of whether we might exceed the maximum number
104+
* of splits (`maxSplits()`).
105+
*/
106+
abstract predicate isMandatory();
107+
96108
/**
97109
* Gets the rank of this split kind among all the split kinds that apply to
98110
* control flow element `cfe`. The rank is based on the order defined by
@@ -264,6 +276,8 @@ module FinallySplitting {
264276
private class FinallySplitKind extends SplitKind, TFinallySplitKind {
265277
override int getListOrder() { result = 0 }
266278

279+
override predicate isMandatory() { any() }
280+
267281
override string toString() { result = "Finally" }
268282
}
269283

@@ -415,6 +429,8 @@ module ExceptionHandlerSplitting {
415429
private class ExceptionHandlerSplitKind extends SplitKind, TExceptionHandlerSplitKind {
416430
override int getListOrder() { result = 1 }
417431

432+
override predicate isMandatory() { any() }
433+
418434
override string toString() { result = "ExceptionHandler" }
419435
}
420436

@@ -711,6 +727,8 @@ module BooleanSplitting {
711727
)
712728
}
713729

730+
override predicate isMandatory() { none() }
731+
714732
override string toString() { result = kind.toString() }
715733
}
716734

@@ -1046,28 +1064,33 @@ private module SuccSplits {
10461064
*/
10471065
predicate case2aFromRank(
10481066
ControlFlowElement pred, Splits predSplits, ControlFlowElement succ, Splits succSplits,
1049-
Completion c, int rnk
1067+
Completion c, int rnk, int numberOfSplits
10501068
) {
10511069
case2aux(pred, predSplits, succ, c) and
10521070
succSplits = TSplitsNil() and
1053-
rnk = max(any(SplitKind sk).getListRank(succ)) + 1
1071+
rnk = max(any(SplitKind sk).getListRank(succ)) + 1 and
1072+
numberOfSplits = 0
10541073
or
1055-
case2aFromRank(pred, predSplits, succ, succSplits, c, rnk + 1) and
1074+
case2aFromRank(pred, predSplits, succ, succSplits, c, rnk + 1, numberOfSplits) and
10561075
case2aNoneAtRank(pred, predSplits, succ, c, rnk)
10571076
or
1058-
exists(Splits mid, SplitInternal split |
1059-
split = case2aCons(pred, predSplits, succ, mid, c, rnk)
1077+
exists(Splits mid, SplitInternal split, int numberOfSplitsMid |
1078+
split = case2aCons(pred, predSplits, succ, mid, c, rnk, numberOfSplitsMid)
10601079
|
1061-
succSplits = TSplitsCons(split, mid)
1080+
if numberOfSplitsMid < maxSplits() or split.getKind().isMandatory()
1081+
then succSplits = TSplitsCons(split, mid) and numberOfSplits = numberOfSplitsMid + 1
1082+
else (
1083+
succSplits = mid and numberOfSplits = numberOfSplitsMid
1084+
)
10621085
)
10631086
}
10641087

10651088
pragma[noinline]
10661089
private SplitInternal case2aCons(
10671090
ControlFlowElement pred, Splits predSplits, ControlFlowElement succ, Splits succSplits,
1068-
Completion c, int rnk
1091+
Completion c, int rnk, int numberOfSplits
10691092
) {
1070-
case2aFromRank(pred, predSplits, succ, succSplits, c, rnk + 1) and
1093+
case2aFromRank(pred, predSplits, succ, succSplits, c, rnk + 1, numberOfSplits) and
10711094
result = case2aSomeAtRank(pred, predSplits, succ, c, rnk)
10721095
}
10731096

@@ -1101,7 +1124,7 @@ private module SuccSplits {
11011124
ControlFlowElement pred, Splits predSplits, ControlFlowElement succ, Splits succSplits,
11021125
Completion c
11031126
) {
1104-
case2aFromRank(pred, predSplits, succ, succSplits, c, 1)
1127+
case2aFromRank(pred, predSplits, succ, succSplits, c, 1, _)
11051128
or
11061129
case2bForall(pred, predSplits, succ, c, TSplitsNil()) and
11071130
succSplits = TSplitsNil()
Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
| SplittingStressTest.cs:4:5:168:5 | {...} | 1 |
2+
| SplittingStressTest.cs:5:9:6:13 | if (...) ... | 1 |
3+
| SplittingStressTest.cs:5:13:5:14 | access to parameter b1 | 1 |
4+
| SplittingStressTest.cs:6:13:6:13 | ; | 1 |
5+
| SplittingStressTest.cs:7:9:8:13 | if (...) ... | 2 |
6+
| SplittingStressTest.cs:7:13:7:14 | access to parameter b2 | 2 |
7+
| SplittingStressTest.cs:8:13:8:13 | ; | 2 |
8+
| SplittingStressTest.cs:9:9:10:13 | if (...) ... | 4 |
9+
| SplittingStressTest.cs:9:13:9:14 | access to parameter b3 | 4 |
10+
| SplittingStressTest.cs:10:13:10:13 | ; | 4 |
11+
| SplittingStressTest.cs:11:9:12:13 | if (...) ... | 8 |
12+
| SplittingStressTest.cs:11:13:11:14 | access to parameter b4 | 8 |
13+
| SplittingStressTest.cs:12:13:12:13 | ; | 8 |
14+
| SplittingStressTest.cs:13:9:14:13 | if (...) ... | 16 |
15+
| SplittingStressTest.cs:13:13:13:14 | access to parameter b5 | 16 |
16+
| SplittingStressTest.cs:14:13:14:13 | ; | 16 |
17+
| SplittingStressTest.cs:15:9:16:13 | if (...) ... | 32 |
18+
| SplittingStressTest.cs:15:13:15:14 | access to parameter b6 | 32 |
19+
| SplittingStressTest.cs:16:13:16:13 | ; | 32 |
20+
| SplittingStressTest.cs:17:9:18:13 | if (...) ... | 64 |
21+
| SplittingStressTest.cs:17:13:17:14 | access to parameter b7 | 64 |
22+
| SplittingStressTest.cs:18:13:18:13 | ; | 64 |
23+
| SplittingStressTest.cs:19:9:20:13 | if (...) ... | 128 |
24+
| SplittingStressTest.cs:19:13:19:14 | access to parameter b8 | 128 |
25+
| SplittingStressTest.cs:20:13:20:13 | ; | 64 |
26+
| SplittingStressTest.cs:21:9:22:13 | if (...) ... | 128 |
27+
| SplittingStressTest.cs:21:13:21:14 | access to parameter b9 | 128 |
28+
| SplittingStressTest.cs:22:13:22:13 | ; | 64 |
29+
| SplittingStressTest.cs:23:9:24:13 | if (...) ... | 128 |
30+
| SplittingStressTest.cs:23:13:23:15 | access to parameter b10 | 128 |
31+
| SplittingStressTest.cs:24:13:24:13 | ; | 64 |
32+
| SplittingStressTest.cs:25:9:26:13 | if (...) ... | 128 |
33+
| SplittingStressTest.cs:25:13:25:15 | access to parameter b11 | 128 |
34+
| SplittingStressTest.cs:26:13:26:13 | ; | 64 |
35+
| SplittingStressTest.cs:27:9:28:13 | if (...) ... | 128 |
36+
| SplittingStressTest.cs:27:13:27:15 | access to parameter b12 | 128 |
37+
| SplittingStressTest.cs:28:13:28:13 | ; | 64 |
38+
| SplittingStressTest.cs:29:9:30:13 | if (...) ... | 128 |
39+
| SplittingStressTest.cs:29:13:29:15 | access to parameter b13 | 128 |
40+
| SplittingStressTest.cs:30:13:30:13 | ; | 64 |
41+
| SplittingStressTest.cs:31:9:32:13 | if (...) ... | 128 |
42+
| SplittingStressTest.cs:31:13:31:15 | access to parameter b14 | 128 |
43+
| SplittingStressTest.cs:32:13:32:13 | ; | 64 |
44+
| SplittingStressTest.cs:33:9:34:13 | if (...) ... | 128 |
45+
| SplittingStressTest.cs:33:13:33:15 | access to parameter b15 | 128 |
46+
| SplittingStressTest.cs:34:13:34:13 | ; | 64 |
47+
| SplittingStressTest.cs:35:9:36:13 | if (...) ... | 128 |
48+
| SplittingStressTest.cs:35:13:35:15 | access to parameter b16 | 128 |
49+
| SplittingStressTest.cs:36:13:36:13 | ; | 64 |
50+
| SplittingStressTest.cs:37:9:38:13 | if (...) ... | 128 |
51+
| SplittingStressTest.cs:37:13:37:15 | access to parameter b17 | 128 |
52+
| SplittingStressTest.cs:38:13:38:13 | ; | 64 |
53+
| SplittingStressTest.cs:39:9:40:13 | if (...) ... | 128 |
54+
| SplittingStressTest.cs:39:13:39:15 | access to parameter b18 | 128 |
55+
| SplittingStressTest.cs:40:13:40:13 | ; | 64 |
56+
| SplittingStressTest.cs:41:9:42:13 | if (...) ... | 128 |
57+
| SplittingStressTest.cs:41:13:41:15 | access to parameter b19 | 128 |
58+
| SplittingStressTest.cs:42:13:42:13 | ; | 64 |
59+
| SplittingStressTest.cs:43:9:44:13 | if (...) ... | 128 |
60+
| SplittingStressTest.cs:43:13:43:15 | access to parameter b20 | 128 |
61+
| SplittingStressTest.cs:44:13:44:13 | ; | 64 |
62+
| SplittingStressTest.cs:45:9:46:13 | if (...) ... | 128 |
63+
| SplittingStressTest.cs:45:13:45:15 | access to parameter b21 | 128 |
64+
| SplittingStressTest.cs:46:13:46:13 | ; | 64 |
65+
| SplittingStressTest.cs:47:9:48:13 | if (...) ... | 128 |
66+
| SplittingStressTest.cs:47:13:47:15 | access to parameter b22 | 128 |
67+
| SplittingStressTest.cs:48:13:48:13 | ; | 64 |
68+
| SplittingStressTest.cs:49:9:50:13 | if (...) ... | 128 |
69+
| SplittingStressTest.cs:49:13:49:15 | access to parameter b23 | 128 |
70+
| SplittingStressTest.cs:50:13:50:13 | ; | 64 |
71+
| SplittingStressTest.cs:51:9:52:13 | if (...) ... | 128 |
72+
| SplittingStressTest.cs:51:13:51:15 | access to parameter b24 | 128 |
73+
| SplittingStressTest.cs:52:13:52:13 | ; | 64 |
74+
| SplittingStressTest.cs:53:9:54:13 | if (...) ... | 128 |
75+
| SplittingStressTest.cs:53:13:53:15 | access to parameter b25 | 128 |
76+
| SplittingStressTest.cs:54:13:54:13 | ; | 64 |
77+
| SplittingStressTest.cs:55:9:56:13 | if (...) ... | 128 |
78+
| SplittingStressTest.cs:55:13:55:15 | access to parameter b26 | 128 |
79+
| SplittingStressTest.cs:56:13:56:13 | ; | 64 |
80+
| SplittingStressTest.cs:57:9:58:13 | if (...) ... | 128 |
81+
| SplittingStressTest.cs:57:13:57:15 | access to parameter b27 | 128 |
82+
| SplittingStressTest.cs:58:13:58:13 | ; | 64 |
83+
| SplittingStressTest.cs:59:9:60:13 | if (...) ... | 128 |
84+
| SplittingStressTest.cs:59:13:59:15 | access to parameter b28 | 128 |
85+
| SplittingStressTest.cs:60:13:60:13 | ; | 64 |
86+
| SplittingStressTest.cs:61:9:62:13 | if (...) ... | 128 |
87+
| SplittingStressTest.cs:61:13:61:15 | access to parameter b29 | 128 |
88+
| SplittingStressTest.cs:62:13:62:13 | ; | 64 |
89+
| SplittingStressTest.cs:63:9:64:13 | if (...) ... | 128 |
90+
| SplittingStressTest.cs:63:13:63:15 | access to parameter b30 | 128 |
91+
| SplittingStressTest.cs:64:13:64:13 | ; | 64 |
92+
| SplittingStressTest.cs:65:9:66:13 | if (...) ... | 128 |
93+
| SplittingStressTest.cs:65:13:65:15 | access to parameter b31 | 128 |
94+
| SplittingStressTest.cs:66:13:66:13 | ; | 64 |
95+
| SplittingStressTest.cs:67:9:68:13 | if (...) ... | 128 |
96+
| SplittingStressTest.cs:67:13:67:15 | access to parameter b32 | 128 |
97+
| SplittingStressTest.cs:68:13:68:13 | ; | 64 |
98+
| SplittingStressTest.cs:69:9:70:13 | if (...) ... | 128 |
99+
| SplittingStressTest.cs:69:13:69:15 | access to parameter b33 | 128 |
100+
| SplittingStressTest.cs:70:13:70:13 | ; | 64 |
101+
| SplittingStressTest.cs:71:9:72:13 | if (...) ... | 128 |
102+
| SplittingStressTest.cs:71:13:71:15 | access to parameter b34 | 128 |
103+
| SplittingStressTest.cs:72:13:72:13 | ; | 64 |
104+
| SplittingStressTest.cs:73:9:74:13 | if (...) ... | 128 |
105+
| SplittingStressTest.cs:73:13:73:15 | access to parameter b35 | 128 |
106+
| SplittingStressTest.cs:74:13:74:13 | ; | 64 |
107+
| SplittingStressTest.cs:75:9:76:13 | if (...) ... | 128 |
108+
| SplittingStressTest.cs:75:13:75:15 | access to parameter b36 | 128 |
109+
| SplittingStressTest.cs:76:13:76:13 | ; | 64 |
110+
| SplittingStressTest.cs:77:9:78:13 | if (...) ... | 128 |
111+
| SplittingStressTest.cs:77:13:77:15 | access to parameter b37 | 128 |
112+
| SplittingStressTest.cs:78:13:78:13 | ; | 64 |
113+
| SplittingStressTest.cs:79:9:80:13 | if (...) ... | 128 |
114+
| SplittingStressTest.cs:79:13:79:15 | access to parameter b38 | 128 |
115+
| SplittingStressTest.cs:80:13:80:13 | ; | 64 |
116+
| SplittingStressTest.cs:81:9:82:13 | if (...) ... | 128 |
117+
| SplittingStressTest.cs:81:13:81:15 | access to parameter b39 | 128 |
118+
| SplittingStressTest.cs:82:13:82:13 | ; | 64 |
119+
| SplittingStressTest.cs:83:9:84:13 | if (...) ... | 128 |
120+
| SplittingStressTest.cs:83:13:83:15 | access to parameter b40 | 128 |
121+
| SplittingStressTest.cs:84:13:84:13 | ; | 64 |
122+
| SplittingStressTest.cs:85:9:85:9 | ; | 128 |
123+
| SplittingStressTest.cs:87:9:88:13 | if (...) ... | 128 |
124+
| SplittingStressTest.cs:87:13:87:14 | access to parameter b1 | 128 |
125+
| SplittingStressTest.cs:88:13:88:13 | ; | 128 |
126+
| SplittingStressTest.cs:89:9:90:13 | if (...) ... | 128 |
127+
| SplittingStressTest.cs:89:13:89:14 | access to parameter b2 | 128 |
128+
| SplittingStressTest.cs:90:13:90:13 | ; | 128 |
129+
| SplittingStressTest.cs:91:9:92:13 | if (...) ... | 128 |
130+
| SplittingStressTest.cs:91:13:91:14 | access to parameter b3 | 128 |
131+
| SplittingStressTest.cs:92:13:92:13 | ; | 128 |
132+
| SplittingStressTest.cs:93:9:94:13 | if (...) ... | 128 |
133+
| SplittingStressTest.cs:93:13:93:14 | access to parameter b4 | 128 |
134+
| SplittingStressTest.cs:94:13:94:13 | ; | 128 |
135+
| SplittingStressTest.cs:95:9:96:13 | if (...) ... | 128 |
136+
| SplittingStressTest.cs:95:13:95:14 | access to parameter b5 | 128 |
137+
| SplittingStressTest.cs:96:13:96:13 | ; | 128 |
138+
| SplittingStressTest.cs:97:9:98:13 | if (...) ... | 128 |
139+
| SplittingStressTest.cs:97:13:97:14 | access to parameter b6 | 128 |
140+
| SplittingStressTest.cs:98:13:98:13 | ; | 128 |
141+
| SplittingStressTest.cs:99:9:100:13 | if (...) ... | 128 |
142+
| SplittingStressTest.cs:99:13:99:14 | access to parameter b7 | 128 |
143+
| SplittingStressTest.cs:100:13:100:13 | ; | 128 |
144+
| SplittingStressTest.cs:101:9:102:13 | if (...) ... | 128 |
145+
| SplittingStressTest.cs:101:13:101:14 | access to parameter b8 | 128 |
146+
| SplittingStressTest.cs:102:13:102:13 | ; | 128 |
147+
| SplittingStressTest.cs:103:9:104:13 | if (...) ... | 128 |
148+
| SplittingStressTest.cs:103:13:103:14 | access to parameter b9 | 128 |
149+
| SplittingStressTest.cs:104:13:104:13 | ; | 128 |
150+
| SplittingStressTest.cs:105:9:106:13 | if (...) ... | 128 |
151+
| SplittingStressTest.cs:105:13:105:15 | access to parameter b10 | 128 |
152+
| SplittingStressTest.cs:106:13:106:13 | ; | 128 |
153+
| SplittingStressTest.cs:107:9:108:13 | if (...) ... | 128 |
154+
| SplittingStressTest.cs:107:13:107:15 | access to parameter b11 | 128 |
155+
| SplittingStressTest.cs:108:13:108:13 | ; | 128 |
156+
| SplittingStressTest.cs:109:9:110:13 | if (...) ... | 128 |
157+
| SplittingStressTest.cs:109:13:109:15 | access to parameter b12 | 128 |
158+
| SplittingStressTest.cs:110:13:110:13 | ; | 128 |
159+
| SplittingStressTest.cs:111:9:112:13 | if (...) ... | 128 |
160+
| SplittingStressTest.cs:111:13:111:15 | access to parameter b13 | 128 |
161+
| SplittingStressTest.cs:112:13:112:13 | ; | 128 |
162+
| SplittingStressTest.cs:113:9:114:13 | if (...) ... | 128 |
163+
| SplittingStressTest.cs:113:13:113:15 | access to parameter b14 | 128 |
164+
| SplittingStressTest.cs:114:13:114:13 | ; | 128 |
165+
| SplittingStressTest.cs:115:9:116:13 | if (...) ... | 128 |
166+
| SplittingStressTest.cs:115:13:115:15 | access to parameter b15 | 128 |
167+
| SplittingStressTest.cs:116:13:116:13 | ; | 128 |
168+
| SplittingStressTest.cs:117:9:118:13 | if (...) ... | 128 |
169+
| SplittingStressTest.cs:117:13:117:15 | access to parameter b16 | 128 |
170+
| SplittingStressTest.cs:118:13:118:13 | ; | 128 |
171+
| SplittingStressTest.cs:119:9:120:13 | if (...) ... | 128 |
172+
| SplittingStressTest.cs:119:13:119:15 | access to parameter b17 | 128 |
173+
| SplittingStressTest.cs:120:13:120:13 | ; | 128 |
174+
| SplittingStressTest.cs:121:9:122:13 | if (...) ... | 128 |
175+
| SplittingStressTest.cs:121:13:121:15 | access to parameter b18 | 128 |
176+
| SplittingStressTest.cs:122:13:122:13 | ; | 128 |
177+
| SplittingStressTest.cs:123:9:124:13 | if (...) ... | 128 |
178+
| SplittingStressTest.cs:123:13:123:15 | access to parameter b19 | 128 |
179+
| SplittingStressTest.cs:124:13:124:13 | ; | 128 |
180+
| SplittingStressTest.cs:125:9:126:13 | if (...) ... | 128 |
181+
| SplittingStressTest.cs:125:13:125:15 | access to parameter b20 | 128 |
182+
| SplittingStressTest.cs:126:13:126:13 | ; | 128 |
183+
| SplittingStressTest.cs:127:9:128:13 | if (...) ... | 128 |
184+
| SplittingStressTest.cs:127:13:127:15 | access to parameter b21 | 128 |
185+
| SplittingStressTest.cs:128:13:128:13 | ; | 128 |
186+
| SplittingStressTest.cs:129:9:130:13 | if (...) ... | 128 |
187+
| SplittingStressTest.cs:129:13:129:15 | access to parameter b22 | 128 |
188+
| SplittingStressTest.cs:130:13:130:13 | ; | 128 |
189+
| SplittingStressTest.cs:131:9:132:13 | if (...) ... | 128 |
190+
| SplittingStressTest.cs:131:13:131:15 | access to parameter b23 | 128 |
191+
| SplittingStressTest.cs:132:13:132:13 | ; | 128 |
192+
| SplittingStressTest.cs:133:9:134:13 | if (...) ... | 128 |
193+
| SplittingStressTest.cs:133:13:133:15 | access to parameter b24 | 128 |
194+
| SplittingStressTest.cs:134:13:134:13 | ; | 128 |
195+
| SplittingStressTest.cs:135:9:136:13 | if (...) ... | 128 |
196+
| SplittingStressTest.cs:135:13:135:15 | access to parameter b25 | 128 |
197+
| SplittingStressTest.cs:136:13:136:13 | ; | 128 |
198+
| SplittingStressTest.cs:137:9:138:13 | if (...) ... | 128 |
199+
| SplittingStressTest.cs:137:13:137:15 | access to parameter b26 | 128 |
200+
| SplittingStressTest.cs:138:13:138:13 | ; | 128 |
201+
| SplittingStressTest.cs:139:9:140:13 | if (...) ... | 128 |
202+
| SplittingStressTest.cs:139:13:139:15 | access to parameter b27 | 128 |
203+
| SplittingStressTest.cs:140:13:140:13 | ; | 128 |
204+
| SplittingStressTest.cs:141:9:142:13 | if (...) ... | 128 |
205+
| SplittingStressTest.cs:141:13:141:15 | access to parameter b28 | 128 |
206+
| SplittingStressTest.cs:142:13:142:13 | ; | 128 |
207+
| SplittingStressTest.cs:143:9:144:13 | if (...) ... | 128 |
208+
| SplittingStressTest.cs:143:13:143:15 | access to parameter b29 | 128 |
209+
| SplittingStressTest.cs:144:13:144:13 | ; | 128 |
210+
| SplittingStressTest.cs:145:9:146:13 | if (...) ... | 128 |
211+
| SplittingStressTest.cs:145:13:145:15 | access to parameter b30 | 128 |
212+
| SplittingStressTest.cs:146:13:146:13 | ; | 128 |
213+
| SplittingStressTest.cs:147:9:148:13 | if (...) ... | 128 |
214+
| SplittingStressTest.cs:147:13:147:15 | access to parameter b31 | 128 |
215+
| SplittingStressTest.cs:148:13:148:13 | ; | 128 |
216+
| SplittingStressTest.cs:149:9:150:13 | if (...) ... | 128 |
217+
| SplittingStressTest.cs:149:13:149:15 | access to parameter b32 | 128 |
218+
| SplittingStressTest.cs:150:13:150:13 | ; | 128 |
219+
| SplittingStressTest.cs:151:9:152:13 | if (...) ... | 128 |
220+
| SplittingStressTest.cs:151:13:151:15 | access to parameter b33 | 128 |
221+
| SplittingStressTest.cs:152:13:152:13 | ; | 128 |
222+
| SplittingStressTest.cs:153:9:154:13 | if (...) ... | 128 |
223+
| SplittingStressTest.cs:153:13:153:15 | access to parameter b34 | 128 |
224+
| SplittingStressTest.cs:154:13:154:13 | ; | 64 |
225+
| SplittingStressTest.cs:155:9:156:13 | if (...) ... | 64 |
226+
| SplittingStressTest.cs:155:13:155:15 | access to parameter b35 | 64 |
227+
| SplittingStressTest.cs:156:13:156:13 | ; | 32 |
228+
| SplittingStressTest.cs:157:9:158:13 | if (...) ... | 32 |
229+
| SplittingStressTest.cs:157:13:157:15 | access to parameter b36 | 32 |
230+
| SplittingStressTest.cs:158:13:158:13 | ; | 16 |
231+
| SplittingStressTest.cs:159:9:160:13 | if (...) ... | 16 |
232+
| SplittingStressTest.cs:159:13:159:15 | access to parameter b37 | 16 |
233+
| SplittingStressTest.cs:160:13:160:13 | ; | 8 |
234+
| SplittingStressTest.cs:161:9:162:13 | if (...) ... | 8 |
235+
| SplittingStressTest.cs:161:13:161:15 | access to parameter b38 | 8 |
236+
| SplittingStressTest.cs:162:13:162:13 | ; | 4 |
237+
| SplittingStressTest.cs:163:9:164:13 | if (...) ... | 4 |
238+
| SplittingStressTest.cs:163:13:163:15 | access to parameter b39 | 4 |
239+
| SplittingStressTest.cs:164:13:164:13 | ; | 2 |
240+
| SplittingStressTest.cs:165:9:166:13 | if (...) ... | 2 |
241+
| SplittingStressTest.cs:165:13:165:15 | access to parameter b40 | 2 |
242+
| SplittingStressTest.cs:166:13:166:13 | ; | 1 |
243+
| SplittingStressTest.cs:167:9:167:9 | ; | 1 |

0 commit comments

Comments
 (0)