C#: Add more CFG tests

Added tests for exits inside `try` statements and constantly failing assertions.
This commit is contained in:
Tom Hvitved
2018-10-19 11:36:05 +02:00
parent b233961a9a
commit 0c1db6afc3
22 changed files with 993 additions and 685 deletions

View File

@@ -164,35 +164,39 @@
| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:109:17:109:23 | ... = ... | 9 |
| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | 3 |
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:102:12:102:13 | exit M8 | 3 |
| ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:6:10:6:11 | exit M1 | 7 |
| ExitMethods.cs:12:10:12:11 | enter M2 | ExitMethods.cs:12:10:12:11 | exit M2 | 7 |
| ExitMethods.cs:18:10:18:11 | enter M3 | ExitMethods.cs:18:10:18:11 | exit M3 | 6 |
| ExitMethods.cs:24:10:24:11 | enter M4 | ExitMethods.cs:24:10:24:11 | exit M4 | 6 |
| ExitMethods.cs:30:10:30:11 | enter M5 | ExitMethods.cs:30:10:30:11 | exit M5 | 6 |
| ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | 7 |
| ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:36:10:36:11 | exit M6 | 1 |
| ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} | 1 |
| ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | 1 |
| ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:44:13:44:19 | return ...; | 2 |
| ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:13:48:19 | return ...; | 3 |
| ExitMethods.cs:52:17:52:26 | enter ErrorMaybe | ExitMethods.cs:54:13:54:13 | access to parameter b | 4 |
| ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | 1 |
| ExitMethods.cs:55:19:55:33 | object creation of type Exception | ExitMethods.cs:55:13:55:34 | throw ...; | 2 |
| ExitMethods.cs:58:17:58:27 | enter ErrorAlways | ExitMethods.cs:60:13:60:13 | access to parameter b | 4 |
| ExitMethods.cs:58:17:58:27 | exit ErrorAlways | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | 1 |
| ExitMethods.cs:61:19:61:33 | object creation of type Exception | ExitMethods.cs:61:13:61:34 | throw ...; | 2 |
| ExitMethods.cs:63:41:63:43 | "b" | ExitMethods.cs:63:13:63:45 | throw ...; | 3 |
| ExitMethods.cs:66:10:66:13 | enter Exit | ExitMethods.cs:66:10:66:13 | exit Exit | 6 |
| ExitMethods.cs:71:10:71:24 | enter ApplicationExit | ExitMethods.cs:71:10:71:24 | exit ApplicationExit | 5 |
| ExitMethods.cs:76:13:76:21 | enter ThrowExpr | ExitMethods.cs:78:16:78:25 | ... != ... | 7 |
| ExitMethods.cs:76:13:76:21 | exit ThrowExpr | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | 1 |
| ExitMethods.cs:78:29:78:29 | 1 | ExitMethods.cs:78:9:78:77 | return ...; | 5 |
| ExitMethods.cs:78:69:78:75 | "input" | ExitMethods.cs:78:41:78:76 | throw ... | 3 |
| ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall | ExitMethods.cs:83:16:83:30 | call to method Contains | 6 |
| ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:81:16:81:34 | exit ExtensionMethodCall | 2 |
| ExitMethods.cs:83:34:83:34 | 0 | ExitMethods.cs:83:34:83:34 | 0 | 1 |
| ExitMethods.cs:83:38:83:38 | 1 | ExitMethods.cs:83:38:83:38 | 1 | 1 |
| ExitMethods.cs:91:28:91:31 | enter Exit | ExitMethods.cs:91:28:91:31 | exit Exit | 3 |
| ExitMethods.cs:7:10:7:11 | enter M1 | ExitMethods.cs:7:10:7:11 | exit M1 | 7 |
| ExitMethods.cs:13:10:13:11 | enter M2 | ExitMethods.cs:13:10:13:11 | exit M2 | 7 |
| ExitMethods.cs:19:10:19:11 | enter M3 | ExitMethods.cs:19:10:19:11 | exit M3 | 6 |
| ExitMethods.cs:25:10:25:11 | enter M4 | ExitMethods.cs:25:10:25:11 | exit M4 | 6 |
| ExitMethods.cs:31:10:31:11 | enter M5 | ExitMethods.cs:31:10:31:11 | exit M5 | 6 |
| ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | 7 |
| ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:37:10:37:11 | exit M6 | 1 |
| ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} | 1 |
| ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | 1 |
| ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:45:13:45:19 | return ...; | 2 |
| ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:49:13:49:19 | return ...; | 3 |
| ExitMethods.cs:53:17:53:26 | enter ErrorMaybe | ExitMethods.cs:55:13:55:13 | access to parameter b | 4 |
| ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | 1 |
| ExitMethods.cs:56:19:56:33 | object creation of type Exception | ExitMethods.cs:56:13:56:34 | throw ...; | 2 |
| ExitMethods.cs:59:17:59:27 | enter ErrorAlways | ExitMethods.cs:61:13:61:13 | access to parameter b | 4 |
| ExitMethods.cs:59:17:59:27 | exit ErrorAlways | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | 1 |
| ExitMethods.cs:62:19:62:33 | object creation of type Exception | ExitMethods.cs:62:13:62:34 | throw ...; | 2 |
| ExitMethods.cs:64:41:64:43 | "b" | ExitMethods.cs:64:13:64:45 | throw ...; | 3 |
| ExitMethods.cs:67:10:67:13 | enter Exit | ExitMethods.cs:67:10:67:13 | exit Exit | 6 |
| ExitMethods.cs:72:10:72:18 | enter ExitInTry | ExitMethods.cs:72:10:72:18 | exit ExitInTry | 12 |
| ExitMethods.cs:85:10:85:24 | enter ApplicationExit | ExitMethods.cs:85:10:85:24 | exit ApplicationExit | 5 |
| ExitMethods.cs:90:13:90:21 | enter ThrowExpr | ExitMethods.cs:92:16:92:25 | ... != ... | 7 |
| ExitMethods.cs:90:13:90:21 | exit ThrowExpr | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | 1 |
| ExitMethods.cs:92:29:92:29 | 1 | ExitMethods.cs:92:9:92:77 | return ...; | 5 |
| ExitMethods.cs:92:69:92:75 | "input" | ExitMethods.cs:92:41:92:76 | throw ... | 3 |
| ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall | ExitMethods.cs:97:16:97:30 | call to method Contains | 6 |
| ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:95:16:95:34 | exit ExtensionMethodCall | 2 |
| ExitMethods.cs:97:34:97:34 | 0 | ExitMethods.cs:97:34:97:34 | 0 | 1 |
| ExitMethods.cs:97:38:97:38 | 1 | ExitMethods.cs:97:38:97:38 | 1 | 1 |
| ExitMethods.cs:100:17:100:32 | enter FailingAssertion | ExitMethods.cs:100:17:100:32 | exit FailingAssertion | 10 |
| ExitMethods.cs:106:17:106:33 | enter FailingAssertion2 | ExitMethods.cs:106:17:106:33 | exit FailingAssertion2 | 10 |
| ExitMethods.cs:112:10:112:20 | enter AssertFalse | ExitMethods.cs:112:10:112:20 | exit AssertFalse | 4 |
| ExitMethods.cs:114:17:114:33 | enter FailingAssertion3 | ExitMethods.cs:114:17:114:33 | exit FailingAssertion3 | 11 |
| Extensions.cs:5:23:5:29 | enter ToInt32 | Extensions.cs:5:23:5:29 | exit ToInt32 | 6 |
| Extensions.cs:10:24:10:29 | enter ToBool | Extensions.cs:10:24:10:29 | exit ToBool | 7 |
| Extensions.cs:15:23:15:33 | enter CallToInt32 | Extensions.cs:15:23:15:33 | exit CallToInt32 | 4 |

View File

@@ -1,7 +1,7 @@
import csharp
import semmle.code.csharp.controlflow.BasicBlocks
import Common
from BasicBlock bb
from SourceBasicBlock bb
select
bb.getFirstNode(),
bb.getLastNode(),

View File

@@ -360,52 +360,56 @@
| post | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... |
| post | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... |
| post | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:16:110:16 | access to local variable x |
| post | ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:6:10:6:11 | enter M1 |
| post | ExitMethods.cs:12:10:12:11 | enter M2 | ExitMethods.cs:12:10:12:11 | enter M2 |
| post | ExitMethods.cs:18:10:18:11 | enter M3 | ExitMethods.cs:18:10:18:11 | enter M3 |
| post | ExitMethods.cs:24:10:24:11 | enter M4 | ExitMethods.cs:24:10:24:11 | enter M4 |
| post | ExitMethods.cs:30:10:30:11 | enter M5 | ExitMethods.cs:30:10:30:11 | enter M5 |
| post | ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:36:10:36:11 | enter M6 |
| post | ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:36:10:36:11 | enter M6 |
| post | ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:36:10:36:11 | exit M6 |
| post | ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} |
| post | ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:43:9:45:9 | {...} |
| post | ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} |
| post | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} |
| post | ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:43:9:45:9 | {...} |
| post | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:52:17:52:26 | enter ErrorMaybe | ExitMethods.cs:52:17:52:26 | enter ErrorMaybe |
| post | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | ExitMethods.cs:52:17:52:26 | enter ErrorMaybe |
| post | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe |
| post | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | ExitMethods.cs:55:19:55:33 | object creation of type Exception |
| post | ExitMethods.cs:55:19:55:33 | object creation of type Exception | ExitMethods.cs:55:19:55:33 | object creation of type Exception |
| post | ExitMethods.cs:58:17:58:27 | enter ErrorAlways | ExitMethods.cs:58:17:58:27 | enter ErrorAlways |
| post | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | ExitMethods.cs:58:17:58:27 | enter ErrorAlways |
| post | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | ExitMethods.cs:58:17:58:27 | exit ErrorAlways |
| post | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | ExitMethods.cs:61:19:61:33 | object creation of type Exception |
| post | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | ExitMethods.cs:63:41:63:43 | "b" |
| post | ExitMethods.cs:61:19:61:33 | object creation of type Exception | ExitMethods.cs:61:19:61:33 | object creation of type Exception |
| post | ExitMethods.cs:63:41:63:43 | "b" | ExitMethods.cs:63:41:63:43 | "b" |
| post | ExitMethods.cs:66:10:66:13 | enter Exit | ExitMethods.cs:66:10:66:13 | enter Exit |
| post | ExitMethods.cs:71:10:71:24 | enter ApplicationExit | ExitMethods.cs:71:10:71:24 | enter ApplicationExit |
| post | ExitMethods.cs:76:13:76:21 | enter ThrowExpr | ExitMethods.cs:76:13:76:21 | enter ThrowExpr |
| post | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | ExitMethods.cs:76:13:76:21 | enter ThrowExpr |
| post | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | ExitMethods.cs:76:13:76:21 | exit ThrowExpr |
| post | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | ExitMethods.cs:78:29:78:29 | 1 |
| post | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | ExitMethods.cs:78:69:78:75 | "input" |
| post | ExitMethods.cs:78:29:78:29 | 1 | ExitMethods.cs:78:29:78:29 | 1 |
| post | ExitMethods.cs:78:69:78:75 | "input" | ExitMethods.cs:78:69:78:75 | "input" |
| post | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall |
| post | ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall |
| post | ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:83:9:83:39 | return ...; |
| post | ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:83:34:83:34 | 0 |
| post | ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:83:38:83:38 | 1 |
| post | ExitMethods.cs:83:34:83:34 | 0 | ExitMethods.cs:83:34:83:34 | 0 |
| post | ExitMethods.cs:83:38:83:38 | 1 | ExitMethods.cs:83:38:83:38 | 1 |
| post | ExitMethods.cs:91:28:91:31 | enter Exit | ExitMethods.cs:91:28:91:31 | enter Exit |
| post | ExitMethods.cs:7:10:7:11 | enter M1 | ExitMethods.cs:7:10:7:11 | enter M1 |
| post | ExitMethods.cs:13:10:13:11 | enter M2 | ExitMethods.cs:13:10:13:11 | enter M2 |
| post | ExitMethods.cs:19:10:19:11 | enter M3 | ExitMethods.cs:19:10:19:11 | enter M3 |
| post | ExitMethods.cs:25:10:25:11 | enter M4 | ExitMethods.cs:25:10:25:11 | enter M4 |
| post | ExitMethods.cs:31:10:31:11 | enter M5 | ExitMethods.cs:31:10:31:11 | enter M5 |
| post | ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:37:10:37:11 | enter M6 |
| post | ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:37:10:37:11 | enter M6 |
| post | ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:37:10:37:11 | exit M6 |
| post | ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} |
| post | ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:44:9:46:9 | {...} |
| post | ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} |
| post | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} |
| post | ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:44:9:46:9 | {...} |
| post | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:53:17:53:26 | enter ErrorMaybe | ExitMethods.cs:53:17:53:26 | enter ErrorMaybe |
| post | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | ExitMethods.cs:53:17:53:26 | enter ErrorMaybe |
| post | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe |
| post | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | ExitMethods.cs:56:19:56:33 | object creation of type Exception |
| post | ExitMethods.cs:56:19:56:33 | object creation of type Exception | ExitMethods.cs:56:19:56:33 | object creation of type Exception |
| post | ExitMethods.cs:59:17:59:27 | enter ErrorAlways | ExitMethods.cs:59:17:59:27 | enter ErrorAlways |
| post | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | ExitMethods.cs:59:17:59:27 | enter ErrorAlways |
| post | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | ExitMethods.cs:59:17:59:27 | exit ErrorAlways |
| post | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | ExitMethods.cs:62:19:62:33 | object creation of type Exception |
| post | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | ExitMethods.cs:64:41:64:43 | "b" |
| post | ExitMethods.cs:62:19:62:33 | object creation of type Exception | ExitMethods.cs:62:19:62:33 | object creation of type Exception |
| post | ExitMethods.cs:64:41:64:43 | "b" | ExitMethods.cs:64:41:64:43 | "b" |
| post | ExitMethods.cs:67:10:67:13 | enter Exit | ExitMethods.cs:67:10:67:13 | enter Exit |
| post | ExitMethods.cs:72:10:72:18 | enter ExitInTry | ExitMethods.cs:72:10:72:18 | enter ExitInTry |
| post | ExitMethods.cs:85:10:85:24 | enter ApplicationExit | ExitMethods.cs:85:10:85:24 | enter ApplicationExit |
| post | ExitMethods.cs:90:13:90:21 | enter ThrowExpr | ExitMethods.cs:90:13:90:21 | enter ThrowExpr |
| post | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | ExitMethods.cs:90:13:90:21 | enter ThrowExpr |
| post | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | ExitMethods.cs:90:13:90:21 | exit ThrowExpr |
| post | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | ExitMethods.cs:92:29:92:29 | 1 |
| post | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | ExitMethods.cs:92:69:92:75 | "input" |
| post | ExitMethods.cs:92:29:92:29 | 1 | ExitMethods.cs:92:29:92:29 | 1 |
| post | ExitMethods.cs:92:69:92:75 | "input" | ExitMethods.cs:92:69:92:75 | "input" |
| post | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall |
| post | ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall |
| post | ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:97:9:97:39 | return ...; |
| post | ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:97:34:97:34 | 0 |
| post | ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:97:38:97:38 | 1 |
| post | ExitMethods.cs:97:34:97:34 | 0 | ExitMethods.cs:97:34:97:34 | 0 |
| post | ExitMethods.cs:97:38:97:38 | 1 | ExitMethods.cs:97:38:97:38 | 1 |
| post | ExitMethods.cs:100:17:100:32 | enter FailingAssertion | ExitMethods.cs:100:17:100:32 | enter FailingAssertion |
| post | ExitMethods.cs:106:17:106:33 | enter FailingAssertion2 | ExitMethods.cs:106:17:106:33 | enter FailingAssertion2 |
| post | ExitMethods.cs:112:10:112:20 | enter AssertFalse | ExitMethods.cs:112:10:112:20 | enter AssertFalse |
| post | ExitMethods.cs:114:17:114:33 | enter FailingAssertion3 | ExitMethods.cs:114:17:114:33 | enter FailingAssertion3 |
| post | Extensions.cs:5:23:5:29 | enter ToInt32 | Extensions.cs:5:23:5:29 | enter ToInt32 |
| post | Extensions.cs:10:24:10:29 | enter ToBool | Extensions.cs:10:24:10:29 | enter ToBool |
| post | Extensions.cs:15:23:15:33 | enter CallToInt32 | Extensions.cs:15:23:15:33 | enter CallToInt32 |
@@ -1701,52 +1705,56 @@
| pre | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... |
| pre | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... |
| pre | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:16:110:16 | access to local variable x |
| pre | ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:6:10:6:11 | enter M1 |
| pre | ExitMethods.cs:12:10:12:11 | enter M2 | ExitMethods.cs:12:10:12:11 | enter M2 |
| pre | ExitMethods.cs:18:10:18:11 | enter M3 | ExitMethods.cs:18:10:18:11 | enter M3 |
| pre | ExitMethods.cs:24:10:24:11 | enter M4 | ExitMethods.cs:24:10:24:11 | enter M4 |
| pre | ExitMethods.cs:30:10:30:11 | enter M5 | ExitMethods.cs:30:10:30:11 | enter M5 |
| pre | ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:36:10:36:11 | enter M6 |
| pre | ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:36:10:36:11 | exit M6 |
| pre | ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} |
| pre | ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:43:9:45:9 | {...} |
| pre | ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:36:10:36:11 | exit M6 |
| pre | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} |
| pre | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:43:9:45:9 | {...} |
| pre | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:52:17:52:26 | enter ErrorMaybe | ExitMethods.cs:52:17:52:26 | enter ErrorMaybe |
| pre | ExitMethods.cs:52:17:52:26 | enter ErrorMaybe | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe |
| pre | ExitMethods.cs:52:17:52:26 | enter ErrorMaybe | ExitMethods.cs:55:19:55:33 | object creation of type Exception |
| pre | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe |
| pre | ExitMethods.cs:55:19:55:33 | object creation of type Exception | ExitMethods.cs:55:19:55:33 | object creation of type Exception |
| pre | ExitMethods.cs:58:17:58:27 | enter ErrorAlways | ExitMethods.cs:58:17:58:27 | enter ErrorAlways |
| pre | ExitMethods.cs:58:17:58:27 | enter ErrorAlways | ExitMethods.cs:58:17:58:27 | exit ErrorAlways |
| pre | ExitMethods.cs:58:17:58:27 | enter ErrorAlways | ExitMethods.cs:61:19:61:33 | object creation of type Exception |
| pre | ExitMethods.cs:58:17:58:27 | enter ErrorAlways | ExitMethods.cs:63:41:63:43 | "b" |
| pre | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | ExitMethods.cs:58:17:58:27 | exit ErrorAlways |
| pre | ExitMethods.cs:61:19:61:33 | object creation of type Exception | ExitMethods.cs:61:19:61:33 | object creation of type Exception |
| pre | ExitMethods.cs:63:41:63:43 | "b" | ExitMethods.cs:63:41:63:43 | "b" |
| pre | ExitMethods.cs:66:10:66:13 | enter Exit | ExitMethods.cs:66:10:66:13 | enter Exit |
| pre | ExitMethods.cs:71:10:71:24 | enter ApplicationExit | ExitMethods.cs:71:10:71:24 | enter ApplicationExit |
| pre | ExitMethods.cs:76:13:76:21 | enter ThrowExpr | ExitMethods.cs:76:13:76:21 | enter ThrowExpr |
| pre | ExitMethods.cs:76:13:76:21 | enter ThrowExpr | ExitMethods.cs:76:13:76:21 | exit ThrowExpr |
| pre | ExitMethods.cs:76:13:76:21 | enter ThrowExpr | ExitMethods.cs:78:29:78:29 | 1 |
| pre | ExitMethods.cs:76:13:76:21 | enter ThrowExpr | ExitMethods.cs:78:69:78:75 | "input" |
| pre | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | ExitMethods.cs:76:13:76:21 | exit ThrowExpr |
| pre | ExitMethods.cs:78:29:78:29 | 1 | ExitMethods.cs:78:29:78:29 | 1 |
| pre | ExitMethods.cs:78:69:78:75 | "input" | ExitMethods.cs:78:69:78:75 | "input" |
| pre | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall |
| pre | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall | ExitMethods.cs:83:9:83:39 | return ...; |
| pre | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall | ExitMethods.cs:83:34:83:34 | 0 |
| pre | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall | ExitMethods.cs:83:38:83:38 | 1 |
| pre | ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:83:9:83:39 | return ...; |
| pre | ExitMethods.cs:83:34:83:34 | 0 | ExitMethods.cs:83:34:83:34 | 0 |
| pre | ExitMethods.cs:83:38:83:38 | 1 | ExitMethods.cs:83:38:83:38 | 1 |
| pre | ExitMethods.cs:91:28:91:31 | enter Exit | ExitMethods.cs:91:28:91:31 | enter Exit |
| pre | ExitMethods.cs:7:10:7:11 | enter M1 | ExitMethods.cs:7:10:7:11 | enter M1 |
| pre | ExitMethods.cs:13:10:13:11 | enter M2 | ExitMethods.cs:13:10:13:11 | enter M2 |
| pre | ExitMethods.cs:19:10:19:11 | enter M3 | ExitMethods.cs:19:10:19:11 | enter M3 |
| pre | ExitMethods.cs:25:10:25:11 | enter M4 | ExitMethods.cs:25:10:25:11 | enter M4 |
| pre | ExitMethods.cs:31:10:31:11 | enter M5 | ExitMethods.cs:31:10:31:11 | enter M5 |
| pre | ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:37:10:37:11 | enter M6 |
| pre | ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:37:10:37:11 | exit M6 |
| pre | ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} |
| pre | ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:44:9:46:9 | {...} |
| pre | ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:37:10:37:11 | exit M6 |
| pre | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} |
| pre | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:44:9:46:9 | {...} |
| pre | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:53:17:53:26 | enter ErrorMaybe | ExitMethods.cs:53:17:53:26 | enter ErrorMaybe |
| pre | ExitMethods.cs:53:17:53:26 | enter ErrorMaybe | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe |
| pre | ExitMethods.cs:53:17:53:26 | enter ErrorMaybe | ExitMethods.cs:56:19:56:33 | object creation of type Exception |
| pre | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe |
| pre | ExitMethods.cs:56:19:56:33 | object creation of type Exception | ExitMethods.cs:56:19:56:33 | object creation of type Exception |
| pre | ExitMethods.cs:59:17:59:27 | enter ErrorAlways | ExitMethods.cs:59:17:59:27 | enter ErrorAlways |
| pre | ExitMethods.cs:59:17:59:27 | enter ErrorAlways | ExitMethods.cs:59:17:59:27 | exit ErrorAlways |
| pre | ExitMethods.cs:59:17:59:27 | enter ErrorAlways | ExitMethods.cs:62:19:62:33 | object creation of type Exception |
| pre | ExitMethods.cs:59:17:59:27 | enter ErrorAlways | ExitMethods.cs:64:41:64:43 | "b" |
| pre | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | ExitMethods.cs:59:17:59:27 | exit ErrorAlways |
| pre | ExitMethods.cs:62:19:62:33 | object creation of type Exception | ExitMethods.cs:62:19:62:33 | object creation of type Exception |
| pre | ExitMethods.cs:64:41:64:43 | "b" | ExitMethods.cs:64:41:64:43 | "b" |
| pre | ExitMethods.cs:67:10:67:13 | enter Exit | ExitMethods.cs:67:10:67:13 | enter Exit |
| pre | ExitMethods.cs:72:10:72:18 | enter ExitInTry | ExitMethods.cs:72:10:72:18 | enter ExitInTry |
| pre | ExitMethods.cs:85:10:85:24 | enter ApplicationExit | ExitMethods.cs:85:10:85:24 | enter ApplicationExit |
| pre | ExitMethods.cs:90:13:90:21 | enter ThrowExpr | ExitMethods.cs:90:13:90:21 | enter ThrowExpr |
| pre | ExitMethods.cs:90:13:90:21 | enter ThrowExpr | ExitMethods.cs:90:13:90:21 | exit ThrowExpr |
| pre | ExitMethods.cs:90:13:90:21 | enter ThrowExpr | ExitMethods.cs:92:29:92:29 | 1 |
| pre | ExitMethods.cs:90:13:90:21 | enter ThrowExpr | ExitMethods.cs:92:69:92:75 | "input" |
| pre | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | ExitMethods.cs:90:13:90:21 | exit ThrowExpr |
| pre | ExitMethods.cs:92:29:92:29 | 1 | ExitMethods.cs:92:29:92:29 | 1 |
| pre | ExitMethods.cs:92:69:92:75 | "input" | ExitMethods.cs:92:69:92:75 | "input" |
| pre | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall |
| pre | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall | ExitMethods.cs:97:9:97:39 | return ...; |
| pre | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall | ExitMethods.cs:97:34:97:34 | 0 |
| pre | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall | ExitMethods.cs:97:38:97:38 | 1 |
| pre | ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:97:9:97:39 | return ...; |
| pre | ExitMethods.cs:97:34:97:34 | 0 | ExitMethods.cs:97:34:97:34 | 0 |
| pre | ExitMethods.cs:97:38:97:38 | 1 | ExitMethods.cs:97:38:97:38 | 1 |
| pre | ExitMethods.cs:100:17:100:32 | enter FailingAssertion | ExitMethods.cs:100:17:100:32 | enter FailingAssertion |
| pre | ExitMethods.cs:106:17:106:33 | enter FailingAssertion2 | ExitMethods.cs:106:17:106:33 | enter FailingAssertion2 |
| pre | ExitMethods.cs:112:10:112:20 | enter AssertFalse | ExitMethods.cs:112:10:112:20 | enter AssertFalse |
| pre | ExitMethods.cs:114:17:114:33 | enter FailingAssertion3 | ExitMethods.cs:114:17:114:33 | enter FailingAssertion3 |
| pre | Extensions.cs:5:23:5:29 | enter ToInt32 | Extensions.cs:5:23:5:29 | enter ToInt32 |
| pre | Extensions.cs:10:24:10:29 | enter ToBool | Extensions.cs:10:24:10:29 | enter ToBool |
| pre | Extensions.cs:15:23:15:33 | enter CallToInt32 | Extensions.cs:15:23:15:33 | enter CallToInt32 |

