Skip to content

Commit 1f1ac72

Browse files
authored
Merge pull request github#3309 from hvitved/csharp/cfg/catch-finally-bug
C#: Add missing CFG edge from generic `catch` block to `finally` block
2 parents 28cfe54 + 5b5f9ad commit 1f1ac72

File tree

9 files changed

+165
-5
lines changed

9 files changed

+165
-5
lines changed

csharp/ql/src/semmle/code/csharp/controlflow/ControlFlowGraph.qll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,9 +1710,9 @@ module ControlFlow {
17101710
exists(getAThrownException(ts, cfe, c)) and
17111711
result = first(ts.getCatchClause(0))
17121712
or
1713-
exists(SpecificCatchClause scc, int i | scc = ts.getCatchClause(i) |
1714-
cfe = scc and
1715-
scc = last(ts.getCatchClause(i), c) and
1713+
exists(CatchClause cc, int i | cc = ts.getCatchClause(i) |
1714+
cfe = cc and
1715+
cc = last(ts.getCatchClause(i), c) and
17161716
(
17171717
// Flow from one `catch` clause to the next
17181718
result = first(ts.getCatchClause(i + 1)) and
@@ -1725,7 +1725,7 @@ module ControlFlow {
17251725
)
17261726
or
17271727
cfe = last(ts.getCatchClause(i), c) and
1728-
cfe = last(scc.getFilterClause(), _) and
1728+
cfe = last(cc.getFilterClause(), _) and
17291729
(
17301730
// Flow from last element of `catch` clause filter to next `catch` clause
17311731
result = first(ts.getCatchClause(i + 1)) and
@@ -1739,7 +1739,7 @@ module ControlFlow {
17391739
)
17401740
or
17411741
// Flow from last element of a `catch` block to first element of `finally` block
1742-
cfe = lastCatchClauseBlock(scc, c) and
1742+
cfe = lastCatchClauseBlock(cc, c) and
17431743
result = first(ts.getFinally())
17441744
)
17451745
or

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@
370370
| Finally.cs:211:13:211:29 | ...; | Finally.cs:213:9:213:24 | ... = ... | 8 |
371371
| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | 4 |
372372
| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | 4 |
373+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:220:31:220:35 | "Try" | 6 |
374+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:13:220:36 | call to method WriteLine | 1 |
375+
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:224:13:224:38 | call to method WriteLine | 5 |
376+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | exit M11 | 8 |
373377
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:29:8:32 | access to parameter args | 3 |
374378
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | exit M1 | 1 |
375379
| 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: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1621,6 +1621,24 @@ dominance
16211621
| Finally.cs:213:9:213:12 | this access | Finally.cs:213:22:213:24 | "1" |
16221622
| Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:12 | this access |
16231623
| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:24 | ... = ... |
1624+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:217:5:231:5 | {...} |
1625+
| Finally.cs:217:5:231:5 | {...} | Finally.cs:218:9:229:9 | try {...} ... |
1626+
| Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:219:9:221:9 | {...} |
1627+
| Finally.cs:219:9:221:9 | {...} | Finally.cs:220:13:220:37 | ...; |
1628+
| Finally.cs:220:13:220:37 | ...; | Finally.cs:220:31:220:35 | "Try" |
1629+
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:13:220:36 | call to method WriteLine |
1630+
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:222:9:225:9 | catch {...} |
1631+
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:223:9:225:9 | {...} |
1632+
| Finally.cs:223:9:225:9 | {...} | Finally.cs:224:13:224:39 | ...; |
1633+
| Finally.cs:224:13:224:39 | ...; | Finally.cs:224:31:224:37 | "Catch" |
1634+
| Finally.cs:224:31:224:37 | "Catch" | Finally.cs:224:13:224:38 | call to method WriteLine |
1635+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:228:13:228:41 | ...; |
1636+
| Finally.cs:228:13:228:40 | call to method WriteLine | Finally.cs:230:9:230:34 | ...; |
1637+
| Finally.cs:228:13:228:41 | ...; | Finally.cs:228:31:228:39 | "Finally" |
1638+
| Finally.cs:228:31:228:39 | "Finally" | Finally.cs:228:13:228:40 | call to method WriteLine |
1639+
| Finally.cs:230:9:230:33 | call to method WriteLine | Finally.cs:216:10:216:12 | exit M11 |
1640+
| Finally.cs:230:9:230:34 | ...; | Finally.cs:230:27:230:32 | "Done" |
1641+
| Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:9:230:33 | call to method WriteLine |
16241642
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:7:5:10:5 | {...} |
16251643
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:29:8:32 | access to parameter args |
16261644
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 |
@@ -4515,6 +4533,24 @@ postDominance
45154533
| Finally.cs:213:9:213:24 | ... = ... | Finally.cs:213:22:213:24 | "1" |
45164534
| Finally.cs:213:9:213:25 | ...; | Finally.cs:211:13:211:28 | ... = ... |
45174535
| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:12 | this access |
4536+
| Finally.cs:216:10:216:12 | exit M11 | Finally.cs:230:9:230:33 | call to method WriteLine |
4537+
| Finally.cs:217:5:231:5 | {...} | Finally.cs:216:10:216:12 | enter M11 |
4538+
| Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:217:5:231:5 | {...} |
4539+
| Finally.cs:219:9:221:9 | {...} | Finally.cs:218:9:229:9 | try {...} ... |
4540+
| Finally.cs:220:13:220:37 | ...; | Finally.cs:219:9:221:9 | {...} |
4541+
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:13:220:37 | ...; |
4542+
| Finally.cs:223:9:225:9 | {...} | Finally.cs:222:9:225:9 | catch {...} |
4543+
| Finally.cs:224:13:224:38 | call to method WriteLine | Finally.cs:224:31:224:37 | "Catch" |
4544+
| Finally.cs:224:13:224:39 | ...; | Finally.cs:223:9:225:9 | {...} |
4545+
| Finally.cs:224:31:224:37 | "Catch" | Finally.cs:224:13:224:39 | ...; |
4546+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:220:13:220:36 | call to method WriteLine |
4547+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:224:13:224:38 | call to method WriteLine |
4548+
| Finally.cs:228:13:228:40 | call to method WriteLine | Finally.cs:228:31:228:39 | "Finally" |
4549+
| Finally.cs:228:13:228:41 | ...; | Finally.cs:227:9:229:9 | {...} |
4550+
| Finally.cs:228:31:228:39 | "Finally" | Finally.cs:228:13:228:41 | ...; |
4551+
| Finally.cs:230:9:230:33 | call to method WriteLine | Finally.cs:230:27:230:32 | "Done" |
4552+
| Finally.cs:230:9:230:34 | ...; | Finally.cs:228:13:228:40 | call to method WriteLine |
4553+
| Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:9:230:34 | ...; |
45184554
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
45194555
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:6:10:6:11 | enter M1 |
45204556
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:29:8:32 | access to parameter args |
@@ -6943,6 +6979,13 @@ blockDominance
69436979
| Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:29 | ...; |
69446980
| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; |
69456981
| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; |
6982+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | enter M11 |
6983+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:220:13:220:36 | call to method WriteLine |
6984+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:222:9:225:9 | catch {...} |
6985+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:227:9:229:9 | {...} |
6986+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:13:220:36 | call to method WriteLine |
6987+
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:222:9:225:9 | catch {...} |
6988+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:227:9:229:9 | {...} |
69466989
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 |
69476990
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | exit M1 |
69486991
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
@@ -8747,6 +8790,13 @@ postBlockDominance
87478790
| Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:29 | ...; |
87488791
| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; |
87498792
| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; |
8793+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | enter M11 |
8794+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:13:220:36 | call to method WriteLine |
8795+
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:222:9:225:9 | catch {...} |
8796+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | enter M11 |
8797+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:220:13:220:36 | call to method WriteLine |
8798+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:222:9:225:9 | catch {...} |
8799+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:227:9:229:9 | {...} |
87508800
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 |
87518801
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | enter M1 |
87528802
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | exit M1 |

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,6 +1742,26 @@ nodeEnclosing
17421742
| Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | M10 |
17431743
| Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | M10 |
17441744
| Finally.cs:213:22:213:24 | "1" | Finally.cs:195:10:195:12 | M10 |
1745+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | M11 |
1746+
| Finally.cs:216:10:216:12 | exit M11 | Finally.cs:216:10:216:12 | M11 |
1747+
| Finally.cs:217:5:231:5 | {...} | Finally.cs:216:10:216:12 | M11 |
1748+
| Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:216:10:216:12 | M11 |
1749+
| Finally.cs:219:9:221:9 | {...} | Finally.cs:216:10:216:12 | M11 |
1750+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:216:10:216:12 | M11 |
1751+
| Finally.cs:220:13:220:37 | ...; | Finally.cs:216:10:216:12 | M11 |
1752+
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:216:10:216:12 | M11 |
1753+
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:216:10:216:12 | M11 |
1754+
| Finally.cs:223:9:225:9 | {...} | Finally.cs:216:10:216:12 | M11 |
1755+
| Finally.cs:224:13:224:38 | call to method WriteLine | Finally.cs:216:10:216:12 | M11 |
1756+
| Finally.cs:224:13:224:39 | ...; | Finally.cs:216:10:216:12 | M11 |
1757+
| Finally.cs:224:31:224:37 | "Catch" | Finally.cs:216:10:216:12 | M11 |
1758+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | M11 |
1759+
| Finally.cs:228:13:228:40 | call to method WriteLine | Finally.cs:216:10:216:12 | M11 |
1760+
| Finally.cs:228:13:228:41 | ...; | Finally.cs:216:10:216:12 | M11 |
1761+
| Finally.cs:228:31:228:39 | "Finally" | Finally.cs:216:10:216:12 | M11 |
1762+
| Finally.cs:230:9:230:33 | call to method WriteLine | Finally.cs:216:10:216:12 | M11 |
1763+
| Finally.cs:230:9:230:34 | ...; | Finally.cs:216:10:216:12 | M11 |
1764+
| Finally.cs:230:27:230:32 | "Done" | Finally.cs:216:10:216:12 | M11 |
17451765
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | M1 |
17461766
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | M1 |
17471767
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:6:10:6:11 | M1 |
@@ -3548,6 +3568,10 @@ blockEnclosing
35483568
| Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | M10 |
35493569
| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:195:10:195:12 | M10 |
35503570
| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:195:10:195:12 | M10 |
3571+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | M11 |
3572+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:216:10:216:12 | M11 |
3573+
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:216:10:216:12 | M11 |
3574+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | M11 |
35513575
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | M1 |
35523576
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | M1 |
35533577
| 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: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,6 +1169,24 @@
11691169
| Finally.cs:213:9:213:24 | ... = ... | Finally.cs:213:9:213:12 | this access |
11701170
| Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:25 | ...; |
11711171
| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:22:213:24 | "1" |
1172+
| Finally.cs:217:5:231:5 | {...} | Finally.cs:217:5:231:5 | {...} |
1173+
| Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:218:9:229:9 | try {...} ... |
1174+
| Finally.cs:219:9:221:9 | {...} | Finally.cs:219:9:221:9 | {...} |
1175+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:31:220:35 | "Try" |
1176+
| Finally.cs:220:13:220:37 | ...; | Finally.cs:220:13:220:37 | ...; |
1177+
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:31:220:35 | "Try" |
1178+
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:222:9:225:9 | catch {...} |
1179+
| Finally.cs:223:9:225:9 | {...} | Finally.cs:223:9:225:9 | {...} |
1180+
| Finally.cs:224:13:224:38 | call to method WriteLine | Finally.cs:224:31:224:37 | "Catch" |
1181+
| Finally.cs:224:13:224:39 | ...; | Finally.cs:224:13:224:39 | ...; |
1182+
| Finally.cs:224:31:224:37 | "Catch" | Finally.cs:224:31:224:37 | "Catch" |
1183+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:227:9:229:9 | {...} |
1184+
| Finally.cs:228:13:228:40 | call to method WriteLine | Finally.cs:228:31:228:39 | "Finally" |
1185+
| Finally.cs:228:13:228:41 | ...; | Finally.cs:228:13:228:41 | ...; |
1186+
| Finally.cs:228:31:228:39 | "Finally" | Finally.cs:228:31:228:39 | "Finally" |
1187+
| Finally.cs:230:9:230:33 | call to method WriteLine | Finally.cs:230:27:230:32 | "Done" |
1188+
| Finally.cs:230:9:230:34 | ...; | Finally.cs:230:9:230:34 | ...; |
1189+
| Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:27:230:32 | "Done" |
11721190
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:7:5:10:5 | {...} |
11731191
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:29:8:32 | access to parameter args |
11741192
| 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: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1652,6 +1652,31 @@
16521652
| Finally.cs:213:9:213:24 | ... = ... | Finally.cs:213:9:213:24 | ... = ... | normal |
16531653
| Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:24 | ... = ... | normal |
16541654
| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:22:213:24 | "1" | normal |
1655+
| Finally.cs:217:5:231:5 | {...} | Finally.cs:230:9:230:33 | call to method WriteLine | normal |
1656+
| Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:228:13:228:40 | call to method WriteLine | normal |
1657+
| Finally.cs:219:9:221:9 | {...} | Finally.cs:220:13:220:36 | call to method WriteLine | normal |
1658+
| Finally.cs:219:9:221:9 | {...} | Finally.cs:220:13:220:36 | call to method WriteLine | throw(Exception) |
1659+
| Finally.cs:219:9:221:9 | {...} | Finally.cs:220:31:220:35 | "Try" | throw(OutOfMemoryException) |
1660+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:13:220:36 | call to method WriteLine | normal |
1661+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:13:220:36 | call to method WriteLine | throw(Exception) |
1662+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:220:31:220:35 | "Try" | throw(OutOfMemoryException) |
1663+
| Finally.cs:220:13:220:37 | ...; | Finally.cs:220:13:220:36 | call to method WriteLine | normal |
1664+
| Finally.cs:220:13:220:37 | ...; | Finally.cs:220:13:220:36 | call to method WriteLine | throw(Exception) |
1665+
| Finally.cs:220:13:220:37 | ...; | Finally.cs:220:31:220:35 | "Try" | throw(OutOfMemoryException) |
1666+
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:31:220:35 | "Try" | normal |
1667+
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:31:220:35 | "Try" | throw(OutOfMemoryException) |
1668+
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:224:13:224:38 | call to method WriteLine | normal |
1669+
| Finally.cs:223:9:225:9 | {...} | Finally.cs:224:13:224:38 | call to method WriteLine | normal |
1670+
| Finally.cs:224:13:224:38 | call to method WriteLine | Finally.cs:224:13:224:38 | call to method WriteLine | normal |
1671+
| Finally.cs:224:13:224:39 | ...; | Finally.cs:224:13:224:38 | call to method WriteLine | normal |
1672+
| Finally.cs:224:31:224:37 | "Catch" | Finally.cs:224:31:224:37 | "Catch" | normal |
1673+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:228:13:228:40 | call to method WriteLine | normal |
1674+
| Finally.cs:228:13:228:40 | call to method WriteLine | Finally.cs:228:13:228:40 | call to method WriteLine | normal |
1675+
| Finally.cs:228:13:228:41 | ...; | Finally.cs:228:13:228:40 | call to method WriteLine | normal |
1676+
| Finally.cs:228:31:228:39 | "Finally" | Finally.cs:228:31:228:39 | "Finally" | normal |
1677+
| Finally.cs:230:9:230:33 | call to method WriteLine | Finally.cs:230:9:230:33 | call to method WriteLine | normal |
1678+
| Finally.cs:230:9:230:34 | ...; | Finally.cs:230:9:230:33 | call to method WriteLine | normal |
1679+
| Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:27:230:32 | "Done" | normal |
16551680
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | empty |
16561681
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | empty |
16571682
| 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: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,4 +212,21 @@ void M10(bool b1, bool b2, bool b3)
212212
}
213213
this.Field = "1";
214214
}
215+
216+
void M11()
217+
{
218+
try
219+
{
220+
Console.WriteLine("Try");
221+
}
222+
catch
223+
{
224+
Console.WriteLine("Catch");
225+
}
226+
finally
227+
{
228+
Console.WriteLine("Finally");
229+
}
230+
Console.WriteLine("Done");
231+
}
215232
}

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1818,6 +1818,27 @@
18181818
| Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | exit M10 | semmle.label | successor |
18191819
| Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:12 | this access | semmle.label | successor |
18201820
| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:24 | ... = ... | semmle.label | successor |
1821+
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:217:5:231:5 | {...} | semmle.label | successor |
1822+
| Finally.cs:217:5:231:5 | {...} | Finally.cs:218:9:229:9 | try {...} ... | semmle.label | successor |
1823+
| Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:219:9:221:9 | {...} | semmle.label | successor |
1824+
| Finally.cs:219:9:221:9 | {...} | Finally.cs:220:13:220:37 | ...; | semmle.label | successor |
1825+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:222:9:225:9 | catch {...} | semmle.label | exception(Exception) |
1826+
| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:227:9:229:9 | {...} | semmle.label | successor |
1827+
| Finally.cs:220:13:220:37 | ...; | Finally.cs:220:31:220:35 | "Try" | semmle.label | successor |
1828+
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:13:220:36 | call to method WriteLine | semmle.label | successor |
1829+
| Finally.cs:220:31:220:35 | "Try" | Finally.cs:222:9:225:9 | catch {...} | semmle.label | exception(OutOfMemoryException) |
1830+
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:223:9:225:9 | {...} | semmle.label | successor |
1831+
| Finally.cs:223:9:225:9 | {...} | Finally.cs:224:13:224:39 | ...; | semmle.label | successor |
1832+
| Finally.cs:224:13:224:38 | call to method WriteLine | Finally.cs:227:9:229:9 | {...} | semmle.label | successor |
1833+
| Finally.cs:224:13:224:39 | ...; | Finally.cs:224:31:224:37 | "Catch" | semmle.label | successor |
1834+
| Finally.cs:224:31:224:37 | "Catch" | Finally.cs:224:13:224:38 | call to method WriteLine | semmle.label | successor |
1835+
| Finally.cs:227:9:229:9 | {...} | Finally.cs:228:13:228:41 | ...; | semmle.label | successor |
1836+
| Finally.cs:228:13:228:40 | call to method WriteLine | Finally.cs:230:9:230:34 | ...; | semmle.label | successor |
1837+
| Finally.cs:228:13:228:41 | ...; | Finally.cs:228:31:228:39 | "Finally" | semmle.label | successor |
1838+
| Finally.cs:228:31:228:39 | "Finally" | Finally.cs:228:13:228:40 | call to method WriteLine | semmle.label | successor |
1839+
| Finally.cs:230:9:230:33 | call to method WriteLine | Finally.cs:216:10:216:12 | exit M11 | semmle.label | successor |
1840+
| Finally.cs:230:9:230:34 | ...; | Finally.cs:230:27:230:32 | "Done" | semmle.label | successor |
1841+
| Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:9:230:33 | call to method WriteLine | semmle.label | successor |
18211842
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:7:5:10:5 | {...} | semmle.label | successor |
18221843
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:29:8:32 | access to parameter args | semmle.label | successor |
18231844
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 | semmle.label | empty |

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,7 @@ entryPoint
710710
| Finally.cs:147:10:147:11 | M8 | Finally.cs:148:5:170:5 | {...} |
711711
| Finally.cs:176:10:176:11 | M9 | Finally.cs:177:5:193:5 | {...} |
712712
| Finally.cs:195:10:195:12 | M10 | Finally.cs:196:5:214:5 | {...} |
713+
| Finally.cs:216:10:216:12 | M11 | Finally.cs:217:5:231:5 | {...} |
713714
| Foreach.cs:6:10:6:11 | M1 | Foreach.cs:7:5:10:5 | {...} |
714715
| Foreach.cs:12:10:12:11 | M2 | Foreach.cs:13:5:16:5 | {...} |
715716
| Foreach.cs:18:10:18:11 | M3 | Foreach.cs:19:5:22:5 | {...} |

0 commit comments

Comments
 (0)