Skip to content

Commit fa8e902

Browse files
authored
Merge pull request github#4922 from tamasvajk/feature/fix-finally-cfg-opass
C#: Fix expanded assignment lookup in finally blocks for CFG
2 parents 36a1293 + 05c858e commit fa8e902

File tree

9 files changed

+188
-1
lines changed

9 files changed

+188
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1302,7 +1302,7 @@ module Statements {
13021302
/** Gets a child of `cfe` that is in CFG scope `scope`. */
13031303
pragma[noinline]
13041304
private ControlFlowElement getAChildInScope(ControlFlowElement cfe, Callable scope) {
1305-
result = cfe.getAChild() and
1305+
result = [cfe.getAChild(), cfe.(AssignOperation).getExpandedAssignment()] and
13061306
scope = result.getEnclosingCallable()
13071307
}
13081308

csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,10 @@
639639
| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | 4 |
640640
| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | 4 |
641641
| Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | exit M12 (normal) | 8 |
642+
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:267:13:267:34 | call to method WriteLine | 7 |
643+
| Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | 1 |
644+
| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | exit M13 (abnormal) | 10 |
645+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | exit M13 (normal) | 10 |
642646
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:29:8:32 | access to parameter args | 3 |
643647
| Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | exit M1 | 2 |
644648
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | 1 |

csharp/ql/test/library-tests/controlflow/graph/Dominance.expected

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2366,6 +2366,32 @@ dominance
23662366
| Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (normal) |
23672367
| Finally.cs:260:9:260:34 | ...; | Finally.cs:260:27:260:32 | "Done" |
23682368
| Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:33 | call to method WriteLine |
2369+
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:264:5:274:5 | {...} |
2370+
| Finally.cs:264:5:274:5 | {...} | Finally.cs:265:9:273:9 | try {...} ... |
2371+
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:266:9:268:9 | {...} |
2372+
| Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:35 | ...; |
2373+
| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} |
2374+
| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | {...} |
2375+
| Finally.cs:267:13:267:35 | ...; | Finally.cs:267:31:267:33 | "1" |
2376+
| Finally.cs:267:31:267:33 | "1" | Finally.cs:267:13:267:34 | call to method WriteLine |
2377+
| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; |
2378+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:271:13:271:35 | ...; |
2379+
| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; |
2380+
| Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:272:13:272:19 | ...; |
2381+
| Finally.cs:271:13:271:35 | ...; | Finally.cs:271:31:271:33 | "3" |
2382+
| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" |
2383+
| Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:34 | call to method WriteLine |
2384+
| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine |
2385+
| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 |
2386+
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:18:272:18 | 3 |
2387+
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... = ... |
2388+
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (normal) |
2389+
| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... |
2390+
| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) |
2391+
| Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:13 | access to parameter i |
2392+
| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i |
2393+
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... + ... |
2394+
| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... |
23692395
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:7:5:10:5 | {...} |
23702396
| Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | exit M1 |
23712397
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:29:8:32 | access to parameter args |
@@ -6307,6 +6333,31 @@ postDominance
63076333
| Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:27:260:32 | "Done" |
63086334
| Finally.cs:260:9:260:34 | ...; | Finally.cs:258:13:258:46 | call to method WriteLine |
63096335
| Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:34 | ...; |
6336+
| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... |
6337+
| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:272:13:272:18 | ... = ... |
6338+
| Finally.cs:264:5:274:5 | {...} | Finally.cs:263:10:263:12 | enter M13 |
6339+
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:264:5:274:5 | {...} |
6340+
| Finally.cs:266:9:268:9 | {...} | Finally.cs:265:9:273:9 | try {...} ... |
6341+
| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:267:31:267:33 | "1" |
6342+
| Finally.cs:267:13:267:35 | ...; | Finally.cs:266:9:268:9 | {...} |
6343+
| Finally.cs:267:31:267:33 | "1" | Finally.cs:267:13:267:35 | ...; |
6344+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:267:13:267:34 | call to method WriteLine |
6345+
| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" |
6346+
| Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:271:31:271:33 | "3" |
6347+
| Finally.cs:271:13:271:35 | ...; | Finally.cs:270:9:273:9 | {...} |
6348+
| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} |
6349+
| Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:35 | ...; |
6350+
| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; |
6351+
| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; |
6352+
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:19 | ...; |
6353+
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:18:272:18 | 3 |
6354+
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:18 | ... + ... |
6355+
| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 |
6356+
| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... |
6357+
| Finally.cs:272:13:272:19 | ...; | Finally.cs:271:13:271:34 | call to method WriteLine |
6358+
| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine |
6359+
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:13 | access to parameter i |
6360+
| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i |
63106361
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | exit M1 (normal) |
63116362
| Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
63126363
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:6:10:6:11 | enter M1 |
@@ -10829,6 +10880,13 @@ blockDominance
1082910880
| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} |
1083010881
| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} |
1083110882
| Finally.cs:257:9:259:9 | {...} | Finally.cs:257:9:259:9 | {...} |
10883+
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | enter M13 |
10884+
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | exit M13 |
10885+
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} |
10886+
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:270:9:273:9 | {...} |
10887+
| Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 |
10888+
| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} |
10889+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:270:9:273:9 | {...} |
1083210890
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 |
1083310891
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | exit M1 (normal) |
1083410892
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
@@ -14176,6 +14234,11 @@ postBlockDominance
1417614234
| Finally.cs:257:9:259:9 | {...} | Finally.cs:243:13:253:13 | {...} |
1417714235
| Finally.cs:257:9:259:9 | {...} | Finally.cs:250:17:252:17 | {...} |
1417814236
| Finally.cs:257:9:259:9 | {...} | Finally.cs:257:9:259:9 | {...} |
14237+
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | enter M13 |
14238+
| Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 |
14239+
| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} |
14240+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | enter M13 |
14241+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:270:9:273:9 | {...} |
1417914242
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 |
1418014243
| Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | enter M1 |
1418114244
| Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | exit M1 (normal) |

csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2555,6 +2555,34 @@ nodeEnclosing
25552555
| Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:233:10:233:12 | M12 |
25562556
| Finally.cs:260:9:260:34 | ...; | Finally.cs:233:10:233:12 | M12 |
25572557
| Finally.cs:260:27:260:32 | "Done" | Finally.cs:233:10:233:12 | M12 |
2558+
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | M13 |
2559+
| Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | M13 |
2560+
| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:263:10:263:12 | M13 |
2561+
| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:263:10:263:12 | M13 |
2562+
| Finally.cs:264:5:274:5 | {...} | Finally.cs:263:10:263:12 | M13 |
2563+
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:263:10:263:12 | M13 |
2564+
| Finally.cs:266:9:268:9 | {...} | Finally.cs:263:10:263:12 | M13 |
2565+
| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:263:10:263:12 | M13 |
2566+
| Finally.cs:267:13:267:35 | ...; | Finally.cs:263:10:263:12 | M13 |
2567+
| Finally.cs:267:31:267:33 | "1" | Finally.cs:263:10:263:12 | M13 |
2568+
| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | M13 |
2569+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | M13 |
2570+
| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:263:10:263:12 | M13 |
2571+
| Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:263:10:263:12 | M13 |
2572+
| Finally.cs:271:13:271:35 | ...; | Finally.cs:263:10:263:12 | M13 |
2573+
| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:263:10:263:12 | M13 |
2574+
| Finally.cs:271:31:271:33 | "3" | Finally.cs:263:10:263:12 | M13 |
2575+
| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:263:10:263:12 | M13 |
2576+
| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:263:10:263:12 | M13 |
2577+
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:263:10:263:12 | M13 |
2578+
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:263:10:263:12 | M13 |
2579+
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | M13 |
2580+
| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:263:10:263:12 | M13 |
2581+
| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:263:10:263:12 | M13 |
2582+
| Finally.cs:272:13:272:19 | ...; | Finally.cs:263:10:263:12 | M13 |
2583+
| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:263:10:263:12 | M13 |
2584+
| Finally.cs:272:18:272:18 | 3 | Finally.cs:263:10:263:12 | M13 |
2585+
| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:263:10:263:12 | M13 |
25582586
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | M1 |
25592587
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | M1 |
25602588
| Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | M1 |
@@ -5310,6 +5338,10 @@ blockEnclosing
53105338
| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 |
53115339
| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 |
53125340
| Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | M12 |
5341+
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | M13 |
5342+
| Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | M13 |
5343+
| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | M13 |
5344+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | M13 |
53135345
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | M1 |
53145346
| Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | M1 |
53155347
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | M1 |

csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,6 +1610,22 @@
16101610
| Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:27:260:32 | "Done" |
16111611
| Finally.cs:260:9:260:34 | ...; | Finally.cs:260:9:260:34 | ...; |
16121612
| Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:27:260:32 | "Done" |
1613+
| Finally.cs:264:5:274:5 | {...} | Finally.cs:264:5:274:5 | {...} |
1614+
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:265:9:273:9 | try {...} ... |
1615+
| Finally.cs:266:9:268:9 | {...} | Finally.cs:266:9:268:9 | {...} |
1616+
| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:267:31:267:33 | "1" |
1617+
| Finally.cs:267:13:267:35 | ...; | Finally.cs:267:13:267:35 | ...; |
1618+
| Finally.cs:267:31:267:33 | "1" | Finally.cs:267:31:267:33 | "1" |
1619+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:270:9:273:9 | {...} |
1620+
| Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:271:31:271:33 | "3" |
1621+
| Finally.cs:271:13:271:35 | ...; | Finally.cs:271:13:271:35 | ...; |
1622+
| Finally.cs:271:31:271:33 | "3" | Finally.cs:271:31:271:33 | "3" |
1623+
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:13 | access to parameter i |
1624+
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:13 | access to parameter i |
1625+
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:13:272:13 | access to parameter i |
1626+
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:13 | access to parameter i |
1627+
| Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:19 | ...; |
1628+
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:18:272:18 | 3 |
16131629
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:7:5:10:5 | {...} |
16141630
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:29:8:32 | access to parameter args |
16151631
| Foreach.cs:8:22:8:24 | String arg | Foreach.cs:8:22:8:24 | String arg |

csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2236,6 +2236,27 @@
22362236
| Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:9:260:33 | call to method WriteLine | normal |
22372237
| Finally.cs:260:9:260:34 | ...; | Finally.cs:260:9:260:33 | call to method WriteLine | normal |
22382238
| Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:27:260:32 | "Done" | normal |
2239+
| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... = ... | normal |
2240+
| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... = ... | throw(Exception) [normal] (0) |
2241+
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... = ... | normal |
2242+
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... = ... | throw(Exception) [normal] (0) |
2243+
| Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:34 | call to method WriteLine | normal |
2244+
| Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:34 | call to method WriteLine | throw(Exception) |
2245+
| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:267:13:267:34 | call to method WriteLine | normal |
2246+
| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:267:13:267:34 | call to method WriteLine | throw(Exception) |
2247+
| Finally.cs:267:13:267:35 | ...; | Finally.cs:267:13:267:34 | call to method WriteLine | normal |
2248+
| Finally.cs:267:13:267:35 | ...; | Finally.cs:267:13:267:34 | call to method WriteLine | throw(Exception) |
2249+
| Finally.cs:267:31:267:33 | "1" | Finally.cs:267:31:267:33 | "1" | normal |
2250+
| Finally.cs:270:9:273:9 | {...} | Finally.cs:272:13:272:18 | ... = ... | normal |
2251+
| Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:271:13:271:34 | call to method WriteLine | normal |
2252+
| Finally.cs:271:13:271:35 | ...; | Finally.cs:271:13:271:34 | call to method WriteLine | normal |
2253+
| Finally.cs:271:31:271:33 | "3" | Finally.cs:271:31:271:33 | "3" | normal |
2254+
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:13 | access to parameter i | normal |
2255+
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... + ... | normal |
2256+
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:13:272:18 | ... = ... | normal |
2257+
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:18 | ... = ... | normal |
2258+
| Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:18 | ... = ... | normal |
2259+
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:18:272:18 | 3 | normal |
22392260
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | empty |
22402261
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | empty |
22412262
| Foreach.cs:8:22:8:24 | String arg | Foreach.cs:8:22:8:24 | String arg | normal |

csharp/ql/test/library-tests/controlflow/graph/Finally.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,4 +259,17 @@ void M12(bool b1, bool b2)
259259
}
260260
Console.WriteLine("Done");
261261
}
262+
263+
void M13(int i)
264+
{
265+
try
266+
{
267+
Console.WriteLine("1");
268+
}
269+
finally
270+
{
271+
Console.WriteLine("3");
272+
i += 3;
273+
}
274+
}
262275
}

0 commit comments

Comments
 (0)