View File

@@ -1,7 +1,7 @@
import csharp
import semmle.code.csharp.controlflow.BasicBlocks
import Common
from BasicBlock dom, BasicBlock bb, string s
from SourceBasicBlock dom, SourceBasicBlock bb, string s
where
dom.dominates(bb) and s = "pre"
or

View File

@@ -0,0 +1,25 @@
import csharp
class Stub extends File {
Stub() {
this.getAbsolutePath().matches("%resources/stubs/%")
}
}
class SourceControlFlowElement extends ControlFlowElement {
SourceControlFlowElement() {
not this.getLocation().getFile() instanceof Stub
}
}
class SourceControlFlowNode extends ControlFlow::Node {
SourceControlFlowNode() {
not this.getLocation().getFile() instanceof Stub
}
}
class SourceBasicBlock extends ControlFlow::BasicBlock {
SourceBasicBlock() {
not this.getLocation().getFile() instanceof Stub
}
}

View File

@@ -155,14 +155,14 @@
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | true |
| Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | true |
| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | true |
| ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} | false |
| ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:55:19:55:33 | object creation of type Exception | true |
| ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:61:19:61:33 | object creation of type Exception | true |
| ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:63:41:63:43 | "b" | false |
| ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:29:78:29 | 1 | true |
| ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:69:78:75 | "input" | false |
| ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:34:83:34 | 0 | true |
| ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:38:83:38 | 1 | false |
| ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} | false |
| ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:56:19:56:33 | object creation of type Exception | true |
| ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:62:19:62:33 | object creation of type Exception | true |
| ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:64:41:64:43 | "b" | false |
| ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:29:92:29 | 1 | true |
| ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:69:92:75 | "input" | false |
| ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:34:97:34 | 0 | true |
| ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:38:97:38 | 1 | false |
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 | true |
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:22:8:24 | String arg | false |
| Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:12:10:12:11 | exit M2 | true |

View File

@@ -116,10 +116,8 @@
| 51 | 17 | Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | true | 52 | 17 | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; |
| 51 | 17 | Conditions.cs:51:17:51:17 | access to parameter b | false | 49 | 16 | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x |
| 51 | 17 | Conditions.cs:51:17:51:17 | access to parameter b | true | 52 | 17 | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; |
| 54 | 13 | ExitMethods.cs:54:13:54:13 | access to parameter b | false | 52 | 17 | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe |
| 54 | 13 | ExitMethods.cs:54:13:54:13 | access to parameter b | true | 55 | 19 | ExitMethods.cs:55:19:55:33 | object creation of type Exception |
| 60 | 13 | ExitMethods.cs:60:13:60:13 | access to parameter b | false | 63 | 41 | ExitMethods.cs:63:41:63:43 | "b" |
| 60 | 13 | ExitMethods.cs:60:13:60:13 | access to parameter b | true | 61 | 19 | ExitMethods.cs:61:19:61:33 | object creation of type Exception |
| 55 | 13 | ExitMethods.cs:55:13:55:13 | access to parameter b | false | 53 | 17 | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe |
| 55 | 13 | ExitMethods.cs:55:13:55:13 | access to parameter b | true | 56 | 19 | ExitMethods.cs:56:19:56:33 | object creation of type Exception |
| 60 | 16 | Conditions.cs:60:16:60:22 | ... > ... | false | 65 | 9 | Conditions.cs:65:9:66:16 | if (...) ... |
| 60 | 16 | Conditions.cs:60:16:60:22 | ... > ... | true | 61 | 9 | Conditions.cs:61:9:64:9 | {...} |
| 60 | 16 | Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | false | 65 | 9 | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... |
@@ -128,6 +126,8 @@
| 60 | 16 | Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | true | 61 | 9 | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} |
| 60 | 17 | BreakInTry.cs:60:17:60:28 | ... == ... | false | 64 | 9 | BreakInTry.cs:64:9:70:9 | {...} |
| 60 | 17 | BreakInTry.cs:60:17:60:28 | ... == ... | true | 61 | 17 | BreakInTry.cs:61:17:61:23 | return ...; |
| 61 | 13 | ExitMethods.cs:61:13:61:13 | access to parameter b | false | 64 | 41 | ExitMethods.cs:64:41:64:43 | "b" |
| 61 | 13 | ExitMethods.cs:61:13:61:13 | access to parameter b | true | 62 | 19 | ExitMethods.cs:62:19:62:33 | object creation of type Exception |
| 62 | 17 | Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | false | 60 | 16 | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x |
| 62 | 17 | Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | true | 63 | 17 | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; |
| 62 | 17 | Conditions.cs:62:17:62:17 | access to parameter b | false | 60 | 16 | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x |
@@ -148,14 +148,10 @@
| 74 | 13 | cflow.cs:74:13:74:24 | ... > ... | true | 75 | 9 | cflow.cs:75:9:77:9 | {...} |
| 76 | 17 | Conditions.cs:76:17:76:17 | access to local variable b | false | 78 | 13 | Conditions.cs:78:13:79:26 | if (...) ... |
| 76 | 17 | Conditions.cs:76:17:76:17 | access to local variable b | true | 77 | 17 | Conditions.cs:77:17:77:20 | ...; |
| 78 | 16 | ExitMethods.cs:78:16:78:25 | ... != ... | false | 78 | 69 | ExitMethods.cs:78:69:78:75 | "input" |
| 78 | 16 | ExitMethods.cs:78:16:78:25 | ... != ... | true | 78 | 29 | ExitMethods.cs:78:29:78:29 | 1 |
| 78 | 17 | Conditions.cs:78:17:78:21 | ... > ... | false | 74 | 9 | Conditions.cs:74:9:80:9 | foreach (... ... in ...) ... |
| 78 | 17 | Conditions.cs:78:17:78:21 | ... > ... | true | 79 | 17 | Conditions.cs:79:17:79:26 | ...; |
| 81 | 12 | Conditions.cs:81:12:81:12 | access to local variable b | false | 83 | 16 | Conditions.cs:83:16:83:16 | access to local variable x |
| 81 | 12 | Conditions.cs:81:12:81:12 | access to local variable b | true | 82 | 13 | Conditions.cs:82:13:82:16 | ...; |
| 83 | 16 | ExitMethods.cs:83:16:83:30 | call to method Contains | false | 83 | 38 | ExitMethods.cs:83:38:83:38 | 1 |
| 83 | 16 | ExitMethods.cs:83:16:83:30 | call to method Contains | true | 83 | 34 | ExitMethods.cs:83:34:83:34 | 0 |
| 84 | 19 | Switch.cs:84:19:84:23 | ... > ... | false | 86 | 22 | Switch.cs:86:22:86:25 | true |
| 84 | 19 | Switch.cs:84:19:84:23 | ... > ... | true | 85 | 17 | Switch.cs:85:17:85:22 | break; |
| 86 | 13 | cflow.cs:86:13:86:21 | ... != ... | false | 84 | 18 | cflow.cs:84:18:84:19 | exit M2 |
@@ -164,6 +160,8 @@
| 86 | 26 | cflow.cs:86:26:86:37 | ... > ... | true | 87 | 13 | cflow.cs:87:13:87:33 | ...; |
| 92 | 13 | cflow.cs:92:13:92:27 | call to method Equals | false | 94 | 9 | cflow.cs:94:9:94:29 | ...; |
| 92 | 13 | cflow.cs:92:13:92:27 | call to method Equals | true | 93 | 45 | cflow.cs:93:45:93:47 | "s" |
| 92 | 16 | ExitMethods.cs:92:16:92:25 | ... != ... | false | 92 | 69 | ExitMethods.cs:92:69:92:75 | "input" |
| 92 | 16 | ExitMethods.cs:92:16:92:25 | ... != ... | true | 92 | 29 | ExitMethods.cs:92:29:92:29 | 1 |
| 92 | 17 | Conditions.cs:92:17:92:17 | access to local variable b | false | 94 | 13 | Conditions.cs:94:13:95:26 | if (...) ... |
| 92 | 17 | Conditions.cs:92:17:92:17 | access to local variable b | true | 93 | 17 | Conditions.cs:93:17:93:20 | ...; |
| 94 | 17 | Conditions.cs:94:17:94:21 | ... > ... | false | 96 | 13 | Conditions.cs:96:13:97:20 | if (...) ... |
@@ -172,6 +170,8 @@
| 96 | 13 | cflow.cs:96:13:96:25 | ... != ... | true | 97 | 13 | cflow.cs:97:13:97:55 | ...; |
| 96 | 17 | Conditions.cs:96:17:96:17 | access to local variable b | false | 90 | 9 | Conditions.cs:90:9:98:9 | foreach (... ... in ...) ... |
| 96 | 17 | Conditions.cs:96:17:96:17 | access to local variable b | true | 97 | 17 | Conditions.cs:97:17:97:20 | ...; |
| 97 | 16 | ExitMethods.cs:97:16:97:30 | call to method Contains | false | 97 | 38 | ExitMethods.cs:97:38:97:38 | 1 |
| 97 | 16 | ExitMethods.cs:97:16:97:30 | call to method Contains | true | 97 | 34 | ExitMethods.cs:97:34:97:34 | 0 |
| 99 | 13 | cflow.cs:99:13:99:25 | ... != ... | false | 102 | 9 | cflow.cs:102:9:103:36 | if (...) ... |
| 99 | 13 | cflow.cs:99:13:99:25 | ... != ... | true | 100 | 13 | cflow.cs:100:13:100:42 | ...; |
| 102 | 13 | cflow.cs:102:13:102:29 | ... != ... | false | 90 | 18 | cflow.cs:90:18:90:19 | exit M3 |

View File

