mirror of
https://github.com/github/codeql.git
synced 2026-04-29 02:35:15 +02:00
C#: Handle constructors with member initializers and base() calls in CFG
This commit is contained in:
@@ -1754,11 +1754,22 @@ module ControlFlow {
|
||||
cfe = last(result.(JumpStmt).getChild(0), c) and
|
||||
c instanceof NormalCompletion
|
||||
or
|
||||
// Flow from constructor initializer to first element of constructor body
|
||||
cfe = any(ConstructorInitializer ci |
|
||||
c instanceof SimpleCompletion and
|
||||
result = first(ci.getConstructor().getBody())
|
||||
exists(ConstructorInitializer ci, Constructor con |
|
||||
cfe = last(ci, c) and
|
||||
con = ci.getConstructor() and
|
||||
c instanceof NormalCompletion
|
||||
|
|
||||
// Flow from constructor initializer to first member initializer
|
||||
exists(InitializerSplitting::InitializedInstanceMember m |
|
||||
InitializerSplitting::constructorInitializeOrder(con, m, 0)
|
||||
|
|
||||
result = first(m.getInitializer())
|
||||
)
|
||||
or
|
||||
// Flow from constructor initializer to first element of constructor body
|
||||
not InitializerSplitting::constructorInitializeOrder(con, _, _) and
|
||||
result = first(con.getBody())
|
||||
)
|
||||
or
|
||||
exists(Constructor con, InitializerSplitting::InitializedInstanceMember m, int i |
|
||||
cfe = last(m.getInitializer(), c) and
|
||||
|
||||
@@ -210,9 +210,7 @@ module InitializerSplitting {
|
||||
|
||||
InitializedInstanceMember() {
|
||||
not this.isStatic() and
|
||||
if this instanceof Property
|
||||
then expr_parent_top_level_adjusted(ae, 1, this)
|
||||
else expr_parent_top_level_adjusted(ae, 0, this)
|
||||
expr_parent_top_level_adjusted(ae, _, this)
|
||||
}
|
||||
|
||||
/** Gets the initializer expression. */
|
||||
@@ -235,9 +233,16 @@ module InitializerSplitting {
|
||||
*/
|
||||
predicate constructorInitializes(Constructor c, InitializedInstanceMember m) {
|
||||
c = c.getSourceDeclaration() and
|
||||
not c.hasInitializer() and
|
||||
not c.isStatic() and
|
||||
c.getDeclaringType().hasMember(m)
|
||||
c.getDeclaringType().hasMember(m) and
|
||||
(
|
||||
not c.hasInitializer()
|
||||
or
|
||||
// Members belonging to the base class are initialized via calls to the
|
||||
// base constructor
|
||||
c.getInitializer().isBase() and
|
||||
m.getDeclaringType() = c.getDeclaringType()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -337,7 +342,12 @@ module InitializerSplitting {
|
||||
override InitializerSplitKind getKind() { any() }
|
||||
|
||||
override predicate hasEntry(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
|
||||
none()
|
||||
exists(ConstructorInitializer ci |
|
||||
pred = last(ci, c) and
|
||||
succ = succ(pred, c) and
|
||||
succ = any(InitializedInstanceMember m).getAnInitializerDescendant() and
|
||||
this.getConstructor() = ci.getConstructor()
|
||||
)
|
||||
}
|
||||
|
||||
override predicate hasEntry(Callable c, ControlFlowElement succ) {
|
||||
@@ -362,7 +372,8 @@ module InitializerSplitting {
|
||||
override predicate hasSuccessor(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
|
||||
this.appliesTo(pred) and
|
||||
succ = succ(pred, c) and
|
||||
succ = any(InitializedInstanceMember m).getAnInitializerDescendant()
|
||||
succ = any(InitializedInstanceMember m | constructorInitializes(this.getConstructor(), m))
|
||||
.getAnInitializerDescendant()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -385,14 +385,16 @@ class VirtualMethodCall extends MethodCall {
|
||||
* `this(0)` (line 8) in
|
||||
*
|
||||
* ```
|
||||
* class A {
|
||||
* public A() { }
|
||||
* class A
|
||||
* {
|
||||
* public A() { }
|
||||
* }
|
||||
*
|
||||
* class B : A {
|
||||
* public B(int x) : base() { }
|
||||
* class B : A
|
||||
* {
|
||||
* public B(int x) : base() { }
|
||||
*
|
||||
* public B() : this(0) { }
|
||||
* public B() : this(0) { }
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
@@ -403,19 +405,64 @@ class ConstructorInitializer extends Call, @constructor_init_expr {
|
||||
|
||||
override string toString() { result = "call to constructor " + this.getTarget().getName() }
|
||||
|
||||
private ValueOrRefType getTargetType() {
|
||||
result = this.getTarget().getDeclaringType().getSourceDeclaration()
|
||||
}
|
||||
|
||||
private ValueOrRefType getConstructorType() {
|
||||
result = this.getConstructor().getDeclaringType().getSourceDeclaration()
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if this initialier is a `this` initializer, for example `this(0)`
|
||||
* in
|
||||
*
|
||||
* ```
|
||||
* class A
|
||||
* {
|
||||
* A(int i) { }
|
||||
* A() : this(0) { }
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
predicate isThis() {
|
||||
this.getTargetType() = this.getConstructorType()
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if this initialier is a `base` initializer, for example `base(0)`
|
||||
* in
|
||||
*
|
||||
* ```
|
||||
* class A
|
||||
* {
|
||||
* A(int i) { }
|
||||
* }
|
||||
*
|
||||
* class B : A
|
||||
* {
|
||||
* B() : base(0) { }
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
predicate isBase() {
|
||||
this.getTargetType() != this.getConstructorType()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the constructor that this initializer call belongs to. For example,
|
||||
* the initializer call `base()` on line 7 belongs to the constructor `B`
|
||||
* on line 6 in
|
||||
*
|
||||
* ```
|
||||
* class A {
|
||||
* public A() { }
|
||||
* class A
|
||||
* {
|
||||
* public A() { }
|
||||
* }
|
||||
*
|
||||
* class B : A {
|
||||
* public B()
|
||||
* : base() { }
|
||||
* class B : A
|
||||
* {
|
||||
* public B() : base() { }
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
|
||||
@@ -282,6 +282,9 @@
|
||||
| Initializers.cs:10:10:10:10 | enter M | Initializers.cs:10:10:10:10 | exit M | 20 |
|
||||
| Initializers.cs:16:20:16:20 | 1 | Initializers.cs:16:16:16:20 | ... = ... | 2 |
|
||||
| Initializers.cs:18:11:18:23 | enter NoConstructor | Initializers.cs:18:11:18:23 | exit NoConstructor | 8 |
|
||||
| Initializers.cs:29:9:29:11 | enter Sub | Initializers.cs:29:9:29:11 | exit Sub | 11 |
|
||||
| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | exit Sub | 8 |
|
||||
| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | exit Sub | 18 |
|
||||
| NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:23:3:23 | access to parameter i | 3 |
|
||||
| NullCoalescing.cs:3:9:3:10 | exit M1 | NullCoalescing.cs:3:9:3:10 | exit M1 | 1 |
|
||||
| NullCoalescing.cs:3:28:3:28 | 0 | NullCoalescing.cs:3:28:3:28 | 0 | 1 |
|
||||
|
||||
@@ -569,6 +569,9 @@
|
||||
| post | Initializers.cs:10:10:10:10 | enter M | Initializers.cs:10:10:10:10 | enter M |
|
||||
| post | Initializers.cs:16:20:16:20 | 1 | Initializers.cs:16:20:16:20 | 1 |
|
||||
| post | Initializers.cs:18:11:18:23 | enter NoConstructor | Initializers.cs:18:11:18:23 | enter NoConstructor |
|
||||
| post | Initializers.cs:29:9:29:11 | enter Sub | Initializers.cs:29:9:29:11 | enter Sub |
|
||||
| post | Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | enter Sub |
|
||||
| post | Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | enter Sub |
|
||||
| post | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | enter M1 |
|
||||
| post | NullCoalescing.cs:3:9:3:10 | exit M1 | NullCoalescing.cs:3:9:3:10 | enter M1 |
|
||||
| post | NullCoalescing.cs:3:9:3:10 | exit M1 | NullCoalescing.cs:3:9:3:10 | exit M1 |
|
||||
@@ -2116,6 +2119,9 @@
|
||||
| pre | Initializers.cs:10:10:10:10 | enter M | Initializers.cs:10:10:10:10 | enter M |
|
||||
| pre | Initializers.cs:16:20:16:20 | 1 | Initializers.cs:16:20:16:20 | 1 |
|
||||
| pre | Initializers.cs:18:11:18:23 | enter NoConstructor | Initializers.cs:18:11:18:23 | enter NoConstructor |
|
||||
| pre | Initializers.cs:29:9:29:11 | enter Sub | Initializers.cs:29:9:29:11 | enter Sub |
|
||||
| pre | Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | enter Sub |
|
||||
| pre | Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | enter Sub |
|
||||
| pre | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | enter M1 |
|
||||
| pre | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | exit M1 |
|
||||
| pre | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:28:3:28 | 0 |
|
||||
|
||||
@@ -1249,13 +1249,47 @@
|
||||
| post | Initializers.cs:13:42:13:61 | object creation of type Initializers | Initializers.cs:13:59:13:60 | "" |
|
||||
| post | Initializers.cs:13:59:13:60 | "" | Initializers.cs:13:39:13:39 | access to local variable i |
|
||||
| post | Initializers.cs:16:16:16:20 | ... = ... | Initializers.cs:16:20:16:20 | 1 |
|
||||
| post | Initializers.cs:18:11:18:23 | exit NoConstructor | Initializers.cs:21:13:21:17 | ... = ... |
|
||||
| post | Initializers.cs:20:13:20:13 | this access | Initializers.cs:18:11:18:23 | enter NoConstructor |
|
||||
| post | Initializers.cs:20:13:20:17 | ... = ... | Initializers.cs:20:17:20:17 | 0 |
|
||||
| post | Initializers.cs:20:17:20:17 | 0 | Initializers.cs:20:13:20:13 | this access |
|
||||
| post | Initializers.cs:21:13:21:13 | this access | Initializers.cs:20:13:20:17 | ... = ... |
|
||||
| post | Initializers.cs:21:13:21:17 | ... = ... | Initializers.cs:21:17:21:17 | 1 |
|
||||
| post | Initializers.cs:21:17:21:17 | 1 | Initializers.cs:21:13:21:13 | this access |
|
||||
| post | Initializers.cs:18:11:18:23 | exit NoConstructor | Initializers.cs:21:23:21:27 | ... = ... |
|
||||
| post | Initializers.cs:20:23:20:23 | this access | Initializers.cs:18:11:18:23 | enter NoConstructor |
|
||||
| post | Initializers.cs:20:23:20:23 | this access | Initializers.cs:33:9:33:11 | enter Sub |
|
||||
| post | Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:20:27:20:27 | 0 |
|
||||
| post | Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:20:27:20:27 | 0 |
|
||||
| post | Initializers.cs:20:27:20:27 | 0 | Initializers.cs:20:23:20:23 | this access |
|
||||
| post | Initializers.cs:20:27:20:27 | 0 | Initializers.cs:20:23:20:23 | this access |
|
||||
| post | Initializers.cs:21:23:21:23 | this access | Initializers.cs:20:23:20:27 | ... = ... |
|
||||
| post | Initializers.cs:21:23:21:23 | this access | Initializers.cs:20:23:20:27 | ... = ... |
|
||||
| post | Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:21:27:21:27 | 1 |
|
||||
| post | Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:21:27:21:27 | 1 |
|
||||
| post | Initializers.cs:21:27:21:27 | 1 | Initializers.cs:21:23:21:23 | this access |
|
||||
| post | Initializers.cs:21:27:21:27 | 1 | Initializers.cs:21:23:21:23 | this access |
|
||||
| post | Initializers.cs:26:13:26:13 | this access | Initializers.cs:21:23:21:27 | ... = ... |
|
||||
| post | Initializers.cs:26:13:26:13 | this access | Initializers.cs:29:17:29:20 | call to constructor NoConstructor |
|
||||
| post | Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:26:17:26:17 | 2 |
|
||||
| post | Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:26:17:26:17 | 2 |
|
||||
| post | Initializers.cs:26:17:26:17 | 2 | Initializers.cs:26:13:26:13 | this access |
|
||||
| post | Initializers.cs:26:17:26:17 | 2 | Initializers.cs:26:13:26:13 | this access |
|
||||
| post | Initializers.cs:29:9:29:11 | exit Sub | Initializers.cs:29:26:29:30 | ... = ... |
|
||||
| post | Initializers.cs:29:17:29:20 | call to constructor NoConstructor | Initializers.cs:29:9:29:11 | enter Sub |
|
||||
| post | Initializers.cs:29:24:29:33 | {...} | Initializers.cs:26:13:26:17 | ... = ... |
|
||||
| post | Initializers.cs:29:26:29:26 | this access | Initializers.cs:29:26:29:31 | ...; |
|
||||
| post | Initializers.cs:29:26:29:30 | ... = ... | Initializers.cs:29:30:29:30 | 3 |
|
||||
| post | Initializers.cs:29:26:29:31 | ...; | Initializers.cs:29:24:29:33 | {...} |
|
||||
| post | Initializers.cs:29:30:29:30 | 3 | Initializers.cs:29:26:29:26 | this access |
|
||||
| post | Initializers.cs:31:9:31:11 | exit Sub | Initializers.cs:31:31:31:35 | ... = ... |
|
||||
| post | Initializers.cs:31:22:31:25 | call to constructor Sub | Initializers.cs:31:9:31:11 | enter Sub |
|
||||
| post | Initializers.cs:31:29:31:38 | {...} | Initializers.cs:31:22:31:25 | call to constructor Sub |
|
||||
| post | Initializers.cs:31:31:31:31 | this access | Initializers.cs:31:31:31:36 | ...; |
|
||||
| post | Initializers.cs:31:31:31:35 | ... = ... | Initializers.cs:31:35:31:35 | access to parameter i |
|
||||
| post | Initializers.cs:31:31:31:36 | ...; | Initializers.cs:31:29:31:38 | {...} |
|
||||
| post | Initializers.cs:31:35:31:35 | access to parameter i | Initializers.cs:31:31:31:31 | this access |
|
||||
| post | Initializers.cs:33:9:33:11 | exit Sub | Initializers.cs:33:29:33:37 | ... = ... |
|
||||
| post | Initializers.cs:33:27:33:40 | {...} | Initializers.cs:26:13:26:17 | ... = ... |
|
||||
| post | Initializers.cs:33:29:33:29 | this access | Initializers.cs:33:29:33:38 | ...; |
|
||||
| post | Initializers.cs:33:29:33:37 | ... = ... | Initializers.cs:33:33:33:37 | ... + ... |
|
||||
| post | Initializers.cs:33:29:33:38 | ...; | Initializers.cs:33:27:33:40 | {...} |
|
||||
| post | Initializers.cs:33:33:33:33 | access to parameter i | Initializers.cs:33:29:33:29 | this access |
|
||||
| post | Initializers.cs:33:33:33:37 | ... + ... | Initializers.cs:33:37:33:37 | access to parameter j |
|
||||
| post | Initializers.cs:33:37:33:37 | access to parameter j | Initializers.cs:33:33:33:33 | access to parameter i |
|
||||
| post | NullCoalescing.cs:3:9:3:10 | exit M1 | NullCoalescing.cs:3:23:3:23 | access to parameter i |
|
||||
| post | NullCoalescing.cs:3:9:3:10 | exit M1 | NullCoalescing.cs:3:28:3:28 | 0 |
|
||||
| post | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:28 | ... ?? ... |
|
||||
@@ -3810,13 +3844,47 @@
|
||||
| pre | Initializers.cs:13:42:13:61 | object creation of type Initializers | Initializers.cs:13:37:13:63 | { ..., ... } |
|
||||
| pre | Initializers.cs:13:59:13:60 | "" | Initializers.cs:13:42:13:61 | object creation of type Initializers |
|
||||
| pre | Initializers.cs:16:20:16:20 | 1 | Initializers.cs:16:16:16:20 | ... = ... |
|
||||
| pre | Initializers.cs:18:11:18:23 | enter NoConstructor | Initializers.cs:20:13:20:13 | this access |
|
||||
| pre | Initializers.cs:20:13:20:13 | this access | Initializers.cs:20:17:20:17 | 0 |
|
||||
| pre | Initializers.cs:20:13:20:17 | ... = ... | Initializers.cs:21:13:21:13 | this access |
|
||||
| pre | Initializers.cs:20:17:20:17 | 0 | Initializers.cs:20:13:20:17 | ... = ... |
|
||||
| pre | Initializers.cs:21:13:21:13 | this access | Initializers.cs:21:17:21:17 | 1 |
|
||||
| pre | Initializers.cs:21:13:21:17 | ... = ... | Initializers.cs:18:11:18:23 | exit NoConstructor |
|
||||
| pre | Initializers.cs:21:17:21:17 | 1 | Initializers.cs:21:13:21:17 | ... = ... |
|
||||
| pre | Initializers.cs:18:11:18:23 | enter NoConstructor | Initializers.cs:20:23:20:23 | this access |
|
||||
| pre | Initializers.cs:20:23:20:23 | this access | Initializers.cs:20:27:20:27 | 0 |
|
||||
| pre | Initializers.cs:20:23:20:23 | this access | Initializers.cs:20:27:20:27 | 0 |
|
||||
| pre | Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:21:23:21:23 | this access |
|
||||
| pre | Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:21:23:21:23 | this access |
|
||||
| pre | Initializers.cs:20:27:20:27 | 0 | Initializers.cs:20:23:20:27 | ... = ... |
|
||||
| pre | Initializers.cs:20:27:20:27 | 0 | Initializers.cs:20:23:20:27 | ... = ... |
|
||||
| pre | Initializers.cs:21:23:21:23 | this access | Initializers.cs:21:27:21:27 | 1 |
|
||||
| pre | Initializers.cs:21:23:21:23 | this access | Initializers.cs:21:27:21:27 | 1 |
|
||||
| pre | Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:18:11:18:23 | exit NoConstructor |
|
||||
| pre | Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:26:13:26:13 | this access |
|
||||
| pre | Initializers.cs:21:27:21:27 | 1 | Initializers.cs:21:23:21:27 | ... = ... |
|
||||
| pre | Initializers.cs:21:27:21:27 | 1 | Initializers.cs:21:23:21:27 | ... = ... |
|
||||
| pre | Initializers.cs:26:13:26:13 | this access | Initializers.cs:26:17:26:17 | 2 |
|
||||
| pre | Initializers.cs:26:13:26:13 | this access | Initializers.cs:26:17:26:17 | 2 |
|
||||
| pre | Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:29:24:29:33 | {...} |
|
||||
| pre | Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:33:27:33:40 | {...} |
|
||||
| pre | Initializers.cs:26:17:26:17 | 2 | Initializers.cs:26:13:26:17 | ... = ... |
|
||||
| pre | Initializers.cs:26:17:26:17 | 2 | Initializers.cs:26:13:26:17 | ... = ... |
|
||||
| pre | Initializers.cs:29:9:29:11 | enter Sub | Initializers.cs:29:17:29:20 | call to constructor NoConstructor |
|
||||
| pre | Initializers.cs:29:17:29:20 | call to constructor NoConstructor | Initializers.cs:26:13:26:13 | this access |
|
||||
| pre | Initializers.cs:29:24:29:33 | {...} | Initializers.cs:29:26:29:31 | ...; |
|
||||
| pre | Initializers.cs:29:26:29:26 | this access | Initializers.cs:29:30:29:30 | 3 |
|
||||
| pre | Initializers.cs:29:26:29:30 | ... = ... | Initializers.cs:29:9:29:11 | exit Sub |
|
||||
| pre | Initializers.cs:29:26:29:31 | ...; | Initializers.cs:29:26:29:26 | this access |
|
||||
| pre | Initializers.cs:29:30:29:30 | 3 | Initializers.cs:29:26:29:30 | ... = ... |
|
||||
| pre | Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:22:31:25 | call to constructor Sub |
|
||||
| pre | Initializers.cs:31:22:31:25 | call to constructor Sub | Initializers.cs:31:29:31:38 | {...} |
|
||||
| pre | Initializers.cs:31:29:31:38 | {...} | Initializers.cs:31:31:31:36 | ...; |
|
||||
| pre | Initializers.cs:31:31:31:31 | this access | Initializers.cs:31:35:31:35 | access to parameter i |
|
||||
| pre | Initializers.cs:31:31:31:35 | ... = ... | Initializers.cs:31:9:31:11 | exit Sub |
|
||||
| pre | Initializers.cs:31:31:31:36 | ...; | Initializers.cs:31:31:31:31 | this access |
|
||||
| pre | Initializers.cs:31:35:31:35 | access to parameter i | Initializers.cs:31:31:31:35 | ... = ... |
|
||||
| pre | Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:20:23:20:23 | this access |
|
||||
| pre | Initializers.cs:33:27:33:40 | {...} | Initializers.cs:33:29:33:38 | ...; |
|
||||
| pre | Initializers.cs:33:29:33:29 | this access | Initializers.cs:33:33:33:33 | access to parameter i |
|
||||
| pre | Initializers.cs:33:29:33:37 | ... = ... | Initializers.cs:33:9:33:11 | exit Sub |
|
||||
| pre | Initializers.cs:33:29:33:38 | ...; | Initializers.cs:33:29:33:29 | this access |
|
||||
| pre | Initializers.cs:33:33:33:33 | access to parameter i | Initializers.cs:33:37:33:37 | access to parameter j |
|
||||
| pre | Initializers.cs:33:33:33:37 | ... + ... | Initializers.cs:33:29:33:37 | ... = ... |
|
||||
| pre | Initializers.cs:33:37:33:37 | access to parameter j | Initializers.cs:33:33:33:37 | ... + ... |
|
||||
| pre | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:23:3:28 | ... ?? ... |
|
||||
| pre | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:9:3:10 | exit M1 |
|
||||
| pre | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:28:3:28 | 0 |
|
||||
|
||||
@@ -970,11 +970,32 @@
|
||||
| Initializers.cs:13:42:13:61 | object creation of type Initializers | Initializers.cs:13:37:13:63 | { ..., ... } | semmle.label | successor |
|
||||
| Initializers.cs:13:59:13:60 | "" | Initializers.cs:13:42:13:61 | object creation of type Initializers | semmle.label | successor |
|
||||
| Initializers.cs:16:20:16:20 | 1 | Initializers.cs:16:16:16:20 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:20:13:20:13 | this access | Initializers.cs:20:17:20:17 | 0 | semmle.label | successor |
|
||||
| Initializers.cs:20:13:20:17 | ... = ... | Initializers.cs:21:13:21:13 | this access | semmle.label | successor |
|
||||
| Initializers.cs:20:17:20:17 | 0 | Initializers.cs:20:13:20:17 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:21:13:21:13 | this access | Initializers.cs:21:17:21:17 | 1 | semmle.label | successor |
|
||||
| Initializers.cs:21:17:21:17 | 1 | Initializers.cs:21:13:21:17 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:20:23:20:23 | this access | Initializers.cs:20:27:20:27 | 0 | semmle.label | successor |
|
||||
| Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:21:23:21:23 | this access | semmle.label | successor |
|
||||
| Initializers.cs:20:27:20:27 | 0 | Initializers.cs:20:23:20:27 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:21:23:21:23 | this access | Initializers.cs:21:27:21:27 | 1 | semmle.label | successor |
|
||||
| Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:26:13:26:13 | this access | semmle.label | successor |
|
||||
| Initializers.cs:21:27:21:27 | 1 | Initializers.cs:21:23:21:27 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:26:13:26:13 | this access | Initializers.cs:26:17:26:17 | 2 | semmle.label | successor |
|
||||
| Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:29:24:29:33 | {...} | semmle.label | successor |
|
||||
| Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:33:27:33:40 | {...} | semmle.label | successor |
|
||||
| Initializers.cs:26:17:26:17 | 2 | Initializers.cs:26:13:26:17 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:29:17:29:20 | call to constructor NoConstructor | Initializers.cs:26:13:26:13 | this access | semmle.label | successor |
|
||||
| Initializers.cs:29:24:29:33 | {...} | Initializers.cs:29:26:29:31 | ...; | semmle.label | successor |
|
||||
| Initializers.cs:29:26:29:26 | this access | Initializers.cs:29:30:29:30 | 3 | semmle.label | successor |
|
||||
| Initializers.cs:29:26:29:31 | ...; | Initializers.cs:29:26:29:26 | this access | semmle.label | successor |
|
||||
| Initializers.cs:29:30:29:30 | 3 | Initializers.cs:29:26:29:30 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:31:22:31:25 | call to constructor Sub | Initializers.cs:31:29:31:38 | {...} | semmle.label | successor |
|
||||
| Initializers.cs:31:29:31:38 | {...} | Initializers.cs:31:31:31:36 | ...; | semmle.label | successor |
|
||||
| Initializers.cs:31:31:31:31 | this access | Initializers.cs:31:35:31:35 | access to parameter i | semmle.label | successor |
|
||||
| Initializers.cs:31:31:31:36 | ...; | Initializers.cs:31:31:31:31 | this access | semmle.label | successor |
|
||||
| Initializers.cs:31:35:31:35 | access to parameter i | Initializers.cs:31:31:31:35 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:33:27:33:40 | {...} | Initializers.cs:33:29:33:38 | ...; | semmle.label | successor |
|
||||
| Initializers.cs:33:29:33:29 | this access | Initializers.cs:33:33:33:33 | access to parameter i | semmle.label | successor |
|
||||
| Initializers.cs:33:29:33:38 | ...; | Initializers.cs:33:29:33:29 | this access | semmle.label | successor |
|
||||
| Initializers.cs:33:33:33:33 | access to parameter i | Initializers.cs:33:37:33:37 | access to parameter j | semmle.label | successor |
|
||||
| Initializers.cs:33:33:33:37 | ... + ... | Initializers.cs:33:29:33:37 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:33:37:33:37 | access to parameter j | Initializers.cs:33:33:33:37 | ... + ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:28:3:28 | 0 | semmle.label | null |
|
||||
| NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:23:3:23 | access to parameter i | semmle.label | successor |
|
||||
| NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | NullCoalescing.cs:5:25:5:34 | ... ?? ... | semmle.label | successor |
|
||||
|
||||
@@ -1382,12 +1382,49 @@ nodeEnclosing
|
||||
| Initializers.cs:13:59:13:60 | "" | Initializers.cs:10:10:10:10 | M |
|
||||
| Initializers.cs:18:11:18:23 | enter NoConstructor | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:18:11:18:23 | exit NoConstructor | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:20:13:20:13 | this access | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:20:13:20:17 | ... = ... | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:20:17:20:17 | 0 | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:21:13:21:13 | this access | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:21:13:21:17 | ... = ... | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:21:17:21:17 | 1 | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:20:23:20:23 | this access | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:20:23:20:23 | this access | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:20:27:20:27 | 0 | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:20:27:20:27 | 0 | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:21:23:21:23 | this access | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:21:23:21:23 | this access | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:21:27:21:27 | 1 | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:21:27:21:27 | 1 | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:26:13:26:13 | this access | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:26:13:26:13 | this access | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:26:17:26:17 | 2 | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:26:17:26:17 | 2 | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:29:9:29:11 | enter Sub | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:29:9:29:11 | exit Sub | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:29:17:29:20 | call to constructor NoConstructor | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:29:24:29:33 | {...} | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:29:26:29:26 | this access | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:29:26:29:30 | ... = ... | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:29:26:29:31 | ...; | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:29:30:29:30 | 3 | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | Sub |
|
||||
| Initializers.cs:31:9:31:11 | exit Sub | Initializers.cs:31:9:31:11 | Sub |
|
||||
| Initializers.cs:31:22:31:25 | call to constructor Sub | Initializers.cs:31:9:31:11 | Sub |
|
||||
| Initializers.cs:31:29:31:38 | {...} | Initializers.cs:31:9:31:11 | Sub |
|
||||
| Initializers.cs:31:31:31:31 | this access | Initializers.cs:31:9:31:11 | Sub |
|
||||
| Initializers.cs:31:31:31:35 | ... = ... | Initializers.cs:31:9:31:11 | Sub |
|
||||
| Initializers.cs:31:31:31:36 | ...; | Initializers.cs:31:9:31:11 | Sub |
|
||||
| Initializers.cs:31:35:31:35 | access to parameter i | Initializers.cs:31:9:31:11 | Sub |
|
||||
| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:33:9:33:11 | exit Sub | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:33:27:33:40 | {...} | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:33:29:33:29 | this access | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:33:29:33:37 | ... = ... | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:33:29:33:38 | ...; | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:33:33:33:33 | access to parameter i | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:33:33:33:37 | ... + ... | Initializers.cs:33:9:33:11 | Sub |
|
||||
| Initializers.cs:33:37:33:37 | access to parameter j | Initializers.cs:33:9:33:11 | Sub |
|
||||
| NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | M1 |
|
||||
| NullCoalescing.cs:3:9:3:10 | exit M1 | NullCoalescing.cs:3:9:3:10 | M1 |
|
||||
| NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:9:3:10 | M1 |
|
||||
@@ -3107,6 +3144,9 @@ blockEnclosing
|
||||
| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | Initializers |
|
||||
| Initializers.cs:10:10:10:10 | enter M | Initializers.cs:10:10:10:10 | M |
|
||||
| Initializers.cs:18:11:18:23 | enter NoConstructor | Initializers.cs:18:11:18:23 | NoConstructor |
|
||||
| Initializers.cs:29:9:29:11 | enter Sub | Initializers.cs:29:9:29:11 | Sub |
|
||||
| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | Sub |
|
||||
| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | Sub |
|
||||
| NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | M1 |
|
||||
| NullCoalescing.cs:3:9:3:10 | exit M1 | NullCoalescing.cs:3:9:3:10 | M1 |
|
||||
| NullCoalescing.cs:3:28:3:28 | 0 | NullCoalescing.cs:3:9:3:10 | M1 |
|
||||
|
||||
@@ -1038,14 +1038,40 @@
|
||||
| Initializers.cs:13:59:13:60 | "" | Initializers.cs:13:59:13:60 | "" |
|
||||
| Initializers.cs:16:16:16:20 | ... = ... | Initializers.cs:16:20:16:20 | 1 |
|
||||
| Initializers.cs:16:20:16:20 | 1 | Initializers.cs:16:20:16:20 | 1 |
|
||||
| Initializers.cs:20:13:20:13 | access to field F | Initializers.cs:20:13:20:13 | this access |
|
||||
| Initializers.cs:20:13:20:13 | this access | Initializers.cs:20:13:20:13 | this access |
|
||||
| Initializers.cs:20:13:20:17 | ... = ... | Initializers.cs:20:13:20:13 | this access |
|
||||
| Initializers.cs:20:17:20:17 | 0 | Initializers.cs:20:17:20:17 | 0 |
|
||||
| Initializers.cs:21:13:21:13 | access to field G | Initializers.cs:21:13:21:13 | this access |
|
||||
| Initializers.cs:21:13:21:13 | this access | Initializers.cs:21:13:21:13 | this access |
|
||||
| Initializers.cs:21:13:21:17 | ... = ... | Initializers.cs:21:13:21:13 | this access |
|
||||
| Initializers.cs:21:17:21:17 | 1 | Initializers.cs:21:17:21:17 | 1 |
|
||||
| Initializers.cs:20:23:20:23 | access to field F | Initializers.cs:20:23:20:23 | this access |
|
||||
| Initializers.cs:20:23:20:23 | this access | Initializers.cs:20:23:20:23 | this access |
|
||||
| Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:20:23:20:23 | this access |
|
||||
| Initializers.cs:20:27:20:27 | 0 | Initializers.cs:20:27:20:27 | 0 |
|
||||
| Initializers.cs:21:23:21:23 | access to field G | Initializers.cs:21:23:21:23 | this access |
|
||||
| Initializers.cs:21:23:21:23 | this access | Initializers.cs:21:23:21:23 | this access |
|
||||
| Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:21:23:21:23 | this access |
|
||||
| Initializers.cs:21:27:21:27 | 1 | Initializers.cs:21:27:21:27 | 1 |
|
||||
| Initializers.cs:26:13:26:13 | access to field H | Initializers.cs:26:13:26:13 | this access |
|
||||
| Initializers.cs:26:13:26:13 | this access | Initializers.cs:26:13:26:13 | this access |
|
||||
| Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:26:13:26:13 | this access |
|
||||
| Initializers.cs:26:17:26:17 | 2 | Initializers.cs:26:17:26:17 | 2 |
|
||||
| Initializers.cs:29:17:29:20 | call to constructor NoConstructor | Initializers.cs:29:17:29:20 | call to constructor NoConstructor |
|
||||
| Initializers.cs:29:24:29:33 | {...} | Initializers.cs:29:24:29:33 | {...} |
|
||||
| Initializers.cs:29:26:29:26 | access to field I | Initializers.cs:29:26:29:26 | this access |
|
||||
| Initializers.cs:29:26:29:26 | this access | Initializers.cs:29:26:29:26 | this access |
|
||||
| Initializers.cs:29:26:29:30 | ... = ... | Initializers.cs:29:26:29:26 | this access |
|
||||
| Initializers.cs:29:26:29:31 | ...; | Initializers.cs:29:26:29:31 | ...; |
|
||||
| Initializers.cs:29:30:29:30 | 3 | Initializers.cs:29:30:29:30 | 3 |
|
||||
| Initializers.cs:31:22:31:25 | call to constructor Sub | Initializers.cs:31:22:31:25 | call to constructor Sub |
|
||||
| Initializers.cs:31:29:31:38 | {...} | Initializers.cs:31:29:31:38 | {...} |
|
||||
| Initializers.cs:31:31:31:31 | access to field I | Initializers.cs:31:31:31:31 | this access |
|
||||
| Initializers.cs:31:31:31:31 | this access | Initializers.cs:31:31:31:31 | this access |
|
||||
| Initializers.cs:31:31:31:35 | ... = ... | Initializers.cs:31:31:31:31 | this access |
|
||||
| Initializers.cs:31:31:31:36 | ...; | Initializers.cs:31:31:31:36 | ...; |
|
||||
| Initializers.cs:31:35:31:35 | access to parameter i | Initializers.cs:31:35:31:35 | access to parameter i |
|
||||
| Initializers.cs:33:27:33:40 | {...} | Initializers.cs:33:27:33:40 | {...} |
|
||||
| Initializers.cs:33:29:33:29 | access to field I | Initializers.cs:33:29:33:29 | this access |
|
||||
| Initializers.cs:33:29:33:29 | this access | Initializers.cs:33:29:33:29 | this access |
|
||||
| Initializers.cs:33:29:33:37 | ... = ... | Initializers.cs:33:29:33:29 | this access |
|
||||
| Initializers.cs:33:29:33:38 | ...; | Initializers.cs:33:29:33:38 | ...; |
|
||||
| Initializers.cs:33:33:33:33 | access to parameter i | Initializers.cs:33:33:33:33 | access to parameter i |
|
||||
| Initializers.cs:33:33:33:37 | ... + ... | Initializers.cs:33:33:33:33 | access to parameter i |
|
||||
| Initializers.cs:33:37:33:37 | access to parameter j | Initializers.cs:33:37:33:37 | access to parameter j |
|
||||
| NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | access to parameter i |
|
||||
| NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:23:3:28 | ... ?? ... |
|
||||
| NullCoalescing.cs:3:28:3:28 | 0 | NullCoalescing.cs:3:28:3:28 | 0 |
|
||||
|
||||
@@ -82,7 +82,10 @@
|
||||
| Initializers.cs:6:5:6:16 | Initializers | Initializers.cs:3:9:3:9 | this access |
|
||||
| Initializers.cs:8:5:8:16 | Initializers | Initializers.cs:3:9:3:9 | this access |
|
||||
| Initializers.cs:10:10:10:10 | M | Initializers.cs:11:5:14:5 | {...} |
|
||||
| Initializers.cs:18:11:18:23 | NoConstructor | Initializers.cs:20:13:20:13 | this access |
|
||||
| Initializers.cs:18:11:18:23 | NoConstructor | Initializers.cs:20:23:20:23 | this access |
|
||||
| Initializers.cs:29:9:29:11 | Sub | Initializers.cs:29:17:29:20 | call to constructor NoConstructor |
|
||||
| Initializers.cs:31:9:31:11 | Sub | Initializers.cs:31:22:31:25 | call to constructor Sub |
|
||||
| Initializers.cs:33:9:33:11 | Sub | Initializers.cs:20:23:20:23 | this access |
|
||||
| NullCoalescing.cs:3:9:3:10 | M1 | NullCoalescing.cs:3:23:3:28 | ... ?? ... |
|
||||
| NullCoalescing.cs:5:9:5:10 | M2 | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... |
|
||||
| NullCoalescing.cs:7:12:7:13 | M3 | NullCoalescing.cs:7:40:7:53 | ... ?? ... |
|
||||
|
||||
@@ -1335,14 +1335,40 @@
|
||||
| Initializers.cs:13:59:13:60 | "" | Initializers.cs:13:59:13:60 | "" | normal |
|
||||
| Initializers.cs:16:16:16:20 | ... = ... | Initializers.cs:16:16:16:20 | ... = ... | normal |
|
||||
| Initializers.cs:16:20:16:20 | 1 | Initializers.cs:16:20:16:20 | 1 | normal |
|
||||
| Initializers.cs:20:13:20:13 | access to field F | Initializers.cs:20:13:20:13 | this access | normal |
|
||||
| Initializers.cs:20:13:20:13 | this access | Initializers.cs:20:13:20:13 | this access | normal |
|
||||
| Initializers.cs:20:13:20:17 | ... = ... | Initializers.cs:20:13:20:17 | ... = ... | normal |
|
||||
| Initializers.cs:20:17:20:17 | 0 | Initializers.cs:20:17:20:17 | 0 | normal |
|
||||
| Initializers.cs:21:13:21:13 | access to field G | Initializers.cs:21:13:21:13 | this access | normal |
|
||||
| Initializers.cs:21:13:21:13 | this access | Initializers.cs:21:13:21:13 | this access | normal |
|
||||
| Initializers.cs:21:13:21:17 | ... = ... | Initializers.cs:21:13:21:17 | ... = ... | normal |
|
||||
| Initializers.cs:21:17:21:17 | 1 | Initializers.cs:21:17:21:17 | 1 | normal |
|
||||
| Initializers.cs:20:23:20:23 | access to field F | Initializers.cs:20:23:20:23 | this access | normal |
|
||||
| Initializers.cs:20:23:20:23 | this access | Initializers.cs:20:23:20:23 | this access | normal |
|
||||
| Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:20:23:20:27 | ... = ... | normal |
|
||||
| Initializers.cs:20:27:20:27 | 0 | Initializers.cs:20:27:20:27 | 0 | normal |
|
||||
| Initializers.cs:21:23:21:23 | access to field G | Initializers.cs:21:23:21:23 | this access | normal |
|
||||
| Initializers.cs:21:23:21:23 | this access | Initializers.cs:21:23:21:23 | this access | normal |
|
||||
| Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:21:23:21:27 | ... = ... | normal |
|
||||
| Initializers.cs:21:27:21:27 | 1 | Initializers.cs:21:27:21:27 | 1 | normal |
|
||||
| Initializers.cs:26:13:26:13 | access to field H | Initializers.cs:26:13:26:13 | this access | normal |
|
||||
| Initializers.cs:26:13:26:13 | this access | Initializers.cs:26:13:26:13 | this access | normal |
|
||||
| Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:26:13:26:17 | ... = ... | normal |
|
||||
| Initializers.cs:26:17:26:17 | 2 | Initializers.cs:26:17:26:17 | 2 | normal |
|
||||
| Initializers.cs:29:17:29:20 | call to constructor NoConstructor | Initializers.cs:29:17:29:20 | call to constructor NoConstructor | normal |
|
||||
| Initializers.cs:29:24:29:33 | {...} | Initializers.cs:29:26:29:30 | ... = ... | normal |
|
||||
| Initializers.cs:29:26:29:26 | access to field I | Initializers.cs:29:26:29:26 | this access | normal |
|
||||
| Initializers.cs:29:26:29:26 | this access | Initializers.cs:29:26:29:26 | this access | normal |
|
||||
| Initializers.cs:29:26:29:30 | ... = ... | Initializers.cs:29:26:29:30 | ... = ... | normal |
|
||||
| Initializers.cs:29:26:29:31 | ...; | Initializers.cs:29:26:29:30 | ... = ... | normal |
|
||||
| Initializers.cs:29:30:29:30 | 3 | Initializers.cs:29:30:29:30 | 3 | normal |
|
||||
| Initializers.cs:31:22:31:25 | call to constructor Sub | Initializers.cs:31:22:31:25 | call to constructor Sub | normal |
|
||||
| Initializers.cs:31:29:31:38 | {...} | Initializers.cs:31:31:31:35 | ... = ... | normal |
|
||||
| Initializers.cs:31:31:31:31 | access to field I | Initializers.cs:31:31:31:31 | this access | normal |
|
||||
| Initializers.cs:31:31:31:31 | this access | Initializers.cs:31:31:31:31 | this access | normal |
|
||||
| Initializers.cs:31:31:31:35 | ... = ... | Initializers.cs:31:31:31:35 | ... = ... | normal |
|
||||
| Initializers.cs:31:31:31:36 | ...; | Initializers.cs:31:31:31:35 | ... = ... | normal |
|
||||
| Initializers.cs:31:35:31:35 | access to parameter i | Initializers.cs:31:35:31:35 | access to parameter i | normal |
|
||||
| Initializers.cs:33:27:33:40 | {...} | Initializers.cs:33:29:33:37 | ... = ... | normal |
|
||||
| Initializers.cs:33:29:33:29 | access to field I | Initializers.cs:33:29:33:29 | this access | normal |
|
||||
| Initializers.cs:33:29:33:29 | this access | Initializers.cs:33:29:33:29 | this access | normal |
|
||||
| Initializers.cs:33:29:33:37 | ... = ... | Initializers.cs:33:29:33:37 | ... = ... | normal |
|
||||
| Initializers.cs:33:29:33:38 | ...; | Initializers.cs:33:29:33:37 | ... = ... | normal |
|
||||
| Initializers.cs:33:33:33:33 | access to parameter i | Initializers.cs:33:33:33:33 | access to parameter i | normal |
|
||||
| Initializers.cs:33:33:33:37 | ... + ... | Initializers.cs:33:33:33:37 | ... + ... | normal |
|
||||
| Initializers.cs:33:37:33:37 | access to parameter j | Initializers.cs:33:37:33:37 | access to parameter j | normal |
|
||||
| NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | access to parameter i | non-null |
|
||||
| NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | access to parameter i | null |
|
||||
| NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:23:3:23 | access to parameter i | non-null |
|
||||
|
||||
@@ -17,7 +17,19 @@ class Initializers
|
||||
|
||||
class NoConstructor
|
||||
{
|
||||
int F = 0;
|
||||
int G = 1;
|
||||
protected int F = 0;
|
||||
protected int G = 1;
|
||||
}
|
||||
|
||||
class Sub : NoConstructor
|
||||
{
|
||||
int H = 2;
|
||||
int I;
|
||||
|
||||
Sub() : base() { I = 3; }
|
||||
|
||||
Sub(int i) : this() { I = i; }
|
||||
|
||||
Sub(int i, int j) { I = i + j; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1403,13 +1403,47 @@
|
||||
| Initializers.cs:13:42:13:61 | object creation of type Initializers | Initializers.cs:13:37:13:63 | { ..., ... } | semmle.label | successor |
|
||||
| Initializers.cs:13:59:13:60 | "" | Initializers.cs:13:42:13:61 | object creation of type Initializers | semmle.label | successor |
|
||||
| Initializers.cs:16:20:16:20 | 1 | Initializers.cs:16:16:16:20 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:18:11:18:23 | enter NoConstructor | Initializers.cs:20:13:20:13 | this access | semmle.label | successor |
|
||||
| Initializers.cs:20:13:20:13 | this access | Initializers.cs:20:17:20:17 | 0 | semmle.label | successor |
|
||||
| Initializers.cs:20:13:20:17 | ... = ... | Initializers.cs:21:13:21:13 | this access | semmle.label | successor |
|
||||
| Initializers.cs:20:17:20:17 | 0 | Initializers.cs:20:13:20:17 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:21:13:21:13 | this access | Initializers.cs:21:17:21:17 | 1 | semmle.label | successor |
|
||||
| Initializers.cs:21:13:21:17 | ... = ... | Initializers.cs:18:11:18:23 | exit NoConstructor | semmle.label | successor |
|
||||
| Initializers.cs:21:17:21:17 | 1 | Initializers.cs:21:13:21:17 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:18:11:18:23 | enter NoConstructor | Initializers.cs:20:23:20:23 | this access | semmle.label | successor |
|
||||
| Initializers.cs:20:23:20:23 | this access | Initializers.cs:20:27:20:27 | 0 | semmle.label | successor |
|
||||
| Initializers.cs:20:23:20:23 | this access | Initializers.cs:20:27:20:27 | 0 | semmle.label | successor |
|
||||
| Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:21:23:21:23 | this access | semmle.label | successor |
|
||||
| Initializers.cs:20:23:20:27 | ... = ... | Initializers.cs:21:23:21:23 | this access | semmle.label | successor |
|
||||
| Initializers.cs:20:27:20:27 | 0 | Initializers.cs:20:23:20:27 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:20:27:20:27 | 0 | Initializers.cs:20:23:20:27 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:21:23:21:23 | this access | Initializers.cs:21:27:21:27 | 1 | semmle.label | successor |
|
||||
| Initializers.cs:21:23:21:23 | this access | Initializers.cs:21:27:21:27 | 1 | semmle.label | successor |
|
||||
| Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:18:11:18:23 | exit NoConstructor | semmle.label | successor |
|
||||
| Initializers.cs:21:23:21:27 | ... = ... | Initializers.cs:26:13:26:13 | this access | semmle.label | successor |
|
||||
| Initializers.cs:21:27:21:27 | 1 | Initializers.cs:21:23:21:27 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:21:27:21:27 | 1 | Initializers.cs:21:23:21:27 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:26:13:26:13 | this access | Initializers.cs:26:17:26:17 | 2 | semmle.label | successor |
|
||||
| Initializers.cs:26:13:26:13 | this access | Initializers.cs:26:17:26:17 | 2 | semmle.label | successor |
|
||||
| Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:29:24:29:33 | {...} | semmle.label | successor |
|
||||
| Initializers.cs:26:13:26:17 | ... = ... | Initializers.cs:33:27:33:40 | {...} | semmle.label | successor |
|
||||
| Initializers.cs:26:17:26:17 | 2 | Initializers.cs:26:13:26:17 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:26:17:26:17 | 2 | Initializers.cs:26:13:26:17 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:29:9:29:11 | enter Sub | Initializers.cs:29:17:29:20 | call to constructor NoConstructor | semmle.label | successor |
|
||||
| Initializers.cs:29:17:29:20 | call to constructor NoConstructor | Initializers.cs:26:13:26:13 | this access | semmle.label | successor |
|
||||
| Initializers.cs:29:24:29:33 | {...} | Initializers.cs:29:26:29:31 | ...; | semmle.label | successor |
|
||||
| Initializers.cs:29:26:29:26 | this access | Initializers.cs:29:30:29:30 | 3 | semmle.label | successor |
|
||||
| Initializers.cs:29:26:29:30 | ... = ... | Initializers.cs:29:9:29:11 | exit Sub | semmle.label | successor |
|
||||
| Initializers.cs:29:26:29:31 | ...; | Initializers.cs:29:26:29:26 | this access | semmle.label | successor |
|
||||
| Initializers.cs:29:30:29:30 | 3 | Initializers.cs:29:26:29:30 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:22:31:25 | call to constructor Sub | semmle.label | successor |
|
||||
| Initializers.cs:31:22:31:25 | call to constructor Sub | Initializers.cs:31:29:31:38 | {...} | semmle.label | successor |
|
||||
| Initializers.cs:31:29:31:38 | {...} | Initializers.cs:31:31:31:36 | ...; | semmle.label | successor |
|
||||
| Initializers.cs:31:31:31:31 | this access | Initializers.cs:31:35:31:35 | access to parameter i | semmle.label | successor |
|
||||
| Initializers.cs:31:31:31:35 | ... = ... | Initializers.cs:31:9:31:11 | exit Sub | semmle.label | successor |
|
||||
| Initializers.cs:31:31:31:36 | ...; | Initializers.cs:31:31:31:31 | this access | semmle.label | successor |
|
||||
| Initializers.cs:31:35:31:35 | access to parameter i | Initializers.cs:31:31:31:35 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:20:23:20:23 | this access | semmle.label | successor |
|
||||
| Initializers.cs:33:27:33:40 | {...} | Initializers.cs:33:29:33:38 | ...; | semmle.label | successor |
|
||||
| Initializers.cs:33:29:33:29 | this access | Initializers.cs:33:33:33:33 | access to parameter i | semmle.label | successor |
|
||||
| Initializers.cs:33:29:33:37 | ... = ... | Initializers.cs:33:9:33:11 | exit Sub | semmle.label | successor |
|
||||
| Initializers.cs:33:29:33:38 | ...; | Initializers.cs:33:29:33:29 | this access | semmle.label | successor |
|
||||
| Initializers.cs:33:33:33:33 | access to parameter i | Initializers.cs:33:37:33:37 | access to parameter j | semmle.label | successor |
|
||||
| Initializers.cs:33:33:33:37 | ... + ... | Initializers.cs:33:29:33:37 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:33:37:33:37 | access to parameter j | Initializers.cs:33:33:33:37 | ... + ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:23:3:28 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:9:3:10 | exit M1 | semmle.label | non-null |
|
||||
| NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:28:3:28 | 0 | semmle.label | null |
|
||||
|
||||
Reference in New Issue
Block a user