mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
C#: Prune CFG for obviously impossible nullness/matching edges
This commit is contained in:
@@ -81,11 +81,11 @@ class Completion extends TCompletion {
|
||||
or
|
||||
if mustHaveBooleanCompletion(cfe) then
|
||||
exists(boolean value |
|
||||
isConstant(cfe, value) |
|
||||
isBooleanConstant(cfe, value) |
|
||||
this = TBooleanCompletion(value, value)
|
||||
)
|
||||
or
|
||||
not isConstant(cfe, _) and
|
||||
not isBooleanConstant(cfe, _) and
|
||||
exists(boolean b | this = TBooleanCompletion(b, b))
|
||||
or
|
||||
// Corner case: In `if (x ?? y) { ... }`, `x` must have both a `true`
|
||||
@@ -94,8 +94,20 @@ class Completion extends TCompletion {
|
||||
mustHaveNullnessCompletion(cfe) and
|
||||
this = TNullnessCompletion(true)
|
||||
else if mustHaveNullnessCompletion(cfe) then
|
||||
exists(boolean value |
|
||||
isNullnessConstant(cfe, value) |
|
||||
this = TNullnessCompletion(value)
|
||||
)
|
||||
or
|
||||
not isNullnessConstant(cfe, _) and
|
||||
this = TNullnessCompletion(_)
|
||||
else if mustHaveMatchingCompletion(cfe) then
|
||||
else if mustHaveMatchingCompletion(_, cfe) then
|
||||
exists(boolean value |
|
||||
isMatchingConstant(cfe, value) |
|
||||
this = TMatchingCompletion(value)
|
||||
)
|
||||
or
|
||||
not isMatchingConstant(cfe, _) and
|
||||
this = TMatchingCompletion(_)
|
||||
else if mustHaveEmptinessCompletion(cfe) then
|
||||
this = TEmptinessCompletion(_)
|
||||
@@ -118,14 +130,82 @@ class Completion extends TCompletion {
|
||||
}
|
||||
}
|
||||
|
||||
private predicate isConstant(Expr e, boolean value) {
|
||||
e.getValue() = "true" and
|
||||
value = true
|
||||
or
|
||||
e.getValue() = "false" and
|
||||
value = false
|
||||
or
|
||||
isConstantComparison(e, value)
|
||||
/** Holds if expression `e` has the Boolean constant value `value`. */
|
||||
private predicate isBooleanConstant(Expr e, boolean value) {
|
||||
mustHaveBooleanCompletion(e) and
|
||||
(
|
||||
e.getValue() = "true" and
|
||||
value = true
|
||||
or
|
||||
e.getValue() = "false" and
|
||||
value = false
|
||||
or
|
||||
isConstantComparison(e, value)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if expression `e` is constantly `null` (`value = true`) or constantly
|
||||
* non-`null` (`value = false`).
|
||||
*/
|
||||
private predicate isNullnessConstant(Expr e, boolean value) {
|
||||
mustHaveNullnessCompletion(e) and
|
||||
exists(Expr stripped |
|
||||
stripped = e.stripCasts() |
|
||||
stripped.getType() = any(ValueType t |
|
||||
not t instanceof NullableType and
|
||||
// Extractor bug: the type of `x?.Length` is reported as `int`, but it should
|
||||
// be `int?`
|
||||
not getQualifier*(stripped).(QualifiableExpr).isConditional()
|
||||
) and
|
||||
value = false
|
||||
or
|
||||
stripped instanceof NullLiteral and
|
||||
value = true
|
||||
or
|
||||
stripped.hasValue() and
|
||||
not stripped instanceof NullLiteral and
|
||||
value = false
|
||||
)
|
||||
}
|
||||
|
||||
private Expr getQualifier(QualifiableExpr e) {
|
||||
// `e.getQualifier()` does not work for calls to extension methods
|
||||
result = e.getChildExpr(-1)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if expression `e` constantly matches (`value = true`) or constantly
|
||||
* non-matches (`value = false`).
|
||||
*/
|
||||
private predicate isMatchingConstant(Expr e, boolean value) {
|
||||
exists(SwitchStmt ss |
|
||||
mustHaveMatchingCompletion(ss, e) |
|
||||
exists(Expr stripped |
|
||||
stripped = ss.getCondition().stripCasts() |
|
||||
exists(ConstCase cc, string strippedValue |
|
||||
cc = ss.getAConstCase() and
|
||||
e = cc.getExpr() and
|
||||
strippedValue = stripped.getValue() |
|
||||
if strippedValue = e.getValue() then
|
||||
value = true
|
||||
else
|
||||
value = false
|
||||
)
|
||||
or
|
||||
exists(TypeCase tc, Type t, Type strippedType |
|
||||
tc = ss.getATypeCase() |
|
||||
e = tc.getTypeAccess() and
|
||||
t = e.getType() and
|
||||
strippedType = stripped.getType() and
|
||||
not t.isImplicitlyConvertibleTo(strippedType) and
|
||||
not t instanceof Interface and
|
||||
not t.containsTypeParameters() and
|
||||
not strippedType.containsTypeParameters() and
|
||||
value = false
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/** A control flow element that is inside a `try` block. */
|
||||
@@ -325,12 +405,10 @@ private predicate inNullnessContext(Expr e, boolean isNullnessCompletionForParen
|
||||
* Holds if a normal completion of `e` must be a matching completion. Thats is,
|
||||
* whether `e` determines a match in a `switch` statement.
|
||||
*/
|
||||
private predicate mustHaveMatchingCompletion(Expr e) {
|
||||
exists(SwitchStmt ss |
|
||||
e = ss.getAConstCase().getExpr()
|
||||
or
|
||||
e = ss.getATypeCase().getTypeAccess() // use type access to represent the type test
|
||||
)
|
||||
private predicate mustHaveMatchingCompletion(SwitchStmt ss, Expr e) {
|
||||
e = ss.getAConstCase().getExpr()
|
||||
or
|
||||
e = ss.getATypeCase().getTypeAccess() // use type access to represent the type test
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2022,6 +2022,7 @@ module Internal {
|
||||
c instanceof SimpleCompletion
|
||||
or
|
||||
cfe = tc.getTypeAccess() and
|
||||
c.isValidFor(cfe) and
|
||||
c = any(MatchingCompletion mc |
|
||||
if mc.isMatch() then
|
||||
if exists(tc.getVariableDeclExpr()) then
|
||||
|
||||
@@ -70,13 +70,7 @@
|
||||
| ConditionalAccess.cs:19:12:19:13 | enter M6 | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | 2 |
|
||||
| ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:12:19:13 | exit M6 | 1 |
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | 2 |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:23:18:23:29 | (...) ... | 6 |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:18:24:24 | (...) ... | 5 |
|
||||
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:32:23:38 | access to property Length | 1 |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:13:25:14 | "" | 4 |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:27:24:37 | call to method ToString | 1 |
|
||||
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:21:10:21:11 | exit M7 | 2 |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | 2 |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | exit M7 | 20 |
|
||||
| ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith | ConditionalAccess.cs:31:26:31:38 | exit CommaJoinWith | 7 |
|
||||
| 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 |
|
||||
@@ -142,20 +136,13 @@
|
||||
| NullCoalescing.cs:9:41:9:41 | access to parameter s | NullCoalescing.cs:9:41:9:41 | access to parameter s | 1 |
|
||||
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s | 1 |
|
||||
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | 2 |
|
||||
| NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:57:9:58 | "" | 1 |
|
||||
| NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:44:11:45 | access to parameter b1 | 4 |
|
||||
| NullCoalescing.cs:11:9:11:10 | exit M5 | NullCoalescing.cs:11:9:11:10 | exit M5 | 1 |
|
||||
| NullCoalescing.cs:11:51:11:58 | ... && ... | NullCoalescing.cs:11:51:11:52 | access to parameter b2 | 2 |
|
||||
| NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | 1 |
|
||||
| NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:64:11:64 | 0 | 1 |
|
||||
| NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:68:11:68 | 1 | 1 |
|
||||
| NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:15:17:15:26 | (...) ... | 7 |
|
||||
| NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:16:17:16:18 | "" | 5 |
|
||||
| NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:31:15:31 | 0 | 1 |
|
||||
| NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:17:13:17:19 | (...) ... | 6 |
|
||||
| NullCoalescing.cs:16:23:16:25 | "a" | NullCoalescing.cs:16:23:16:25 | "a" | 1 |
|
||||
| NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:13:10:13:11 | exit M6 | 2 |
|
||||
| NullCoalescing.cs:17:24:17:24 | 1 | NullCoalescing.cs:17:24:17:24 | 1 | 1 |
|
||||
| NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:13:10:13:11 | exit M6 | 21 |
|
||||
| Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:8:13:8:23 | ... is ... | 10 |
|
||||
| Patterns.cs:9:9:11:9 | {...} | Patterns.cs:10:13:10:42 | call to method WriteLine | 6 |
|
||||
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:18:12:31 | ... is ... | 4 |
|
||||
@@ -204,15 +191,9 @@
|
||||
| Switch.cs:50:13:50:39 | case Boolean: | Switch.cs:50:18:50:21 | access to type Boolean | 2 |
|
||||
| Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:50:30:50:38 | ... != ... | 3 |
|
||||
| Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; | 1 |
|
||||
| Switch.cs:55:10:55:11 | enter M5 | Switch.cs:59:18:59:18 | 2 | 8 |
|
||||
| Switch.cs:55:10:55:11 | exit M5 | Switch.cs:55:10:55:11 | exit M5 | 1 |
|
||||
| Switch.cs:60:15:60:20 | break; | Switch.cs:60:15:60:20 | break; | 1 |
|
||||
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:18:61:18 | 3 | 2 |
|
||||
| Switch.cs:62:15:62:20 | break; | Switch.cs:62:15:62:20 | break; | 1 |
|
||||
| Switch.cs:66:10:66:11 | enter M6 | Switch.cs:70:18:70:20 | access to type Int32 | 7 |
|
||||
| Switch.cs:55:10:55:11 | enter M5 | Switch.cs:55:10:55:11 | exit M5 | 12 |
|
||||
| Switch.cs:66:10:66:11 | enter M6 | Switch.cs:72:18:72:19 | "" | 9 |
|
||||
| Switch.cs:66:10:66:11 | exit M6 | Switch.cs:66:10:66:11 | exit M6 | 1 |
|
||||
| Switch.cs:71:15:71:20 | break; | Switch.cs:71:15:71:20 | break; | 1 |
|
||||
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" | 2 |
|
||||
| Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; | 1 |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:81:18:81:18 | 1 | 6 |
|
||||
| Switch.cs:77:10:77:11 | exit M7 | Switch.cs:77:10:77:11 | exit M7 | 1 |
|
||||
|
||||
@@ -139,24 +139,6 @@
|
||||
| post | ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
|
||||
| post | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
|
||||
| post | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| post | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| post | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| post | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:32:23:38 | access to property Length |
|
||||
| post | ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:32:23:38 | access to property Length |
|
||||
| post | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| post | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| post | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:23:32:23:38 | access to property Length |
|
||||
| post | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| post | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| post | ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:23:32:23:38 | access to property Length |
|
||||
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| post | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| post | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith |
|
||||
| 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 |
|
||||
@@ -266,11 +248,9 @@
|
||||
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:41:9:41 | access to parameter s |
|
||||
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:45:9:45 | access to parameter s |
|
||||
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:51:9:58 | ... ?? ... |
|
||||
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:57:9:58 | "" |
|
||||
| post | NullCoalescing.cs:9:41:9:41 | access to parameter s | NullCoalescing.cs:9:41:9:41 | access to parameter s |
|
||||
| post | NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s |
|
||||
| post | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:58 | ... ?? ... |
|
||||
| post | NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:57:9:58 | "" |
|
||||
| post | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:9:11:10 | enter M5 |
|
||||
| post | NullCoalescing.cs:11:9:11:10 | exit M5 | NullCoalescing.cs:11:9:11:10 | enter M5 |
|
||||
| post | NullCoalescing.cs:11:9:11:10 | exit M5 | NullCoalescing.cs:11:9:11:10 | exit M5 |
|
||||
@@ -283,24 +263,6 @@
|
||||
| post | NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:64:11:64 | 0 |
|
||||
| post | NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:68:11:68 | 1 |
|
||||
| post | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:13:10:13:11 | enter M6 |
|
||||
| post | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:13:10:13:11 | enter M6 |
|
||||
| post | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
|
||||
| post | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:15:31:15:31 | 0 |
|
||||
| post | NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:31:15:31 | 0 |
|
||||
| post | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:13:10:13:11 | enter M6 |
|
||||
| post | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
|
||||
| post | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:15:31:15:31 | 0 |
|
||||
| post | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:16:13:16:25 | String s = ... |
|
||||
| post | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:16:23:16:25 | "a" |
|
||||
| post | NullCoalescing.cs:16:23:16:25 | "a" | NullCoalescing.cs:16:23:16:25 | "a" |
|
||||
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:13:10:13:11 | enter M6 |
|
||||
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
|
||||
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:15:31:15:31 | 0 |
|
||||
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:16:13:16:25 | String s = ... |
|
||||
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:16:23:16:25 | "a" |
|
||||
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:17:9:17:24 | ... = ... |
|
||||
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:17:24:17:24 | 1 |
|
||||
| post | NullCoalescing.cs:17:24:17:24 | 1 | NullCoalescing.cs:17:24:17:24 | 1 |
|
||||
| post | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:5:10:5:13 | enter Test |
|
||||
| post | Patterns.cs:9:9:11:9 | {...} | Patterns.cs:9:9:11:9 | {...} |
|
||||
| post | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:14:18:9 | if (...) ... |
|
||||
@@ -398,22 +360,10 @@
|
||||
| post | Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:50:30:50:30 | access to parameter o |
|
||||
| post | Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; |
|
||||
| post | Switch.cs:55:10:55:11 | enter M5 | Switch.cs:55:10:55:11 | enter M5 |
|
||||
| post | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:55:10:55:11 | enter M5 |
|
||||
| post | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:55:10:55:11 | exit M5 |
|
||||
| post | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:60:15:60:20 | break; |
|
||||
| post | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:61:13:61:20 | case ...: |
|
||||
| post | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:62:15:62:20 | break; |
|
||||
| post | Switch.cs:60:15:60:20 | break; | Switch.cs:60:15:60:20 | break; |
|
||||
| post | Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:13:61:20 | case ...: |
|
||||
| post | Switch.cs:62:15:62:20 | break; | Switch.cs:62:15:62:20 | break; |
|
||||
| post | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:66:10:66:11 | enter M6 |
|
||||
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:66:10:66:11 | enter M6 |
|
||||
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:66:10:66:11 | exit M6 |
|
||||
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:71:15:71:20 | break; |
|
||||
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:72:13:72:21 | case ...: |
|
||||
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:73:15:73:20 | break; |
|
||||
| post | Switch.cs:71:15:71:20 | break; | Switch.cs:71:15:71:20 | break; |
|
||||
| post | Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:13:72:21 | case ...: |
|
||||
| post | Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; |
|
||||
| post | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:77:10:77:11 | enter M7 |
|
||||
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:77:10:77:11 | enter M7 |
|
||||
@@ -1220,24 +1170,6 @@
|
||||
| pre | ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:12:19:13 | exit M6 |
|
||||
| pre | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
|
||||
| pre | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| pre | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| pre | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:23:32:23:38 | access to property Length |
|
||||
| pre | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| pre | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| pre | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| pre | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| pre | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| pre | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| pre | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| pre | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| pre | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| pre | ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:32:23:38 | access to property Length |
|
||||
| pre | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| pre | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| pre | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| pre | ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| pre | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| pre | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| pre | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith |
|
||||
| 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 |
|
||||
@@ -1344,13 +1276,10 @@
|
||||
| pre | NullCoalescing.cs:9:12:9:13 | enter M4 | NullCoalescing.cs:9:41:9:41 | access to parameter s |
|
||||
| pre | NullCoalescing.cs:9:12:9:13 | enter M4 | NullCoalescing.cs:9:45:9:45 | access to parameter s |
|
||||
| pre | NullCoalescing.cs:9:12:9:13 | enter M4 | NullCoalescing.cs:9:51:9:58 | ... ?? ... |
|
||||
| pre | NullCoalescing.cs:9:12:9:13 | enter M4 | NullCoalescing.cs:9:57:9:58 | "" |
|
||||
| pre | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:12:9:13 | exit M4 |
|
||||
| pre | NullCoalescing.cs:9:41:9:41 | access to parameter s | NullCoalescing.cs:9:41:9:41 | access to parameter s |
|
||||
| pre | NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s |
|
||||
| pre | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:58 | ... ?? ... |
|
||||
| pre | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:57:9:58 | "" |
|
||||
| pre | NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:57:9:58 | "" |
|
||||
| pre | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:9:11:10 | enter M5 |
|
||||
| pre | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:9:11:10 | exit M5 |
|
||||
| pre | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:51:11:58 | ... && ... |
|
||||
@@ -1364,24 +1293,6 @@
|
||||
| pre | NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:64:11:64 | 0 |
|
||||
| pre | NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:68:11:68 | 1 |
|
||||
| pre | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:13:10:13:11 | enter M6 |
|
||||
| pre | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
|
||||
| pre | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:15:31:15:31 | 0 |
|
||||
| pre | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:16:13:16:25 | String s = ... |
|
||||
| pre | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:16:23:16:25 | "a" |
|
||||
| pre | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:17:9:17:24 | ... = ... |
|
||||
| pre | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:17:24:17:24 | 1 |
|
||||
| pre | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
|
||||
| pre | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:16:13:16:25 | String s = ... |
|
||||
| pre | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:16:23:16:25 | "a" |
|
||||
| pre | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:17:9:17:24 | ... = ... |
|
||||
| pre | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:17:24:17:24 | 1 |
|
||||
| pre | NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:31:15:31 | 0 |
|
||||
| pre | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:16:13:16:25 | String s = ... |
|
||||
| pre | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:17:9:17:24 | ... = ... |
|
||||
| pre | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:17:24:17:24 | 1 |
|
||||
| pre | NullCoalescing.cs:16:23:16:25 | "a" | NullCoalescing.cs:16:23:16:25 | "a" |
|
||||
| pre | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:17:9:17:24 | ... = ... |
|
||||
| pre | NullCoalescing.cs:17:24:17:24 | 1 | NullCoalescing.cs:17:24:17:24 | 1 |
|
||||
| pre | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:5:10:5:13 | enter Test |
|
||||
| pre | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:9:9:11:9 | {...} |
|
||||
| pre | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:12:14:18:9 | if (...) ... |
|
||||
@@ -1558,24 +1469,10 @@
|
||||
| pre | Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:51:17:51:22 | break; |
|
||||
| pre | Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; |
|
||||
| pre | Switch.cs:55:10:55:11 | enter M5 | Switch.cs:55:10:55:11 | enter M5 |
|
||||
| pre | Switch.cs:55:10:55:11 | enter M5 | Switch.cs:55:10:55:11 | exit M5 |
|
||||
| pre | Switch.cs:55:10:55:11 | enter M5 | Switch.cs:60:15:60:20 | break; |
|
||||
| pre | Switch.cs:55:10:55:11 | enter M5 | Switch.cs:61:13:61:20 | case ...: |
|
||||
| pre | Switch.cs:55:10:55:11 | enter M5 | Switch.cs:62:15:62:20 | break; |
|
||||
| pre | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:55:10:55:11 | exit M5 |
|
||||
| pre | Switch.cs:60:15:60:20 | break; | Switch.cs:60:15:60:20 | break; |
|
||||
| pre | Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:13:61:20 | case ...: |
|
||||
| pre | Switch.cs:61:13:61:20 | case ...: | Switch.cs:62:15:62:20 | break; |
|
||||
| pre | Switch.cs:62:15:62:20 | break; | Switch.cs:62:15:62:20 | break; |
|
||||
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:66:10:66:11 | enter M6 |
|
||||
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:66:10:66:11 | exit M6 |
|
||||
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:71:15:71:20 | break; |
|
||||
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:72:13:72:21 | case ...: |
|
||||
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:73:15:73:20 | break; |
|
||||
| pre | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:66:10:66:11 | exit M6 |
|
||||
| pre | Switch.cs:71:15:71:20 | break; | Switch.cs:71:15:71:20 | break; |
|
||||
| pre | Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:13:72:21 | case ...: |
|
||||
| pre | Switch.cs:72:13:72:21 | case ...: | Switch.cs:73:15:73:20 | break; |
|
||||
| pre | Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; |
|
||||
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:77:10:77:11 | enter M7 |
|
||||
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:77:10:77:11 | exit M7 |
|
||||
|
||||
@@ -223,21 +223,20 @@
|
||||
| post | ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:22:5:26:5 | {...} |
|
||||
| post | ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:9:23:39 | ... ...; |
|
||||
| post | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:18:23:29 | (...) ... |
|
||||
| post | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:32:23:38 | access to property Length |
|
||||
| post | ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:26:23:29 | null |
|
||||
| post | ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:13:23:13 | access to local variable j |
|
||||
| post | ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| post | ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:9:24:38 | ... ...; |
|
||||
| post | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:18:24:24 | (...) ... |
|
||||
| post | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| post | ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
|
||||
| post | ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:13:24:13 | access to local variable s |
|
||||
| post | ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:18:24:24 | (...) ... |
|
||||
| post | ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:9:25:33 | ...; |
|
||||
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:13:25:14 | "" |
|
||||
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith |
|
||||
| post | ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| post | ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:9:25:9 | access to local variable s |
|
||||
| post | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| post | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | "" |
|
||||
| post | ConditionalAccess.cs:31:26:31:38 | exit CommaJoinWith | ConditionalAccess.cs:31:70:31:83 | ... + ... |
|
||||
| post | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith |
|
||||
| post | ConditionalAccess.cs:31:70:31:78 | ... + ... | ConditionalAccess.cs:31:75:31:78 | ", " |
|
||||
@@ -424,7 +423,6 @@
|
||||
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:41:9:41 | access to parameter s |
|
||||
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:45:9:45 | access to parameter s |
|
||||
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:51:9:52 | "" |
|
||||
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:57:9:58 | "" |
|
||||
| post | NullCoalescing.cs:9:36:9:58 | ... ?? ... | NullCoalescing.cs:9:12:9:13 | enter M4 |
|
||||
| post | NullCoalescing.cs:9:37:9:37 | access to parameter b | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... |
|
||||
| post | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | NullCoalescing.cs:9:36:9:58 | ... ?? ... |
|
||||
@@ -439,20 +437,18 @@
|
||||
| post | NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:13:10:13:11 | enter M6 |
|
||||
| post | NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:14:5:18:5 | {...} |
|
||||
| post | NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:9:15:32 | ... ...; |
|
||||
| post | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:15:17:15:26 | (...) ... |
|
||||
| post | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:15:31:15:31 | 0 |
|
||||
| post | NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:23:15:26 | null |
|
||||
| post | NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:13:15:13 | access to local variable j |
|
||||
| post | NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:17:15:31 | ... ?? ... |
|
||||
| post | NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:17:15:26 | (...) ... |
|
||||
| post | NullCoalescing.cs:16:9:16:26 | ... ...; | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
|
||||
| post | NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:9:16:26 | ... ...; |
|
||||
| post | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:16:17:16:18 | "" |
|
||||
| post | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:16:23:16:25 | "a" |
|
||||
| post | NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:17:16:25 | ... ?? ... |
|
||||
| post | NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:13:16:13 | access to local variable s |
|
||||
| post | NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:9:17:25 | ...; |
|
||||
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:17:13:17:19 | (...) ... |
|
||||
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:17:24:17:24 | 1 |
|
||||
| post | NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:16:13:16:25 | String s = ... |
|
||||
| post | NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:19:17:19 | access to parameter i |
|
||||
| post | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:9:17:9 | access to local variable j |
|
||||
@@ -659,8 +655,6 @@
|
||||
| post | Switch.cs:50:18:50:21 | access to type Boolean | Switch.cs:50:13:50:39 | case Boolean: |
|
||||
| post | Switch.cs:50:30:50:38 | ... != ... | Switch.cs:50:35:50:38 | null |
|
||||
| post | Switch.cs:50:35:50:38 | null | Switch.cs:50:30:50:30 | access to parameter o |
|
||||
| post | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:60:15:60:20 | break; |
|
||||
| post | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:61:18:61:18 | 3 |
|
||||
| post | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:62:15:62:20 | break; |
|
||||
| post | Switch.cs:56:5:64:5 | {...} | Switch.cs:55:10:55:11 | enter M5 |
|
||||
| post | Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:56:5:64:5 | {...} |
|
||||
@@ -669,8 +663,9 @@
|
||||
| post | Switch.cs:57:21:57:21 | 2 | Switch.cs:57:17:57:17 | 1 |
|
||||
| post | Switch.cs:59:13:59:20 | case ...: | Switch.cs:57:17:57:21 | ... + ... |
|
||||
| post | Switch.cs:59:18:59:18 | 2 | Switch.cs:59:13:59:20 | case ...: |
|
||||
| post | Switch.cs:61:13:61:20 | case ...: | Switch.cs:59:18:59:18 | 2 |
|
||||
| post | Switch.cs:61:18:61:18 | 3 | Switch.cs:61:13:61:20 | case ...: |
|
||||
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:71:15:71:20 | break; |
|
||||
| post | Switch.cs:62:15:62:20 | break; | Switch.cs:61:18:61:18 | 3 |
|
||||
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:72:18:72:19 | "" |
|
||||
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:73:15:73:20 | break; |
|
||||
| post | Switch.cs:67:5:75:5 | {...} | Switch.cs:66:10:66:11 | enter M6 |
|
||||
@@ -679,6 +674,7 @@
|
||||
| post | Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:9:74:9 | switch (...) {...} |
|
||||
| post | Switch.cs:70:13:70:24 | case Int32: | Switch.cs:68:17:68:25 | (...) ... |
|
||||
| post | Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:70:13:70:24 | case Int32: |
|
||||
| post | Switch.cs:72:13:72:21 | case ...: | Switch.cs:70:18:70:20 | access to type Int32 |
|
||||
| post | Switch.cs:72:18:72:19 | "" | Switch.cs:72:13:72:21 | case ...: |
|
||||
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:82:15:82:26 | return ...; |
|
||||
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:86:15:86:26 | return ...; |
|
||||
@@ -1921,19 +1917,18 @@
|
||||
| pre | ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:26:23:29 | null |
|
||||
| pre | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:9:24:38 | ... ...; |
|
||||
| pre | ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| pre | ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:32:23:38 | access to property Length |
|
||||
| pre | ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:18:23:29 | (...) ... |
|
||||
| pre | ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:13:24:13 | access to local variable s |
|
||||
| pre | ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
|
||||
| pre | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:9:25:33 | ...; |
|
||||
| pre | ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| pre | ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| pre | ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:18:24:24 | (...) ... |
|
||||
| pre | ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| pre | ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | "" |
|
||||
| pre | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:21:10:21:11 | exit M7 |
|
||||
| pre | ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:9 | access to local variable s |
|
||||
| pre | ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| pre | ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| pre | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| pre | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith |
|
||||
| pre | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 |
|
||||
| pre | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | ConditionalAccess.cs:31:75:31:78 | ", " |
|
||||
@@ -2123,7 +2118,6 @@
|
||||
| pre | NullCoalescing.cs:9:37:9:37 | access to parameter b | NullCoalescing.cs:9:41:9:41 | access to parameter s |
|
||||
| pre | NullCoalescing.cs:9:37:9:37 | access to parameter b | NullCoalescing.cs:9:45:9:45 | access to parameter s |
|
||||
| pre | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | NullCoalescing.cs:9:37:9:37 | access to parameter b |
|
||||
| pre | NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:57:9:58 | "" |
|
||||
| pre | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" |
|
||||
| pre | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... |
|
||||
| pre | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:44:11:59 | ... ?? ... |
|
||||
@@ -2138,21 +2132,19 @@
|
||||
| pre | NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:13 | access to local variable j |
|
||||
| pre | NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:17:15:31 | ... ?? ... |
|
||||
| pre | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:16:9:16:26 | ... ...; |
|
||||
| pre | NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
|
||||
| pre | NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:31:15:31 | 0 |
|
||||
| pre | NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:23:15:26 | null |
|
||||
| pre | NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:17:15:26 | (...) ... |
|
||||
| pre | NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
|
||||
| pre | NullCoalescing.cs:16:9:16:26 | ... ...; | NullCoalescing.cs:16:13:16:13 | access to local variable s |
|
||||
| pre | NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:17:16:25 | ... ?? ... |
|
||||
| pre | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:17:9:17:25 | ...; |
|
||||
| pre | NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:13:16:25 | String s = ... |
|
||||
| pre | NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:23:16:25 | "a" |
|
||||
| pre | NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:18 | "" |
|
||||
| pre | NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:13:17:24 | ... ?? ... |
|
||||
| pre | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:13:10:13:11 | exit M6 |
|
||||
| pre | NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:17:9:17:9 | access to local variable j |
|
||||
| pre | NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:9:17:24 | ... = ... |
|
||||
| pre | NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:24:17:24 | 1 |
|
||||
| pre | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:19:17:19 | access to parameter i |
|
||||
| pre | NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:13:17:19 | (...) ... |
|
||||
| pre | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:6:5:43:5 | {...} |
|
||||
@@ -2377,19 +2369,19 @@
|
||||
| pre | Switch.cs:57:17:57:21 | ... + ... | Switch.cs:59:13:59:20 | case ...: |
|
||||
| pre | Switch.cs:57:21:57:21 | 2 | Switch.cs:57:17:57:21 | ... + ... |
|
||||
| pre | Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 |
|
||||
| pre | Switch.cs:59:18:59:18 | 2 | Switch.cs:60:15:60:20 | break; |
|
||||
| pre | Switch.cs:59:18:59:18 | 2 | Switch.cs:61:13:61:20 | case ...: |
|
||||
| pre | Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:18:61:18 | 3 |
|
||||
| pre | Switch.cs:61:18:61:18 | 3 | Switch.cs:62:15:62:20 | break; |
|
||||
| pre | Switch.cs:62:15:62:20 | break; | Switch.cs:55:10:55:11 | exit M5 |
|
||||
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:67:5:75:5 | {...} |
|
||||
| pre | Switch.cs:67:5:75:5 | {...} | Switch.cs:68:9:74:9 | switch (...) {...} |
|
||||
| pre | Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:68:25:68:25 | access to parameter s |
|
||||
| pre | Switch.cs:68:17:68:25 | (...) ... | Switch.cs:70:13:70:24 | case Int32: |
|
||||
| pre | Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:17:68:25 | (...) ... |
|
||||
| pre | Switch.cs:70:13:70:24 | case Int32: | Switch.cs:70:18:70:20 | access to type Int32 |
|
||||
| pre | Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:71:15:71:20 | break; |
|
||||
| pre | Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:72:13:72:21 | case ...: |
|
||||
| pre | Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" |
|
||||
| pre | Switch.cs:72:18:72:19 | "" | Switch.cs:66:10:66:11 | exit M6 |
|
||||
| pre | Switch.cs:72:18:72:19 | "" | Switch.cs:73:15:73:20 | break; |
|
||||
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:78:5:89:5 | {...} |
|
||||
| pre | Switch.cs:78:5:89:5 | {...} | Switch.cs:79:9:87:9 | switch (...) {...} |
|
||||
|
||||
@@ -179,19 +179,15 @@
|
||||
| ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:26:23:29 | null | semmle.label | successor |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:9:24:38 | ... ...; | semmle.label | successor |
|
||||
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | semmle.label | null |
|
||||
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:32:23:38 | access to property Length | semmle.label | non-null |
|
||||
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:18:23:29 | (...) ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:13:24:13 | access to local variable s | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:24:24:24 | access to parameter i | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:9:25:33 | ...; | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:13:24:37 | String s = ... | semmle.label | null |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString | semmle.label | non-null |
|
||||
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:18:24:24 | (...) ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:13:24:37 | String s = ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | "" | semmle.label | successor |
|
||||
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:9 | access to local variable s | semmle.label | successor |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:9:25:32 | ... = ... | semmle.label | null |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:31:25:31 | access to local variable s | semmle.label | non-null |
|
||||
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:9:25:32 | ... = ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | semmle.label | successor |
|
||||
@@ -346,7 +342,6 @@
|
||||
| NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | NullCoalescing.cs:9:37:9:37 | access to parameter b | semmle.label | successor |
|
||||
| NullCoalescing.cs:9:41:9:41 | access to parameter s | NullCoalescing.cs:9:51:9:58 | ... ?? ... | semmle.label | null |
|
||||
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:51:9:58 | ... ?? ... | semmle.label | null |
|
||||
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:57:9:58 | "" | semmle.label | null |
|
||||
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | semmle.label | successor |
|
||||
| NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:44:11:59 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:11:44:11:45 | access to parameter b1 | NullCoalescing.cs:11:51:11:58 | ... && ... | semmle.label | null |
|
||||
@@ -362,7 +357,6 @@
|
||||
| NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:13 | access to local variable j | semmle.label | successor |
|
||||
| NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:17:15:31 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:16:9:16:26 | ... ...; | semmle.label | successor |
|
||||
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | semmle.label | non-null |
|
||||
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:31:15:31 | 0 | semmle.label | null |
|
||||
| NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:23:15:26 | null | semmle.label | successor |
|
||||
| NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:17:15:26 | (...) ... | semmle.label | successor |
|
||||
@@ -371,16 +365,12 @@
|
||||
| NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:17:16:25 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:17:9:17:25 | ...; | semmle.label | successor |
|
||||
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:13:16:25 | String s = ... | semmle.label | non-null |
|
||||
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:23:16:25 | "a" | semmle.label | null |
|
||||
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:18 | "" | semmle.label | successor |
|
||||
| NullCoalescing.cs:16:23:16:25 | "a" | NullCoalescing.cs:16:13:16:25 | String s = ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:13:17:24 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:17:9:17:9 | access to local variable j | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:9:17:24 | ... = ... | semmle.label | non-null |
|
||||
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:24:17:24 | 1 | semmle.label | null |
|
||||
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:19:17:19 | access to parameter i | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:13:17:19 | (...) ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:24:17:24 | 1 | NullCoalescing.cs:17:9:17:24 | ... = ... | semmle.label | successor |
|
||||
| Patterns.cs:6:5:43:5 | {...} | Patterns.cs:7:9:7:24 | ... ...; | semmle.label | successor |
|
||||
| Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:7:16:7:16 | access to local variable o | semmle.label | successor |
|
||||
| Patterns.cs:7:16:7:16 | access to local variable o | Patterns.cs:7:20:7:23 | null | semmle.label | successor |
|
||||
@@ -604,7 +594,6 @@
|
||||
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:59:13:59:20 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:17:57:21 | ... + ... | semmle.label | successor |
|
||||
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 | semmle.label | successor |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:60:15:60:20 | break; | semmle.label | match |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:61:13:61:20 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:18:61:18 | 3 | semmle.label | successor |
|
||||
| Switch.cs:61:18:61:18 | 3 | Switch.cs:62:15:62:20 | break; | semmle.label | match |
|
||||
@@ -613,7 +602,6 @@
|
||||
| Switch.cs:68:17:68:25 | (...) ... | Switch.cs:70:13:70:24 | case Int32: | semmle.label | successor |
|
||||
| Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:17:68:25 | (...) ... | semmle.label | successor |
|
||||
| Switch.cs:70:13:70:24 | case Int32: | Switch.cs:70:18:70:20 | access to type Int32 | semmle.label | successor |
|
||||
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:71:15:71:20 | break; | semmle.label | match |
|
||||
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:72:13:72:21 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" | semmle.label | successor |
|
||||
| Switch.cs:72:18:72:19 | "" | Switch.cs:73:15:73:20 | break; | semmle.label | match |
|
||||
|
||||
@@ -286,7 +286,6 @@
|
||||
| ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | normal |
|
||||
| ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:13:23:13 | access to local variable j | normal |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | normal |
|
||||
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:18:23:29 | (...) ... | non-null |
|
||||
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:18:23:29 | (...) ... | null |
|
||||
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:26:23:29 | null | normal |
|
||||
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:18:23:29 | (...) ... | null |
|
||||
@@ -295,16 +294,12 @@
|
||||
| ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:13:24:13 | access to local variable s | normal |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:13:24:37 | String s = ... | normal |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:18:24:24 | (...) ... | non-null |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:18:24:24 | (...) ... | null |
|
||||
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:24:24:24 | access to parameter i | normal |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:18:24:24 | (...) ... | null |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:27:24:37 | call to method ToString | normal |
|
||||
| ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:9:25:9 | access to local variable s | normal |
|
||||
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:9:25:32 | ... = ... | normal |
|
||||
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:32 | ... = ... | normal |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:13:25:14 | "" | non-null |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:13:25:14 | "" | null |
|
||||
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:13:25:14 | "" | null |
|
||||
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | normal |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:31:25:31 | access to local variable s | normal |
|
||||
| ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | normal |
|
||||
@@ -528,7 +523,6 @@
|
||||
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s | non-null |
|
||||
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s | null |
|
||||
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:51:9:52 | "" | non-null |
|
||||
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:51:9:52 | "" | null |
|
||||
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | non-null |
|
||||
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:57:9:58 | "" | normal |
|
||||
| NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:57:9:58 | "" | normal |
|
||||
@@ -555,9 +549,7 @@
|
||||
| NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | normal |
|
||||
| NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:13:15:13 | access to local variable j | normal |
|
||||
| NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | normal |
|
||||
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:17:15:26 | (...) ... | non-null |
|
||||
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:17:15:26 | (...) ... | null |
|
||||
| NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:17:15:26 | (...) ... | non-null |
|
||||
| NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:31:15:31 | 0 | normal |
|
||||
| NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:23:15:26 | null | normal |
|
||||
| NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:31:15:31 | 0 | normal |
|
||||
@@ -565,7 +557,6 @@
|
||||
| NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:13:16:13 | access to local variable s | normal |
|
||||
| NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:16:13:16:25 | String s = ... | normal |
|
||||
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:17:16:18 | "" | non-null |
|
||||
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:17:16:18 | "" | null |
|
||||
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:18 | "" | non-null |
|
||||
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:23:16:25 | "a" | normal |
|
||||
| NullCoalescing.cs:16:23:16:25 | "a" | NullCoalescing.cs:16:23:16:25 | "a" | normal |
|
||||
@@ -573,7 +564,6 @@
|
||||
| NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:17:9:17:24 | ... = ... | normal |
|
||||
| NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:17:9:17:24 | ... = ... | normal |
|
||||
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:13:17:19 | (...) ... | non-null |
|
||||
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:13:17:19 | (...) ... | null |
|
||||
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:13:17:19 | (...) ... | non-null |
|
||||
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:24:17:24 | 1 | normal |
|
||||
| NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:19:17:19 | access to parameter i | normal |
|
||||
@@ -849,23 +839,18 @@
|
||||
| Switch.cs:50:35:50:38 | null | Switch.cs:50:35:50:38 | null | normal |
|
||||
| Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; | break |
|
||||
| Switch.cs:56:5:64:5 | {...} | Switch.cs:60:15:60:20 | break; | normal (break) |
|
||||
| Switch.cs:56:5:64:5 | {...} | Switch.cs:61:18:61:18 | 3 | no-match |
|
||||
| Switch.cs:56:5:64:5 | {...} | Switch.cs:62:15:62:20 | break; | normal (break) |
|
||||
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:60:15:60:20 | break; | normal (break) |
|
||||
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:61:18:61:18 | 3 | no-match |
|
||||
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:62:15:62:20 | break; | normal (break) |
|
||||
| Switch.cs:57:17:57:17 | 1 | Switch.cs:57:17:57:17 | 1 | normal |
|
||||
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:57:17:57:21 | ... + ... | normal |
|
||||
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:21:57:21 | 2 | normal |
|
||||
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 | no-match |
|
||||
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:60:15:60:20 | break; | break |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:59:18:59:18 | 2 | match |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:59:18:59:18 | 2 | no-match |
|
||||
| Switch.cs:60:15:60:20 | break; | Switch.cs:60:15:60:20 | break; | break |
|
||||
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:18:61:18 | 3 | no-match |
|
||||
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:62:15:62:20 | break; | break |
|
||||
| Switch.cs:61:18:61:18 | 3 | Switch.cs:61:18:61:18 | 3 | match |
|
||||
| Switch.cs:61:18:61:18 | 3 | Switch.cs:61:18:61:18 | 3 | no-match |
|
||||
| Switch.cs:62:15:62:20 | break; | Switch.cs:62:15:62:20 | break; | break |
|
||||
| Switch.cs:67:5:75:5 | {...} | Switch.cs:71:15:71:20 | break; | normal (break) |
|
||||
| Switch.cs:67:5:75:5 | {...} | Switch.cs:72:18:72:19 | "" | no-match |
|
||||
|
||||
@@ -262,20 +262,16 @@
|
||||
| ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:26:23:29 | null | semmle.label | successor |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:9:24:38 | ... ...; | semmle.label | successor |
|
||||
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | semmle.label | null |
|
||||
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:32:23:38 | access to property Length | semmle.label | non-null |
|
||||
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:18:23:29 | (...) ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:13:24:13 | access to local variable s | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:24:24:24 | access to parameter i | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:9:25:33 | ...; | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:13:24:37 | String s = ... | semmle.label | null |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString | semmle.label | non-null |
|
||||
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:18:24:24 | (...) ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:13:24:37 | String s = ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | "" | semmle.label | successor |
|
||||
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:21:10:21:11 | exit M7 | semmle.label | successor |
|
||||
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:9 | access to local variable s | semmle.label | successor |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:9:25:32 | ... = ... | semmle.label | null |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:31:25:31 | access to local variable s | semmle.label | non-null |
|
||||
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:9:25:32 | ... = ... | semmle.label | successor |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | semmle.label | successor |
|
||||
@@ -495,9 +491,7 @@
|
||||
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:12:9:13 | exit M4 | semmle.label | non-null |
|
||||
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:51:9:58 | ... ?? ... | semmle.label | null |
|
||||
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:12:9:13 | exit M4 | semmle.label | non-null |
|
||||
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:57:9:58 | "" | semmle.label | null |
|
||||
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | semmle.label | successor |
|
||||
| NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:12:9:13 | exit M4 | semmle.label | successor |
|
||||
| NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:44:11:59 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:11:44:11:45 | access to parameter b1 | NullCoalescing.cs:11:51:11:58 | ... && ... | semmle.label | null |
|
||||
@@ -516,7 +510,6 @@
|
||||
| NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:13 | access to local variable j | semmle.label | successor |
|
||||
| NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:17:15:31 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:16:9:16:26 | ... ...; | semmle.label | successor |
|
||||
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | semmle.label | non-null |
|
||||
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:31:15:31 | 0 | semmle.label | null |
|
||||
| NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:23:15:26 | null | semmle.label | successor |
|
||||
| NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:17:15:26 | (...) ... | semmle.label | successor |
|
||||
@@ -525,17 +518,13 @@
|
||||
| NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:17:16:25 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:17:9:17:25 | ...; | semmle.label | successor |
|
||||
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:13:16:25 | String s = ... | semmle.label | non-null |
|
||||
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:23:16:25 | "a" | semmle.label | null |
|
||||
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:18 | "" | semmle.label | successor |
|
||||
| NullCoalescing.cs:16:23:16:25 | "a" | NullCoalescing.cs:16:13:16:25 | String s = ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:13:17:24 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:13:10:13:11 | exit M6 | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:17:9:17:9 | access to local variable j | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:9:17:24 | ... = ... | semmle.label | non-null |
|
||||
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:24:17:24 | 1 | semmle.label | null |
|
||||
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:19:17:19 | access to parameter i | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:13:17:19 | (...) ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:17:24:17:24 | 1 | NullCoalescing.cs:17:9:17:24 | ... = ... | semmle.label | successor |
|
||||
| Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:6:5:43:5 | {...} | semmle.label | successor |
|
||||
| Patterns.cs:6:5:43:5 | {...} | Patterns.cs:7:9:7:24 | ... ...; | semmle.label | successor |
|
||||
| Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:7:16:7:16 | access to local variable o | semmle.label | successor |
|
||||
@@ -784,11 +773,8 @@
|
||||
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:59:13:59:20 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:17:57:21 | ... + ... | semmle.label | successor |
|
||||
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 | semmle.label | successor |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:60:15:60:20 | break; | semmle.label | match |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:61:13:61:20 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:60:15:60:20 | break; | Switch.cs:55:10:55:11 | exit M5 | semmle.label | break |
|
||||
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:18:61:18 | 3 | semmle.label | successor |
|
||||
| Switch.cs:61:18:61:18 | 3 | Switch.cs:55:10:55:11 | exit M5 | semmle.label | no-match |
|
||||
| Switch.cs:61:18:61:18 | 3 | Switch.cs:62:15:62:20 | break; | semmle.label | match |
|
||||
| Switch.cs:62:15:62:20 | break; | Switch.cs:55:10:55:11 | exit M5 | semmle.label | break |
|
||||
| Switch.cs:66:10:66:11 | enter M6 | Switch.cs:67:5:75:5 | {...} | semmle.label | successor |
|
||||
@@ -797,9 +783,7 @@
|
||||
| Switch.cs:68:17:68:25 | (...) ... | Switch.cs:70:13:70:24 | case Int32: | semmle.label | successor |
|
||||
| Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:17:68:25 | (...) ... | semmle.label | successor |
|
||||
| Switch.cs:70:13:70:24 | case Int32: | Switch.cs:70:18:70:20 | access to type Int32 | semmle.label | successor |
|
||||
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:71:15:71:20 | break; | semmle.label | match |
|
||||
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:72:13:72:21 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:71:15:71:20 | break; | Switch.cs:66:10:66:11 | exit M6 | semmle.label | break |
|
||||
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" | semmle.label | successor |
|
||||
| Switch.cs:72:18:72:19 | "" | Switch.cs:66:10:66:11 | exit M6 | semmle.label | no-match |
|
||||
| Switch.cs:72:18:72:19 | "" | Switch.cs:73:15:73:20 | break; | semmle.label | match |
|
||||
|
||||
Reference in New Issue
Block a user