@@ -621,92 +621,132 @@
| post | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... |
| post | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b |
| post | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:109:17:109:23 | ... = ... |
| post | ExitMethods.cs:6:10:6:11 | exit M1 | ExitMethods.cs:9:9:9:15 | return ...; |
| post | ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:6:10:6:11 | enter M1 |
| post | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:8:20:8:23 | true |
| post | ExitMethods.cs:8:9:8:25 | ...; | ExitMethods.cs:7:5:10:5 | {...} |
| post | ExitMethods.cs:8:20:8:23 | true | ExitMethods.cs:8:9:8:25 | ...; |
| post | ExitMethods.cs:9:9:9:15 | return ...; | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe |
| post | ExitMethods.cs:12:10:12:11 | exit M2 | ExitMethods.cs:15:9:15:15 | return ...; |
| post | ExitMethods.cs:13:5:16:5 | {...} | ExitMethods.cs:12:10:12:11 | enter M2 |
| post | ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | ExitMethods.cs:14:20:14:24 | false |
| post | ExitMethods.cs:14:9:14:26 | ...; | ExitMethods.cs:13:5:16:5 | {...} |
| post | ExitMethods.cs:14:20:14:24 | false | ExitMethods.cs:14:9:14:26 | ...; |
| post | ExitMethods.cs:15:9:15:15 | return ...; | ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe |
| post | ExitMethods.cs:18:10:18:11 | exit M3 | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways |
| post | ExitMethods.cs:19:5:22:5 | {...} | ExitMethods.cs:18:10:18:11 | enter M3 |
| post | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | ExitMethods.cs:20:21:20:24 | true |
| post | ExitMethods.cs:20:9:20:26 | ...; | ExitMethods.cs:19:5:22:5 | {...} |
| post | ExitMethods.cs:20:21:20:24 | true | ExitMethods.cs:20:9:20:26 | ...; |
| post | ExitMethods.cs:24:10:24:11 | exit M4 | ExitMethods.cs:26:9:26:14 | call to method Exit |
| post | ExitMethods.cs:25:5:28:5 | {...} | ExitMethods.cs:24:10:24:11 | enter M4 |
| post | ExitMethods.cs:26:9:26:14 | call to method Exit | ExitMethods.cs:26:9:26:14 | this access |
| post | ExitMethods.cs:26:9:26:14 | this access | ExitMethods.cs:26:9:26:15 | ...; |
| post | ExitMethods.cs:26:9:26:15 | ...; | ExitMethods.cs:25:5:28:5 | {...} |
| post | ExitMethods.cs:30:10:30:11 | exit M5 | ExitMethods.cs:32:9:32:25 | call to method ApplicationExit |
| post | ExitMethods.cs:31:5:34:5 | {...} | ExitMethods.cs:30:10:30:11 | enter M5 |
| post | ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | ExitMethods.cs:32:9:32:25 | this access |
| post | ExitMethods.cs:32:9:32:25 | this access | ExitMethods.cs:32:9:32:26 | ...; |
| post | ExitMethods.cs:32:9:32:26 | ...; | ExitMethods.cs:31:5:34:5 | {...} |
| post | ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:44:13:44:19 | return ...; |
| post | ExitMethods.cs:36:10:36:11 | exit M6 | ExitMethods.cs:48:13:48:19 | return ...; |
| post | ExitMethods.cs:37:5:50:5 | {...} | ExitMethods.cs:36:10:36:11 | enter M6 |
| post | ExitMethods.cs:38:9:49:9 | try {...} ... | ExitMethods.cs:37:5:50:5 | {...} |
| post | ExitMethods.cs:39:9:41:9 | {...} | ExitMethods.cs:38:9:49:9 | try {...} ... |
| post | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:40:25:40:29 | false |
| post | ExitMethods.cs:40:13:40:31 | ...; | ExitMethods.cs:39:9:41:9 | {...} |
| post | ExitMethods.cs:40:25:40:29 | false | ExitMethods.cs:40:13:40:31 | ...; |
| post | ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} |
| post | ExitMethods.cs:44:13:44:19 | return ...; | ExitMethods.cs:43:9:45:9 | {...} |
| post | ExitMethods.cs:47:9:49:9 | {...} | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:48:13:48:19 | return ...; | ExitMethods.cs:47:9:49:9 | {...} |
| post | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | ExitMethods.cs:54:13:54:13 | access to parameter b |
| post | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | ExitMethods.cs:55:13:55:34 | throw ...; |
| post | ExitMethods.cs:53:5:56:5 | {...} | ExitMethods.cs:52:17:52:26 | enter ErrorMaybe |
| post | ExitMethods.cs:54:9:55:34 | if (...) ... | ExitMethods.cs:53:5:56:5 | {...} |
| post | ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:54:9:55:34 | if (...) ... |
| post | ExitMethods.cs:55:13:55:34 | throw ...; | ExitMethods.cs:55:19:55:33 | object creation of type Exception |
| post | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | ExitMethods.cs:61:13:61:34 | throw ...; |
| post | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | ExitMethods.cs:63:13:63:45 | throw ...; |
| post | ExitMethods.cs:59:5:64:5 | {...} | ExitMethods.cs:58:17:58:27 | enter ErrorAlways |
| post | ExitMethods.cs:60:9:63:45 | if (...) ... | ExitMethods.cs:59:5:64:5 | {...} |
| post | ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:60:9:63:45 | if (...) ... |
| post | ExitMethods.cs:61:13:61:34 | throw ...; | ExitMethods.cs:61:19:61:33 | object creation of type Exception |
| post | ExitMethods.cs:63:13:63:45 | throw ...; | ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException |
| post | ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException | ExitMethods.cs:63:41:63:43 | "b" |
| post | ExitMethods.cs:66:10:66:13 | exit Exit | ExitMethods.cs:68:9:68:27 | call to method Exit |
| post | ExitMethods.cs:67:5:69:5 | {...} | ExitMethods.cs:66:10:66:13 | enter Exit |
| post | ExitMethods.cs:68:9:68:27 | call to method Exit | ExitMethods.cs:68:26:68:26 | 0 |
| post | ExitMethods.cs:68:9:68:28 | ...; | ExitMethods.cs:67:5:69:5 | {...} |
| post | ExitMethods.cs:68:26:68:26 | 0 | ExitMethods.cs:68:9:68:28 | ...; |
| post | ExitMethods.cs:71:10:71:24 | exit ApplicationExit | ExitMethods.cs:73:9:73:47 | call to method Exit |
| post | ExitMethods.cs:72:5:74:5 | {...} | ExitMethods.cs:71:10:71:24 | enter ApplicationExit |
| post | ExitMethods.cs:73:9:73:47 | call to method Exit | ExitMethods.cs:73:9:73:48 | ...; |
| post | ExitMethods.cs:73:9:73:48 | ...; | ExitMethods.cs:72:5:74:5 | {...} |
| post | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | ExitMethods.cs:78:9:78:77 | return ...; |
| post | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | ExitMethods.cs:78:41:78:76 | throw ... |
| post | ExitMethods.cs:77:5:79:5 | {...} | ExitMethods.cs:76:13:76:21 | enter ThrowExpr |
| post | ExitMethods.cs:78:9:78:77 | return ...; | ExitMethods.cs:78:29:78:37 | ... / ... |
| post | ExitMethods.cs:78:16:78:20 | access to parameter input | ExitMethods.cs:78:16:78:76 | ... ? ... : ... |
| post | ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:25:78:25 | (...) ... |
| post | ExitMethods.cs:78:16:78:76 | ... ? ... : ... | ExitMethods.cs:77:5:79:5 | {...} |
| post | ExitMethods.cs:78:25:78:25 | 0 | ExitMethods.cs:78:16:78:20 | access to parameter input |
| post | ExitMethods.cs:78:25:78:25 | (...) ... | ExitMethods.cs:78:25:78:25 | 0 |
| post | ExitMethods.cs:78:29:78:29 | (...) ... | ExitMethods.cs:78:29:78:29 | 1 |
| post | ExitMethods.cs:78:29:78:37 | ... / ... | ExitMethods.cs:78:33:78:37 | access to parameter input |
| post | ExitMethods.cs:78:33:78:37 | access to parameter input | ExitMethods.cs:78:29:78:29 | (...) ... |
| post | ExitMethods.cs:78:41:78:76 | throw ... | ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException |
| post | ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException | ExitMethods.cs:78:69:78:75 | "input" |
| post | ExitMethods.cs:81:16:81:34 | exit ExtensionMethodCall | ExitMethods.cs:83:9:83:39 | return ...; |
| post | ExitMethods.cs:82:5:84:5 | {...} | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall |
| post | ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:83:34:83:34 | 0 |
| post | ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:83:38:83:38 | 1 |
| post | ExitMethods.cs:83:16:83:16 | access to parameter s | ExitMethods.cs:83:16:83:38 | ... ? ... : ... |
| post | ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:27:83:29 | - |
| post | ExitMethods.cs:83:16:83:38 | ... ? ... : ... | ExitMethods.cs:82:5:84:5 | {...} |
| post | ExitMethods.cs:83:27:83:29 | - | ExitMethods.cs:83:16:83:16 | access to parameter s |
| post | ExitMethods.cs:91:28:91:31 | exit Exit | ExitMethods.cs:91:35:91:37 | {...} |
| post | ExitMethods.cs:91:35:91:37 | {...} | ExitMethods.cs:91:28:91:31 | enter Exit |
| post | ExitMethods.cs:7:10:7:11 | exit M1 | ExitMethods.cs:10:9:10:15 | return ...; |
| post | ExitMethods.cs:8:5:11:5 | {...} | ExitMethods.cs:7:10:7:11 | enter M1 |
| post | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | ExitMethods.cs:9:20:9:23 | true |
| post | ExitMethods.cs:9:9:9:25 | ...; | ExitMethods.cs:8:5:11:5 | {...} |
| post | ExitMethods.cs:9:20:9:23 | true | ExitMethods.cs:9:9:9:25 | ...; |
| post | ExitMethods.cs:10:9:10:15 | return ...; | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe |
| post | ExitMethods.cs:13:10:13:11 | exit M2 | ExitMethods.cs:16:9:16:15 | return ...; |
| post | ExitMethods.cs:14:5:17:5 | {...} | ExitMethods.cs:13:10:13:11 | enter M2 |
| post | ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | ExitMethods.cs:15:20:15:24 | false |
| post | ExitMethods.cs:15:9:15:26 | ...; | ExitMethods.cs:14:5:17:5 | {...} |
| post | ExitMethods.cs:15:20:15:24 | false | ExitMethods.cs:15:9:15:26 | ...; |
| post | ExitMethods.cs:16:9:16:15 | return ...; | ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe |
| post | ExitMethods.cs:19:10:19:11 | exit M3 | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways |
| post | ExitMethods.cs:20:5:23:5 | {...} | ExitMethods.cs:19:10:19:11 | enter M3 |
| post | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | ExitMethods.cs:21:21:21:24 | true |
| post | ExitMethods.cs:21:9:21:26 | ...; | ExitMethods.cs:20:5:23:5 | {...} |
| post | ExitMethods.cs:21:21:21:24 | true | ExitMethods.cs:21:9:21:26 | ...; |
| post | ExitMethods.cs:25:10:25:11 | exit M4 | ExitMethods.cs:27:9:27:14 | call to method Exit |
| post | ExitMethods.cs:26:5:29:5 | {...} | ExitMethods.cs:25:10:25:11 | enter M4 |
| post | ExitMethods.cs:27:9:27:14 | call to method Exit | ExitMethods.cs:27:9:27:14 | this access |
| post | ExitMethods.cs:27:9:27:14 | this access | ExitMethods.cs:27:9:27:15 | ...; |
| post | ExitMethods.cs:27:9:27:15 | ...; | ExitMethods.cs:26:5:29:5 | {...} |
| post | ExitMethods.cs:31:10:31:11 | exit M5 | ExitMethods.cs:33:9:33:25 | call to method ApplicationExit |
| post | ExitMethods.cs:32:5:35:5 | {...} | ExitMethods.cs:31:10:31:11 | enter M5 |
| post | ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | ExitMethods.cs:33:9:33:25 | this access |
| post | ExitMethods.cs:33:9:33:25 | this access | ExitMethods.cs:33:9:33:26 | ...; |
| post | ExitMethods.cs:33:9:33:26 | ...; | ExitMethods.cs:32:5:35:5 | {...} |
| post | ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:45:13:45:19 | return ...; |
| post | ExitMethods.cs:37:10:37:11 | exit M6 | ExitMethods.cs:49:13:49:19 | return ...; |
| post | ExitMethods.cs:38:5:51:5 | {...} | ExitMethods.cs:37:10:37:11 | enter M6 |
| post | ExitMethods.cs:39:9:50:9 | try {...} ... | ExitMethods.cs:38:5:51:5 | {...} |
| post | ExitMethods.cs:40:9:42:9 | {...} | ExitMethods.cs:39:9:50:9 | try {...} ... |
| post | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:41:25:41:29 | false |
| post | ExitMethods.cs:41:13:41:31 | ...; | ExitMethods.cs:40:9:42:9 | {...} |
| post | ExitMethods.cs:41:25:41:29 | false | ExitMethods.cs:41:13:41:31 | ...; |
| post | ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} |
| post | ExitMethods.cs:45:13:45:19 | return ...; | ExitMethods.cs:44:9:46:9 | {...} |
| post | ExitMethods.cs:48:9:50:9 | {...} | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} |
| post | ExitMethods.cs:49:13:49:19 | return ...; | ExitMethods.cs:48:9:50:9 | {...} |
| post | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | ExitMethods.cs:55:13:55:13 | access to parameter b |
| post | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | ExitMethods.cs:56:13:56:34 | throw ...; |
| post | ExitMethods.cs:54:5:57:5 | {...} | ExitMethods.cs:53:17:53:26 | enter ErrorMaybe |
| post | ExitMethods.cs:55:9:56:34 | if (...) ... | ExitMethods.cs:54:5:57:5 | {...} |
| post | ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:55:9:56:34 | if (...) ... |
| post | ExitMethods.cs:56:13:56:34 | throw ...; | ExitMethods.cs:56:19:56:33 | object creation of type Exception |
| post | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | ExitMethods.cs:62:13:62:34 | throw ...; |
| post | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | ExitMethods.cs:64:13:64:45 | throw ...; |
| post | ExitMethods.cs:60:5:65:5 | {...} | ExitMethods.cs:59:17:59:27 | enter ErrorAlways |
| post | ExitMethods.cs:61:9:64:45 | if (...) ... | ExitMethods.cs:60:5:65:5 | {...} |
| post | ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:61:9:64:45 | if (...) ... |
| post | ExitMethods.cs:62:13:62:34 | throw ...; | ExitMethods.cs:62:19:62:33 | object creation of type Exception |
| post | ExitMethods.cs:64:13:64:45 | throw ...; | ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException |
| post | ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException | ExitMethods.cs:64:41:64:43 | "b" |
| post | ExitMethods.cs:67:10:67:13 | exit Exit | ExitMethods.cs:69:9:69:27 | call to method Exit |
| post | ExitMethods.cs:68:5:70:5 | {...} | ExitMethods.cs:67:10:67:13 | enter Exit |
| post | ExitMethods.cs:69:9:69:27 | call to method Exit | ExitMethods.cs:69:26:69:26 | 0 |
| post | ExitMethods.cs:69:9:69:28 | ...; | ExitMethods.cs:68:5:70:5 | {...} |
| post | ExitMethods.cs:69:26:69:26 | 0 | ExitMethods.cs:69:9:69:28 | ...; |
| post | ExitMethods.cs:72:10:72:18 | exit ExitInTry | ExitMethods.cs:81:13:81:40 | [finally: return] call to method WriteLine |
| post | ExitMethods.cs:73:5:83:5 | {...} | ExitMethods.cs:72:10:72:18 | enter ExitInTry |
| post | ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:73:5:83:5 | {...} |
| post | ExitMethods.cs:75:9:77:9 | {...} | ExitMethods.cs:74:9:82:9 | try {...} ... |
| post | ExitMethods.cs:76:13:76:18 | call to method Exit | ExitMethods.cs:76:13:76:18 | this access |
| post | ExitMethods.cs:76:13:76:18 | this access | ExitMethods.cs:76:13:76:19 | ...; |
| post | ExitMethods.cs:76:13:76:19 | ...; | ExitMethods.cs:75:9:77:9 | {...} |
| post | ExitMethods.cs:79:9:82:9 | [finally: return] {...} | ExitMethods.cs:76:13:76:18 | call to method Exit |
| post | ExitMethods.cs:81:13:81:40 | [finally: return] call to method WriteLine | ExitMethods.cs:81:38:81:39 | [finally: return] "" |
| post | ExitMethods.cs:81:13:81:41 | [finally: return] ...; | ExitMethods.cs:79:9:82:9 | [finally: return] {...} |
| post | ExitMethods.cs:81:38:81:39 | [finally: return] "" | ExitMethods.cs:81:13:81:41 | [finally: return] ...; |
| post | ExitMethods.cs:85:10:85:24 | exit ApplicationExit | ExitMethods.cs:87:9:87:47 | call to method Exit |
| post | ExitMethods.cs:86:5:88:5 | {...} | ExitMethods.cs:85:10:85:24 | enter ApplicationExit |
| post | ExitMethods.cs:87:9:87:47 | call to method Exit | ExitMethods.cs:87:9:87:48 | ...; |
| post | ExitMethods.cs:87:9:87:48 | ...; | ExitMethods.cs:86:5:88:5 | {...} |
| post | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | ExitMethods.cs:92:9:92:77 | return ...; |
| post | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | ExitMethods.cs:92:41:92:76 | throw ... |
| post | ExitMethods.cs:91:5:93:5 | {...} | ExitMethods.cs:90:13:90:21 | enter ThrowExpr |
| post | ExitMethods.cs:92:9:92:77 | return ...; | ExitMethods.cs:92:29:92:37 | ... / ... |
| post | ExitMethods.cs:92:16:92:20 | access to parameter input | ExitMethods.cs:92:16:92:76 | ... ? ... : ... |
| post | ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:25:92:25 | (...) ... |
| post | ExitMethods.cs:92:16:92:76 | ... ? ... : ... | ExitMethods.cs:91:5:93:5 | {...} |
| post | ExitMethods.cs:92:25:92:25 | 0 | ExitMethods.cs:92:16:92:20 | access to parameter input |
| post | ExitMethods.cs:92:25:92:25 | (...) ... | ExitMethods.cs:92:25:92:25 | 0 |
| post | ExitMethods.cs:92:29:92:29 | (...) ... | ExitMethods.cs:92:29:92:29 | 1 |
| post | ExitMethods.cs:92:29:92:37 | ... / ... | ExitMethods.cs:92:33:92:37 | access to parameter input |
| post | ExitMethods.cs:92:33:92:37 | access to parameter input | ExitMethods.cs:92:29:92:29 | (...) ... |
| post | ExitMethods.cs:92:41:92:76 | throw ... | ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException |
| post | ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException | ExitMethods.cs:92:69:92:75 | "input" |
| post | ExitMethods.cs:95:16:95:34 | exit ExtensionMethodCall | ExitMethods.cs:97:9:97:39 | return ...; |
| post | ExitMethods.cs:96:5:98:5 | {...} | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall |
| post | ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:97:34:97:34 | 0 |
| post | ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:97:38:97:38 | 1 |
| post | ExitMethods.cs:97:16:97:16 | access to parameter s | ExitMethods.cs:97:16:97:38 | ... ? ... : ... |
| post | ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:27:97:29 | - |
| post | ExitMethods.cs:97:16:97:38 | ... ? ... : ... | ExitMethods.cs:96:5:98:5 | {...} |
| post | ExitMethods.cs:97:27:97:29 | - | ExitMethods.cs:97:16:97:16 | access to parameter s |
| post | ExitMethods.cs:100:17:100:32 | exit FailingAssertion | ExitMethods.cs:103:13:103:17 | Int32 x = ... |
| post | ExitMethods.cs:101:5:104:5 | {...} | ExitMethods.cs:100:17:100:32 | enter FailingAssertion |
| post | ExitMethods.cs:102:9:102:28 | call to method IsTrue | ExitMethods.cs:102:23:102:27 | false |
| post | ExitMethods.cs:102:9:102:29 | ...; | ExitMethods.cs:101:5:104:5 | {...} |
| post | ExitMethods.cs:102:23:102:27 | false | ExitMethods.cs:102:9:102:29 | ...; |
| post | ExitMethods.cs:103:9:103:18 | ... ...; | ExitMethods.cs:102:9:102:28 | call to method IsTrue |
| post | ExitMethods.cs:103:13:103:13 | access to local variable x | ExitMethods.cs:103:9:103:18 | ... ...; |
| post | ExitMethods.cs:103:13:103:17 | Int32 x = ... | ExitMethods.cs:103:17:103:17 | 0 |
| post | ExitMethods.cs:103:17:103:17 | 0 | ExitMethods.cs:103:13:103:13 | access to local variable x |
| post | ExitMethods.cs:106:17:106:33 | exit FailingAssertion2 | ExitMethods.cs:109:13:109:17 | Int32 x = ... |
| post | ExitMethods.cs:107:5:110:5 | {...} | ExitMethods.cs:106:17:106:33 | enter FailingAssertion2 |
| post | ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | ExitMethods.cs:108:9:108:26 | this access |
| post | ExitMethods.cs:108:9:108:26 | this access | ExitMethods.cs:108:9:108:27 | ...; |
| post | ExitMethods.cs:108:9:108:27 | ...; | ExitMethods.cs:107:5:110:5 | {...} |
| post | ExitMethods.cs:109:9:109:18 | ... ...; | ExitMethods.cs:108:9:108:26 | call to method FailingAssertion |
| post | ExitMethods.cs:109:13:109:13 | access to local variable x | ExitMethods.cs:109:9:109:18 | ... ...; |
| post | ExitMethods.cs:109:13:109:17 | Int32 x = ... | ExitMethods.cs:109:17:109:17 | 0 |
| post | ExitMethods.cs:109:17:109:17 | 0 | ExitMethods.cs:109:13:109:13 | access to local variable x |
| post | ExitMethods.cs:112:10:112:20 | exit AssertFalse | ExitMethods.cs:112:33:112:49 | call to method IsFalse |
| post | ExitMethods.cs:112:33:112:49 | call to method IsFalse | ExitMethods.cs:112:48:112:48 | access to parameter b |
| post | ExitMethods.cs:112:48:112:48 | access to parameter b | ExitMethods.cs:112:10:112:20 | enter AssertFalse |
| post | ExitMethods.cs:114:17:114:33 | exit FailingAssertion3 | ExitMethods.cs:117:13:117:17 | Int32 x = ... |
| post | ExitMethods.cs:115:5:118:5 | {...} | ExitMethods.cs:114:17:114:33 | enter FailingAssertion3 |
| post | ExitMethods.cs:116:9:116:25 | call to method AssertFalse | ExitMethods.cs:116:21:116:24 | true |
| post | ExitMethods.cs:116:9:116:25 | this access | ExitMethods.cs:116:9:116:26 | ...; |
| post | ExitMethods.cs:116:9:116:26 | ...; | ExitMethods.cs:115:5:118:5 | {...} |
| post | ExitMethods.cs:116:21:116:24 | true | ExitMethods.cs:116:9:116:25 | this access |
| post | ExitMethods.cs:117:9:117:18 | ... ...; | ExitMethods.cs:116:9:116:25 | call to method AssertFalse |
| post | ExitMethods.cs:117:13:117:13 | access to local variable x | ExitMethods.cs:117:9:117:18 | ... ...; |
| post | ExitMethods.cs:117:13:117:17 | Int32 x = ... | ExitMethods.cs:117:17:117:17 | 0 |
| post | ExitMethods.cs:117:17:117:17 | 0 | ExitMethods.cs:117:13:117:13 | access to local variable x |
| post | Extensions.cs:5:23:5:29 | exit ToInt32 | Extensions.cs:7:9:7:30 | return ...; |
| post | Extensions.cs:6:5:8:5 | {...} | Extensions.cs:5:23:5:29 | enter ToInt32 |
| post | Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:7:16:7:29 | call to method Parse |
@@ -2724,92 +2764,132 @@
| pre | Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... + ... |
| pre | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | exit M8 |
| pre | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | return ...; |
| pre | ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:7:5:10:5 | {...} |
| pre | ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:8:9:8:25 | ...; |
| pre | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:9:9:9:15 | return ...; |
| pre | ExitMethods.cs:8:9:8:25 | ...; | ExitMethods.cs:8:20:8:23 | true |
| pre | ExitMethods.cs:8:20:8:23 | true | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe |
| pre | ExitMethods.cs:9:9:9:15 | return ...; | ExitMethods.cs:6:10:6:11 | exit M1 |
| pre | ExitMethods.cs:12:10:12:11 | enter M2 | ExitMethods.cs:13:5:16:5 | {...} |
| pre | ExitMethods.cs:13:5:16:5 | {...} | ExitMethods.cs:14:9:14:26 | ...; |
| pre | ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | ExitMethods.cs:15:9:15:15 | return ...; |
| pre | ExitMethods.cs:14:9:14:26 | ...; | ExitMethods.cs:14:20:14:24 | false |
| pre | ExitMethods.cs:14:20:14:24 | false | ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe |
| pre | ExitMethods.cs:15:9:15:15 | return ...; | ExitMethods.cs:12:10:12:11 | exit M2 |
| pre | ExitMethods.cs:18:10:18:11 | enter M3 | ExitMethods.cs:19:5:22:5 | {...} |
| pre | ExitMethods.cs:19:5:22:5 | {...} | ExitMethods.cs:20:9:20:26 | ...; |
| pre | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | ExitMethods.cs:18:10:18:11 | exit M3 |
| pre | ExitMethods.cs:20:9:20:26 | ...; | ExitMethods.cs:20:21:20:24 | true |
| pre | ExitMethods.cs:20:21:20:24 | true | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways |
| pre | ExitMethods.cs:24:10:24:11 | enter M4 | ExitMethods.cs:25:5:28:5 | {...} |
| pre | ExitMethods.cs:25:5:28:5 | {...} | ExitMethods.cs:26:9:26:15 | ...; |
| pre | ExitMethods.cs:26:9:26:14 | call to method Exit | ExitMethods.cs:24:10:24:11 | exit M4 |
| pre | ExitMethods.cs:26:9:26:14 | this access | ExitMethods.cs:26:9:26:14 | call to method Exit |
| pre | ExitMethods.cs:26:9:26:15 | ...; | ExitMethods.cs:26:9:26:14 | this access |
| pre | ExitMethods.cs:30:10:30:11 | enter M5 | ExitMethods.cs:31:5:34:5 | {...} |
| pre | ExitMethods.cs:31:5:34:5 | {...} | ExitMethods.cs:32:9:32:26 | ...; |
| pre | ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | ExitMethods.cs:30:10:30:11 | exit M5 |
| pre | ExitMethods.cs:32:9:32:25 | this access | ExitMethods.cs:32:9:32:25 | call to method ApplicationExit |
| pre | ExitMethods.cs:32:9:32:26 | ...; | ExitMethods.cs:32:9:32:25 | this access |
| pre | ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:37:5:50:5 | {...} |
| pre | ExitMethods.cs:37:5:50:5 | {...} | ExitMethods.cs:38:9:49:9 | try {...} ... |
| pre | ExitMethods.cs:38:9:49:9 | try {...} ... | ExitMethods.cs:39:9:41:9 | {...} |
| pre | ExitMethods.cs:39:9:41:9 | {...} | ExitMethods.cs:40:13:40:31 | ...; |
| pre | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} |
| pre | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:40:13:40:31 | ...; | ExitMethods.cs:40:25:40:29 | false |
| pre | ExitMethods.cs:40:25:40:29 | false | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways |
| pre | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:44:13:44:19 | return ...; |
| pre | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:47:9:49:9 | {...} |
| pre | ExitMethods.cs:47:9:49:9 | {...} | ExitMethods.cs:48:13:48:19 | return ...; |
| pre | ExitMethods.cs:52:17:52:26 | enter ErrorMaybe | ExitMethods.cs:53:5:56:5 | {...} |
| pre | ExitMethods.cs:53:5:56:5 | {...} | ExitMethods.cs:54:9:55:34 | if (...) ... |
| pre | ExitMethods.cs:54:9:55:34 | if (...) ... | ExitMethods.cs:54:13:54:13 | access to parameter b |
| pre | ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe |
| pre | ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:55:19:55:33 | object creation of type Exception |
| pre | ExitMethods.cs:55:19:55:33 | object creation of type Exception | ExitMethods.cs:55:13:55:34 | throw ...; |
| pre | ExitMethods.cs:58:17:58:27 | enter ErrorAlways | ExitMethods.cs:59:5:64:5 | {...} |
| pre | ExitMethods.cs:59:5:64:5 | {...} | ExitMethods.cs:60:9:63:45 | if (...) ... |
| pre | ExitMethods.cs:60:9:63:45 | if (...) ... | ExitMethods.cs:60:13:60:13 | access to parameter b |
| pre | ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:61:19:61:33 | object creation of type Exception |
| pre | ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:63:41:63:43 | "b" |
| pre | ExitMethods.cs:61:19:61:33 | object creation of type Exception | ExitMethods.cs:61:13:61:34 | throw ...; |
| pre | ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException | ExitMethods.cs:63:13:63:45 | throw ...; |
| pre | ExitMethods.cs:63:41:63:43 | "b" | ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException |
| pre | ExitMethods.cs:66:10:66:13 | enter Exit | ExitMethods.cs:67:5:69:5 | {...} |
| pre | ExitMethods.cs:67:5:69:5 | {...} | ExitMethods.cs:68:9:68:28 | ...; |
| pre | ExitMethods.cs:68:9:68:27 | call to method Exit | ExitMethods.cs:66:10:66:13 | exit Exit |
| pre | ExitMethods.cs:68:9:68:28 | ...; | ExitMethods.cs:68:26:68:26 | 0 |
| pre | ExitMethods.cs:68:26:68:26 | 0 | ExitMethods.cs:68:9:68:27 | call to method Exit |
| pre | ExitMethods.cs:71:10:71:24 | enter ApplicationExit | ExitMethods.cs:72:5:74:5 | {...} |
| pre | ExitMethods.cs:72:5:74:5 | {...} | ExitMethods.cs:73:9:73:48 | ...; |
| pre | ExitMethods.cs:73:9:73:47 | call to method Exit | ExitMethods.cs:71:10:71:24 | exit ApplicationExit |
| pre | ExitMethods.cs:73:9:73:48 | ...; | ExitMethods.cs:73:9:73:47 | call to method Exit |
| pre | ExitMethods.cs:76:13:76:21 | enter ThrowExpr | ExitMethods.cs:77:5:79:5 | {...} |
| pre | ExitMethods.cs:77:5:79:5 | {...} | ExitMethods.cs:78:16:78:76 | ... ? ... : ... |
| pre | ExitMethods.cs:78:16:78:20 | access to parameter input | ExitMethods.cs:78:25:78:25 | 0 |
| pre | ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:29:78:29 | 1 |
| pre | ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:69:78:75 | "input" |
| pre | ExitMethods.cs:78:16:78:76 | ... ? ... : ... | ExitMethods.cs:78:16:78:20 | access to parameter input |
| pre | ExitMethods.cs:78:25:78:25 | 0 | ExitMethods.cs:78:25:78:25 | (...) ... |
| pre | ExitMethods.cs:78:25:78:25 | (...) ... | ExitMethods.cs:78:16:78:25 | ... != ... |
| pre | ExitMethods.cs:78:29:78:29 | 1 | ExitMethods.cs:78:29:78:29 | (...) ... |
| pre | ExitMethods.cs:78:29:78:29 | (...) ... | ExitMethods.cs:78:33:78:37 | access to parameter input |
| pre | ExitMethods.cs:78:29:78:37 | ... / ... | ExitMethods.cs:78:9:78:77 | return ...; |
| pre | ExitMethods.cs:78:33:78:37 | access to parameter input | ExitMethods.cs:78:29:78:37 | ... / ... |
| pre | ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException | ExitMethods.cs:78:41:78:76 | throw ... |
| pre | ExitMethods.cs:78:69:78:75 | "input" | ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException |
| pre | ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall | ExitMethods.cs:82:5:84:5 | {...} |
| pre | ExitMethods.cs:82:5:84:5 | {...} | ExitMethods.cs:83:16:83:38 | ... ? ... : ... |
| pre | ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:81:16:81:34 | exit ExtensionMethodCall |
| pre | ExitMethods.cs:83:16:83:16 | access to parameter s | ExitMethods.cs:83:27:83:29 | - |
| pre | ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:34:83:34 | 0 |
| pre | ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:38:83:38 | 1 |
| pre | ExitMethods.cs:83:16:83:38 | ... ? ... : ... | ExitMethods.cs:83:16:83:16 | access to parameter s |
| pre | ExitMethods.cs:83:27:83:29 | - | ExitMethods.cs:83:16:83:30 | call to method Contains |
| pre | ExitMethods.cs:91:28:91:31 | enter Exit | ExitMethods.cs:91:35:91:37 | {...} |
| pre | ExitMethods.cs:91:35:91:37 | {...} | ExitMethods.cs:91:28:91:31 | exit Exit |
| pre | ExitMethods.cs:7:10:7:11 | enter M1 | ExitMethods.cs:8:5:11:5 | {...} |
| pre | ExitMethods.cs:8:5:11:5 | {...} | ExitMethods.cs:9:9:9:25 | ...; |
| pre | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | ExitMethods.cs:10:9:10:15 | return ...; |
| pre | ExitMethods.cs:9:9:9:25 | ...; | ExitMethods.cs:9:20:9:23 | true |
| pre | ExitMethods.cs:9:20:9:23 | true | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe |
| pre | ExitMethods.cs:10:9:10:15 | return ...; | ExitMethods.cs:7:10:7:11 | exit M1 |
| pre | ExitMethods.cs:13:10:13:11 | enter M2 | ExitMethods.cs:14:5:17:5 | {...} |
| pre | ExitMethods.cs:14:5:17:5 | {...} | ExitMethods.cs:15:9:15:26 | ...; |
| pre | ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | ExitMethods.cs:16:9:16:15 | return ...; |
| pre | ExitMethods.cs:15:9:15:26 | ...; | ExitMethods.cs:15:20:15:24 | false |
| pre | ExitMethods.cs:15:20:15:24 | false | ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe |
| pre | ExitMethods.cs:16:9:16:15 | return ...; | ExitMethods.cs:13:10:13:11 | exit M2 |
| pre | ExitMethods.cs:19:10:19:11 | enter M3 | ExitMethods.cs:20:5:23:5 | {...} |
| pre | ExitMethods.cs:20:5:23:5 | {...} | ExitMethods.cs:21:9:21:26 | ...; |
| pre | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | ExitMethods.cs:19:10:19:11 | exit M3 |
| pre | ExitMethods.cs:21:9:21:26 | ...; | ExitMethods.cs:21:21:21:24 | true |
| pre | ExitMethods.cs:21:21:21:24 | true | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways |
| pre | ExitMethods.cs:25:10:25:11 | enter M4 | ExitMethods.cs:26:5:29:5 | {...} |
| pre | ExitMethods.cs:26:5:29:5 | {...} | ExitMethods.cs:27:9:27:15 | ...; |
| pre | ExitMethods.cs:27:9:27:14 | call to method Exit | ExitMethods.cs:25:10:25:11 | exit M4 |
| pre | ExitMethods.cs:27:9:27:14 | this access | ExitMethods.cs:27:9:27:14 | call to method Exit |
| pre | ExitMethods.cs:27:9:27:15 | ...; | ExitMethods.cs:27:9:27:14 | this access |
| pre | ExitMethods.cs:31:10:31:11 | enter M5 | ExitMethods.cs:32:5:35:5 | {...} |
| pre | ExitMethods.cs:32:5:35:5 | {...} | ExitMethods.cs:33:9:33:26 | ...; |
| pre | ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | ExitMethods.cs:31:10:31:11 | exit M5 |
| pre | ExitMethods.cs:33:9:33:25 | this access | ExitMethods.cs:33:9:33:25 | call to method ApplicationExit |
| pre | ExitMethods.cs:33:9:33:26 | ...; | ExitMethods.cs:33:9:33:25 | this access |
| pre | ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:38:5:51:5 | {...} |
| pre | ExitMethods.cs:38:5:51:5 | {...} | ExitMethods.cs:39:9:50:9 | try {...} ... |
| pre | ExitMethods.cs:39:9:50:9 | try {...} ... | ExitMethods.cs:40:9:42:9 | {...} |
| pre | ExitMethods.cs:40:9:42:9 | {...} | ExitMethods.cs:41:13:41:31 | ...; |
| pre | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} |
| pre | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:41:13:41:31 | ...; | ExitMethods.cs:41:25:41:29 | false |
| pre | ExitMethods.cs:41:25:41:29 | false | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways |
| pre | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} |
| pre | ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:45:13:45:19 | return ...; |
| pre | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:9:50:9 | {...} |
| pre | ExitMethods.cs:48:9:50:9 | {...} | ExitMethods.cs:49:13:49:19 | return ...; |
| pre | ExitMethods.cs:53:17:53:26 | enter ErrorMaybe | ExitMethods.cs:54:5:57:5 | {...} |
| pre | ExitMethods.cs:54:5:57:5 | {...} | ExitMethods.cs:55:9:56:34 | if (...) ... |
| pre | ExitMethods.cs:55:9:56:34 | if (...) ... | ExitMethods.cs:55:13:55:13 | access to parameter b |
| pre | ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe |
| pre | ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:56:19:56:33 | object creation of type Exception |
| pre | ExitMethods.cs:56:19:56:33 | object creation of type Exception | ExitMethods.cs:56:13:56:34 | throw ...; |
| pre | ExitMethods.cs:59:17:59:27 | enter ErrorAlways | ExitMethods.cs:60:5:65:5 | {...} |
| pre | ExitMethods.cs:60:5:65:5 | {...} | ExitMethods.cs:61:9:64:45 | if (...) ... |
| pre | ExitMethods.cs:61:9:64:45 | if (...) ... | ExitMethods.cs:61:13:61:13 | access to parameter b |
| pre | ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:62:19:62:33 | object creation of type Exception |
| pre | ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:64:41:64:43 | "b" |
| pre | ExitMethods.cs:62:19:62:33 | object creation of type Exception | ExitMethods.cs:62:13:62:34 | throw ...; |
| pre | ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException | ExitMethods.cs:64:13:64:45 | throw ...; |
| pre | ExitMethods.cs:64:41:64:43 | "b" | ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException |
| pre | ExitMethods.cs:67:10:67:13 | enter Exit | ExitMethods.cs:68:5:70:5 | {...} |
| pre | ExitMethods.cs:68:5:70:5 | {...} | ExitMethods.cs:69:9:69:28 | ...; |
| pre | ExitMethods.cs:69:9:69:27 | call to method Exit | ExitMethods.cs:67:10:67:13 | exit Exit |
| pre | ExitMethods.cs:69:9:69:28 | ...; | ExitMethods.cs:69:26:69:26 | 0 |
| pre | ExitMethods.cs:69:26:69:26 | 0 | ExitMethods.cs:69:9:69:27 | call to method Exit |
| pre | ExitMethods.cs:72:10:72:18 | enter ExitInTry | ExitMethods.cs:73:5:83:5 | {...} |
| pre | ExitMethods.cs:73:5:83:5 | {...} | ExitMethods.cs:74:9:82:9 | try {...} ... |
| pre | ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:75:9:77:9 | {...} |
| pre | ExitMethods.cs:75:9:77:9 | {...} | ExitMethods.cs:76:13:76:19 | ...; |
| pre | ExitMethods.cs:76:13:76:18 | call to method Exit | ExitMethods.cs:79:9:82:9 | [finally: return] {...} |
| pre | ExitMethods.cs:76:13:76:18 | this access | ExitMethods.cs:76:13:76:18 | call to method Exit |
| pre | ExitMethods.cs:76:13:76:19 | ...; | ExitMethods.cs:76:13:76:18 | this access |
| pre | ExitMethods.cs:79:9:82:9 | [finally: return] {...} | ExitMethods.cs:81:13:81:41 | [finally: return] ...; |
| pre | ExitMethods.cs:81:13:81:40 | [finally: return] call to method WriteLine | ExitMethods.cs:72:10:72:18 | exit ExitInTry |
| pre | ExitMethods.cs:81:13:81:41 | [finally: return] ...; | ExitMethods.cs:81:38:81:39 | [finally: return] "" |
| pre | ExitMethods.cs:81:38:81:39 | [finally: return] "" | ExitMethods.cs:81:13:81:40 | [finally: return] call to method WriteLine |
| pre | ExitMethods.cs:85:10:85:24 | enter ApplicationExit | ExitMethods.cs:86:5:88:5 | {...} |
| pre | ExitMethods.cs:86:5:88:5 | {...} | ExitMethods.cs:87:9:87:48 | ...; |
| pre | ExitMethods.cs:87:9:87:47 | call to method Exit | ExitMethods.cs:85:10:85:24 | exit ApplicationExit |
| pre | ExitMethods.cs:87:9:87:48 | ...; | ExitMethods.cs:87:9:87:47 | call to method Exit |
| pre | ExitMethods.cs:90:13:90:21 | enter ThrowExpr | ExitMethods.cs:91:5:93:5 | {...} |
| pre | ExitMethods.cs:91:5:93:5 | {...} | ExitMethods.cs:92:16:92:76 | ... ? ... : ... |
| pre | ExitMethods.cs:92:16:92:20 | access to parameter input | ExitMethods.cs:92:25:92:25 | 0 |
| pre | ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:29:92:29 | 1 |
| pre | ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:69:92:75 | "input" |
| pre | ExitMethods.cs:92:16:92:76 | ... ? ... : ... | ExitMethods.cs:92:16:92:20 | access to parameter input |
| pre | ExitMethods.cs:92:25:92:25 | 0 | ExitMethods.cs:92:25:92:25 | (...) ... |
| pre | ExitMethods.cs:92:25:92:25 | (...) ... | ExitMethods.cs:92:16:92:25 | ... != ... |
| pre | ExitMethods.cs:92:29:92:29 | 1 | ExitMethods.cs:92:29:92:29 | (...) ... |
| pre | ExitMethods.cs:92:29:92:29 | (...) ... | ExitMethods.cs:92:33:92:37 | access to parameter input |
| pre | ExitMethods.cs:92:29:92:37 | ... / ... | ExitMethods.cs:92:9:92:77 | return ...; |
| pre | ExitMethods.cs:92:33:92:37 | access to parameter input | ExitMethods.cs:92:29:92:37 | ... / ... |
| pre | ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException | ExitMethods.cs:92:41:92:76 | throw ... |
| pre | ExitMethods.cs:92:69:92:75 | "input" | ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException |
| pre | ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall | ExitMethods.cs:96:5:98:5 | {...} |
| pre | ExitMethods.cs:96:5:98:5 | {...} | ExitMethods.cs:97:16:97:38 | ... ? ... : ... |
| pre | ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:95:16:95:34 | exit ExtensionMethodCall |
| pre | ExitMethods.cs:97:16:97:16 | access to parameter s | ExitMethods.cs:97:27:97:29 | - |
| pre | ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:34:97:34 | 0 |
| pre | ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:38:97:38 | 1 |
| pre | ExitMethods.cs:97:16:97:38 | ... ? ... : ... | ExitMethods.cs:97:16:97:16 | access to parameter s |
| pre | ExitMethods.cs:97:27:97:29 | - | ExitMethods.cs:97:16:97:30 | call to method Contains |
| pre | ExitMethods.cs:100:17:100:32 | enter FailingAssertion | ExitMethods.cs:101:5:104:5 | {...} |
| pre | ExitMethods.cs:101:5:104:5 | {...} | ExitMethods.cs:102:9:102:29 | ...; |
| pre | ExitMethods.cs:102:9:102:28 | call to method IsTrue | ExitMethods.cs:103:9:103:18 | ... ...; |
| pre | ExitMethods.cs:102:9:102:29 | ...; | ExitMethods.cs:102:23:102:27 | false |
| pre | ExitMethods.cs:102:23:102:27 | false | ExitMethods.cs:102:9:102:28 | call to method IsTrue |
| pre | ExitMethods.cs:103:9:103:18 | ... ...; | ExitMethods.cs:103:13:103:13 | access to local variable x |
| pre | ExitMethods.cs:103:13:103:13 | access to local variable x | ExitMethods.cs:103:17:103:17 | 0 |
| pre | ExitMethods.cs:103:13:103:17 | Int32 x = ... | ExitMethods.cs:100:17:100:32 | exit FailingAssertion |
| pre | ExitMethods.cs:103:17:103:17 | 0 | ExitMethods.cs:103:13:103:17 | Int32 x = ... |
| pre | ExitMethods.cs:106:17:106:33 | enter FailingAssertion2 | ExitMethods.cs:107:5:110:5 | {...} |
| pre | ExitMethods.cs:107:5:110:5 | {...} | ExitMethods.cs:108:9:108:27 | ...; |
| pre | ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | ExitMethods.cs:109:9:109:18 | ... ...; |
| pre | ExitMethods.cs:108:9:108:26 | this access | ExitMethods.cs:108:9:108:26 | call to method FailingAssertion |
| pre | ExitMethods.cs:108:9:108:27 | ...; | ExitMethods.cs:108:9:108:26 | this access |
| pre | ExitMethods.cs:109:9:109:18 | ... ...; | ExitMethods.cs:109:13:109:13 | access to local variable x |
| pre | ExitMethods.cs:109:13:109:13 | access to local variable x | ExitMethods.cs:109:17:109:17 | 0 |
| pre | ExitMethods.cs:109:13:109:17 | Int32 x = ... | ExitMethods.cs:106:17:106:33 | exit FailingAssertion2 |
| pre | ExitMethods.cs:109:17:109:17 | 0 | ExitMethods.cs:109:13:109:17 | Int32 x = ... |
| pre | ExitMethods.cs:112:10:112:20 | enter AssertFalse | ExitMethods.cs:112:48:112:48 | access to parameter b |
| pre | ExitMethods.cs:112:33:112:49 | call to method IsFalse | ExitMethods.cs:112:10:112:20 | exit AssertFalse |
| pre | ExitMethods.cs:112:48:112:48 | access to parameter b | ExitMethods.cs:112:33:112:49 | call to method IsFalse |
| pre | ExitMethods.cs:114:17:114:33 | enter FailingAssertion3 | ExitMethods.cs:115:5:118:5 | {...} |
| pre | ExitMethods.cs:115:5:118:5 | {...} | ExitMethods.cs:116:9:116:26 | ...; |
| pre | ExitMethods.cs:116:9:116:25 | call to method AssertFalse | ExitMethods.cs:117:9:117:18 | ... ...; |
| pre | ExitMethods.cs:116:9:116:25 | this access | ExitMethods.cs:116:21:116:24 | true |
| pre | ExitMethods.cs:116:9:116:26 | ...; | ExitMethods.cs:116:9:116:25 | this access |
| pre | ExitMethods.cs:116:21:116:24 | true | ExitMethods.cs:116:9:116:25 | call to method AssertFalse |
| pre | ExitMethods.cs:117:9:117:18 | ... ...; | ExitMethods.cs:117:13:117:13 | access to local variable x |
| pre | ExitMethods.cs:117:13:117:13 | access to local variable x | ExitMethods.cs:117:17:117:17 | 0 |
| pre | ExitMethods.cs:117:13:117:17 | Int32 x = ... | ExitMethods.cs:114:17:114:33 | exit FailingAssertion3 |
| pre | ExitMethods.cs:117:17:117:17 | 0 | ExitMethods.cs:117:13:117:17 | Int32 x = ... |
| pre | Extensions.cs:5:23:5:29 | enter ToInt32 | Extensions.cs:6:5:8:5 | {...} |
| pre | Extensions.cs:6:5:8:5 | {...} | Extensions.cs:7:28:7:28 | access to parameter s |
| pre | Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:5:23:5:29 | exit ToInt32 |

View File

@@ -1,6 +1,7 @@
import csharp
import Common
from ControlFlow::Node dom, ControlFlow::Node node, string s
from SourceControlFlowNode dom, SourceControlFlowNode node, string s
where
dom.strictlyDominates(node) and dom.getASuccessor() = node and s = "pre"
or

View File

@@ -474,72 +474,104 @@
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:17 | access to local variable x | semmle.label | successor |
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... + ... | semmle.label | successor |
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | return ...; | semmle.label | successor |
| ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:8:9:8:25 | ...; | semmle.label | successor |
| ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:9:9:9:15 | return ...; | semmle.label | successor |
| ExitMethods.cs:8:9:8:25 | ...; | ExitMethods.cs:8:20:8:23 | true | semmle.label | successor |
| ExitMethods.cs:8:20:8:23 | true | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | semmle.label | successor |
| ExitMethods.cs:13:5:16:5 | {...} | ExitMethods.cs:14:9:14:26 | ...; | semmle.label | successor |
| ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | ExitMethods.cs:15:9:15:15 | return ...; | semmle.label | successor |
| ExitMethods.cs:14:9:14:26 | ...; | ExitMethods.cs:14:20:14:24 | false | semmle.label | successor |
| ExitMethods.cs:14:20:14:24 | false | ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | semmle.label | successor |
| ExitMethods.cs:19:5:22:5 | {...} | ExitMethods.cs:20:9:20:26 | ...; | semmle.label | successor |
| ExitMethods.cs:20:9:20:26 | ...; | ExitMethods.cs:20:21:20:24 | true | semmle.label | successor |
| ExitMethods.cs:20:21:20:24 | true | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | semmle.label | successor |
| ExitMethods.cs:25:5:28:5 | {...} | ExitMethods.cs:26:9:26:15 | ...; | semmle.label | successor |
| ExitMethods.cs:26:9:26:14 | this access | ExitMethods.cs:26:9:26:14 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:26:9:26:15 | ...; | ExitMethods.cs:26:9:26:14 | this access | semmle.label | successor |
| ExitMethods.cs:31:5:34:5 | {...} | ExitMethods.cs:32:9:32:26 | ...; | semmle.label | successor |
| ExitMethods.cs:32:9:32:25 | this access | ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | semmle.label | successor |
| ExitMethods.cs:32:9:32:26 | ...; | ExitMethods.cs:32:9:32:25 | this access | semmle.label | successor |
| ExitMethods.cs:37:5:50:5 | {...} | ExitMethods.cs:38:9:49:9 | try {...} ... | semmle.label | successor |
| ExitMethods.cs:38:9:49:9 | try {...} ... | ExitMethods.cs:39:9:41:9 | {...} | semmle.label | successor |
| ExitMethods.cs:39:9:41:9 | {...} | ExitMethods.cs:40:13:40:31 | ...; | semmle.label | successor |
| ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:42:9:45:9 | catch (...) {...} | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:42:9:45:9 | catch (...) {...} | semmle.label | exception(Exception) |
| ExitMethods.cs:40:13:40:31 | ...; | ExitMethods.cs:40:25:40:29 | false | semmle.label | successor |
| ExitMethods.cs:40:25:40:29 | false | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | semmle.label | successor |
| ExitMethods.cs:42:9:45:9 | catch (...) {...} | ExitMethods.cs:43:9:45:9 | {...} | semmle.label | match |
| ExitMethods.cs:42:9:45:9 | catch (...) {...} | ExitMethods.cs:46:9:49:9 | catch (...) {...} | semmle.label | no-match |
| ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:44:13:44:19 | return ...; | semmle.label | successor |
| ExitMethods.cs:46:9:49:9 | catch (...) {...} | ExitMethods.cs:47:9:49:9 | {...} | semmle.label | match |
| ExitMethods.cs:47:9:49:9 | {...} | ExitMethods.cs:48:13:48:19 | return ...; | semmle.label | successor |
| ExitMethods.cs:53:5:56:5 | {...} | ExitMethods.cs:54:9:55:34 | if (...) ... | semmle.label | successor |
| ExitMethods.cs:54:9:55:34 | if (...) ... | ExitMethods.cs:54:13:54:13 | access to parameter b | semmle.label | successor |
| ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:55:19:55:33 | object creation of type Exception | semmle.label | true |
| ExitMethods.cs:55:19:55:33 | object creation of type Exception | ExitMethods.cs:55:13:55:34 | throw ...; | semmle.label | successor |
| ExitMethods.cs:59:5:64:5 | {...} | ExitMethods.cs:60:9:63:45 | if (...) ... | semmle.label | successor |
| ExitMethods.cs:60:9:63:45 | if (...) ... | ExitMethods.cs:60:13:60:13 | access to parameter b | semmle.label | successor |
| ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:61:19:61:33 | object creation of type Exception | semmle.label | true |
| ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:63:41:63:43 | "b" | semmle.label | false |
| ExitMethods.cs:61:19:61:33 | object creation of type Exception | ExitMethods.cs:61:13:61:34 | throw ...; | semmle.label | successor |
| ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException | ExitMethods.cs:63:13:63:45 | throw ...; | semmle.label | successor |
| ExitMethods.cs:63:41:63:43 | "b" | ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException | semmle.label | successor |
| ExitMethods.cs:67:5:69:5 | {...} | ExitMethods.cs:68:9:68:28 | ...; | semmle.label | successor |
| ExitMethods.cs:68:9:68:28 | ...; | ExitMethods.cs:68:26:68:26 | 0 | semmle.label | successor |
| ExitMethods.cs:68:26:68:26 | 0 | ExitMethods.cs:68:9:68:27 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:72:5:74:5 | {...} | ExitMethods.cs:73:9:73:48 | ...; | semmle.label | successor |
| ExitMethods.cs:73:9:73:48 | ...; | ExitMethods.cs:73:9:73:47 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:77:5:79:5 | {...} | ExitMethods.cs:78:16:78:76 | ... ? ... : ... | semmle.label | successor |
| ExitMethods.cs:78:16:78:20 | access to parameter input | ExitMethods.cs:78:25:78:25 | 0 | semmle.label | successor |
| ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:29:78:29 | 1 | semmle.label | true |
| ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:69:78:75 | "input" | semmle.label | false |
| ExitMethods.cs:78:16:78:76 | ... ? ... : ... | ExitMethods.cs:78:16:78:20 | access to parameter input | semmle.label | successor |
| ExitMethods.cs:78:25:78:25 | 0 | ExitMethods.cs:78:25:78:25 | (...) ... | semmle.label | successor |
| ExitMethods.cs:78:25:78:25 | (...) ... | ExitMethods.cs:78:16:78:25 | ... != ... | semmle.label | successor |
| ExitMethods.cs:78:29:78:29 | 1 | ExitMethods.cs:78:29:78:29 | (...) ... | semmle.label | successor |
| ExitMethods.cs:78:29:78:29 | (...) ... | ExitMethods.cs:78:33:78:37 | access to parameter input | semmle.label | successor |
| ExitMethods.cs:78:29:78:37 | ... / ... | ExitMethods.cs:78:9:78:77 | return ...; | semmle.label | successor |
| ExitMethods.cs:78:33:78:37 | access to parameter input | ExitMethods.cs:78:29:78:37 | ... / ... | semmle.label | successor |
| ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException | ExitMethods.cs:78:41:78:76 | throw ... | semmle.label | successor |
| ExitMethods.cs:78:69:78:75 | "input" | ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException | semmle.label | successor |
| ExitMethods.cs:82:5:84:5 | {...} | ExitMethods.cs:83:16:83:38 | ... ? ... : ... | semmle.label | successor |
| ExitMethods.cs:83:16:83:16 | access to parameter s | ExitMethods.cs:83:27:83:29 | - | semmle.label | successor |
| ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:34:83:34 | 0 | semmle.label | true |
| ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:38:83:38 | 1 | semmle.label | false |
| ExitMethods.cs:83:16:83:38 | ... ? ... : ... | ExitMethods.cs:83:16:83:16 | access to parameter s | semmle.label | successor |
| ExitMethods.cs:83:27:83:29 | - | ExitMethods.cs:83:16:83:30 | call to method Contains | semmle.label | successor |
| ExitMethods.cs:83:34:83:34 | 0 | ExitMethods.cs:83:9:83:39 | return ...; | semmle.label | successor |
| ExitMethods.cs:83:38:83:38 | 1 | ExitMethods.cs:83:9:83:39 | return ...; | semmle.label | successor |
| ExitMethods.cs:8:5:11:5 | {...} | ExitMethods.cs:9:9:9:25 | ...; | semmle.label | successor |
| ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | ExitMethods.cs:10:9:10:15 | return ...; | semmle.label | successor |
| ExitMethods.cs:9:9:9:25 | ...; | ExitMethods.cs:9:20:9:23 | true | semmle.label | successor |
| ExitMethods.cs:9:20:9:23 | true | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | semmle.label | successor |
| ExitMethods.cs:14:5:17:5 | {...} | ExitMethods.cs:15:9:15:26 | ...; | semmle.label | successor |
| ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | ExitMethods.cs:16:9:16:15 | return ...; | semmle.label | successor |
| ExitMethods.cs:15:9:15:26 | ...; | ExitMethods.cs:15:20:15:24 | false | semmle.label | successor |
| ExitMethods.cs:15:20:15:24 | false | ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | semmle.label | successor |
| ExitMethods.cs:20:5:23:5 | {...} | ExitMethods.cs:21:9:21:26 | ...; | semmle.label | successor |
| ExitMethods.cs:21:9:21:26 | ...; | ExitMethods.cs:21:21:21:24 | true | semmle.label | successor |
| ExitMethods.cs:21:21:21:24 | true | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | semmle.label | successor |
| ExitMethods.cs:26:5:29:5 | {...} | ExitMethods.cs:27:9:27:15 | ...; | semmle.label | successor |
| ExitMethods.cs:27:9:27:14 | this access | ExitMethods.cs:27:9:27:14 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:27:9:27:15 | ...; | ExitMethods.cs:27:9:27:14 | this access | semmle.label | successor |
| ExitMethods.cs:32:5:35:5 | {...} | ExitMethods.cs:33:9:33:26 | ...; | semmle.label | successor |
| ExitMethods.cs:33:9:33:25 | this access | ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | semmle.label | successor |
| ExitMethods.cs:33:9:33:26 | ...; | ExitMethods.cs:33:9:33:25 | this access | semmle.label | successor |
| ExitMethods.cs:38:5:51:5 | {...} | ExitMethods.cs:39:9:50:9 | try {...} ... | semmle.label | successor |
| ExitMethods.cs:39:9:50:9 | try {...} ... | ExitMethods.cs:40:9:42:9 | {...} | semmle.label | successor |
| ExitMethods.cs:40:9:42:9 | {...} | ExitMethods.cs:41:13:41:31 | ...; | semmle.label | successor |
| ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:43:9:46:9 | catch (...) {...} | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:43:9:46:9 | catch (...) {...} | semmle.label | exception(Exception) |
| ExitMethods.cs:41:13:41:31 | ...; | ExitMethods.cs:41:25:41:29 | false | semmle.label | successor |
| ExitMethods.cs:41:25:41:29 | false | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | semmle.label | successor |
| ExitMethods.cs:43:9:46:9 | catch (...) {...} | ExitMethods.cs:44:9:46:9 | {...} | semmle.label | match |
| ExitMethods.cs:43:9:46:9 | catch (...) {...} | ExitMethods.cs:47:9:50:9 | catch (...) {...} | semmle.label | no-match |
| ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:45:13:45:19 | return ...; | semmle.label | successor |
| ExitMethods.cs:47:9:50:9 | catch (...) {...} | ExitMethods.cs:48:9:50:9 | {...} | semmle.label | match |
| ExitMethods.cs:48:9:50:9 | {...} | ExitMethods.cs:49:13:49:19 | return ...; | semmle.label | successor |
| ExitMethods.cs:54:5:57:5 | {...} | ExitMethods.cs:55:9:56:34 | if (...) ... | semmle.label | successor |
| ExitMethods.cs:55:9:56:34 | if (...) ... | ExitMethods.cs:55:13:55:13 | access to parameter b | semmle.label | successor |
| ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:56:19:56:33 | object creation of type Exception | semmle.label | true |
| ExitMethods.cs:56:19:56:33 | object creation of type Exception | ExitMethods.cs:56:13:56:34 | throw ...; | semmle.label | successor |
| ExitMethods.cs:60:5:65:5 | {...} | ExitMethods.cs:61:9:64:45 | if (...) ... | semmle.label | successor |
| ExitMethods.cs:61:9:64:45 | if (...) ... | ExitMethods.cs:61:13:61:13 | access to parameter b | semmle.label | successor |
| ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:62:19:62:33 | object creation of type Exception | semmle.label | true |
| ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:64:41:64:43 | "b" | semmle.label | false |
| ExitMethods.cs:62:19:62:33 | object creation of type Exception | ExitMethods.cs:62:13:62:34 | throw ...; | semmle.label | successor |
| ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException | ExitMethods.cs:64:13:64:45 | throw ...; | semmle.label | successor |
| ExitMethods.cs:64:41:64:43 | "b" | ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException | semmle.label | successor |
| ExitMethods.cs:68:5:70:5 | {...} | ExitMethods.cs:69:9:69:28 | ...; | semmle.label | successor |
| ExitMethods.cs:69:9:69:28 | ...; | ExitMethods.cs:69:26:69:26 | 0 | semmle.label | successor |
| ExitMethods.cs:69:26:69:26 | 0 | ExitMethods.cs:69:9:69:27 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:73:5:83:5 | {...} | ExitMethods.cs:74:9:82:9 | try {...} ... | semmle.label | successor |
| ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:75:9:77:9 | {...} | semmle.label | successor |
| ExitMethods.cs:75:9:77:9 | {...} | ExitMethods.cs:76:13:76:19 | ...; | semmle.label | successor |
| ExitMethods.cs:76:13:76:18 | call to method Exit | ExitMethods.cs:79:9:82:9 | {...} | semmle.label | return |
| ExitMethods.cs:76:13:76:18 | this access | ExitMethods.cs:76:13:76:18 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:76:13:76:19 | ...; | ExitMethods.cs:76:13:76:18 | this access | semmle.label | successor |
| ExitMethods.cs:79:9:82:9 | {...} | ExitMethods.cs:81:13:81:41 | ...; | semmle.label | successor |
| ExitMethods.cs:81:13:81:41 | ...; | ExitMethods.cs:81:38:81:39 | "" | semmle.label | successor |
| ExitMethods.cs:81:38:81:39 | "" | ExitMethods.cs:81:13:81:40 | call to method WriteLine | semmle.label | successor |
| ExitMethods.cs:86:5:88:5 | {...} | ExitMethods.cs:87:9:87:48 | ...; | semmle.label | successor |
| ExitMethods.cs:87:9:87:48 | ...; | ExitMethods.cs:87:9:87:47 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:91:5:93:5 | {...} | ExitMethods.cs:92:16:92:76 | ... ? ... : ... | semmle.label | successor |
| ExitMethods.cs:92:16:92:20 | access to parameter input | ExitMethods.cs:92:25:92:25 | 0 | semmle.label | successor |
| ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:29:92:29 | 1 | semmle.label | true |
| ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:69:92:75 | "input" | semmle.label | false |
| ExitMethods.cs:92:16:92:76 | ... ? ... : ... | ExitMethods.cs:92:16:92:20 | access to parameter input | semmle.label | successor |
| ExitMethods.cs:92:25:92:25 | 0 | ExitMethods.cs:92:25:92:25 | (...) ... | semmle.label | successor |
| ExitMethods.cs:92:25:92:25 | (...) ... | ExitMethods.cs:92:16:92:25 | ... != ... | semmle.label | successor |
| ExitMethods.cs:92:29:92:29 | 1 | ExitMethods.cs:92:29:92:29 | (...) ... | semmle.label | successor |
| ExitMethods.cs:92:29:92:29 | (...) ... | ExitMethods.cs:92:33:92:37 | access to parameter input | semmle.label | successor |
| ExitMethods.cs:92:29:92:37 | ... / ... | ExitMethods.cs:92:9:92:77 | return ...; | semmle.label | successor |
| ExitMethods.cs:92:33:92:37 | access to parameter input | ExitMethods.cs:92:29:92:37 | ... / ... | semmle.label | successor |
| ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException | ExitMethods.cs:92:41:92:76 | throw ... | semmle.label | successor |
| ExitMethods.cs:92:69:92:75 | "input" | ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException | semmle.label | successor |
| ExitMethods.cs:96:5:98:5 | {...} | ExitMethods.cs:97:16:97:38 | ... ? ... : ... | semmle.label | successor |
| ExitMethods.cs:97:16:97:16 | access to parameter s | ExitMethods.cs:97:27:97:29 | - | semmle.label | successor |
| ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:34:97:34 | 0 | semmle.label | true |
| ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:38:97:38 | 1 | semmle.label | false |
| ExitMethods.cs:97:16:97:38 | ... ? ... : ... | ExitMethods.cs:97:16:97:16 | access to parameter s | semmle.label | successor |
| ExitMethods.cs:97:27:97:29 | - | ExitMethods.cs:97:16:97:30 | call to method Contains | semmle.label | successor |
| ExitMethods.cs:97:34:97:34 | 0 | ExitMethods.cs:97:9:97:39 | return ...; | semmle.label | successor |
| ExitMethods.cs:97:38:97:38 | 1 | ExitMethods.cs:97:9:97:39 | return ...; | semmle.label | successor |
| ExitMethods.cs:101:5:104:5 | {...} | ExitMethods.cs:102:9:102:29 | ...; | semmle.label | successor |
| ExitMethods.cs:102:9:102:28 | call to method IsTrue | ExitMethods.cs:103:9:103:18 | ... ...; | semmle.label | successor |
| ExitMethods.cs:102:9:102:29 | ...; | ExitMethods.cs:102:23:102:27 | false | semmle.label | successor |
| ExitMethods.cs:102:23:102:27 | false | ExitMethods.cs:102:9:102:28 | call to method IsTrue | semmle.label | successor |
| ExitMethods.cs:103:9:103:18 | ... ...; | ExitMethods.cs:103:13:103:13 | access to local variable x | semmle.label | successor |
| ExitMethods.cs:103:13:103:13 | access to local variable x | ExitMethods.cs:103:17:103:17 | 0 | semmle.label | successor |
| ExitMethods.cs:103:17:103:17 | 0 | ExitMethods.cs:103:13:103:17 | Int32 x = ... | semmle.label | successor |
| ExitMethods.cs:107:5:110:5 | {...} | ExitMethods.cs:108:9:108:27 | ...; | semmle.label | successor |
| ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | ExitMethods.cs:109:9:109:18 | ... ...; | semmle.label | successor |
| ExitMethods.cs:108:9:108:26 | this access | ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | semmle.label | successor |
| ExitMethods.cs:108:9:108:27 | ...; | ExitMethods.cs:108:9:108:26 | this access | semmle.label | successor |
| ExitMethods.cs:109:9:109:18 | ... ...; | ExitMethods.cs:109:13:109:13 | access to local variable x | semmle.label | successor |
| ExitMethods.cs:109:13:109:13 | access to local variable x | ExitMethods.cs:109:17:109:17 | 0 | semmle.label | successor |
| ExitMethods.cs:109:17:109:17 | 0 | ExitMethods.cs:109:13:109:17 | Int32 x = ... | semmle.label | successor |
| ExitMethods.cs:112:48:112:48 | access to parameter b | ExitMethods.cs:112:33:112:49 | call to method IsFalse | semmle.label | successor |
| ExitMethods.cs:115:5:118:5 | {...} | ExitMethods.cs:116:9:116:26 | ...; | semmle.label | successor |
| ExitMethods.cs:116:9:116:25 | call to method AssertFalse | ExitMethods.cs:117:9:117:18 | ... ...; | semmle.label | successor |
| ExitMethods.cs:116:9:116:25 | this access | ExitMethods.cs:116:21:116:24 | true | semmle.label | successor |
| ExitMethods.cs:116:9:116:26 | ...; | ExitMethods.cs:116:9:116:25 | this access | semmle.label | successor |
| ExitMethods.cs:116:21:116:24 | true | ExitMethods.cs:116:9:116:25 | call to method AssertFalse | semmle.label | successor |
| ExitMethods.cs:117:9:117:18 | ... ...; | ExitMethods.cs:117:13:117:13 | access to local variable x | semmle.label | successor |
| ExitMethods.cs:117:13:117:13 | access to local variable x | ExitMethods.cs:117:17:117:17 | 0 | semmle.label | successor |
| ExitMethods.cs:117:17:117:17 | 0 | ExitMethods.cs:117:13:117:17 | Int32 x = ... | semmle.label | successor |
| Extensions.cs:6:5:8:5 | {...} | Extensions.cs:7:28:7:28 | access to parameter s | semmle.label | successor |
| Extensions.cs:7:16:7:29 | call to method Parse | Extensions.cs:7:9:7:30 | return ...; | semmle.label | successor |
| Extensions.cs:7:28:7:28 | access to parameter s | Extensions.cs:7:16:7:29 | call to method Parse | semmle.label | successor |

View File

@@ -1,6 +1,7 @@
import csharp
import Common
query predicate edges(ControlFlowElement node, ControlFlowElement successor, string attr, string val) {
query predicate edges(SourceControlFlowElement node, SourceControlFlowElement successor, string attr, string val) {
exists(ControlFlow::SuccessorType t |
successor = node.getAControlFlowNode().getASuccessorByType(t).getElement() |
attr = "semmle.label" and

View File

@@ -478,86 +478,122 @@
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:22:109:23 | "" |
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:16:110:16 | access to local variable x |
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:16:110:16 | access to local variable x |
| ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:7:5:10:5 | {...} |
| ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:8:20:8:23 | true |
| ExitMethods.cs:8:9:8:25 | ...; | ExitMethods.cs:8:9:8:25 | ...; |
| ExitMethods.cs:8:20:8:23 | true | ExitMethods.cs:8:20:8:23 | true |
| ExitMethods.cs:9:9:9:15 | return ...; | ExitMethods.cs:9:9:9:15 | return ...; |
| ExitMethods.cs:13:5:16:5 | {...} | ExitMethods.cs:13:5:16:5 | {...} |
| ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | ExitMethods.cs:14:20:14:24 | false |
| ExitMethods.cs:14:9:14:26 | ...; | ExitMethods.cs:14:9:14:26 | ...; |
| ExitMethods.cs:14:20:14:24 | false | ExitMethods.cs:14:20:14:24 | false |
| ExitMethods.cs:15:9:15:15 | return ...; | ExitMethods.cs:15:9:15:15 | return ...; |
| ExitMethods.cs:19:5:22:5 | {...} | ExitMethods.cs:19:5:22:5 | {...} |
| ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | ExitMethods.cs:20:21:20:24 | true |
| ExitMethods.cs:20:9:20:26 | ...; | ExitMethods.cs:20:9:20:26 | ...; |
| ExitMethods.cs:20:21:20:24 | true | ExitMethods.cs:20:21:20:24 | true |
| ExitMethods.cs:21:9:21:15 | return ...; | ExitMethods.cs:21:9:21:15 | return ...; |
| ExitMethods.cs:25:5:28:5 | {...} | ExitMethods.cs:25:5:28:5 | {...} |
| ExitMethods.cs:26:9:26:14 | call to method Exit | ExitMethods.cs:26:9:26:14 | this access |
| ExitMethods.cs:26:9:26:14 | this access | ExitMethods.cs:26:9:26:14 | this access |
| ExitMethods.cs:26:9:26:15 | ...; | ExitMethods.cs:26:9:26:15 | ...; |
| ExitMethods.cs:27:9:27:15 | return ...; | ExitMethods.cs:27:9:27:15 | return ...; |
| ExitMethods.cs:31:5:34:5 | {...} | ExitMethods.cs:31:5:34:5 | {...} |
| ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | ExitMethods.cs:32:9:32:25 | this access |
| ExitMethods.cs:32:9:32:25 | this access | ExitMethods.cs:32:9:32:25 | this access |
| ExitMethods.cs:32:9:32:26 | ...; | ExitMethods.cs:32:9:32:26 | ...; |
| ExitMethods.cs:33:9:33:15 | return ...; | ExitMethods.cs:33:9:33:15 | return ...; |
| ExitMethods.cs:37:5:50:5 | {...} | ExitMethods.cs:37:5:50:5 | {...} |
| ExitMethods.cs:38:9:49:9 | try {...} ... | ExitMethods.cs:38:9:49:9 | try {...} ... |
| ExitMethods.cs:39:9:41:9 | {...} | ExitMethods.cs:39:9:41:9 | {...} |
| ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:40:25:40:29 | false |
| ExitMethods.cs:40:13:40:31 | ...; | ExitMethods.cs:40:13:40:31 | ...; |
| ExitMethods.cs:40:25:40:29 | false | ExitMethods.cs:40:25:40:29 | false |
| ExitMethods.cs:42:9:45:9 | catch (...) {...} | ExitMethods.cs:42:9:45:9 | catch (...) {...} |
| ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:43:9:45:9 | {...} |
| ExitMethods.cs:44:13:44:19 | return ...; | ExitMethods.cs:44:13:44:19 | return ...; |
| ExitMethods.cs:46:9:49:9 | catch (...) {...} | ExitMethods.cs:46:9:49:9 | catch (...) {...} |
| ExitMethods.cs:47:9:49:9 | {...} | ExitMethods.cs:47:9:49:9 | {...} |
| ExitMethods.cs:48:13:48:19 | return ...; | ExitMethods.cs:48:13:48:19 | return ...; |
| ExitMethods.cs:53:5:56:5 | {...} | ExitMethods.cs:53:5:56:5 | {...} |
| ExitMethods.cs:54:9:55:34 | if (...) ... | ExitMethods.cs:54:9:55:34 | if (...) ... |
| ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:54:13:54:13 | access to parameter b |
| ExitMethods.cs:55:13:55:34 | throw ...; | ExitMethods.cs:55:19:55:33 | object creation of type Exception |
| ExitMethods.cs:55:19:55:33 | object creation of type Exception | ExitMethods.cs:55:19:55:33 | object creation of type Exception |
| ExitMethods.cs:59:5:64:5 | {...} | ExitMethods.cs:59:5:64:5 | {...} |
| ExitMethods.cs:60:9:63:45 | if (...) ... | ExitMethods.cs:60:9:63:45 | if (...) ... |
| ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:60:13:60:13 | access to parameter b |
| ExitMethods.cs:61:13:61:34 | throw ...; | ExitMethods.cs:61:19:61:33 | object creation of type Exception |
| ExitMethods.cs:61:19:61:33 | object creation of type Exception | ExitMethods.cs:61:19:61:33 | object creation of type Exception |
| ExitMethods.cs:63:13:63:45 | throw ...; | ExitMethods.cs:63:41:63:43 | "b" |
| ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException | ExitMethods.cs:63:41:63:43 | "b" |
| ExitMethods.cs:63:41:63:43 | "b" | ExitMethods.cs:63:41:63:43 | "b" |
| ExitMethods.cs:67:5:69:5 | {...} | ExitMethods.cs:67:5:69:5 | {...} |
| ExitMethods.cs:68:9:68:27 | call to method Exit | ExitMethods.cs:68:26:68:26 | 0 |
| ExitMethods.cs:68:9:68:28 | ...; | ExitMethods.cs:68:9:68:28 | ...; |
| ExitMethods.cs:68:26:68:26 | 0 | ExitMethods.cs:68:26:68:26 | 0 |
| ExitMethods.cs:72:5:74:5 | {...} | ExitMethods.cs:72:5:74:5 | {...} |
| ExitMethods.cs:73:9:73:47 | call to method Exit | ExitMethods.cs:73:9:73:47 | call to method Exit |
| ExitMethods.cs:73:9:73:48 | ...; | ExitMethods.cs:73:9:73:48 | ...; |
| ExitMethods.cs:77:5:79:5 | {...} | ExitMethods.cs:77:5:79:5 | {...} |
| ExitMethods.cs:78:9:78:77 | return ...; | ExitMethods.cs:78:16:78:76 | ... ? ... : ... |
| ExitMethods.cs:78:16:78:20 | access to parameter input | ExitMethods.cs:78:16:78:20 | access to parameter input |
| ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:16:78:20 | access to parameter input |
| ExitMethods.cs:78:16:78:76 | ... ? ... : ... | ExitMethods.cs:78:16:78:76 | ... ? ... : ... |
| ExitMethods.cs:78:25:78:25 | 0 | ExitMethods.cs:78:25:78:25 | 0 |
| ExitMethods.cs:78:25:78:25 | (...) ... | ExitMethods.cs:78:25:78:25 | 0 |
| ExitMethods.cs:78:29:78:29 | 1 | ExitMethods.cs:78:29:78:29 | 1 |
| ExitMethods.cs:78:29:78:29 | (...) ... | ExitMethods.cs:78:29:78:29 | 1 |
| ExitMethods.cs:78:29:78:37 | ... / ... | ExitMethods.cs:78:29:78:29 | 1 |
| ExitMethods.cs:78:33:78:37 | access to parameter input | ExitMethods.cs:78:33:78:37 | access to parameter input |
| ExitMethods.cs:78:41:78:76 | throw ... | ExitMethods.cs:78:69:78:75 | "input" |
| ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException | ExitMethods.cs:78:69:78:75 | "input" |
| ExitMethods.cs:78:69:78:75 | "input" | ExitMethods.cs:78:69:78:75 | "input" |
| ExitMethods.cs:82:5:84:5 | {...} | ExitMethods.cs:82:5:84:5 | {...} |
| ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:83:16:83:38 | ... ? ... : ... |
| ExitMethods.cs:83:16:83:16 | access to parameter s | ExitMethods.cs:83:16:83:16 | access to parameter s |
| ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:16:83:16 | access to parameter s |
| ExitMethods.cs:83:16:83:38 | ... ? ... : ... | ExitMethods.cs:83:16:83:38 | ... ? ... : ... |
| ExitMethods.cs:83:27:83:29 | - | ExitMethods.cs:83:27:83:29 | - |
| ExitMethods.cs:83:34:83:34 | 0 | ExitMethods.cs:83:34:83:34 | 0 |
| ExitMethods.cs:83:38:83:38 | 1 | ExitMethods.cs:83:38:83:38 | 1 |
| ExitMethods.cs:91:35:91:37 | {...} | ExitMethods.cs:91:35:91:37 | {...} |
| ExitMethods.cs:8:5:11:5 | {...} | ExitMethods.cs:8:5:11:5 | {...} |
| ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | ExitMethods.cs:9:20:9:23 | true |
| ExitMethods.cs:9:9:9:25 | ...; | ExitMethods.cs:9:9:9:25 | ...; |
| ExitMethods.cs:9:20:9:23 | true | ExitMethods.cs:9:20:9:23 | true |
| ExitMethods.cs:10:9:10:15 | return ...; | ExitMethods.cs:10:9:10:15 | return ...; |
| ExitMethods.cs:14:5:17:5 | {...} | ExitMethods.cs:14:5:17:5 | {...} |
| ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | ExitMethods.cs:15:20:15:24 | false |
| ExitMethods.cs:15:9:15:26 | ...; | ExitMethods.cs:15:9:15:26 | ...; |
| ExitMethods.cs:15:20:15:24 | false | ExitMethods.cs:15:20:15:24 | false |
| ExitMethods.cs:16:9:16:15 | return ...; | ExitMethods.cs:16:9:16:15 | return ...; |
| ExitMethods.cs:20:5:23:5 | {...} | ExitMethods.cs:20:5:23:5 | {...} |
| ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | ExitMethods.cs:21:21:21:24 | true |
| ExitMethods.cs:21:9:21:26 | ...; | ExitMethods.cs:21:9:21:26 | ...; |
| ExitMethods.cs:21:21:21:24 | true | ExitMethods.cs:21:21:21:24 | true |
| ExitMethods.cs:22:9:22:15 | return ...; | ExitMethods.cs:22:9:22:15 | return ...; |
| ExitMethods.cs:26:5:29:5 | {...} | ExitMethods.cs:26:5:29:5 | {...} |
| ExitMethods.cs:27:9:27:14 | call to method Exit | ExitMethods.cs:27:9:27:14 | this access |
| ExitMethods.cs:27:9:27:14 | this access | ExitMethods.cs:27:9:27:14 | this access |
| ExitMethods.cs:27:9:27:15 | ...; | ExitMethods.cs:27:9:27:15 | ...; |
| ExitMethods.cs:28:9:28:15 | return ...; | ExitMethods.cs:28:9:28:15 | return ...; |
| ExitMethods.cs:32:5:35:5 | {...} | ExitMethods.cs:32:5:35:5 | {...} |
| ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | ExitMethods.cs:33:9:33:25 | this access |
| ExitMethods.cs:33:9:33:25 | this access | ExitMethods.cs:33:9:33:25 | this access |
| ExitMethods.cs:33:9:33:26 | ...; | ExitMethods.cs:33:9:33:26 | ...; |
| ExitMethods.cs:34:9:34:15 | return ...; | ExitMethods.cs:34:9:34:15 | return ...; |
| ExitMethods.cs:38:5:51:5 | {...} | ExitMethods.cs:38:5:51:5 | {...} |
| ExitMethods.cs:39:9:50:9 | try {...} ... | ExitMethods.cs:39:9:50:9 | try {...} ... |
| ExitMethods.cs:40:9:42:9 | {...} | ExitMethods.cs:40:9:42:9 | {...} |
| ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:41:25:41:29 | false |
| ExitMethods.cs:41:13:41:31 | ...; | ExitMethods.cs:41:13:41:31 | ...; |
| ExitMethods.cs:41:25:41:29 | false | ExitMethods.cs:41:25:41:29 | false |
| ExitMethods.cs:43:9:46:9 | catch (...) {...} | ExitMethods.cs:43:9:46:9 | catch (...) {...} |
| ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:44:9:46:9 | {...} |
| ExitMethods.cs:45:13:45:19 | return ...; | ExitMethods.cs:45:13:45:19 | return ...; |
| ExitMethods.cs:47:9:50:9 | catch (...) {...} | ExitMethods.cs:47:9:50:9 | catch (...) {...} |
| ExitMethods.cs:48:9:50:9 | {...} | ExitMethods.cs:48:9:50:9 | {...} |
| ExitMethods.cs:49:13:49:19 | return ...; | ExitMethods.cs:49:13:49:19 | return ...; |
| ExitMethods.cs:54:5:57:5 | {...} | ExitMethods.cs:54:5:57:5 | {...} |
| ExitMethods.cs:55:9:56:34 | if (...) ... | ExitMethods.cs:55:9:56:34 | if (...) ... |
| ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:55:13:55:13 | access to parameter b |
| ExitMethods.cs:56:13:56:34 | throw ...; | ExitMethods.cs:56:19:56:33 | object creation of type Exception |
| ExitMethods.cs:56:19:56:33 | object creation of type Exception | ExitMethods.cs:56:19:56:33 | object creation of type Exception |
| ExitMethods.cs:60:5:65:5 | {...} | ExitMethods.cs:60:5:65:5 | {...} |
| ExitMethods.cs:61:9:64:45 | if (...) ... | ExitMethods.cs:61:9:64:45 | if (...) ... |
| ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:61:13:61:13 | access to parameter b |
| ExitMethods.cs:62:13:62:34 | throw ...; | ExitMethods.cs:62:19:62:33 | object creation of type Exception |
| ExitMethods.cs:62:19:62:33 | object creation of type Exception | ExitMethods.cs:62:19:62:33 | object creation of type Exception |
| ExitMethods.cs:64:13:64:45 | throw ...; | ExitMethods.cs:64:41:64:43 | "b" |
| ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException | ExitMethods.cs:64:41:64:43 | "b" |
| ExitMethods.cs:64:41:64:43 | "b" | ExitMethods.cs:64:41:64:43 | "b" |
| ExitMethods.cs:68:5:70:5 | {...} | ExitMethods.cs:68:5:70:5 | {...} |
| ExitMethods.cs:69:9:69:27 | call to method Exit | ExitMethods.cs:69:26:69:26 | 0 |
| ExitMethods.cs:69:9:69:28 | ...; | ExitMethods.cs:69:9:69:28 | ...; |
| ExitMethods.cs:69:26:69:26 | 0 | ExitMethods.cs:69:26:69:26 | 0 |
| ExitMethods.cs:73:5:83:5 | {...} | ExitMethods.cs:73:5:83:5 | {...} |
| ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:74:9:82:9 | try {...} ... |
| ExitMethods.cs:75:9:77:9 | {...} | ExitMethods.cs:75:9:77:9 | {...} |
| ExitMethods.cs:76:13:76:18 | call to method Exit | ExitMethods.cs:76:13:76:18 | this access |
| ExitMethods.cs:76:13:76:18 | this access | ExitMethods.cs:76:13:76:18 | this access |
| ExitMethods.cs:76:13:76:19 | ...; | ExitMethods.cs:76:13:76:19 | ...; |
| ExitMethods.cs:79:9:82:9 | {...} | ExitMethods.cs:79:9:82:9 | {...} |
| ExitMethods.cs:81:13:81:40 | call to method WriteLine | ExitMethods.cs:81:38:81:39 | "" |
| ExitMethods.cs:81:13:81:41 | ...; | ExitMethods.cs:81:13:81:41 | ...; |
| ExitMethods.cs:81:38:81:39 | "" | ExitMethods.cs:81:38:81:39 | "" |
| ExitMethods.cs:86:5:88:5 | {...} | ExitMethods.cs:86:5:88:5 | {...} |
| ExitMethods.cs:87:9:87:47 | call to method Exit | ExitMethods.cs:87:9:87:47 | call to method Exit |
| ExitMethods.cs:87:9:87:48 | ...; | ExitMethods.cs:87:9:87:48 | ...; |
| ExitMethods.cs:91:5:93:5 | {...} | ExitMethods.cs:91:5:93:5 | {...} |
| ExitMethods.cs:92:9:92:77 | return ...; | ExitMethods.cs:92:16:92:76 | ... ? ... : ... |
| ExitMethods.cs:92:16:92:20 | access to parameter input | ExitMethods.cs:92:16:92:20 | access to parameter input |
| ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:16:92:20 | access to parameter input |
| ExitMethods.cs:92:16:92:76 | ... ? ... : ... | ExitMethods.cs:92:16:92:76 | ... ? ... : ... |
| ExitMethods.cs:92:25:92:25 | 0 | ExitMethods.cs:92:25:92:25 | 0 |
| ExitMethods.cs:92:25:92:25 | (...) ... | ExitMethods.cs:92:25:92:25 | 0 |
| ExitMethods.cs:92:29:92:29 | 1 | ExitMethods.cs:92:29:92:29 | 1 |
| ExitMethods.cs:92:29:92:29 | (...) ... | ExitMethods.cs:92:29:92:29 | 1 |
| ExitMethods.cs:92:29:92:37 | ... / ... | ExitMethods.cs:92:29:92:29 | 1 |
| ExitMethods.cs:92:33:92:37 | access to parameter input | ExitMethods.cs:92:33:92:37 | access to parameter input |
| ExitMethods.cs:92:41:92:76 | throw ... | ExitMethods.cs:92:69:92:75 | "input" |
| ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException | ExitMethods.cs:92:69:92:75 | "input" |
| ExitMethods.cs:92:69:92:75 | "input" | ExitMethods.cs:92:69:92:75 | "input" |
| ExitMethods.cs:96:5:98:5 | {...} | ExitMethods.cs:96:5:98:5 | {...} |
| ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:97:16:97:38 | ... ? ... : ... |
| ExitMethods.cs:97:16:97:16 | access to parameter s | ExitMethods.cs:97:16:97:16 | access to parameter s |
| ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:16:97:16 | access to parameter s |
| ExitMethods.cs:97:16:97:38 | ... ? ... : ... | ExitMethods.cs:97:16:97:38 | ... ? ... : ... |
| ExitMethods.cs:97:27:97:29 | - | ExitMethods.cs:97:27:97:29 | - |
| ExitMethods.cs:97:34:97:34 | 0 | ExitMethods.cs:97:34:97:34 | 0 |
| ExitMethods.cs:97:38:97:38 | 1 | ExitMethods.cs:97:38:97:38 | 1 |
| ExitMethods.cs:101:5:104:5 | {...} | ExitMethods.cs:101:5:104:5 | {...} |
| ExitMethods.cs:102:9:102:28 | call to method IsTrue | ExitMethods.cs:102:23:102:27 | false |
| ExitMethods.cs:102:9:102:29 | ...; | ExitMethods.cs:102:9:102:29 | ...; |
| ExitMethods.cs:102:23:102:27 | false | ExitMethods.cs:102:23:102:27 | false |
| ExitMethods.cs:103:9:103:18 | ... ...; | ExitMethods.cs:103:9:103:18 | ... ...; |
| ExitMethods.cs:103:13:103:13 | access to local variable x | ExitMethods.cs:103:13:103:13 | access to local variable x |
| ExitMethods.cs:103:13:103:17 | Int32 x = ... | ExitMethods.cs:103:13:103:13 | access to local variable x |
| ExitMethods.cs:103:17:103:17 | 0 | ExitMethods.cs:103:17:103:17 | 0 |
| ExitMethods.cs:107:5:110:5 | {...} | ExitMethods.cs:107:5:110:5 | {...} |
| ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | ExitMethods.cs:108:9:108:26 | this access |
| ExitMethods.cs:108:9:108:26 | this access | ExitMethods.cs:108:9:108:26 | this access |
| ExitMethods.cs:108:9:108:27 | ...; | ExitMethods.cs:108:9:108:27 | ...; |
| ExitMethods.cs:109:9:109:18 | ... ...; | ExitMethods.cs:109:9:109:18 | ... ...; |
| ExitMethods.cs:109:13:109:13 | access to local variable x | ExitMethods.cs:109:13:109:13 | access to local variable x |
| ExitMethods.cs:109:13:109:17 | Int32 x = ... | ExitMethods.cs:109:13:109:13 | access to local variable x |
| ExitMethods.cs:109:17:109:17 | 0 | ExitMethods.cs:109:17:109:17 | 0 |
| ExitMethods.cs:112:33:112:49 | call to method IsFalse | ExitMethods.cs:112:48:112:48 | access to parameter b |
| ExitMethods.cs:112:48:112:48 | access to parameter b | ExitMethods.cs:112:48:112:48 | access to parameter b |
| ExitMethods.cs:115:5:118:5 | {...} | ExitMethods.cs:115:5:118:5 | {...} |
| ExitMethods.cs:116:9:116:25 | call to method AssertFalse | ExitMethods.cs:116:9:116:25 | this access |
| ExitMethods.cs:116:9:116:25 | this access | ExitMethods.cs:116:9:116:25 | this access |
| ExitMethods.cs:116:9:116:26 | ...; | ExitMethods.cs:116:9:116:26 | ...; |
| ExitMethods.cs:116:21:116:24 | true | ExitMethods.cs:116:21:116:24 | true |
| ExitMethods.cs:117:9:117:18 | ... ...; | ExitMethods.cs:117:9:117:18 | ... ...; |
| ExitMethods.cs:117:13:117:13 | access to local variable x | ExitMethods.cs:117:13:117:13 | access to local variable x |
| ExitMethods.cs:117:13:117:17 | Int32 x = ... | ExitMethods.cs:117:13:117:13 | access to local variable x |
| ExitMethods.cs:117:17:117:17 | 0 | ExitMethods.cs:117:17:117:17 | 0 |
| Extensions.cs:6:5:8:5 | {...} | Extensions.cs:6:5:8:5 | {...} |
| Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:7:28:7:28 | access to parameter s |
| Extensions.cs:7:16:7:29 | call to method Parse | Extensions.cs:7:28:7:28 | access to parameter s |

View File

@@ -1,5 +1,6 @@
import csharp
import Common
import ControlFlow::Internal
from ControlFlowElement cfe
from SourceControlFlowElement cfe
select cfe, first(cfe)

View File

@@ -32,19 +32,23 @@
| Conditions.cs:70:9:70:10 | M6 | Conditions.cs:71:5:84:5 | {...} |
| Conditions.cs:86:9:86:10 | M7 | Conditions.cs:87:5:100:5 | {...} |
| Conditions.cs:102:12:102:13 | M8 | Conditions.cs:103:5:111:5 | {...} |
| ExitMethods.cs:6:10:6:11 | M1 | ExitMethods.cs:7:5:10:5 | {...} |
| ExitMethods.cs:12:10:12:11 | M2 | ExitMethods.cs:13:5:16:5 | {...} |
| ExitMethods.cs:18:10:18:11 | M3 | ExitMethods.cs:19:5:22:5 | {...} |
| ExitMethods.cs:24:10:24:11 | M4 | ExitMethods.cs:25:5:28:5 | {...} |
| ExitMethods.cs:30:10:30:11 | M5 | ExitMethods.cs:31:5:34:5 | {...} |
| ExitMethods.cs:36:10:36:11 | M6 | ExitMethods.cs:37:5:50:5 | {...} |
| ExitMethods.cs:52:17:52:26 | ErrorMaybe | ExitMethods.cs:53:5:56:5 | {...} |
| ExitMethods.cs:58:17:58:27 | ErrorAlways | ExitMethods.cs:59:5:64:5 | {...} |
| ExitMethods.cs:66:10:66:13 | Exit | ExitMethods.cs:67:5:69:5 | {...} |
| ExitMethods.cs:71:10:71:24 | ApplicationExit | ExitMethods.cs:72:5:74:5 | {...} |
| ExitMethods.cs:76:13:76:21 | ThrowExpr | ExitMethods.cs:77:5:79:5 | {...} |
| ExitMethods.cs:81:16:81:34 | ExtensionMethodCall | ExitMethods.cs:82:5:84:5 | {...} |
| ExitMethods.cs:91:28:91:31 | Exit | ExitMethods.cs:91:35:91:37 | {...} |
| ExitMethods.cs:7:10:7:11 | M1 | ExitMethods.cs:8:5:11:5 | {...} |
| ExitMethods.cs:13:10:13:11 | M2 | ExitMethods.cs:14:5:17:5 | {...} |
| ExitMethods.cs:19:10:19:11 | M3 | ExitMethods.cs:20:5:23:5 | {...} |
| ExitMethods.cs:25:10:25:11 | M4 | ExitMethods.cs:26:5:29:5 | {...} |
| ExitMethods.cs:31:10:31:11 | M5 | ExitMethods.cs:32:5:35:5 | {...} |
| ExitMethods.cs:37:10:37:11 | M6 | ExitMethods.cs:38:5:51:5 | {...} |
| ExitMethods.cs:53:17:53:26 | ErrorMaybe | ExitMethods.cs:54:5:57:5 | {...} |
| ExitMethods.cs:59:17:59:27 | ErrorAlways | ExitMethods.cs:60:5:65:5 | {...} |
| ExitMethods.cs:67:10:67:13 | Exit | ExitMethods.cs:68:5:70:5 | {...} |
| ExitMethods.cs:72:10:72:18 | ExitInTry | ExitMethods.cs:73:5:83:5 | {...} |
| ExitMethods.cs:85:10:85:24 | ApplicationExit | ExitMethods.cs:86:5:88:5 | {...} |
| ExitMethods.cs:90:13:90:21 | ThrowExpr | ExitMethods.cs:91:5:93:5 | {...} |
| ExitMethods.cs:95:16:95:34 | ExtensionMethodCall | ExitMethods.cs:96:5:98:5 | {...} |
| ExitMethods.cs:100:17:100:32 | FailingAssertion | ExitMethods.cs:101:5:104:5 | {...} |
| ExitMethods.cs:106:17:106:33 | FailingAssertion2 | ExitMethods.cs:107:5:110:5 | {...} |
| ExitMethods.cs:112:10:112:20 | AssertFalse | ExitMethods.cs:112:48:112:48 | access to parameter b |
| ExitMethods.cs:114:17:114:33 | FailingAssertion3 | ExitMethods.cs:115:5:118:5 | {...} |
| Extensions.cs:5:23:5:29 | ToInt32 | Extensions.cs:6:5:8:5 | {...} |
| Extensions.cs:10:24:10:29 | ToBool | Extensions.cs:11:5:13:5 | {...} |
| Extensions.cs:15:23:15:33 | CallToInt32 | Extensions.cs:15:48:15:50 | "0" |

View File

@@ -1,6 +1,7 @@
import csharp
import semmle.code.csharp.controlflow.ControlFlowElement
import Common
from Callable c, ControlFlowElement cfn
from Callable c, SourceControlFlowElement cfn
where c.getEntryPoint().getASuccessor().getElement() = cfn
select c, cfn

View File

@@ -672,110 +672,146 @@
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:22:109:23 | "" | normal |
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:9:110:17 | return ...; | return |
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:16:110:16 | access to local variable x | normal |
| ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:9:9:9:15 | return ...; | return |
| ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | normal |
| ExitMethods.cs:8:9:8:25 | ...; | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | normal |
| ExitMethods.cs:8:20:8:23 | true | ExitMethods.cs:8:20:8:23 | true | normal |
| ExitMethods.cs:9:9:9:15 | return ...; | ExitMethods.cs:9:9:9:15 | return ...; | return |
| ExitMethods.cs:13:5:16:5 | {...} | ExitMethods.cs:15:9:15:15 | return ...; | return |
| ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | normal |
| ExitMethods.cs:14:9:14:26 | ...; | ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | normal |
| ExitMethods.cs:14:20:14:24 | false | ExitMethods.cs:14:20:14:24 | false | normal |
| ExitMethods.cs:15:9:15:15 | return ...; | ExitMethods.cs:15:9:15:15 | return ...; | return |
| ExitMethods.cs:19:5:22:5 | {...} | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:19:5:22:5 | {...} | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:19:5:22:5 | {...} | ExitMethods.cs:21:9:21:15 | return ...; | return |
| ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:20:9:20:26 | ...; | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:20:9:20:26 | ...; | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:20:21:20:24 | true | ExitMethods.cs:20:21:20:24 | true | normal |
| ExitMethods.cs:21:9:21:15 | return ...; | ExitMethods.cs:21:9:21:15 | return ...; | return |
| ExitMethods.cs:25:5:28:5 | {...} | ExitMethods.cs:26:9:26:14 | call to method Exit | return |
| ExitMethods.cs:25:5:28:5 | {...} | ExitMethods.cs:27:9:27:15 | return ...; | return |
| ExitMethods.cs:26:9:26:14 | call to method Exit | ExitMethods.cs:26:9:26:14 | call to method Exit | return |
| ExitMethods.cs:26:9:26:14 | this access | ExitMethods.cs:26:9:26:14 | this access | normal |
| ExitMethods.cs:26:9:26:15 | ...; | ExitMethods.cs:26:9:26:14 | call to method Exit | return |
| ExitMethods.cs:27:9:27:15 | return ...; | ExitMethods.cs:27:9:27:15 | return ...; | return |
| ExitMethods.cs:31:5:34:5 | {...} | ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | return |
| ExitMethods.cs:31:5:34:5 | {...} | ExitMethods.cs:33:9:33:15 | return ...; | return |
| ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | return |
| ExitMethods.cs:32:9:32:25 | this access | ExitMethods.cs:32:9:32:25 | this access | normal |
| ExitMethods.cs:32:9:32:26 | ...; | ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | return |
| ExitMethods.cs:33:9:33:15 | return ...; | ExitMethods.cs:33:9:33:15 | return ...; | return |
| ExitMethods.cs:37:5:50:5 | {...} | ExitMethods.cs:44:13:44:19 | return ...; | return |
| ExitMethods.cs:37:5:50:5 | {...} | ExitMethods.cs:48:13:48:19 | return ...; | return |
| ExitMethods.cs:38:9:49:9 | try {...} ... | ExitMethods.cs:44:13:44:19 | return ...; | return |
| ExitMethods.cs:38:9:49:9 | try {...} ... | ExitMethods.cs:48:13:48:19 | return ...; | return |
| ExitMethods.cs:39:9:41:9 | {...} | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:39:9:41:9 | {...} | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:40:13:40:31 | ...; | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:40:13:40:31 | ...; | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:40:25:40:29 | false | ExitMethods.cs:40:25:40:29 | false | normal |
| ExitMethods.cs:42:9:45:9 | catch (...) {...} | ExitMethods.cs:42:9:45:9 | catch (...) {...} | no-match |
| ExitMethods.cs:42:9:45:9 | catch (...) {...} | ExitMethods.cs:44:13:44:19 | return ...; | return |
| ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:44:13:44:19 | return ...; | return |
| ExitMethods.cs:44:13:44:19 | return ...; | ExitMethods.cs:44:13:44:19 | return ...; | return |
| ExitMethods.cs:46:9:49:9 | catch (...) {...} | ExitMethods.cs:48:13:48:19 | return ...; | return |
| ExitMethods.cs:47:9:49:9 | {...} | ExitMethods.cs:48:13:48:19 | return ...; | return |
| ExitMethods.cs:48:13:48:19 | return ...; | ExitMethods.cs:48:13:48:19 | return ...; | return |
| ExitMethods.cs:53:5:56:5 | {...} | ExitMethods.cs:54:13:54:13 | access to parameter b | false/false |
| ExitMethods.cs:53:5:56:5 | {...} | ExitMethods.cs:55:13:55:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:54:9:55:34 | if (...) ... | ExitMethods.cs:54:13:54:13 | access to parameter b | false/false |
| ExitMethods.cs:54:9:55:34 | if (...) ... | ExitMethods.cs:55:13:55:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:54:13:54:13 | access to parameter b | false/false |
| ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:54:13:54:13 | access to parameter b | true/true |
| ExitMethods.cs:55:13:55:34 | throw ...; | ExitMethods.cs:55:13:55:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:55:19:55:33 | object creation of type Exception | ExitMethods.cs:55:19:55:33 | object creation of type Exception | normal |
| ExitMethods.cs:59:5:64:5 | {...} | ExitMethods.cs:61:13:61:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:59:5:64:5 | {...} | ExitMethods.cs:63:13:63:45 | throw ...; | throw(ArgumentException) |
| ExitMethods.cs:60:9:63:45 | if (...) ... | ExitMethods.cs:61:13:61:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:60:9:63:45 | if (...) ... | ExitMethods.cs:63:13:63:45 | throw ...; | throw(ArgumentException) |
| ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:60:13:60:13 | access to parameter b | false/false |
| ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:60:13:60:13 | access to parameter b | true/true |
| ExitMethods.cs:61:13:61:34 | throw ...; | ExitMethods.cs:61:13:61:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:61:19:61:33 | object creation of type Exception | ExitMethods.cs:61:19:61:33 | object creation of type Exception | normal |
| ExitMethods.cs:63:13:63:45 | throw ...; | ExitMethods.cs:63:13:63:45 | throw ...; | throw(ArgumentException) |
| ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException | ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException | normal |
| ExitMethods.cs:63:41:63:43 | "b" | ExitMethods.cs:63:41:63:43 | "b" | normal |
| ExitMethods.cs:67:5:69:5 | {...} | ExitMethods.cs:68:9:68:27 | call to method Exit | return |
| ExitMethods.cs:68:9:68:27 | call to method Exit | ExitMethods.cs:68:9:68:27 | call to method Exit | return |
| ExitMethods.cs:68:9:68:28 | ...; | ExitMethods.cs:68:9:68:27 | call to method Exit | return |
| ExitMethods.cs:68:26:68:26 | 0 | ExitMethods.cs:68:26:68:26 | 0 | normal |
| ExitMethods.cs:72:5:74:5 | {...} | ExitMethods.cs:73:9:73:47 | call to method Exit | return |
| ExitMethods.cs:73:9:73:47 | call to method Exit | ExitMethods.cs:73:9:73:47 | call to method Exit | return |
| ExitMethods.cs:73:9:73:48 | ...; | ExitMethods.cs:73:9:73:47 | call to method Exit | return |
| ExitMethods.cs:77:5:79:5 | {...} | ExitMethods.cs:78:9:78:77 | return ...; | return |
| ExitMethods.cs:77:5:79:5 | {...} | ExitMethods.cs:78:41:78:76 | throw ... | throw(ArgumentException) |
| ExitMethods.cs:78:9:78:77 | return ...; | ExitMethods.cs:78:9:78:77 | return ...; | return |
| ExitMethods.cs:78:9:78:77 | return ...; | ExitMethods.cs:78:41:78:76 | throw ... | throw(ArgumentException) |
| ExitMethods.cs:78:16:78:20 | access to parameter input | ExitMethods.cs:78:16:78:20 | access to parameter input | normal |
| ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:16:78:25 | ... != ... | false/false |
| ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:16:78:25 | ... != ... | true/true |
| ExitMethods.cs:78:16:78:76 | ... ? ... : ... | ExitMethods.cs:78:29:78:37 | ... / ... | normal |
| ExitMethods.cs:78:16:78:76 | ... ? ... : ... | ExitMethods.cs:78:41:78:76 | throw ... | throw(ArgumentException) |
| ExitMethods.cs:78:25:78:25 | 0 | ExitMethods.cs:78:25:78:25 | 0 | normal |
| ExitMethods.cs:78:25:78:25 | (...) ... | ExitMethods.cs:78:25:78:25 | (...) ... | normal |
| ExitMethods.cs:78:29:78:29 | 1 | ExitMethods.cs:78:29:78:29 | 1 | normal |
| ExitMethods.cs:78:29:78:29 | (...) ... | ExitMethods.cs:78:29:78:29 | (...) ... | normal |
| ExitMethods.cs:78:29:78:37 | ... / ... | ExitMethods.cs:78:29:78:37 | ... / ... | normal |
| ExitMethods.cs:78:33:78:37 | access to parameter input | ExitMethods.cs:78:33:78:37 | access to parameter input | normal |
| ExitMethods.cs:78:41:78:76 | throw ... | ExitMethods.cs:78:41:78:76 | throw ... | throw(ArgumentException) |
| ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException | ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException | normal |
| ExitMethods.cs:78:69:78:75 | "input" | ExitMethods.cs:78:69:78:75 | "input" | normal |
| ExitMethods.cs:82:5:84:5 | {...} | ExitMethods.cs:83:9:83:39 | return ...; | return |
| ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:83:9:83:39 | return ...; | return |
| ExitMethods.cs:83:16:83:16 | access to parameter s | ExitMethods.cs:83:16:83:16 | access to parameter s | normal |
| ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:16:83:30 | call to method Contains | false/false |
| ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:16:83:30 | call to method Contains | true/true |
| ExitMethods.cs:83:16:83:38 | ... ? ... : ... | ExitMethods.cs:83:34:83:34 | 0 | normal |
| ExitMethods.cs:83:16:83:38 | ... ? ... : ... | ExitMethods.cs:83:38:83:38 | 1 | normal |
| ExitMethods.cs:83:27:83:29 | - | ExitMethods.cs:83:27:83:29 | - | normal |
| ExitMethods.cs:83:34:83:34 | 0 | ExitMethods.cs:83:34:83:34 | 0 | normal |
| ExitMethods.cs:83:38:83:38 | 1 | ExitMethods.cs:83:38:83:38 | 1 | normal |
| ExitMethods.cs:91:35:91:37 | {...} | ExitMethods.cs:91:35:91:37 | {...} | normal |
| ExitMethods.cs:8:5:11:5 | {...} | ExitMethods.cs:10:9:10:15 | return ...; | return |
| ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | normal |
| ExitMethods.cs:9:9:9:25 | ...; | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | normal |
| ExitMethods.cs:9:20:9:23 | true | ExitMethods.cs:9:20:9:23 | true | normal |
| ExitMethods.cs:10:9:10:15 | return ...; | ExitMethods.cs:10:9:10:15 | return ...; | return |
| ExitMethods.cs:14:5:17:5 | {...} | ExitMethods.cs:16:9:16:15 | return ...; | return |
| ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | normal |
| ExitMethods.cs:15:9:15:26 | ...; | ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | normal |
| ExitMethods.cs:15:20:15:24 | false | ExitMethods.cs:15:20:15:24 | false | normal |
| ExitMethods.cs:16:9:16:15 | return ...; | ExitMethods.cs:16:9:16:15 | return ...; | return |
| ExitMethods.cs:20:5:23:5 | {...} | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:20:5:23:5 | {...} | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:20:5:23:5 | {...} | ExitMethods.cs:22:9:22:15 | return ...; | return |
| ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:21:9:21:26 | ...; | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:21:9:21:26 | ...; | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:21:21:21:24 | true | ExitMethods.cs:21:21:21:24 | true | normal |
| ExitMethods.cs:22:9:22:15 | return ...; | ExitMethods.cs:22:9:22:15 | return ...; | return |
| ExitMethods.cs:26:5:29:5 | {...} | ExitMethods.cs:27:9:27:14 | call to method Exit | return |
| ExitMethods.cs:26:5:29:5 | {...} | ExitMethods.cs:28:9:28:15 | return ...; | return |
| ExitMethods.cs:27:9:27:14 | call to method Exit | ExitMethods.cs:27:9:27:14 | call to method Exit | return |
| ExitMethods.cs:27:9:27:14 | this access | ExitMethods.cs:27:9:27:14 | this access | normal |
| ExitMethods.cs:27:9:27:15 | ...; | ExitMethods.cs:27:9:27:14 | call to method Exit | return |
| ExitMethods.cs:28:9:28:15 | return ...; | ExitMethods.cs:28:9:28:15 | return ...; | return |
| ExitMethods.cs:32:5:35:5 | {...} | ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | return |
| ExitMethods.cs:32:5:35:5 | {...} | ExitMethods.cs:34:9:34:15 | return ...; | return |
| ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | return |
| ExitMethods.cs:33:9:33:25 | this access | ExitMethods.cs:33:9:33:25 | this access | normal |
| ExitMethods.cs:33:9:33:26 | ...; | ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | return |
| ExitMethods.cs:34:9:34:15 | return ...; | ExitMethods.cs:34:9:34:15 | return ...; | return |
| ExitMethods.cs:38:5:51:5 | {...} | ExitMethods.cs:45:13:45:19 | return ...; | return |
| ExitMethods.cs:38:5:51:5 | {...} | ExitMethods.cs:49:13:49:19 | return ...; | return |
| ExitMethods.cs:39:9:50:9 | try {...} ... | ExitMethods.cs:45:13:45:19 | return ...; | return |
| ExitMethods.cs:39:9:50:9 | try {...} ... | ExitMethods.cs:49:13:49:19 | return ...; | return |
| ExitMethods.cs:40:9:42:9 | {...} | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:40:9:42:9 | {...} | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:41:13:41:31 | ...; | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | throw(ArgumentException) |
| ExitMethods.cs:41:13:41:31 | ...; | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | throw(Exception) |
| ExitMethods.cs:41:25:41:29 | false | ExitMethods.cs:41:25:41:29 | false | normal |
| ExitMethods.cs:43:9:46:9 | catch (...) {...} | ExitMethods.cs:43:9:46:9 | catch (...) {...} | no-match |
| ExitMethods.cs:43:9:46:9 | catch (...) {...} | ExitMethods.cs:45:13:45:19 | return ...; | return |
| ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:45:13:45:19 | return ...; | return |
| ExitMethods.cs:45:13:45:19 | return ...; | ExitMethods.cs:45:13:45:19 | return ...; | return |
| ExitMethods.cs:47:9:50:9 | catch (...) {...} | ExitMethods.cs:49:13:49:19 | return ...; | return |
| ExitMethods.cs:48:9:50:9 | {...} | ExitMethods.cs:49:13:49:19 | return ...; | return |
| ExitMethods.cs:49:13:49:19 | return ...; | ExitMethods.cs:49:13:49:19 | return ...; | return |
| ExitMethods.cs:54:5:57:5 | {...} | ExitMethods.cs:55:13:55:13 | access to parameter b | false/false |
| ExitMethods.cs:54:5:57:5 | {...} | ExitMethods.cs:56:13:56:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:55:9:56:34 | if (...) ... | ExitMethods.cs:55:13:55:13 | access to parameter b | false/false |
| ExitMethods.cs:55:9:56:34 | if (...) ... | ExitMethods.cs:56:13:56:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:55:13:55:13 | access to parameter b | false/false |
| ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:55:13:55:13 | access to parameter b | true/true |
| ExitMethods.cs:56:13:56:34 | throw ...; | ExitMethods.cs:56:13:56:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:56:19:56:33 | object creation of type Exception | ExitMethods.cs:56:19:56:33 | object creation of type Exception | normal |
| ExitMethods.cs:60:5:65:5 | {...} | ExitMethods.cs:62:13:62:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:60:5:65:5 | {...} | ExitMethods.cs:64:13:64:45 | throw ...; | throw(ArgumentException) |
| ExitMethods.cs:61:9:64:45 | if (...) ... | ExitMethods.cs:62:13:62:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:61:9:64:45 | if (...) ... | ExitMethods.cs:64:13:64:45 | throw ...; | throw(ArgumentException) |
| ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:61:13:61:13 | access to parameter b | false/false |
| ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:61:13:61:13 | access to parameter b | true/true |
| ExitMethods.cs:62:13:62:34 | throw ...; | ExitMethods.cs:62:13:62:34 | throw ...; | throw(Exception) |
| ExitMethods.cs:62:19:62:33 | object creation of type Exception | ExitMethods.cs:62:19:62:33 | object creation of type Exception | normal |
| ExitMethods.cs:64:13:64:45 | throw ...; | ExitMethods.cs:64:13:64:45 | throw ...; | throw(ArgumentException) |
| ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException | ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException | normal |
| ExitMethods.cs:64:41:64:43 | "b" | ExitMethods.cs:64:41:64:43 | "b" | normal |
| ExitMethods.cs:68:5:70:5 | {...} | ExitMethods.cs:69:9:69:27 | call to method Exit | return |
| ExitMethods.cs:69:9:69:27 | call to method Exit | ExitMethods.cs:69:9:69:27 | call to method Exit | return |
| ExitMethods.cs:69:9:69:28 | ...; | ExitMethods.cs:69:9:69:27 | call to method Exit | return |
| ExitMethods.cs:69:26:69:26 | 0 | ExitMethods.cs:69:26:69:26 | 0 | normal |
| ExitMethods.cs:73:5:83:5 | {...} | ExitMethods.cs:81:13:81:40 | call to method WriteLine | return |
| ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:81:13:81:40 | call to method WriteLine | return |
| ExitMethods.cs:75:9:77:9 | {...} | ExitMethods.cs:76:13:76:18 | call to method Exit | return |
| ExitMethods.cs:76:13:76:18 | call to method Exit | ExitMethods.cs:76:13:76:18 | call to method Exit | return |
| ExitMethods.cs:76:13:76:18 | this access | ExitMethods.cs:76:13:76:18 | this access | normal |
| ExitMethods.cs:76:13:76:19 | ...; | ExitMethods.cs:76:13:76:18 | call to method Exit | return |
| ExitMethods.cs:79:9:82:9 | {...} | ExitMethods.cs:81:13:81:40 | call to method WriteLine | normal |
| ExitMethods.cs:81:13:81:40 | call to method WriteLine | ExitMethods.cs:81:13:81:40 | call to method WriteLine | normal |
| ExitMethods.cs:81:13:81:41 | ...; | ExitMethods.cs:81:13:81:40 | call to method WriteLine | normal |
| ExitMethods.cs:81:38:81:39 | "" | ExitMethods.cs:81:38:81:39 | "" | normal |
| ExitMethods.cs:86:5:88:5 | {...} | ExitMethods.cs:87:9:87:47 | call to method Exit | return |
| ExitMethods.cs:87:9:87:47 | call to method Exit | ExitMethods.cs:87:9:87:47 | call to method Exit | return |
| ExitMethods.cs:87:9:87:48 | ...; | ExitMethods.cs:87:9:87:47 | call to method Exit | return |
| ExitMethods.cs:91:5:93:5 | {...} | ExitMethods.cs:92:9:92:77 | return ...; | return |
| ExitMethods.cs:91:5:93:5 | {...} | ExitMethods.cs:92:41:92:76 | throw ... | throw(ArgumentException) |
| ExitMethods.cs:92:9:92:77 | return ...; | ExitMethods.cs:92:9:92:77 | return ...; | return |
| ExitMethods.cs:92:9:92:77 | return ...; | ExitMethods.cs:92:41:92:76 | throw ... | throw(ArgumentException) |
| ExitMethods.cs:92:16:92:20 | access to parameter input | ExitMethods.cs:92:16:92:20 | access to parameter input | normal |
| ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:16:92:25 | ... != ... | false/false |
| ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:16:92:25 | ... != ... | true/true |
| ExitMethods.cs:92:16:92:76 | ... ? ... : ... | ExitMethods.cs:92:29:92:37 | ... / ... | normal |
| ExitMethods.cs:92:16:92:76 | ... ? ... : ... | ExitMethods.cs:92:41:92:76 | throw ... | throw(ArgumentException) |
| ExitMethods.cs:92:25:92:25 | 0 | ExitMethods.cs:92:25:92:25 | 0 | normal |
| ExitMethods.cs:92:25:92:25 | (...) ... | ExitMethods.cs:92:25:92:25 | (...) ... | normal |
| ExitMethods.cs:92:29:92:29 | 1 | ExitMethods.cs:92:29:92:29 | 1 | normal |
| ExitMethods.cs:92:29:92:29 | (...) ... | ExitMethods.cs:92:29:92:29 | (...) ... | normal |
| ExitMethods.cs:92:29:92:37 | ... / ... | ExitMethods.cs:92:29:92:37 | ... / ... | normal |
| ExitMethods.cs:92:33:92:37 | access to parameter input | ExitMethods.cs:92:33:92:37 | access to parameter input | normal |
| ExitMethods.cs:92:41:92:76 | throw ... | ExitMethods.cs:92:41:92:76 | throw ... | throw(ArgumentException) |
| ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException | ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException | normal |
| ExitMethods.cs:92:69:92:75 | "input" | ExitMethods.cs:92:69:92:75 | "input" | normal |
| ExitMethods.cs:96:5:98:5 | {...} | ExitMethods.cs:97:9:97:39 | return ...; | return |
| ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:97:9:97:39 | return ...; | return |
| ExitMethods.cs:97:16:97:16 | access to parameter s | ExitMethods.cs:97:16:97:16 | access to parameter s | normal |
| ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:16:97:30 | call to method Contains | false/false |
| ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:16:97:30 | call to method Contains | true/true |
| ExitMethods.cs:97:16:97:38 | ... ? ... : ... | ExitMethods.cs:97:34:97:34 | 0 | normal |
| ExitMethods.cs:97:16:97:38 | ... ? ... : ... | ExitMethods.cs:97:38:97:38 | 1 | normal |
| ExitMethods.cs:97:27:97:29 | - | ExitMethods.cs:97:27:97:29 | - | normal |
| ExitMethods.cs:97:34:97:34 | 0 | ExitMethods.cs:97:34:97:34 | 0 | normal |
| ExitMethods.cs:97:38:97:38 | 1 | ExitMethods.cs:97:38:97:38 | 1 | normal |
| ExitMethods.cs:101:5:104:5 | {...} | ExitMethods.cs:103:13:103:17 | Int32 x = ... | normal |
| ExitMethods.cs:102:9:102:28 | call to method IsTrue | ExitMethods.cs:102:9:102:28 | call to method IsTrue | normal |
| ExitMethods.cs:102:9:102:29 | ...; | ExitMethods.cs:102:9:102:28 | call to method IsTrue | normal |
| ExitMethods.cs:102:23:102:27 | false | ExitMethods.cs:102:23:102:27 | false | normal |
| ExitMethods.cs:103:9:103:18 | ... ...; | ExitMethods.cs:103:13:103:17 | Int32 x = ... | normal |
| ExitMethods.cs:103:13:103:13 | access to local variable x | ExitMethods.cs:103:13:103:13 | access to local variable x | normal |
| ExitMethods.cs:103:13:103:17 | Int32 x = ... | ExitMethods.cs:103:13:103:17 | Int32 x = ... | normal |
| ExitMethods.cs:103:17:103:17 | 0 | ExitMethods.cs:103:17:103:17 | 0 | normal |
| ExitMethods.cs:107:5:110:5 | {...} | ExitMethods.cs:109:13:109:17 | Int32 x = ... | normal |
| ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | normal |
| ExitMethods.cs:108:9:108:26 | this access | ExitMethods.cs:108:9:108:26 | this access | normal |
| ExitMethods.cs:108:9:108:27 | ...; | ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | normal |
| ExitMethods.cs:109:9:109:18 | ... ...; | ExitMethods.cs:109:13:109:17 | Int32 x = ... | normal |
| ExitMethods.cs:109:13:109:13 | access to local variable x | ExitMethods.cs:109:13:109:13 | access to local variable x | normal |
| ExitMethods.cs:109:13:109:17 | Int32 x = ... | ExitMethods.cs:109:13:109:17 | Int32 x = ... | normal |
| ExitMethods.cs:109:17:109:17 | 0 | ExitMethods.cs:109:17:109:17 | 0 | normal |
| ExitMethods.cs:112:33:112:49 | call to method IsFalse | ExitMethods.cs:112:33:112:49 | call to method IsFalse | normal |
| ExitMethods.cs:112:48:112:48 | access to parameter b | ExitMethods.cs:112:48:112:48 | access to parameter b | normal |
| ExitMethods.cs:115:5:118:5 | {...} | ExitMethods.cs:117:13:117:17 | Int32 x = ... | normal |
| ExitMethods.cs:116:9:116:25 | call to method AssertFalse | ExitMethods.cs:116:9:116:25 | call to method AssertFalse | normal |
| ExitMethods.cs:116:9:116:25 | this access | ExitMethods.cs:116:9:116:25 | this access | normal |
| ExitMethods.cs:116:9:116:26 | ...; | ExitMethods.cs:116:9:116:25 | call to method AssertFalse | normal |
| ExitMethods.cs:116:21:116:24 | true | ExitMethods.cs:116:21:116:24 | true | normal |
| ExitMethods.cs:117:9:117:18 | ... ...; | ExitMethods.cs:117:13:117:17 | Int32 x = ... | normal |
| ExitMethods.cs:117:13:117:13 | access to local variable x | ExitMethods.cs:117:13:117:13 | access to local variable x | normal |
| ExitMethods.cs:117:13:117:17 | Int32 x = ... | ExitMethods.cs:117:13:117:17 | Int32 x = ... | normal |
| ExitMethods.cs:117:17:117:17 | 0 | ExitMethods.cs:117:17:117:17 | 0 | normal |
| Extensions.cs:6:5:8:5 | {...} | Extensions.cs:7:9:7:30 | return ...; | return |
| Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:7:9:7:30 | return ...; | return |
| Extensions.cs:7:16:7:29 | call to method Parse | Extensions.cs:7:16:7:29 | call to method Parse | normal |

View File

@@ -1,6 +1,7 @@
import csharp
import ControlFlow::Internal
private import semmle.code.csharp.controlflow.Completion
import Common
from ControlFlowElement cfe, Completion c
from SourceControlFlowElement cfe, Completion c
select cfe, last(cfe, c), c

View File

@@ -1,5 +1,6 @@
using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
class ExitMethods
{
@@ -68,6 +69,19 @@ class ExitMethods
Environment.Exit(0);
}
void ExitInTry()
{
try
{
Exit();
}
finally
{
// dead
System.Console.WriteLine("");
}
}
void ApplicationExit()
{
System.Windows.Forms.Application.Exit();
@@ -82,12 +96,26 @@ class ExitMethods
{
return s.Contains('-') ? 0 : 1;
}
}
namespace System.Windows.Forms
{
public class Application
public void FailingAssertion()
{
public static void Exit() { }
Assert.IsTrue(false);
var x = 0; // dead
}
public void FailingAssertion2()
{
FailingAssertion();
var x = 0; // dead
}
void AssertFalse(bool b) => Assert.IsFalse(b);
public void FailingAssertion3()
{
AssertFalse(true);
var x = 0; // dead
}
}
// semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Windows.cs ${testdir}/../../../resources/stubs/Microsoft.VisualStudio.TestTools.UnitTesting.cs

View File

@@ -96,6 +96,10 @@
| CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine |
| CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; |
| CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" |
| ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:79:9:82:9 | [finally: return] {...} |
| ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:81:13:81:40 | [finally: return] call to method WriteLine |
| ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:81:13:81:41 | [finally: return] ...; |
| ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:81:38:81:39 | [finally: return] "" |
| cflow.cs:148:9:155:9 | try {...} ... | cflow.cs:153:9:155:9 | [finally: exception(Exception)] {...} |
| cflow.cs:148:9:155:9 | try {...} ... | cflow.cs:153:9:155:9 | [finally: exception(OutOfMemoryException)] {...} |
| cflow.cs:148:9:155:9 | try {...} ... | cflow.cs:154:13:154:40 | [finally: exception(Exception)] call to method WriteLine |

View File

@@ -728,104 +728,144 @@
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... + ... | semmle.label | successor |
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | exit M8 | semmle.label | return |
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | return ...; | semmle.label | successor |
| ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:7:5:10:5 | {...} | semmle.label | successor |
| ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:8:9:8:25 | ...; | semmle.label | successor |
| ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:9:9:9:15 | return ...; | semmle.label | successor |
| ExitMethods.cs:8:9:8:25 | ...; | ExitMethods.cs:8:20:8:23 | true | semmle.label | successor |
| ExitMethods.cs:8:20:8:23 | true | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | semmle.label | successor |
| ExitMethods.cs:9:9:9:15 | return ...; | ExitMethods.cs:6:10:6:11 | exit M1 | semmle.label | return |
| ExitMethods.cs:12:10:12:11 | enter M2 | ExitMethods.cs:13:5:16:5 | {...} | semmle.label | successor |
| ExitMethods.cs:13:5:16:5 | {...} | ExitMethods.cs:14:9:14:26 | ...; | semmle.label | successor |
| ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | ExitMethods.cs:15:9:15:15 | return ...; | semmle.label | successor |
| ExitMethods.cs:14:9:14:26 | ...; | ExitMethods.cs:14:20:14:24 | false | semmle.label | successor |
| ExitMethods.cs:14:20:14:24 | false | ExitMethods.cs:14:9:14:25 | call to method ErrorMaybe | semmle.label | successor |
| ExitMethods.cs:15:9:15:15 | return ...; | ExitMethods.cs:12:10:12:11 | exit M2 | semmle.label | return |
| ExitMethods.cs:18:10:18:11 | enter M3 | ExitMethods.cs:19:5:22:5 | {...} | semmle.label | successor |
| ExitMethods.cs:19:5:22:5 | {...} | ExitMethods.cs:20:9:20:26 | ...; | semmle.label | successor |
| ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | ExitMethods.cs:18:10:18:11 | exit M3 | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | ExitMethods.cs:18:10:18:11 | exit M3 | semmle.label | exception(Exception) |
| ExitMethods.cs:20:9:20:26 | ...; | ExitMethods.cs:20:21:20:24 | true | semmle.label | successor |
| ExitMethods.cs:20:21:20:24 | true | ExitMethods.cs:20:9:20:25 | call to method ErrorAlways | semmle.label | successor |
| ExitMethods.cs:24:10:24:11 | enter M4 | ExitMethods.cs:25:5:28:5 | {...} | semmle.label | successor |
| ExitMethods.cs:25:5:28:5 | {...} | ExitMethods.cs:26:9:26:15 | ...; | semmle.label | successor |
| ExitMethods.cs:26:9:26:14 | call to method Exit | ExitMethods.cs:24:10:24:11 | exit M4 | semmle.label | return |
| ExitMethods.cs:26:9:26:14 | this access | ExitMethods.cs:26:9:26:14 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:26:9:26:15 | ...; | ExitMethods.cs:26:9:26:14 | this access | semmle.label | successor |
| ExitMethods.cs:30:10:30:11 | enter M5 | ExitMethods.cs:31:5:34:5 | {...} | semmle.label | successor |
| ExitMethods.cs:31:5:34:5 | {...} | ExitMethods.cs:32:9:32:26 | ...; | semmle.label | successor |
| ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | ExitMethods.cs:30:10:30:11 | exit M5 | semmle.label | return |
| ExitMethods.cs:32:9:32:25 | this access | ExitMethods.cs:32:9:32:25 | call to method ApplicationExit | semmle.label | successor |
| ExitMethods.cs:32:9:32:26 | ...; | ExitMethods.cs:32:9:32:25 | this access | semmle.label | successor |
| ExitMethods.cs:36:10:36:11 | enter M6 | ExitMethods.cs:37:5:50:5 | {...} | semmle.label | successor |
| ExitMethods.cs:37:5:50:5 | {...} | ExitMethods.cs:38:9:49:9 | try {...} ... | semmle.label | successor |
| ExitMethods.cs:38:9:49:9 | try {...} ... | ExitMethods.cs:39:9:41:9 | {...} | semmle.label | successor |
| ExitMethods.cs:39:9:41:9 | {...} | ExitMethods.cs:40:13:40:31 | ...; | semmle.label | successor |
| ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | semmle.label | exception(Exception) |
| ExitMethods.cs:40:13:40:31 | ...; | ExitMethods.cs:40:25:40:29 | false | semmle.label | successor |
| ExitMethods.cs:40:25:40:29 | false | ExitMethods.cs:40:13:40:30 | call to method ErrorAlways | semmle.label | successor |
| ExitMethods.cs:42:9:45:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:43:9:45:9 | {...} | semmle.label | match |
| ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:43:9:45:9 | {...} | semmle.label | match |
| ExitMethods.cs:42:9:45:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} | semmle.label | no-match |
| ExitMethods.cs:43:9:45:9 | {...} | ExitMethods.cs:44:13:44:19 | return ...; | semmle.label | successor |
| ExitMethods.cs:44:13:44:19 | return ...; | ExitMethods.cs:36:10:36:11 | exit M6 | semmle.label | return |
| ExitMethods.cs:46:9:49:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:47:9:49:9 | {...} | semmle.label | match |
| ExitMethods.cs:47:9:49:9 | {...} | ExitMethods.cs:48:13:48:19 | return ...; | semmle.label | successor |
| ExitMethods.cs:48:13:48:19 | return ...; | ExitMethods.cs:36:10:36:11 | exit M6 | semmle.label | return |
| ExitMethods.cs:52:17:52:26 | enter ErrorMaybe | ExitMethods.cs:53:5:56:5 | {...} | semmle.label | successor |
| ExitMethods.cs:53:5:56:5 | {...} | ExitMethods.cs:54:9:55:34 | if (...) ... | semmle.label | successor |
| ExitMethods.cs:54:9:55:34 | if (...) ... | ExitMethods.cs:54:13:54:13 | access to parameter b | semmle.label | successor |
| ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | semmle.label | false |
| ExitMethods.cs:54:13:54:13 | access to parameter b | ExitMethods.cs:55:19:55:33 | object creation of type Exception | semmle.label | true |
| ExitMethods.cs:55:13:55:34 | throw ...; | ExitMethods.cs:52:17:52:26 | exit ErrorMaybe | semmle.label | exception(Exception) |
| ExitMethods.cs:55:19:55:33 | object creation of type Exception | ExitMethods.cs:55:13:55:34 | throw ...; | semmle.label | successor |
| ExitMethods.cs:58:17:58:27 | enter ErrorAlways | ExitMethods.cs:59:5:64:5 | {...} | semmle.label | successor |
| ExitMethods.cs:59:5:64:5 | {...} | ExitMethods.cs:60:9:63:45 | if (...) ... | semmle.label | successor |
| ExitMethods.cs:60:9:63:45 | if (...) ... | ExitMethods.cs:60:13:60:13 | access to parameter b | semmle.label | successor |
| ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:61:19:61:33 | object creation of type Exception | semmle.label | true |
| ExitMethods.cs:60:13:60:13 | access to parameter b | ExitMethods.cs:63:41:63:43 | "b" | semmle.label | false |
| ExitMethods.cs:61:13:61:34 | throw ...; | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | semmle.label | exception(Exception) |
| ExitMethods.cs:61:19:61:33 | object creation of type Exception | ExitMethods.cs:61:13:61:34 | throw ...; | semmle.label | successor |
| ExitMethods.cs:63:13:63:45 | throw ...; | ExitMethods.cs:58:17:58:27 | exit ErrorAlways | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException | ExitMethods.cs:63:13:63:45 | throw ...; | semmle.label | successor |
| ExitMethods.cs:63:41:63:43 | "b" | ExitMethods.cs:63:19:63:44 | object creation of type ArgumentException | semmle.label | successor |
| ExitMethods.cs:66:10:66:13 | enter Exit | ExitMethods.cs:67:5:69:5 | {...} | semmle.label | successor |
| ExitMethods.cs:67:5:69:5 | {...} | ExitMethods.cs:68:9:68:28 | ...; | semmle.label | successor |
| ExitMethods.cs:68:9:68:27 | call to method Exit | ExitMethods.cs:66:10:66:13 | exit Exit | semmle.label | return |
| ExitMethods.cs:68:9:68:28 | ...; | ExitMethods.cs:68:26:68:26 | 0 | semmle.label | successor |
| ExitMethods.cs:68:26:68:26 | 0 | ExitMethods.cs:68:9:68:27 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:71:10:71:24 | enter ApplicationExit | ExitMethods.cs:72:5:74:5 | {...} | semmle.label | successor |
| ExitMethods.cs:72:5:74:5 | {...} | ExitMethods.cs:73:9:73:48 | ...; | semmle.label | successor |
| ExitMethods.cs:73:9:73:47 | call to method Exit | ExitMethods.cs:71:10:71:24 | exit ApplicationExit | semmle.label | return |
| ExitMethods.cs:73:9:73:48 | ...; | ExitMethods.cs:73:9:73:47 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:76:13:76:21 | enter ThrowExpr | ExitMethods.cs:77:5:79:5 | {...} | semmle.label | successor |
| ExitMethods.cs:77:5:79:5 | {...} | ExitMethods.cs:78:16:78:76 | ... ? ... : ... | semmle.label | successor |
| ExitMethods.cs:78:9:78:77 | return ...; | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | semmle.label | return |
| ExitMethods.cs:78:16:78:20 | access to parameter input | ExitMethods.cs:78:25:78:25 | 0 | semmle.label | successor |
| ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:29:78:29 | 1 | semmle.label | true |
| ExitMethods.cs:78:16:78:25 | ... != ... | ExitMethods.cs:78:69:78:75 | "input" | semmle.label | false |
| ExitMethods.cs:78:16:78:76 | ... ? ... : ... | ExitMethods.cs:78:16:78:20 | access to parameter input | semmle.label | successor |
| ExitMethods.cs:78:25:78:25 | 0 | ExitMethods.cs:78:25:78:25 | (...) ... | semmle.label | successor |
| ExitMethods.cs:78:25:78:25 | (...) ... | ExitMethods.cs:78:16:78:25 | ... != ... | semmle.label | successor |
| ExitMethods.cs:78:29:78:29 | 1 | ExitMethods.cs:78:29:78:29 | (...) ... | semmle.label | successor |
| ExitMethods.cs:78:29:78:29 | (...) ... | ExitMethods.cs:78:33:78:37 | access to parameter input | semmle.label | successor |
| ExitMethods.cs:78:29:78:37 | ... / ... | ExitMethods.cs:78:9:78:77 | return ...; | semmle.label | successor |
| ExitMethods.cs:78:33:78:37 | access to parameter input | ExitMethods.cs:78:29:78:37 | ... / ... | semmle.label | successor |
| ExitMethods.cs:78:41:78:76 | throw ... | ExitMethods.cs:76:13:76:21 | exit ThrowExpr | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException | ExitMethods.cs:78:41:78:76 | throw ... | semmle.label | successor |
| ExitMethods.cs:78:69:78:75 | "input" | ExitMethods.cs:78:47:78:76 | object creation of type ArgumentException | semmle.label | successor |
| ExitMethods.cs:81:16:81:34 | enter ExtensionMethodCall | ExitMethods.cs:82:5:84:5 | {...} | semmle.label | successor |
| ExitMethods.cs:82:5:84:5 | {...} | ExitMethods.cs:83:16:83:38 | ... ? ... : ... | semmle.label | successor |
| ExitMethods.cs:83:9:83:39 | return ...; | ExitMethods.cs:81:16:81:34 | exit ExtensionMethodCall | semmle.label | return |
| ExitMethods.cs:83:16:83:16 | access to parameter s | ExitMethods.cs:83:27:83:29 | - | semmle.label | successor |
| ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:34:83:34 | 0 | semmle.label | true |
| ExitMethods.cs:83:16:83:30 | call to method Contains | ExitMethods.cs:83:38:83:38 | 1 | semmle.label | false |
| ExitMethods.cs:83:16:83:38 | ... ? ... : ... | ExitMethods.cs:83:16:83:16 | access to parameter s | semmle.label | successor |
| ExitMethods.cs:83:27:83:29 | - | ExitMethods.cs:83:16:83:30 | call to method Contains | semmle.label | successor |
| ExitMethods.cs:83:34:83:34 | 0 | ExitMethods.cs:83:9:83:39 | return ...; | semmle.label | successor |
| ExitMethods.cs:83:38:83:38 | 1 | ExitMethods.cs:83:9:83:39 | return ...; | semmle.label | successor |
| ExitMethods.cs:91:28:91:31 | enter Exit | ExitMethods.cs:91:35:91:37 | {...} | semmle.label | successor |
| ExitMethods.cs:91:35:91:37 | {...} | ExitMethods.cs:91:28:91:31 | exit Exit | semmle.label | successor |
| ExitMethods.cs:7:10:7:11 | enter M1 | ExitMethods.cs:8:5:11:5 | {...} | semmle.label | successor |
| ExitMethods.cs:8:5:11:5 | {...} | ExitMethods.cs:9:9:9:25 | ...; | semmle.label | successor |
| ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | ExitMethods.cs:10:9:10:15 | return ...; | semmle.label | successor |
| ExitMethods.cs:9:9:9:25 | ...; | ExitMethods.cs:9:20:9:23 | true | semmle.label | successor |
| ExitMethods.cs:9:20:9:23 | true | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | semmle.label | successor |
| ExitMethods.cs:10:9:10:15 | return ...; | ExitMethods.cs:7:10:7:11 | exit M1 | semmle.label | return |
| ExitMethods.cs:13:10:13:11 | enter M2 | ExitMethods.cs:14:5:17:5 | {...} | semmle.label | successor |
| ExitMethods.cs:14:5:17:5 | {...} | ExitMethods.cs:15:9:15:26 | ...; | semmle.label | successor |
| ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | ExitMethods.cs:16:9:16:15 | return ...; | semmle.label | successor |
| ExitMethods.cs:15:9:15:26 | ...; | ExitMethods.cs:15:20:15:24 | false | semmle.label | successor |
| ExitMethods.cs:15:20:15:24 | false | ExitMethods.cs:15:9:15:25 | call to method ErrorMaybe | semmle.label | successor |
| ExitMethods.cs:16:9:16:15 | return ...; | ExitMethods.cs:13:10:13:11 | exit M2 | semmle.label | return |
| ExitMethods.cs:19:10:19:11 | enter M3 | ExitMethods.cs:20:5:23:5 | {...} | semmle.label | successor |
| ExitMethods.cs:20:5:23:5 | {...} | ExitMethods.cs:21:9:21:26 | ...; | semmle.label | successor |
| ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | ExitMethods.cs:19:10:19:11 | exit M3 | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | ExitMethods.cs:19:10:19:11 | exit M3 | semmle.label | exception(Exception) |
| ExitMethods.cs:21:9:21:26 | ...; | ExitMethods.cs:21:21:21:24 | true | semmle.label | successor |
| ExitMethods.cs:21:21:21:24 | true | ExitMethods.cs:21:9:21:25 | call to method ErrorAlways | semmle.label | successor |
| ExitMethods.cs:25:10:25:11 | enter M4 | ExitMethods.cs:26:5:29:5 | {...} | semmle.label | successor |
| ExitMethods.cs:26:5:29:5 | {...} | ExitMethods.cs:27:9:27:15 | ...; | semmle.label | successor |
| ExitMethods.cs:27:9:27:14 | call to method Exit | ExitMethods.cs:25:10:25:11 | exit M4 | semmle.label | return |
| ExitMethods.cs:27:9:27:14 | this access | ExitMethods.cs:27:9:27:14 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:27:9:27:15 | ...; | ExitMethods.cs:27:9:27:14 | this access | semmle.label | successor |
| ExitMethods.cs:31:10:31:11 | enter M5 | ExitMethods.cs:32:5:35:5 | {...} | semmle.label | successor |
| ExitMethods.cs:32:5:35:5 | {...} | ExitMethods.cs:33:9:33:26 | ...; | semmle.label | successor |
| ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | ExitMethods.cs:31:10:31:11 | exit M5 | semmle.label | return |
| ExitMethods.cs:33:9:33:25 | this access | ExitMethods.cs:33:9:33:25 | call to method ApplicationExit | semmle.label | successor |
| ExitMethods.cs:33:9:33:26 | ...; | ExitMethods.cs:33:9:33:25 | this access | semmle.label | successor |
| ExitMethods.cs:37:10:37:11 | enter M6 | ExitMethods.cs:38:5:51:5 | {...} | semmle.label | successor |
| ExitMethods.cs:38:5:51:5 | {...} | ExitMethods.cs:39:9:50:9 | try {...} ... | semmle.label | successor |
| ExitMethods.cs:39:9:50:9 | try {...} ... | ExitMethods.cs:40:9:42:9 | {...} | semmle.label | successor |
| ExitMethods.cs:40:9:42:9 | {...} | ExitMethods.cs:41:13:41:31 | ...; | semmle.label | successor |
| ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | semmle.label | exception(Exception) |
| ExitMethods.cs:41:13:41:31 | ...; | ExitMethods.cs:41:25:41:29 | false | semmle.label | successor |
| ExitMethods.cs:41:25:41:29 | false | ExitMethods.cs:41:13:41:30 | call to method ErrorAlways | semmle.label | successor |
| ExitMethods.cs:43:9:46:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:44:9:46:9 | {...} | semmle.label | match |
| ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:44:9:46:9 | {...} | semmle.label | match |
| ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} | semmle.label | no-match |
| ExitMethods.cs:44:9:46:9 | {...} | ExitMethods.cs:45:13:45:19 | return ...; | semmle.label | successor |
| ExitMethods.cs:45:13:45:19 | return ...; | ExitMethods.cs:37:10:37:11 | exit M6 | semmle.label | return |
| ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:9:50:9 | {...} | semmle.label | match |
| ExitMethods.cs:48:9:50:9 | {...} | ExitMethods.cs:49:13:49:19 | return ...; | semmle.label | successor |
| ExitMethods.cs:49:13:49:19 | return ...; | ExitMethods.cs:37:10:37:11 | exit M6 | semmle.label | return |
| ExitMethods.cs:53:17:53:26 | enter ErrorMaybe | ExitMethods.cs:54:5:57:5 | {...} | semmle.label | successor |
| ExitMethods.cs:54:5:57:5 | {...} | ExitMethods.cs:55:9:56:34 | if (...) ... | semmle.label | successor |
| ExitMethods.cs:55:9:56:34 | if (...) ... | ExitMethods.cs:55:13:55:13 | access to parameter b | semmle.label | successor |
| ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | semmle.label | false |
| ExitMethods.cs:55:13:55:13 | access to parameter b | ExitMethods.cs:56:19:56:33 | object creation of type Exception | semmle.label | true |
| ExitMethods.cs:56:13:56:34 | throw ...; | ExitMethods.cs:53:17:53:26 | exit ErrorMaybe | semmle.label | exception(Exception) |
| ExitMethods.cs:56:19:56:33 | object creation of type Exception | ExitMethods.cs:56:13:56:34 | throw ...; | semmle.label | successor |
| ExitMethods.cs:59:17:59:27 | enter ErrorAlways | ExitMethods.cs:60:5:65:5 | {...} | semmle.label | successor |
| ExitMethods.cs:60:5:65:5 | {...} | ExitMethods.cs:61:9:64:45 | if (...) ... | semmle.label | successor |
| ExitMethods.cs:61:9:64:45 | if (...) ... | ExitMethods.cs:61:13:61:13 | access to parameter b | semmle.label | successor |
| ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:62:19:62:33 | object creation of type Exception | semmle.label | true |
| ExitMethods.cs:61:13:61:13 | access to parameter b | ExitMethods.cs:64:41:64:43 | "b" | semmle.label | false |
| ExitMethods.cs:62:13:62:34 | throw ...; | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | semmle.label | exception(Exception) |
| ExitMethods.cs:62:19:62:33 | object creation of type Exception | ExitMethods.cs:62:13:62:34 | throw ...; | semmle.label | successor |
| ExitMethods.cs:64:13:64:45 | throw ...; | ExitMethods.cs:59:17:59:27 | exit ErrorAlways | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException | ExitMethods.cs:64:13:64:45 | throw ...; | semmle.label | successor |
| ExitMethods.cs:64:41:64:43 | "b" | ExitMethods.cs:64:19:64:44 | object creation of type ArgumentException | semmle.label | successor |
| ExitMethods.cs:67:10:67:13 | enter Exit | ExitMethods.cs:68:5:70:5 | {...} | semmle.label | successor |
| ExitMethods.cs:68:5:70:5 | {...} | ExitMethods.cs:69:9:69:28 | ...; | semmle.label | successor |
| ExitMethods.cs:69:9:69:27 | call to method Exit | ExitMethods.cs:67:10:67:13 | exit Exit | semmle.label | return |
| ExitMethods.cs:69:9:69:28 | ...; | ExitMethods.cs:69:26:69:26 | 0 | semmle.label | successor |
| ExitMethods.cs:69:26:69:26 | 0 | ExitMethods.cs:69:9:69:27 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:72:10:72:18 | enter ExitInTry | ExitMethods.cs:73:5:83:5 | {...} | semmle.label | successor |
| ExitMethods.cs:73:5:83:5 | {...} | ExitMethods.cs:74:9:82:9 | try {...} ... | semmle.label | successor |
| ExitMethods.cs:74:9:82:9 | try {...} ... | ExitMethods.cs:75:9:77:9 | {...} | semmle.label | successor |
| ExitMethods.cs:75:9:77:9 | {...} | ExitMethods.cs:76:13:76:19 | ...; | semmle.label | successor |
| ExitMethods.cs:76:13:76:18 | call to method Exit | ExitMethods.cs:79:9:82:9 | [finally: return] {...} | semmle.label | return |
| ExitMethods.cs:76:13:76:18 | this access | ExitMethods.cs:76:13:76:18 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:76:13:76:19 | ...; | ExitMethods.cs:76:13:76:18 | this access | semmle.label | successor |
| ExitMethods.cs:79:9:82:9 | [finally: return] {...} | ExitMethods.cs:81:13:81:41 | [finally: return] ...; | semmle.label | successor |
| ExitMethods.cs:81:13:81:40 | [finally: return] call to method WriteLine | ExitMethods.cs:72:10:72:18 | exit ExitInTry | semmle.label | return |
| ExitMethods.cs:81:13:81:41 | [finally: return] ...; | ExitMethods.cs:81:38:81:39 | [finally: return] "" | semmle.label | successor |
| ExitMethods.cs:81:38:81:39 | [finally: return] "" | ExitMethods.cs:81:13:81:40 | [finally: return] call to method WriteLine | semmle.label | successor |
| ExitMethods.cs:85:10:85:24 | enter ApplicationExit | ExitMethods.cs:86:5:88:5 | {...} | semmle.label | successor |
| ExitMethods.cs:86:5:88:5 | {...} | ExitMethods.cs:87:9:87:48 | ...; | semmle.label | successor |
| ExitMethods.cs:87:9:87:47 | call to method Exit | ExitMethods.cs:85:10:85:24 | exit ApplicationExit | semmle.label | return |
| ExitMethods.cs:87:9:87:48 | ...; | ExitMethods.cs:87:9:87:47 | call to method Exit | semmle.label | successor |
| ExitMethods.cs:90:13:90:21 | enter ThrowExpr | ExitMethods.cs:91:5:93:5 | {...} | semmle.label | successor |
| ExitMethods.cs:91:5:93:5 | {...} | ExitMethods.cs:92:16:92:76 | ... ? ... : ... | semmle.label | successor |
| ExitMethods.cs:92:9:92:77 | return ...; | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | semmle.label | return |
| ExitMethods.cs:92:16:92:20 | access to parameter input | ExitMethods.cs:92:25:92:25 | 0 | semmle.label | successor |
| ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:29:92:29 | 1 | semmle.label | true |
| ExitMethods.cs:92:16:92:25 | ... != ... | ExitMethods.cs:92:69:92:75 | "input" | semmle.label | false |
| ExitMethods.cs:92:16:92:76 | ... ? ... : ... | ExitMethods.cs:92:16:92:20 | access to parameter input | semmle.label | successor |
| ExitMethods.cs:92:25:92:25 | 0 | ExitMethods.cs:92:25:92:25 | (...) ... | semmle.label | successor |
| ExitMethods.cs:92:25:92:25 | (...) ... | ExitMethods.cs:92:16:92:25 | ... != ... | semmle.label | successor |
| ExitMethods.cs:92:29:92:29 | 1 | ExitMethods.cs:92:29:92:29 | (...) ... | semmle.label | successor |
| ExitMethods.cs:92:29:92:29 | (...) ... | ExitMethods.cs:92:33:92:37 | access to parameter input | semmle.label | successor |
| ExitMethods.cs:92:29:92:37 | ... / ... | ExitMethods.cs:92:9:92:77 | return ...; | semmle.label | successor |
| ExitMethods.cs:92:33:92:37 | access to parameter input | ExitMethods.cs:92:29:92:37 | ... / ... | semmle.label | successor |
| ExitMethods.cs:92:41:92:76 | throw ... | ExitMethods.cs:90:13:90:21 | exit ThrowExpr | semmle.label | exception(ArgumentException) |
| ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException | ExitMethods.cs:92:41:92:76 | throw ... | semmle.label | successor |
| ExitMethods.cs:92:69:92:75 | "input" | ExitMethods.cs:92:47:92:76 | object creation of type ArgumentException | semmle.label | successor |
| ExitMethods.cs:95:16:95:34 | enter ExtensionMethodCall | ExitMethods.cs:96:5:98:5 | {...} | semmle.label | successor |
| ExitMethods.cs:96:5:98:5 | {...} | ExitMethods.cs:97:16:97:38 | ... ? ... : ... | semmle.label | successor |
| ExitMethods.cs:97:9:97:39 | return ...; | ExitMethods.cs:95:16:95:34 | exit ExtensionMethodCall | semmle.label | return |
| ExitMethods.cs:97:16:97:16 | access to parameter s | ExitMethods.cs:97:27:97:29 | - | semmle.label | successor |
| ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:34:97:34 | 0 | semmle.label | true |
| ExitMethods.cs:97:16:97:30 | call to method Contains | ExitMethods.cs:97:38:97:38 | 1 | semmle.label | false |
| ExitMethods.cs:97:16:97:38 | ... ? ... : ... | ExitMethods.cs:97:16:97:16 | access to parameter s | semmle.label | successor |
| ExitMethods.cs:97:27:97:29 | - | ExitMethods.cs:97:16:97:30 | call to method Contains | semmle.label | successor |
| ExitMethods.cs:97:34:97:34 | 0 | ExitMethods.cs:97:9:97:39 | return ...; | semmle.label | successor |
| ExitMethods.cs:97:38:97:38 | 1 | ExitMethods.cs:97:9:97:39 | return ...; | semmle.label | successor |
| ExitMethods.cs:100:17:100:32 | enter FailingAssertion | ExitMethods.cs:101:5:104:5 | {...} | semmle.label | successor |
| ExitMethods.cs:101:5:104:5 | {...} | ExitMethods.cs:102:9:102:29 | ...; | semmle.label | successor |
| ExitMethods.cs:102:9:102:28 | call to method IsTrue | ExitMethods.cs:103:9:103:18 | ... ...; | semmle.label | successor |
| ExitMethods.cs:102:9:102:29 | ...; | ExitMethods.cs:102:23:102:27 | false | semmle.label | successor |
| ExitMethods.cs:102:23:102:27 | false | ExitMethods.cs:102:9:102:28 | call to method IsTrue | semmle.label | successor |
| ExitMethods.cs:103:9:103:18 | ... ...; | ExitMethods.cs:103:13:103:13 | access to local variable x | semmle.label | successor |
| ExitMethods.cs:103:13:103:13 | access to local variable x | ExitMethods.cs:103:17:103:17 | 0 | semmle.label | successor |
| ExitMethods.cs:103:13:103:17 | Int32 x = ... | ExitMethods.cs:100:17:100:32 | exit FailingAssertion | semmle.label | successor |
| ExitMethods.cs:103:17:103:17 | 0 | ExitMethods.cs:103:13:103:17 | Int32 x = ... | semmle.label | successor |
| ExitMethods.cs:106:17:106:33 | enter FailingAssertion2 | ExitMethods.cs:107:5:110:5 | {...} | semmle.label | successor |
| ExitMethods.cs:107:5:110:5 | {...} | ExitMethods.cs:108:9:108:27 | ...; | semmle.label | successor |
| ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | ExitMethods.cs:109:9:109:18 | ... ...; | semmle.label | successor |
| ExitMethods.cs:108:9:108:26 | this access | ExitMethods.cs:108:9:108:26 | call to method FailingAssertion | semmle.label | successor |
| ExitMethods.cs:108:9:108:27 | ...; | ExitMethods.cs:108:9:108:26 | this access | semmle.label | successor |
| ExitMethods.cs:109:9:109:18 | ... ...; | ExitMethods.cs:109:13:109:13 | access to local variable x | semmle.label | successor |
| ExitMethods.cs:109:13:109:13 | access to local variable x | ExitMethods.cs:109:17:109:17 | 0 | semmle.label | successor |
| ExitMethods.cs:109:13:109:17 | Int32 x = ... | ExitMethods.cs:106:17:106:33 | exit FailingAssertion2 | semmle.label | successor |
| ExitMethods.cs:109:17:109:17 | 0 | ExitMethods.cs:109:13:109:17 | Int32 x = ... | semmle.label | successor |
| ExitMethods.cs:112:10:112:20 | enter AssertFalse | ExitMethods.cs:112:48:112:48 | access to parameter b | semmle.label | successor |
| ExitMethods.cs:112:33:112:49 | call to method IsFalse | ExitMethods.cs:112:10:112:20 | exit AssertFalse | semmle.label | successor |
| ExitMethods.cs:112:48:112:48 | access to parameter b | ExitMethods.cs:112:33:112:49 | call to method IsFalse | semmle.label | successor |
| ExitMethods.cs:114:17:114:33 | enter FailingAssertion3 | ExitMethods.cs:115:5:118:5 | {...} | semmle.label | successor |
| ExitMethods.cs:115:5:118:5 | {...} | ExitMethods.cs:116:9:116:26 | ...; | semmle.label | successor |
| ExitMethods.cs:116:9:116:25 | call to method AssertFalse | ExitMethods.cs:117:9:117:18 | ... ...; | semmle.label | successor |
| ExitMethods.cs:116:9:116:25 | this access | ExitMethods.cs:116:21:116:24 | true | semmle.label | successor |
| ExitMethods.cs:116:9:116:26 | ...; | ExitMethods.cs:116:9:116:25 | this access | semmle.label | successor |
| ExitMethods.cs:116:21:116:24 | true | ExitMethods.cs:116:9:116:25 | call to method AssertFalse | semmle.label | successor |
| ExitMethods.cs:117:9:117:18 | ... ...; | ExitMethods.cs:117:13:117:13 | access to local variable x | semmle.label | successor |
| ExitMethods.cs:117:13:117:13 | access to local variable x | ExitMethods.cs:117:17:117:17 | 0 | semmle.label | successor |
| ExitMethods.cs:117:13:117:17 | Int32 x = ... | ExitMethods.cs:114:17:114:33 | exit FailingAssertion3 | semmle.label | successor |
| ExitMethods.cs:117:17:117:17 | 0 | ExitMethods.cs:117:13:117:17 | Int32 x = ... | semmle.label | successor |
| Extensions.cs:5:23:5:29 | enter ToInt32 | Extensions.cs:6:5:8:5 | {...} | semmle.label | successor |
| Extensions.cs:6:5:8:5 | {...} | Extensions.cs:7:28:7:28 | access to parameter s | semmle.label | successor |
| Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:5:23:5:29 | exit ToInt32 | semmle.label | return |

View File

@@ -1,6 +1,7 @@
import csharp
import Common
query predicate edges(ControlFlow::Node node, ControlFlow::Node successor, string attr, string val) {
query predicate edges(SourceControlFlowNode node, SourceControlFlowNode successor, string attr, string val) {
exists(ControlFlow::SuccessorType t |
successor = node.getASuccessorByType(t) |
attr = "semmle.label" and

View File

@@ -10,4 +10,9 @@ namespace System.Windows.Forms
{
public static void Show(string msg,string title) { }
}
public class Application
{
public static void Exit() { }
}
}