Merge remote-tracking branch 'upstream/main' into side-effects

This commit is contained in:
Dave Bartolomeo
2021-05-07 16:50:48 -04:00
465 changed files with 16260 additions and 3029 deletions

View File

@@ -0,0 +1,63 @@
/**
* @name Extraction errors
* @description List all errors reported by the extractor or the compiler. Extractor errors are
* limited to those files where there are no compilation errors.
* @kind diagnostic
* @id cs/diagnostics/extraction-errors
*/
import csharp
import semmle.code.csharp.commons.Diagnostics
private newtype TDiagnosticError =
TCompilerError(CompilerError c) or
TExtractorError(ExtractorError e)
abstract private class DiagnosticError extends TDiagnosticError {
abstract string getMessage();
abstract string toString();
abstract Location getLocation();
string getLocationMessage() {
if getLocation().getFile().fromSource()
then result = " in " + getLocation().getFile()
else result = ""
}
}
private class DiagnosticCompilerError extends DiagnosticError {
CompilerError c;
DiagnosticCompilerError() { this = TCompilerError(c) }
override string getMessage() {
result = "Compiler error" + this.getLocationMessage() + ": " + c.getMessage()
}
override string toString() { result = c.toString() }
override Location getLocation() { result = c.getLocation() }
}
private class DiagnosticExtractorError extends DiagnosticError {
ExtractorError e;
DiagnosticExtractorError() {
this = TExtractorError(e) and
not exists(CompilerError ce | ce.getLocation().getFile() = e.getLocation().getFile())
}
override string getMessage() {
result =
"Unexpected " + e.getOrigin() + " error" + this.getLocationMessage() + ": " + e.getText()
}
override string toString() { result = e.toString() }
override Location getLocation() { result = e.getLocation() }
}
from DiagnosticError error
select error.getMessage(), 2

View File

@@ -0,0 +1,17 @@
/**
* @name Successfully extracted files
* @description A list of all files in the source code directory that were extracted
* without encountering an extraction or compiler error in the file.
* @kind diagnostic
* @id cs/diagnostics/successfully-extracted-files
*/
import csharp
import semmle.code.csharp.commons.Diagnostics
from File file
where
file.fromSource() and
not exists(ExtractorError e | e.getLocation().getFile() = file) and
not exists(CompilerError e | e.getLocation().getFile() = file)
select file, ""

View File

@@ -29,7 +29,7 @@ However on older compilers, the actual output is <code>10 10 10 10 10 10 10 10 1
<references>
<li>Eric Lippert's Blog: <a href="http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx">Closing over the loop variable considered harmful</a>.</li>
<li>Eric Lippert's Blog: <a href="https://docs.microsoft.com/en-gb/archive/blogs/ericlippert/closing-over-the-loop-variable-considered-harmful">Closing over the loop variable considered harmful</a>.</li>
</references>

View File

@@ -27,7 +27,7 @@
<a href="https://blogs.msdn.microsoft.com/shawnste/2018/04/12/the-japanese-calendars-y2k-moment/">The Japanese Calendar's Y2K Moment</a>.
</li>
<li>
<a href="https://docs.microsoft.com/en-us/windows/desktop/Intl/era-handling-for-the-japanese-calendar/">Era Handling for the Japanese Calendar</a>.
<a href="https://docs.microsoft.com/en-us/windows/win32/intl/era-handling-for-the-japanese-calendar">Era Handling for the Japanese Calendar</a>.
</li>
<li>
<a href="https://simple.wikipedia.org/wiki/List_of_Japanese_eras">List of Japanese Eras (Wikipedia)</a>

View File

@@ -25,7 +25,7 @@ really be compared using <code>i == j</code>.</p>
<references>
<li>MSDN: <a href="http://msdn.microsoft.com/en-us/library/system.object.referenceequals.aspx">Object.ReferenceEquals Method</a>.</li>
<li>The Way I See It: <a href="http://blogs.msdn.com/b/vijaysk/archive/2008/03/19/object-referenceequals-valuevar-valuevar-will-always-return-false.aspx">Object.ReferenceEquals(ValueVar, ValueVar) will always return false.</a></li>
<li>The Way I See It: <a href="https://docs.microsoft.com/en-us/archive/blogs/vijaysk/object-referenceequalsvaluevar-valuevar-will-always-return-false">Object.ReferenceEquals(ValueVar, ValueVar) will always return false.</a></li>
</references>

View File

@@ -53,7 +53,7 @@
Microsoft Visual Studio Unit Testing Framework: documentation at <a href="https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.aspx">MSDN</a>.
</li>
<li>
xUnit.net: official website at <a href="https://xunit.github.io/">https://xunit.github.io/</a>.
xUnit.net: official website at <a href="https://xunit.net/">https://xunit.net/</a>.
</li>
</references>

View File

@@ -0,0 +1,11 @@
/**
* @id cs/summary/lines-of-code
* @name Total lines of code in the database
* @description The total number of lines of code across all files. This is a useful metric of the size of a database. For all files that were seen during the build, this query counts the lines of code, excluding whitespace or comments.
* @kind metric
* @tags summary
*/
import csharp
select sum(File f | f.fromSource() | f.getNumberOfLinesOfCode())

View File

@@ -42,7 +42,7 @@ To fix this problem, the 'debug' flag should be set to <code>false</code>, or re
<li>
MSDN:
<a href="https://blogs.msdn.microsoft.com/prashant_upadhyay/2011/07/14/why-debugfalse-in-asp-net-applications-in-production-environment/">Why debug=false in ASP.NET applications in production environment</a>.
<a href="https://web.archive.org/web/20190919105353/https://blogs.msdn.microsoft.com/prashant_upadhyay/2011/07/14/why-debugfalse-in-asp-net-applications-in-production-environment/">Why debug=false in ASP.NET applications in production environment</a>.
</li>
<li>
MSDN:

View File

@@ -36,7 +36,4 @@ use the error log, but remote users will not see the information.</p>
<sample src="ExceptionInformationExposure.cs" />
</example>
<references>
<li>OWASP: <a href="https://www.owasp.org/index.php/Information_Leak_(information_disclosure)">Information Leak</a>.</li>
</references>
</qhelp>

View File

@@ -297,7 +297,8 @@ class Instruction extends Construction::TStageInstruction {
/**
* Gets the opcode that specifies the operation performed by this instruction.
*/
final Opcode getOpcode() { result = Construction::getInstructionOpcode(this) }
pragma[inline]
final Opcode getOpcode() { Construction::getInstructionOpcode(result, this) }
/**
* Gets all direct uses of the result of this instruction. The result can be

View File

@@ -165,10 +165,10 @@ import Cached
cached
private module Cached {
cached
Opcode getInstructionOpcode(TRawInstruction instr) {
predicate getInstructionOpcode(Opcode opcode, TRawInstruction instr) {
exists(TranslatedElement element, InstructionTag tag |
instructionOrigin(instr, element, tag) and
element.hasInstruction(result, tag, _)
element.hasInstruction(opcode, tag, _)
)
}

View File

@@ -57,7 +57,8 @@ private Element getRealParent(Expr expr) { result = expr.getParent() }
*/
predicate isIRConstant(Expr expr) { exists(expr.getValue()) }
// Pulled out to work around QL-796
// Pulled out for performance. See
// https://github.com/github/codeql-coreql-team/issues/1044.
private predicate isOrphan(Expr expr) { not exists(getRealParent(expr)) }
/**

View File

@@ -297,7 +297,8 @@ class Instruction extends Construction::TStageInstruction {
/**
* Gets the opcode that specifies the operation performed by this instruction.
*/
final Opcode getOpcode() { result = Construction::getInstructionOpcode(this) }
pragma[inline]
final Opcode getOpcode() { Construction::getInstructionOpcode(result, this) }
/**
* Gets all direct uses of the result of this instruction. The result can be

View File

@@ -338,15 +338,21 @@ private module Cached {
instr = unreachedInstruction(_) and result = Language::getVoidType()
}
/**
* Holds if `opcode` is the opcode that specifies the operation performed by `instr`.
*
* The parameters are ordered such that they produce a clean join (with no need for reordering)
* in the characteristic predicates of the `Instruction` subclasses.
*/
cached
Opcode getInstructionOpcode(Instruction instr) {
result = getOldInstruction(instr).getOpcode()
predicate getInstructionOpcode(Opcode opcode, Instruction instr) {
opcode = getOldInstruction(instr).getOpcode()
or
instr = phiInstruction(_, _) and result instanceof Opcode::Phi
instr = phiInstruction(_, _) and opcode instanceof Opcode::Phi
or
instr = chiInstruction(_) and result instanceof Opcode::Chi
instr = chiInstruction(_) and opcode instanceof Opcode::Chi
or
instr = unreachedInstruction(_) and result instanceof Opcode::Unreached
instr = unreachedInstruction(_) and opcode instanceof Opcode::Unreached
}
cached

View File

@@ -316,6 +316,15 @@ private module SsaDefReaches {
)
}
/**
* Holds if the reference to `def` at index `i` in basic block `bb` is the
* last reference to `v` inside `bb`.
*/
pragma[noinline]
predicate lastSsaRef(Definition def, SourceVariable v, BasicBlock bb, int i) {
ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v)
}
predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v) {
exists(ssaDefRank(def, v, bb, _, _))
}
@@ -351,8 +360,7 @@ private module SsaDefReaches {
*/
predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) {
varBlockReaches(def, bb1, bb2) and
ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1 and
variableRead(bb2, i2, _, _)
ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1
}
}
@@ -434,15 +442,22 @@ predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2
bb2 = bb1
)
or
exists(SourceVariable v | ssaDefRank(def, v, bb1, i1, _) = maxSsaRefRank(bb1, v)) and
lastSsaRef(def, _, bb1, i1) and
defAdjacentRead(def, bb1, bb2, i2)
}
pragma[noinline]
private predicate adjacentDefRead(
Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2, SourceVariable v
) {
adjacentDefRead(def, bb1, i1, bb2, i2) and
v = def.getSourceVariable()
}
private predicate adjacentDefReachesRead(
Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2
) {
adjacentDefRead(def, bb1, i1, bb2, i2) and
exists(SourceVariable v | v = def.getSourceVariable() |
exists(SourceVariable v | adjacentDefRead(def, bb1, i1, bb2, i2, v) |
ssaRef(bb1, i1, v, SsaDef())
or
variableRead(bb1, i1, v, true)
@@ -475,17 +490,19 @@ predicate adjacentDefNoUncertainReads(Definition def, BasicBlock bb1, int i1, Ba
*/
pragma[nomagic]
predicate lastRefRedef(Definition def, BasicBlock bb, int i, Definition next) {
exists(int rnk, SourceVariable v, int j | rnk = ssaDefRank(def, v, bb, i, _) |
exists(SourceVariable v |
// Next reference to `v` inside `bb` is a write
next.definesAt(v, bb, j) and
rnk + 1 = ssaRefRank(bb, j, v, SsaDef())
exists(int rnk, int j |
rnk = ssaDefRank(def, v, bb, i, _) and
next.definesAt(v, bb, j) and
rnk + 1 = ssaRefRank(bb, j, v, SsaDef())
)
or
// Can reach a write using one or more steps
rnk = maxSsaRefRank(bb, v) and
lastSsaRef(def, v, bb, i) and
exists(BasicBlock bb2 |
varBlockReaches(def, bb, bb2) and
next.definesAt(v, bb2, j) and
1 = ssaRefRank(bb2, j, v, SsaDef())
1 = ssaDefRank(next, v, bb2, _, SsaDef())
)
)
}
@@ -539,7 +556,8 @@ pragma[nomagic]
predicate lastRef(Definition def, BasicBlock bb, int i) {
lastRefRedef(def, bb, i, _)
or
exists(SourceVariable v | ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v) |
lastSsaRef(def, _, bb, i) and
(
// Can reach exit directly
bb instanceof ExitBasicBlock
or

View File

@@ -49,6 +49,7 @@ module Stages {
cached
module DataFlowStage {
private import semmle.code.csharp.dataflow.internal.DataFlowDispatch
private import semmle.code.csharp.dataflow.internal.DataFlowPrivate
private import semmle.code.csharp.dataflow.internal.DataFlowImplCommon
private import semmle.code.csharp.dataflow.internal.TaintTrackingPrivate
@@ -78,6 +79,8 @@ module Stages {
or
exists(CallContext cc)
or
exists(any(DataFlowCall c).getEnclosingCallable())
or
forceCachingInSameStageRev()
}
}

View File

@@ -192,7 +192,7 @@ class File extends Container, @file {
override string getURL() { result = "file://" + this.getAbsolutePath() + ":0:0:0:0" }
/** Holds if this file contains source code. */
predicate fromSource() { this.getNumberOfLinesOfCode() > 0 }
predicate fromSource() { files(this, _, _, "cs", _) }
/** Holds if this file is a library. */
predicate fromLibrary() {

View File

@@ -36,7 +36,7 @@ class Guard extends Expr {
* Holds if basic block `bb` is guarded by this expression having value `v`.
*/
predicate controlsBasicBlock(BasicBlock bb, AbstractValue v) {
Internal::guardControls(this, _, bb, v)
Internal::guardControls(this, bb, v)
}
/**
@@ -50,6 +50,12 @@ class Guard extends Expr {
polarity = v.getValue()
)
}
/**
* Gets a valid value for this guard. For example, if this guard is a test, then
* it can have Boolean values `true` and `false`.
*/
AbstractValue getAValue() { isGuard(this, result) }
}
/** An abstract value. */
@@ -967,13 +973,6 @@ module Internal {
e = any(BinaryArithmeticOperation bao | result = bao.getAnOperand())
}
/** Same as `this.getAChildExpr*()`, but avoids `fastTC`. */
private Expr getAChildExprStar(Guard g) {
result = g
or
result = getAChildExprStar(g).getAChildExpr()
}
private Expr stripConditionalExpr(Expr e) {
e =
any(ConditionalExpr ce |
@@ -1009,8 +1008,11 @@ module Internal {
/** Holds if pre-basic-block `bb` only is reached when guard `g` has abstract value `v`. */
predicate preControls(Guard g, PreBasicBlocks::PreBasicBlock bb, AbstractValue v) {
exists(AbstractValue v0, Guard g0 | preControlsDirect(g0, bb, v0) |
preImpliesSteps(g0, v0, g, v)
preControlsDirect(g, bb, v)
or
exists(AbstractValue v0, Guard g0 |
preControls(g0, bb, v0) and
preImpliesStep(g0, v0, g, v)
)
}
@@ -1038,6 +1040,23 @@ module Internal {
}
}
private predicate canReturnBool(Callable c, Expr ret) {
canReturn(c, ret) and
c.getReturnType() instanceof BoolType
}
private predicate boolReturnImplies(Expr ret, BooleanValue retVal, Guard g, AbstractValue v) {
canReturnBool(_, ret) and
isGuard(ret, retVal) and
g = ret and
v = retVal
or
exists(Guard g0, AbstractValue v0 |
boolReturnImplies(ret, retVal, g0, v0) and
preImpliesStep(g0, v0, g, v)
)
}
/**
* Holds if `ret` is an expression returned by the callable to which parameter
* `p` belongs, and `ret` having Boolean value `retVal` allows the conclusion
@@ -1046,14 +1065,14 @@ module Internal {
private predicate validReturnInCustomNullCheck(
Expr ret, Parameter p, BooleanValue retVal, boolean isNull
) {
exists(Callable c | canReturn(c, ret) |
p.getCallable() = c and
c.getReturnType() instanceof BoolType
exists(Callable c |
canReturnBool(c, ret) and
p.getCallable() = c
) and
exists(PreSsaImplicitParameterDefinition def | p = def.getParameter() |
def.nullGuardedReturn(ret, isNull)
or
exists(NullValue nv | preImpliesSteps(ret, retVal, def.getARead(), nv) |
exists(NullValue nv | boolReturnImplies(ret, retVal, def.getARead(), nv) |
if nv.isNull() then isNull = true else isNull = false
)
)
@@ -1691,6 +1710,79 @@ module Internal {
import PreCFG
private predicate interestingDescendantCandidate(Expr e) {
guardControls(e, _, _)
or
e instanceof AccessOrCallExpr
}
/**
* An (interesting) descendant of a guard that controls some basic block.
*
* This class exists purely for performance reasons: It allows us to big-step
* through the child hierarchy in `guardControlsSub()` instead of using
* `getAChildExpr()`.
*/
private class ControlGuardDescendant extends Expr {
ControlGuardDescendant() {
guardControls(this, _, _)
or
any(ControlGuardDescendant other).interestingDescendant(this)
}
private predicate descendant(Expr e) {
e = this.getAChildExpr()
or
exists(Expr mid |
descendant(mid) and
not interestingDescendantCandidate(mid) and
e = mid.getAChildExpr()
)
}
/** Holds if `e` is an interesting descendant of this descendant. */
predicate interestingDescendant(Expr e) {
descendant(e) and
interestingDescendantCandidate(e)
}
}
/**
* Holds if `g` controls basic block `bb`, and `sub` is some (interesting)
* sub expression of `g`.
*
* Sub expressions inside nested logical operations that themselve control `bb`
* are not included, since these will be sub expressions of their immediately
* enclosing logical operation. (This restriction avoids a quadratic blow-up.)
*
* For example, in
*
* ```csharp
* if (a && (b && c))
* BLOCK
* ```
*
* `a` is included as a sub expression of `a && (b && c)` (which controls `BLOCK`),
* while `b` and `c` are only included as sub expressions of `b && c` (which also
* controls `BLOCK`).
*/
pragma[nomagic]
private predicate guardControlsSub(Guard g, BasicBlock bb, ControlGuardDescendant sub) {
guardControls(g, bb, _) and
sub = g
or
exists(ControlGuardDescendant mid |
guardControlsSub(g, bb, mid) and
mid.interestingDescendant(sub)
|
not guardControls(sub, bb, _)
or
not mid instanceof UnaryLogicalOperation and
not mid instanceof BinaryLogicalOperation and
not mid instanceof BitwiseOperation
)
}
/**
* A helper class for calculating structurally equal access/call expressions.
*/
@@ -1710,13 +1802,13 @@ module Internal {
/**
* Holds if access/call expression `e` (targeting declaration `target`)
* is a sub expression of a condition that controls whether basic block
* is a sub expression of a guard that controls whether basic block
* `bb` is reached.
*/
pragma[noinline]
private predicate candidateAux(AccessOrCallExpr e, Declaration target, BasicBlock bb) {
target = e.getTarget() and
exists(Guard g | e = getAChildExprStar(g) | guardControls(g, _, bb, _))
guardControlsSub(_, bb, e)
}
}
@@ -1727,49 +1819,67 @@ module Internal {
/**
* Holds if basic block `bb` only is reached when guard `g` has abstract value `v`.
*
* `cb` records all of the possible condition blocks for `g` that a path from the
* callable entry point to `bb` may go through.
*/
cached
predicate guardControls(Guard g, ConditionBlock cb, BasicBlock bb, AbstractValue v) {
predicate guardControls(Guard g, BasicBlock bb, AbstractValue v) {
exists(ControlFlowElement cfe, ConditionalSuccessor cs |
v.branch(cfe, cs, g) and cfe.controlsBlock(bb, cs, _)
)
or
exists(AbstractValue v0, Guard g0 |
impliesSteps(g0, v0, g, v) and
exists(ControlFlowElement cfe, ConditionalSuccessor cs |
v0.branch(cfe, cs, g0) and cfe.controlsBlock(bb, cs, cb)
)
guardControls(g0, bb, v0) and
impliesStep(g0, v0, g, v)
)
}
pragma[noinline]
pragma[nomagic]
private predicate guardControlsSubSame(Guard g, BasicBlock bb, ControlGuardDescendant sub) {
guardControlsSub(g, bb, sub) and
any(ConditionOnExprComparisonConfig c).same(sub, _)
}
pragma[nomagic]
private predicate nodeIsGuardedBySameSubExpr0(
ControlFlow::Node guardedCfn, AccessOrCallExpr guarded, Guard g, ConditionBlock cb,
ControlFlow::Node guardedCfn, BasicBlock guardedBB, AccessOrCallExpr guarded, Guard g,
AccessOrCallExpr sub, AbstractValue v
) {
Stages::GuardsStage::forceCachingInSameStage() and
guardedCfn = guarded.getAControlFlowNode() and
guardControls(g, cb, guardedCfn.getBasicBlock(), v) and
exists(ConditionOnExprComparisonConfig c | c.same(sub, guarded))
guardedBB = guardedCfn.getBasicBlock() and
guardControls(g, guardedBB, v) and
guardControlsSubSame(g, guardedBB, sub) and
any(ConditionOnExprComparisonConfig c).same(sub, guarded)
}
pragma[noinline]
pragma[nomagic]
private predicate nodeIsGuardedBySameSubExpr(
ControlFlow::Node guardedCfn, AccessOrCallExpr guarded, Guard g, ConditionBlock cb,
ControlFlow::Node guardedCfn, BasicBlock guardedBB, AccessOrCallExpr guarded, Guard g,
AccessOrCallExpr sub, AbstractValue v
) {
nodeIsGuardedBySameSubExpr0(guardedCfn, guarded, g, cb, sub, v) and
sub = getAChildExprStar(g)
nodeIsGuardedBySameSubExpr0(guardedCfn, guardedBB, guarded, g, sub, v) and
guardControlsSub(g, guardedBB, sub)
}
pragma[noinline]
pragma[nomagic]
private predicate nodeIsGuardedBySameSubExprSsaDef0(
ControlFlow::Node cfn, BasicBlock guardedBB, AccessOrCallExpr guarded, Guard g,
ControlFlow::Node subCfn, BasicBlock subCfnBB, AccessOrCallExpr sub, AbstractValue v,
Ssa::Definition def
) {
nodeIsGuardedBySameSubExpr(cfn, guardedBB, guarded, g, sub, v) and
def = sub.getAnSsaQualifier(subCfn) and
subCfnBB = subCfn.getBasicBlock()
}
pragma[nomagic]
private predicate nodeIsGuardedBySameSubExprSsaDef(
ControlFlow::Node cfn, AccessOrCallExpr guarded, Guard g, ControlFlow::Node subCfn,
ControlFlow::Node guardedCfn, AccessOrCallExpr guarded, Guard g, ControlFlow::Node subCfn,
AccessOrCallExpr sub, AbstractValue v, Ssa::Definition def
) {
exists(ConditionBlock cb |
nodeIsGuardedBySameSubExpr(cfn, guarded, g, cb, sub, v) and
subCfn.getBasicBlock().dominates(cb) and
def = sub.getAnSsaQualifier(subCfn)
exists(BasicBlock guardedBB, BasicBlock subCfnBB |
nodeIsGuardedBySameSubExprSsaDef0(guardedCfn, guardedBB, guarded, g, subCfn, subCfnBB, sub,
v, def) and
subCfnBB.getASuccessor*() = guardedBB
)
}
@@ -1789,7 +1899,7 @@ module Internal {
AccessOrCallExpr guarded, Guard g, AccessOrCallExpr sub, AbstractValue v
) {
forex(ControlFlow::Node cfn | cfn = guarded.getAControlFlowNode() |
nodeIsGuardedBySameSubExpr(cfn, guarded, g, _, sub, v)
nodeIsGuardedBySameSubExpr(cfn, _, guarded, g, sub, v)
)
}
@@ -1814,7 +1924,7 @@ module Internal {
predicate isGuardedByNode(
ControlFlow::Nodes::ElementNode guarded, Guard g, AccessOrCallExpr sub, AbstractValue v
) {
nodeIsGuardedBySameSubExpr(guarded, _, g, _, sub, v) and
nodeIsGuardedBySameSubExpr(guarded, _, _, g, sub, v) and
forall(ControlFlow::Node subCfn, Ssa::Definition def |
nodeIsGuardedBySameSubExprSsaDef(guarded, _, g, subCfn, sub, v, def)
|
@@ -1860,40 +1970,6 @@ module Internal {
}
import Cached
/**
* Holds if the assumption that `g1` has abstract value `v1` implies that
* `g2` has abstract value `v2`, using zero or more steps of reasoning. That is,
* the evaluation of `g2` to `v2` dominates the evaluation of `g1` to `v1`.
*
* This predicate does not rely on the control flow graph.
*/
predicate preImpliesSteps(Guard g1, AbstractValue v1, Guard g2, AbstractValue v2) {
g1 = g2 and
v1 = v2 and
isGuard(g1, v1)
or
exists(Expr mid, AbstractValue vMid | preImpliesSteps(g1, v1, mid, vMid) |
preImpliesStep(mid, vMid, g2, v2)
)
}
/**
* Holds if the assumption that `g1` has abstract value `v1` implies that
* `g2` has abstract value `v2`, using zero or more steps of reasoning. That is,
* the evaluation of `g2` to `v2` dominates the evaluation of `g1` to `v1`.
*
* This predicate relies on the control flow graph.
*/
predicate impliesSteps(Guard g1, AbstractValue v1, Guard g2, AbstractValue v2) {
g1 = g2 and
v1 = v2 and
isGuard(g1, v1)
or
exists(Expr mid, AbstractValue vMid | impliesSteps(g1, v1, mid, vMid) |
impliesStep(mid, vMid, g2, v2)
)
}
}
private import Internal

View File

@@ -244,18 +244,10 @@ module InitializerSplitting {
* Holds if `c` is a non-static constructor that performs the initialization
* of member `m`.
*/
predicate constructorInitializes(Constructor c, InitializedInstanceMember m) {
predicate constructorInitializes(InstanceConstructor c, InitializedInstanceMember m) {
c.isUnboundDeclaration() and
not c.isStatic() and
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()
)
c.getDeclaringType().getAMember() = m and
not c.getInitializer().isThis()
}
/**

View File

@@ -316,6 +316,15 @@ private module SsaDefReaches {
)
}
/**
* Holds if the reference to `def` at index `i` in basic block `bb` is the
* last reference to `v` inside `bb`.
*/
pragma[noinline]
predicate lastSsaRef(Definition def, SourceVariable v, BasicBlock bb, int i) {
ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v)
}
predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v) {
exists(ssaDefRank(def, v, bb, _, _))
}
@@ -351,8 +360,7 @@ private module SsaDefReaches {
*/
predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) {
varBlockReaches(def, bb1, bb2) and
ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1 and
variableRead(bb2, i2, _, _)
ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1
}
}
@@ -434,15 +442,22 @@ predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2
bb2 = bb1
)
or
exists(SourceVariable v | ssaDefRank(def, v, bb1, i1, _) = maxSsaRefRank(bb1, v)) and
lastSsaRef(def, _, bb1, i1) and
defAdjacentRead(def, bb1, bb2, i2)
}
pragma[noinline]
private predicate adjacentDefRead(
Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2, SourceVariable v
) {
adjacentDefRead(def, bb1, i1, bb2, i2) and
v = def.getSourceVariable()
}
private predicate adjacentDefReachesRead(
Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2
) {
adjacentDefRead(def, bb1, i1, bb2, i2) and
exists(SourceVariable v | v = def.getSourceVariable() |
exists(SourceVariable v | adjacentDefRead(def, bb1, i1, bb2, i2, v) |
ssaRef(bb1, i1, v, SsaDef())
or
variableRead(bb1, i1, v, true)
@@ -475,17 +490,19 @@ predicate adjacentDefNoUncertainReads(Definition def, BasicBlock bb1, int i1, Ba
*/
pragma[nomagic]
predicate lastRefRedef(Definition def, BasicBlock bb, int i, Definition next) {
exists(int rnk, SourceVariable v, int j | rnk = ssaDefRank(def, v, bb, i, _) |
exists(SourceVariable v |
// Next reference to `v` inside `bb` is a write
next.definesAt(v, bb, j) and
rnk + 1 = ssaRefRank(bb, j, v, SsaDef())
exists(int rnk, int j |
rnk = ssaDefRank(def, v, bb, i, _) and
next.definesAt(v, bb, j) and
rnk + 1 = ssaRefRank(bb, j, v, SsaDef())
)
or
// Can reach a write using one or more steps
rnk = maxSsaRefRank(bb, v) and
lastSsaRef(def, v, bb, i) and
exists(BasicBlock bb2 |
varBlockReaches(def, bb, bb2) and
next.definesAt(v, bb2, j) and
1 = ssaRefRank(bb2, j, v, SsaDef())
1 = ssaDefRank(next, v, bb2, _, SsaDef())
)
)
}
@@ -539,7 +556,8 @@ pragma[nomagic]
predicate lastRef(Definition def, BasicBlock bb, int i) {
lastRefRedef(def, bb, i, _)
or
exists(SourceVariable v | ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v) |
lastSsaRef(def, _, bb, i) and
(
// Can reach exit directly
bb instanceof ExitBasicBlock
or

View File

@@ -807,17 +807,29 @@ class SystemTextStringBuilderFlow extends LibraryTypeDataFlow, SystemTextStringB
sinkAp = AccessPath::empty() and
preservesValue = false
or
exists(int i, Type t |
name.regexpMatch("Append(Format|Line)?") and
t = m.getParameter(i).getType() and
source = TCallableFlowSourceArg(i) and
name.regexpMatch("Append(Format|Line|Join)?") and
preservesValue = true and
(
exists(int i, Type t |
t = m.getParameter(i).getType() and
source = TCallableFlowSourceArg(i) and
sink = TCallableFlowSinkQualifier() and
sinkAp = AccessPath::element()
|
(
t instanceof StringType or
t instanceof ObjectType
) and
sourceAp = AccessPath::empty()
or
isCollectionType(t) and
sourceAp = AccessPath::element()
)
or
source = TCallableFlowSourceQualifier() and
sourceAp = AccessPath::empty() and
sink = [TCallableFlowSinkQualifier().(TCallableFlowSink), TCallableFlowSinkReturn()] and
sinkAp = AccessPath::element() and
preservesValue = true
|
t instanceof StringType or
t instanceof ObjectType
sink = TCallableFlowSinkReturn() and
sinkAp = AccessPath::empty()
)
)
}

View File

@@ -128,12 +128,19 @@ private predicate dereferenceAt(BasicBlock bb, int i, Ssa::Definition def, Deref
* has abstract value `vDef`.
*/
private predicate exprImpliesSsaDef(
Expr e, G::AbstractValue vExpr, Ssa::Definition def, G::AbstractValue vDef
G::Guard e, G::AbstractValue vExpr, Ssa::Definition def, G::AbstractValue vDef
) {
exists(G::Guard g | G::Internal::impliesSteps(e, vExpr, g, vDef) |
g = def.getARead()
vExpr = e.getAValue() and
vExpr = vDef and
(
e = def.getARead()
or
g = def.(Ssa::ExplicitDefinition).getADefinition().getTargetAccess()
e = def.(Ssa::ExplicitDefinition).getADefinition().getTargetAccess()
)
or
exists(Expr e0, G::AbstractValue vExpr0 |
exprImpliesSsaDef(e0, vExpr0, def, vDef) and
G::Internal::impliesStep(e, vExpr, e0, vExpr0)
)
}

View File

@@ -4,6 +4,7 @@ private import dotnet
private import DataFlowPublic
private import DataFlowPrivate
private import FlowSummaryImpl as FlowSummaryImpl
private import semmle.code.csharp.Caching
private import semmle.code.csharp.dataflow.FlowSummary
private import semmle.code.csharp.dispatch.Dispatch
private import semmle.code.csharp.frameworks.system.Collections
@@ -69,8 +70,6 @@ private predicate transitiveCapturedCallTarget(ControlFlow::Nodes::ElementNode c
cached
private module Cached {
private import semmle.code.csharp.Caching
cached
newtype TReturnKind =
TNormalReturnKind() { Stages::DataFlowStage::forceCachingInSameStage() } or
@@ -247,6 +246,7 @@ abstract class DataFlowCall extends TDataFlowCall {
abstract DataFlow::Node getNode();
/** Gets the enclosing callable of this call. */
cached
abstract DataFlowCallable getEnclosingCallable();
/** Gets the underlying expression, if any. */
@@ -280,7 +280,10 @@ class NonDelegateDataFlowCall extends DataFlowCall, TNonDelegateCall {
override DataFlow::ExprNode getNode() { result.getControlFlowNode() = cfn }
override DataFlowCallable getEnclosingCallable() { result = cfn.getEnclosingCallable() }
override DataFlowCallable getEnclosingCallable() {
Stages::DataFlowStage::forceCachingInSameStage() and
result = cfn.getEnclosingCallable()
}
override string toString() { result = cfn.toString() }

View File

@@ -31,7 +31,7 @@ predicate accessPathCostLimits(int apLimit, int tupleLimit) {
* currently excludes read-steps, store-steps, and flow-through.
*
* The analysis uses non-linear recursion: When computing a flow path in or out
* of a call, we use the results of the analysis recursively to resolve lamba
* of a call, we use the results of the analysis recursively to resolve lambda
* calls. For this reason, we cannot reuse the code from `DataFlowImpl.qll` directly.
*/
private module LambdaFlow {

View File

@@ -21,9 +21,11 @@ private import semmle.code.csharp.frameworks.system.threading.Tasks
abstract class NodeImpl extends Node {
/** Do not call: use `getEnclosingCallable()` instead. */
cached
abstract DataFlowCallable getEnclosingCallableImpl();
/** Do not call: use `getType()` instead. */
cached
abstract DotNet::Type getTypeImpl();
/** Gets the type of this node used for type pruning. */
@@ -39,27 +41,39 @@ abstract class NodeImpl extends Node {
}
/** Do not call: use `getControlFlowNode()` instead. */
cached
abstract ControlFlow::Node getControlFlowNodeImpl();
/** Do not call: use `getLocation()` instead. */
cached
abstract Location getLocationImpl();
/** Do not call: use `toString()` instead. */
cached
abstract string toStringImpl();
}
private class ExprNodeImpl extends ExprNode, NodeImpl {
override DataFlowCallable getEnclosingCallableImpl() {
Stages::DataFlowStage::forceCachingInSameStage() and
result = this.getExpr().getEnclosingCallable()
}
override DotNet::Type getTypeImpl() { result = this.getExpr().getType() }
override DotNet::Type getTypeImpl() {
Stages::DataFlowStage::forceCachingInSameStage() and
result = this.getExpr().getType()
}
override ControlFlow::Nodes::ElementNode getControlFlowNodeImpl() { this = TExprNode(result) }
override ControlFlow::Nodes::ElementNode getControlFlowNodeImpl() {
Stages::DataFlowStage::forceCachingInSameStage() and this = TExprNode(result)
}
override Location getLocationImpl() { result = this.getExpr().getLocation() }
override Location getLocationImpl() {
Stages::DataFlowStage::forceCachingInSameStage() and result = this.getExpr().getLocation()
}
override string toStringImpl() {
Stages::DataFlowStage::forceCachingInSameStage() and
result = this.getControlFlowNode().toString()
or
exists(CIL::Expr e |
@@ -967,6 +981,16 @@ private module Cached {
or
n.asExpr() = any(WithExpr we).getInitializer()
}
cached
predicate parameterNode(Node n, DataFlowCallable c, int i) {
n.(ParameterNodeImpl).isParameterOf(c, i)
}
cached
predicate argumentNode(Node n, DataFlowCall call, int pos) {
n.(ArgumentNodeImpl).argumentOf(call, pos)
}
}
import Cached
@@ -992,8 +1016,6 @@ class SsaDefinitionNode extends NodeImpl, TSsaDefinitionNode {
}
abstract class ParameterNodeImpl extends NodeImpl {
abstract DotNet::Parameter getParameter();
abstract predicate isParameterOf(DataFlowCallable c, int i);
}
@@ -1010,11 +1032,9 @@ private module ParameterNodes {
/** Gets the SSA definition corresponding to this parameter, if any. */
Ssa::ExplicitDefinition getSsaDefinition() {
result.getADefinition().(AssignableDefinitions::ImplicitParameterDefinition).getParameter() =
this.getParameter()
parameter
}
override DotNet::Parameter getParameter() { result = parameter }
override predicate isParameterOf(DataFlowCallable c, int i) { c.getParameter(i) = parameter }
override DataFlowCallable getEnclosingCallableImpl() { result = parameter.getCallable() }
@@ -1037,8 +1057,6 @@ private module ParameterNodes {
/** Gets the callable containing this implicit instance parameter. */
Callable getCallable() { result = callable }
override DotNet::Parameter getParameter() { none() }
override predicate isParameterOf(DataFlowCallable c, int pos) { callable = c and pos = -1 }
override DataFlowCallable getEnclosingCallableImpl() { result = callable }
@@ -1113,8 +1131,6 @@ private module ParameterNodes {
/** Gets the captured variable that this implicit parameter models. */
LocalScopeVariable getVariable() { result = def.getVariable() }
override DotNet::Parameter getParameter() { none() }
override predicate isParameterOf(DataFlowCallable c, int i) {
i = getParameterPosition(def) and
c = this.getEnclosingCallable()
@@ -1125,13 +1141,15 @@ private module ParameterNodes {
import ParameterNodes
/** A data-flow node that represents a call argument. */
abstract class ArgumentNode extends Node {
/** Holds if this argument occurs at the given position in the given call. */
cached
abstract predicate argumentOf(DataFlowCall call, int pos);
class ArgumentNode extends Node {
ArgumentNode() { argumentNode(this, _, _) }
/** Gets the call in which this node is an argument. */
final DataFlowCall getCall() { this.argumentOf(result, _) }
/** Holds if this argument occurs at the given position in the given call. */
final predicate argumentOf(DataFlowCall call, int pos) { argumentNode(this, call, pos) }
}
abstract private class ArgumentNodeImpl extends Node {
abstract predicate argumentOf(DataFlowCall call, int pos);
}
private module ArgumentNodes {
@@ -1149,7 +1167,7 @@ private module ArgumentNodes {
}
/** A data-flow node that represents an explicit call argument. */
class ExplicitArgumentNode extends ArgumentNode {
class ExplicitArgumentNode extends ArgumentNodeImpl {
ExplicitArgumentNode() {
this.asExpr() instanceof Argument
or
@@ -1157,7 +1175,6 @@ private module ArgumentNodes {
}
override predicate argumentOf(DataFlowCall call, int pos) {
Stages::DataFlowStage::forceCachingInSameStage() and
exists(ArgumentConfiguration x, Expr c, Argument arg |
arg = this.asExpr() and
c = call.getExpr() and
@@ -1189,7 +1206,8 @@ private module ArgumentNodes {
* } }
* ```
*/
class ImplicitCapturedArgumentNode extends ArgumentNode, NodeImpl, TImplicitCapturedArgumentNode {
class ImplicitCapturedArgumentNode extends ArgumentNodeImpl, NodeImpl,
TImplicitCapturedArgumentNode {
private LocalScopeVariable v;
private ControlFlow::Nodes::ElementNode cfn;
@@ -1231,7 +1249,7 @@ private module ArgumentNodes {
* A node that corresponds to the value of an object creation (`new C()`) before
* the constructor has run.
*/
class MallocNode extends ArgumentNode, NodeImpl, TMallocNode {
class MallocNode extends ArgumentNodeImpl, NodeImpl, TMallocNode {
private ControlFlow::Nodes::ElementNode cfn;
MallocNode() { this = TMallocNode(cfn) }
@@ -1266,7 +1284,7 @@ private module ArgumentNodes {
* and that argument is itself a compatible array, for example
* `Foo(new[] { "a", "b", "c" })`.
*/
class ParamsArgumentNode extends ArgumentNode, NodeImpl, TParamsArgumentNode {
class ParamsArgumentNode extends ArgumentNodeImpl, NodeImpl, TParamsArgumentNode {
private ControlFlow::Node callCfn;
ParamsArgumentNode() { this = TParamsArgumentNode(callCfn) }
@@ -1291,7 +1309,7 @@ private module ArgumentNodes {
override string toStringImpl() { result = "[implicit array creation] " + callCfn }
}
private class SummaryArgumentNode extends SummaryNode, ArgumentNode {
private class SummaryArgumentNode extends SummaryNode, ArgumentNodeImpl {
private DataFlowCall c;
private int i;
@@ -1324,10 +1342,7 @@ private module ReturnNodes {
)
}
override NormalReturnKind getKind() {
any(DotNet::Callable c).canReturn(this.getExpr()) and
exists(result)
}
override NormalReturnKind getKind() { exists(result) }
}
/**
@@ -1744,7 +1759,10 @@ class DataFlowType extends Gvn::GvnType {
}
/** Gets the type of `n` used for type pruning. */
DataFlowType getNodeType(NodeImpl n) { result = n.getDataFlowType() }
pragma[inline]
Gvn::GvnType getNodeType(NodeImpl n) {
pragma[only_bind_into](result) = pragma[only_bind_out](n).getDataFlowType()
}
/** Gets a string representation of a `DataFlowType`. */
string ppReprType(DataFlowType t) { result = t.toString() }
@@ -1819,7 +1837,8 @@ private module PostUpdateNodes {
* Such a node acts as both a post-update node for the `MallocNode`, as well as
* a pre-update node for the `ObjectCreationNode`.
*/
class ObjectInitializerNode extends PostUpdateNode, NodeImpl, ArgumentNode, TObjectInitializerNode {
class ObjectInitializerNode extends PostUpdateNode, NodeImpl, ArgumentNodeImpl,
TObjectInitializerNode {
private ObjectCreation oc;
private ControlFlow::Nodes::ElementNode cfn;
@@ -1980,7 +1999,7 @@ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) {
kind = TMkUnit()
}
/** Extra data-flow steps needed for lamba flow analysis. */
/** Extra data-flow steps needed for lambda flow analysis. */
predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preservesValue) {
exists(Ssa::Definition def |
LocalFlow::localSsaFlowStep(def, nodeFrom, nodeTo) and

View File

@@ -3,7 +3,6 @@ private import cil
private import dotnet
private import DataFlowDispatch
private import DataFlowPrivate
private import semmle.code.csharp.Caching
private import semmle.code.csharp.controlflow.Guards
private import semmle.code.csharp.Unification
@@ -38,38 +37,21 @@ class Node extends TNode {
}
/** Gets the type of this node. */
cached
final DotNet::Type getType() {
Stages::DataFlowStage::forceCachingInSameStage() and result = this.(NodeImpl).getTypeImpl()
}
final DotNet::Type getType() { result = this.(NodeImpl).getTypeImpl() }
/** Gets the enclosing callable of this node. */
cached
final DataFlowCallable getEnclosingCallable() {
Stages::DataFlowStage::forceCachingInSameStage() and
result = this.(NodeImpl).getEnclosingCallableImpl()
}
/** Gets the control flow node corresponding to this node, if any. */
cached
final ControlFlow::Node getControlFlowNode() {
Stages::DataFlowStage::forceCachingInSameStage() and
result = this.(NodeImpl).getControlFlowNodeImpl()
}
final ControlFlow::Node getControlFlowNode() { result = this.(NodeImpl).getControlFlowNodeImpl() }
/** Gets a textual representation of this node. */
cached
final string toString() {
Stages::DataFlowStage::forceCachingInSameStage() and
result = this.(NodeImpl).toStringImpl()
}
final string toString() { result = this.(NodeImpl).toStringImpl() }
/** Gets the location of this node. */
cached
final Location getLocation() {
Stages::DataFlowStage::forceCachingInSameStage() and
result = this.(NodeImpl).getLocationImpl()
}
final Location getLocation() { result = this.(NodeImpl).getLocationImpl() }
/**
* Holds if this element is at the specified location.
@@ -81,7 +63,7 @@ class Node extends TNode {
predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}
@@ -117,18 +99,18 @@ class ExprNode extends Node {
* flow graph.
*/
class ParameterNode extends Node {
private ParameterNodeImpl p;
ParameterNode() { this = p }
ParameterNode() { parameterNode(this, _, _) }
/** Gets the parameter corresponding to this node, if any. */
DotNet::Parameter getParameter() { result = p.getParameter() }
DotNet::Parameter getParameter() {
exists(DataFlowCallable c, int i | this.isParameterOf(c, i) and result = c.getParameter(i))
}
/**
* Holds if this node is the parameter of callable `c` at the specified
* (zero-based) position.
*/
predicate isParameterOf(DataFlowCallable c, int i) { p.isParameterOf(c, i) }
predicate isParameterOf(DataFlowCallable c, int i) { parameterNode(this, c, i) }
}
/** A definition, viewed as a node in a data flow graph. */
@@ -166,6 +148,7 @@ predicate localFlowStep = localFlowStepImpl/2;
* Holds if data flows from `source` to `sink` in zero or more local
* (intra-procedural) steps.
*/
pragma[inline]
predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) }
/**

View File

@@ -446,7 +446,19 @@ module Private {
summary(c, inputContents, outputContents, preservesValue) and
pred = summaryNodeInputState(c, inputContents) and
succ = summaryNodeOutputState(c, outputContents)
|
preservesValue = true
or
preservesValue = false and not summary(c, inputContents, outputContents, true)
)
or
// If flow through a method updates a parameter from some input A, and that
// parameter also is returned through B, then we'd like a combined flow from A
// to B as well. As an example, this simplifies modeling of fluent methods:
// for `StringBuilder.append(x)` with a specified value flow from qualifier to
// return value and taint flow from argument 0 to the qualifier, then this
// allows us to infer taint flow from argument 0 to the return value.
summaryPostUpdateNode(pred, succ) and preservesValue = true
}
/**

View File

@@ -316,6 +316,15 @@ private module SsaDefReaches {
)
}
/**
* Holds if the reference to `def` at index `i` in basic block `bb` is the
* last reference to `v` inside `bb`.
*/
pragma[noinline]
predicate lastSsaRef(Definition def, SourceVariable v, BasicBlock bb, int i) {
ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v)
}
predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v) {
exists(ssaDefRank(def, v, bb, _, _))
}
@@ -351,8 +360,7 @@ private module SsaDefReaches {
*/
predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) {
varBlockReaches(def, bb1, bb2) and
ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1 and
variableRead(bb2, i2, _, _)
ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1
}
}
@@ -434,15 +442,22 @@ predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2
bb2 = bb1
)
or
exists(SourceVariable v | ssaDefRank(def, v, bb1, i1, _) = maxSsaRefRank(bb1, v)) and
lastSsaRef(def, _, bb1, i1) and
defAdjacentRead(def, bb1, bb2, i2)
}
pragma[noinline]
private predicate adjacentDefRead(
Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2, SourceVariable v
) {
adjacentDefRead(def, bb1, i1, bb2, i2) and
v = def.getSourceVariable()
}
private predicate adjacentDefReachesRead(
Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2
) {
adjacentDefRead(def, bb1, i1, bb2, i2) and
exists(SourceVariable v | v = def.getSourceVariable() |
exists(SourceVariable v | adjacentDefRead(def, bb1, i1, bb2, i2, v) |
ssaRef(bb1, i1, v, SsaDef())
or
variableRead(bb1, i1, v, true)
@@ -475,17 +490,19 @@ predicate adjacentDefNoUncertainReads(Definition def, BasicBlock bb1, int i1, Ba
*/
pragma[nomagic]
predicate lastRefRedef(Definition def, BasicBlock bb, int i, Definition next) {
exists(int rnk, SourceVariable v, int j | rnk = ssaDefRank(def, v, bb, i, _) |
exists(SourceVariable v |
// Next reference to `v` inside `bb` is a write
next.definesAt(v, bb, j) and
rnk + 1 = ssaRefRank(bb, j, v, SsaDef())
exists(int rnk, int j |
rnk = ssaDefRank(def, v, bb, i, _) and
next.definesAt(v, bb, j) and
rnk + 1 = ssaRefRank(bb, j, v, SsaDef())
)
or
// Can reach a write using one or more steps
rnk = maxSsaRefRank(bb, v) and
lastSsaRef(def, v, bb, i) and
exists(BasicBlock bb2 |
varBlockReaches(def, bb, bb2) and
next.definesAt(v, bb2, j) and
1 = ssaRefRank(bb2, j, v, SsaDef())
1 = ssaDefRank(next, v, bb2, _, SsaDef())
)
)
}
@@ -539,7 +556,8 @@ pragma[nomagic]
predicate lastRef(Definition def, BasicBlock bb, int i) {
lastRefRedef(def, bb, i, _)
or
exists(SourceVariable v | ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v) |
lastSsaRef(def, _, bb, i) and
(
// Can reach exit directly
bb instanceof ExitBasicBlock
or

View File

@@ -316,6 +316,15 @@ private module SsaDefReaches {
)
}
/**
* Holds if the reference to `def` at index `i` in basic block `bb` is the
* last reference to `v` inside `bb`.
*/
pragma[noinline]
predicate lastSsaRef(Definition def, SourceVariable v, BasicBlock bb, int i) {
ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v)
}
predicate defOccursInBlock(Definition def, BasicBlock bb, SourceVariable v) {
exists(ssaDefRank(def, v, bb, _, _))
}
@@ -351,8 +360,7 @@ private module SsaDefReaches {
*/
predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) {
varBlockReaches(def, bb1, bb2) and
ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1 and
variableRead(bb2, i2, _, _)
ssaRefRank(bb2, i2, def.getSourceVariable(), SsaRead()) = 1
}
}
@@ -434,15 +442,22 @@ predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2
bb2 = bb1
)
or
exists(SourceVariable v | ssaDefRank(def, v, bb1, i1, _) = maxSsaRefRank(bb1, v)) and
lastSsaRef(def, _, bb1, i1) and
defAdjacentRead(def, bb1, bb2, i2)
}
pragma[noinline]
private predicate adjacentDefRead(
Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2, SourceVariable v
) {
adjacentDefRead(def, bb1, i1, bb2, i2) and
v = def.getSourceVariable()
}
private predicate adjacentDefReachesRead(
Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2
) {
adjacentDefRead(def, bb1, i1, bb2, i2) and
exists(SourceVariable v | v = def.getSourceVariable() |
exists(SourceVariable v | adjacentDefRead(def, bb1, i1, bb2, i2, v) |
ssaRef(bb1, i1, v, SsaDef())
or
variableRead(bb1, i1, v, true)
@@ -475,17 +490,19 @@ predicate adjacentDefNoUncertainReads(Definition def, BasicBlock bb1, int i1, Ba
*/
pragma[nomagic]
predicate lastRefRedef(Definition def, BasicBlock bb, int i, Definition next) {
exists(int rnk, SourceVariable v, int j | rnk = ssaDefRank(def, v, bb, i, _) |
exists(SourceVariable v |
// Next reference to `v` inside `bb` is a write
next.definesAt(v, bb, j) and
rnk + 1 = ssaRefRank(bb, j, v, SsaDef())
exists(int rnk, int j |
rnk = ssaDefRank(def, v, bb, i, _) and
next.definesAt(v, bb, j) and
rnk + 1 = ssaRefRank(bb, j, v, SsaDef())
)
or
// Can reach a write using one or more steps
rnk = maxSsaRefRank(bb, v) and
lastSsaRef(def, v, bb, i) and
exists(BasicBlock bb2 |
varBlockReaches(def, bb, bb2) and
next.definesAt(v, bb2, j) and
1 = ssaRefRank(bb2, j, v, SsaDef())
1 = ssaDefRank(next, v, bb2, _, SsaDef())
)
)
}
@@ -539,7 +556,8 @@ pragma[nomagic]
predicate lastRef(Definition def, BasicBlock bb, int i) {
lastRefRedef(def, bb, i, _)
or
exists(SourceVariable v | ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v) |
lastSsaRef(def, _, bb, i) and
(
// Can reach exit directly
bb instanceof ExitBasicBlock
or

View File

@@ -122,7 +122,7 @@ private module Impl {
)
or
exists(G::AbstractValue v0 |
G::Internal::impliesSteps(result, v, eqFlowCondAbs(def, e, delta, isEq, v0), v0)
G::Internal::impliesStep(result, v, eqFlowCondAbs(def, e, delta, isEq, v0), v0)
)
}

View File

@@ -111,13 +111,24 @@ module HardcodedCredentials {
}
/**
* Gets a regular expression for matching names of locations (variables, parameters, keys) that
* indicate the value being held is a credential.
* An assignable whose name indicates that the value being held is a credential.
*/
private string getACredentialRegex() {
result = "(?i).*pass(wd|word|code|phrase)(?!.*question).*" or
result = "(?i).*(puid|username|userid).*" or
result = "(?i).*(cert)(?!.*(format|name)).*"
private class CredentialVar extends Assignable {
pragma[noinline]
CredentialVar() {
exists(string name | name = this.getName() |
name.regexpMatch("(?i).*pass(wd|word|code|phrase)(?!.*question).*")
or
name.regexpMatch("(?i).*(puid|username|userid).*")
or
name.regexpMatch("(?i).*(cert)(?!.*(format|name)).*")
)
}
}
private class CredentialVariableAccess extends VariableAccess {
pragma[noinline]
CredentialVariableAccess() { this.getTarget() instanceof CredentialVar }
}
/**
@@ -128,11 +139,11 @@ module HardcodedCredentials {
) {
// An argument to a library call that looks like a credential
// "...flows to the [Username] parameter in [call to method CreateUser]"
exists(Call call |
exists(Call call, CredentialVar param |
supplementaryElement = call and
description = "the $@ parameter in $@" and
sink = call.getArgumentForName(sinkName) and
sinkName.regexpMatch(getACredentialRegex()) and
sink = call.getArgumentForParameter(param) and
sinkName = param.getName() and
call.getTarget().fromLibrary()
)
or
@@ -144,22 +155,20 @@ module HardcodedCredentials {
description = "the $@ in $@" and
sink = call.getArgument(0) and
sinkName = "setter call argument" and
p.getName().regexpMatch(getACredentialRegex()) and
p instanceof CredentialVar and
p.fromLibrary()
)
or
// Sink compared to password variable
// "...flows to [] which is compared against [access of UserName]"
exists(ComparisonTest ct, VariableAccess credentialAccess, string varName |
exists(ComparisonTest ct, CredentialVariableAccess credentialAccess |
sinkName = sink.toString() and
supplementaryElement = credentialAccess and
description = "$@ which is compared against $@" and
ct.getAnArgument() = credentialAccess and
ct.getAnArgument() = sink and
ct.getComparisonKind().isEquality() and
not sink = credentialAccess and
varName = credentialAccess.getTarget().getName() and
varName.regexpMatch(getACredentialRegex())
not sink = credentialAccess
)
}

View File

@@ -20,3 +20,15 @@ class TextFieldSource extends LocalUserInputSource {
override string getSourceType() { result = "TextBox text" }
}
/** A call to any `System.Console.Read*` method. */
class SystemConsoleReadSource extends LocalUserInputSource {
SystemConsoleReadSource() {
this.asExpr() =
any(MethodCall call |
call.getTarget().hasQualifiedName("System.Console", ["ReadLine", "Read", "ReadKey"])
)
}
override string getSourceType() { result = "System.Console input" }
}

View File

@@ -285,29 +285,37 @@ collections.cs:
constructor_init.cs:
# 5| System.Void BaseClass..ctor()
# 5| Block 0
# 5| v5_1(Void) = EnterFunction :
# 5| mu5_2(<unknown>) = AliasedDefinition :
# 5| r5_3(glval<BaseClass>) = InitializeThis :
# 6| v6_1(Void) = NoOp :
# 5| v5_4(Void) = ReturnVoid :
# 5| v5_5(Void) = AliasedUse : ~m?
# 5| v5_6(Void) = ExitFunction :
# 5| v5_1(Void) = EnterFunction :
# 5| mu5_2(<unknown>) = AliasedDefinition :
# 5| r5_3(glval<BaseClass>) = InitializeThis :
# 5| r5_4(glval<Object>) = Convert[BaseClass : Object] : r5_3
# 5| r5_5(<funcaddr>) = FunctionAddress[Object] :
# 5| v5_6(Void) = Call[Object] : func:r5_5, this:r5_4
# 5| mu5_7(<unknown>) = ^CallSideEffect : ~m?
# 6| v6_1(Void) = NoOp :
# 5| v5_8(Void) = ReturnVoid :
# 5| v5_9(Void) = AliasedUse : ~m?
# 5| v5_10(Void) = ExitFunction :
# 9| System.Void BaseClass..ctor(System.Int32)
# 9| Block 0
# 9| v9_1(Void) = EnterFunction :
# 9| mu9_2(<unknown>) = AliasedDefinition :
# 9| r9_3(glval<BaseClass>) = InitializeThis :
# 9| r9_4(glval<Int32>) = VariableAddress[i] :
# 9| mu9_5(Int32) = InitializeParameter[i] : &:r9_4
# 11| r11_1(glval<Int32>) = VariableAddress[i] :
# 11| r11_2(Int32) = Load[i] : &:r11_1, ~m?
# 11| r11_3(BaseClass) = CopyValue : r9_3
# 11| r11_4(glval<Int32>) = FieldAddress[num] : r11_3
# 11| mu11_5(Int32) = Store[?] : &:r11_4, r11_2
# 9| v9_6(Void) = ReturnVoid :
# 9| v9_7(Void) = AliasedUse : ~m?
# 9| v9_8(Void) = ExitFunction :
# 9| v9_1(Void) = EnterFunction :
# 9| mu9_2(<unknown>) = AliasedDefinition :
# 9| r9_3(glval<BaseClass>) = InitializeThis :
# 9| r9_4(glval<Int32>) = VariableAddress[i] :
# 9| mu9_5(Int32) = InitializeParameter[i] : &:r9_4
# 9| r9_6(glval<Object>) = Convert[BaseClass : Object] : r9_3
# 9| r9_7(<funcaddr>) = FunctionAddress[Object] :
# 9| v9_8(Void) = Call[Object] : func:r9_7, this:r9_6
# 9| mu9_9(<unknown>) = ^CallSideEffect : ~m?
# 11| r11_1(glval<Int32>) = VariableAddress[i] :
# 11| r11_2(Int32) = Load[i] : &:r11_1, ~m?
# 11| r11_3(BaseClass) = CopyValue : r9_3
# 11| r11_4(glval<Int32>) = FieldAddress[num] : r11_3
# 11| mu11_5(Int32) = Store[?] : &:r11_4, r11_2
# 9| v9_10(Void) = ReturnVoid :
# 9| v9_11(Void) = AliasedUse : ~m?
# 9| v9_12(Void) = ExitFunction :
# 17| System.Void DerivedClass..ctor()
# 17| Block 0
@@ -469,20 +477,24 @@ delegates.cs:
events.cs:
# 8| System.Void Events..ctor()
# 8| Block 0
# 8| v8_1(Void) = EnterFunction :
# 8| mu8_2(<unknown>) = AliasedDefinition :
# 8| r8_3(glval<Events>) = InitializeThis :
# 10| r10_1(MyDel) = NewObj :
# 10| r10_2(<funcaddr>) = FunctionAddress[MyDel] :
# 10| r10_3(glval<MyDel>) = FunctionAddress[Fun] :
# 10| v10_4(Void) = Call[MyDel] : func:r10_2, this:r10_1, 0:r10_3
# 10| mu10_5(<unknown>) = ^CallSideEffect : ~m?
# 10| r10_6(Events) = CopyValue : r8_3
# 10| r10_7(glval<MyDel>) = FieldAddress[Inst] : r10_6
# 10| mu10_8(MyDel) = Store[?] : &:r10_7, r10_1
# 8| v8_4(Void) = ReturnVoid :
# 8| v8_5(Void) = AliasedUse : ~m?
# 8| v8_6(Void) = ExitFunction :
# 8| v8_1(Void) = EnterFunction :
# 8| mu8_2(<unknown>) = AliasedDefinition :
# 8| r8_3(glval<Events>) = InitializeThis :
# 8| r8_4(glval<Object>) = Convert[Events : Object] : r8_3
# 8| r8_5(<funcaddr>) = FunctionAddress[Object] :
# 8| v8_6(Void) = Call[Object] : func:r8_5, this:r8_4
# 8| mu8_7(<unknown>) = ^CallSideEffect : ~m?
# 10| r10_1(MyDel) = NewObj :
# 10| r10_2(<funcaddr>) = FunctionAddress[MyDel] :
# 10| r10_3(glval<MyDel>) = FunctionAddress[Fun] :
# 10| v10_4(Void) = Call[MyDel] : func:r10_2, this:r10_1, 0:r10_3
# 10| mu10_5(<unknown>) = ^CallSideEffect : ~m?
# 10| r10_6(Events) = CopyValue : r8_3
# 10| r10_7(glval<MyDel>) = FieldAddress[Inst] : r10_6
# 10| mu10_8(MyDel) = Store[?] : &:r10_7, r10_1
# 8| v8_8(Void) = ReturnVoid :
# 8| v8_9(Void) = AliasedUse : ~m?
# 8| v8_10(Void) = ExitFunction :
# 13| System.Void Events.AddEvent()
# 13| Block 0
@@ -1237,29 +1249,37 @@ lock.cs:
obj_creation.cs:
# 7| System.Void ObjCreation.MyClass..ctor()
# 7| Block 0
# 7| v7_1(Void) = EnterFunction :
# 7| mu7_2(<unknown>) = AliasedDefinition :
# 7| r7_3(glval<MyClass>) = InitializeThis :
# 8| v8_1(Void) = NoOp :
# 7| v7_4(Void) = ReturnVoid :
# 7| v7_5(Void) = AliasedUse : ~m?
# 7| v7_6(Void) = ExitFunction :
# 7| v7_1(Void) = EnterFunction :
# 7| mu7_2(<unknown>) = AliasedDefinition :
# 7| r7_3(glval<MyClass>) = InitializeThis :
# 7| r7_4(glval<Object>) = Convert[MyClass : Object] : r7_3
# 7| r7_5(<funcaddr>) = FunctionAddress[Object] :
# 7| v7_6(Void) = Call[Object] : func:r7_5, this:r7_4
# 7| mu7_7(<unknown>) = ^CallSideEffect : ~m?
# 8| v8_1(Void) = NoOp :
# 7| v7_8(Void) = ReturnVoid :
# 7| v7_9(Void) = AliasedUse : ~m?
# 7| v7_10(Void) = ExitFunction :
# 11| System.Void ObjCreation.MyClass..ctor(System.Int32)
# 11| Block 0
# 11| v11_1(Void) = EnterFunction :
# 11| mu11_2(<unknown>) = AliasedDefinition :
# 11| r11_3(glval<MyClass>) = InitializeThis :
# 11| r11_4(glval<Int32>) = VariableAddress[_x] :
# 11| mu11_5(Int32) = InitializeParameter[_x] : &:r11_4
# 13| r13_1(glval<Int32>) = VariableAddress[_x] :
# 13| r13_2(Int32) = Load[_x] : &:r13_1, ~m?
# 13| r13_3(MyClass) = CopyValue : r11_3
# 13| r13_4(glval<Int32>) = FieldAddress[x] : r13_3
# 13| mu13_5(Int32) = Store[?] : &:r13_4, r13_2
# 11| v11_6(Void) = ReturnVoid :
# 11| v11_7(Void) = AliasedUse : ~m?
# 11| v11_8(Void) = ExitFunction :
# 11| v11_1(Void) = EnterFunction :
# 11| mu11_2(<unknown>) = AliasedDefinition :
# 11| r11_3(glval<MyClass>) = InitializeThis :
# 11| r11_4(glval<Int32>) = VariableAddress[_x] :
# 11| mu11_5(Int32) = InitializeParameter[_x] : &:r11_4
# 11| r11_6(glval<Object>) = Convert[MyClass : Object] : r11_3
# 11| r11_7(<funcaddr>) = FunctionAddress[Object] :
# 11| v11_8(Void) = Call[Object] : func:r11_7, this:r11_6
# 11| mu11_9(<unknown>) = ^CallSideEffect : ~m?
# 13| r13_1(glval<Int32>) = VariableAddress[_x] :
# 13| r13_2(Int32) = Load[_x] : &:r13_1, ~m?
# 13| r13_3(MyClass) = CopyValue : r11_3
# 13| r13_4(glval<Int32>) = FieldAddress[x] : r13_3
# 13| mu13_5(Int32) = Store[?] : &:r13_4, r13_2
# 11| v11_10(Void) = ReturnVoid :
# 11| v11_11(Void) = AliasedUse : ~m?
# 11| v11_12(Void) = ExitFunction :
# 17| System.Void ObjCreation.SomeFun(ObjCreation.MyClass)
# 17| Block 0
@@ -1884,13 +1904,17 @@ stmts.cs:
using.cs:
# 7| System.Void UsingStmt.MyDisposable..ctor()
# 7| Block 0
# 7| v7_1(Void) = EnterFunction :
# 7| mu7_2(<unknown>) = AliasedDefinition :
# 7| r7_3(glval<MyDisposable>) = InitializeThis :
# 7| v7_4(Void) = NoOp :
# 7| v7_5(Void) = ReturnVoid :
# 7| v7_6(Void) = AliasedUse : ~m?
# 7| v7_7(Void) = ExitFunction :
# 7| v7_1(Void) = EnterFunction :
# 7| mu7_2(<unknown>) = AliasedDefinition :
# 7| r7_3(glval<MyDisposable>) = InitializeThis :
# 7| r7_4(glval<Object>) = Convert[MyDisposable : Object] : r7_3
# 7| r7_5(<funcaddr>) = FunctionAddress[Object] :
# 7| v7_6(Void) = Call[Object] : func:r7_5, this:r7_4
# 7| mu7_7(<unknown>) = ^CallSideEffect : ~m?
# 7| v7_8(Void) = NoOp :
# 7| v7_9(Void) = ReturnVoid :
# 7| v7_10(Void) = AliasedUse : ~m?
# 7| v7_11(Void) = ExitFunction :
# 8| System.Void UsingStmt.MyDisposable.DoSomething()
# 8| Block 0

View File

@@ -674,14 +674,14 @@
| Foreach.cs:36:10:36:11 | exit M6 (normal) | Foreach.cs:36:10:36:11 | exit M6 | 2 |
| Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | 1 |
| Foreach.cs:38:26:38:26 | String x | Foreach.cs:39:11:39:11 | ; | 4 |
| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | exit Initializers | 15 |
| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | exit Initializers | 15 |
| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | exit Initializers | 16 |
| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | exit Initializers | 16 |
| Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | exit M | 22 |
| Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:20 | ... = ... | 2 |
| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | exit NoConstructor | 9 |
| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | exit Sub | 12 |
| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | exit Sub | 9 |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | exit Sub | 19 |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | exit Sub | 14 |
| Initializers.cs:51:10:51:13 | enter Test | Initializers.cs:51:10:51:13 | exit Test | 105 |
| LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:9:13:9:28 | ... == ... | 7 |
| LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | exit M1 | 2 |
@@ -776,6 +776,7 @@
| MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | MultiImplementationB.cs:14:17:14:18 | exit M1 | 2 |
| MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:18:9:18:22 | M2(...) | 2 |
| MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | exit M2 | 4 |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | 1 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 | 1 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | enter C2 | 1 |
| MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 | 1 |
@@ -858,6 +859,7 @@
| MultiImplementationB.cs:14:17:14:18 | exit M1 (normal) | MultiImplementationB.cs:14:17:14:18 | exit M1 | 2 |
| MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationB.cs:16:9:16:31 | M2(...) | 2 |
| MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:9:16:31 | exit M2 | 5 |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | 1 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 | 1 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | enter C2 | 1 |
| MultiImplementationB.cs:18:12:18:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 | 1 |
@@ -1231,7 +1233,7 @@
| cflow.cs:127:48:127:49 | "" | cflow.cs:127:48:127:49 | "" | 1 |
| cflow.cs:127:53:127:57 | this access | cflow.cs:127:53:127:57 | access to field Field | 2 |
| cflow.cs:127:62:127:64 | enter set_Prop | cflow.cs:127:62:127:64 | exit set_Prop | 8 |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow | 8 |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow | 9 |
| cflow.cs:134:5:134:15 | enter ControlFlow | cflow.cs:134:5:134:15 | exit ControlFlow | 9 |
| cflow.cs:136:12:136:22 | enter ControlFlow | cflow.cs:136:12:136:22 | exit ControlFlow | 8 |
| cflow.cs:138:40:138:40 | enter + | cflow.cs:138:40:138:40 | exit + | 9 |
@@ -1330,7 +1332,7 @@
| cflow.cs:284:5:284:18 | enter ControlFlowSub | cflow.cs:284:5:284:18 | exit ControlFlowSub | 5 |
| cflow.cs:286:5:286:18 | enter ControlFlowSub | cflow.cs:286:5:286:18 | exit ControlFlowSub | 7 |
| cflow.cs:291:12:291:12 | enter M | cflow.cs:291:12:291:12 | exit M | 6 |
| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | exit NegationInConstructor | 4 |
| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | exit NegationInConstructor | 5 |
| cflow.cs:298:10:298:10 | enter M | cflow.cs:300:46:300:50 | ... > ... | 7 |
| cflow.cs:300:44:300:51 | [false] !... | cflow.cs:300:44:300:51 | [false] !... | 1 |
| cflow.cs:300:44:300:51 | [true] !... | cflow.cs:300:44:300:51 | [true] !... | 1 |

View File

@@ -9,6 +9,8 @@ multipleSuccessors
| MultiImplementationA.cs:13:16:13:20 | ... = ... | successor | MultiImplementationA.cs:24:16:24:16 | this access |
| MultiImplementationA.cs:13:16:13:20 | ... = ... | successor | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationA.cs:13:16:13:20 | ... = ... | successor | MultiImplementationB.cs:22:16:22:16 | this access |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | successor | MultiImplementationA.cs:13:16:13:16 | this access |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | successor | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationA.cs:21:19:21:22 | call to constructor C2 | successor | MultiImplementationA.cs:21:27:21:29 | {...} |
| MultiImplementationA.cs:21:19:21:22 | call to constructor C2 | successor | MultiImplementationB.cs:19:27:19:29 | {...} |
| MultiImplementationA.cs:24:32:24:34 | ... = ... | successor | MultiImplementationA.cs:20:22:20:31 | {...} |
@@ -19,6 +21,8 @@ multipleSuccessors
| MultiImplementationB.cs:11:16:11:20 | ... = ... | successor | MultiImplementationA.cs:24:16:24:16 | this access |
| MultiImplementationB.cs:11:16:11:20 | ... = ... | successor | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationB.cs:11:16:11:20 | ... = ... | successor | MultiImplementationB.cs:22:16:22:16 | this access |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | successor | MultiImplementationA.cs:13:16:13:16 | this access |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | successor | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationB.cs:19:19:19:22 | call to constructor C2 | successor | MultiImplementationA.cs:21:27:21:29 | {...} |
| MultiImplementationB.cs:19:19:19:22 | call to constructor C2 | successor | MultiImplementationB.cs:19:27:19:29 | {...} |
| MultiImplementationB.cs:22:32:22:34 | ... = ... | successor | MultiImplementationA.cs:20:22:20:31 | {...} |

View File

@@ -2475,10 +2475,12 @@ dominance
| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:9:6:9 | access to property G |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:31 | ... + ... |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:31 | ... + ... |
| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:5:9:5:9 | this access |
| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:5:9:5:9 | this access |
| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | call to constructor Object |
| Initializers.cs:8:5:8:16 | exit Initializers (normal) | Initializers.cs:8:5:8:16 | exit Initializers |
| Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:5:8:16 | exit Initializers (normal) |
| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:5:9:5:9 | this access |
| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:5:9:5:9 | this access |
| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | call to constructor Object |
| Initializers.cs:10:5:10:16 | exit Initializers (normal) | Initializers.cs:10:5:10:16 | exit Initializers |
| Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | exit Initializers (normal) |
| Initializers.cs:12:10:12:10 | enter M | Initializers.cs:13:5:16:5 | {...} |
@@ -2506,16 +2508,10 @@ dominance
| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:22:23:22:23 | this access |
| Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | exit NoConstructor |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:27:22:27 | 0 |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:27:22:27 | 0 |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:23:23:23:23 | this access |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:23:23:23:23 | this access |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:27 | ... = ... |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:27 | ... = ... |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:23:27:23:27 | 1 |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:23:27:23:27 | 1 |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:28:13:28:13 | this access |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:27 | ... = ... |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:27 | ... = ... |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 |
@@ -2539,7 +2535,8 @@ dominance
| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | exit Sub (normal) |
| Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:31 | this access |
| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:35 | ... = ... |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:22:23:22:23 | this access |
| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:28:13:28:13 | this access |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | call to constructor NoConstructor |
| Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | exit Sub |
| Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:38 | ...; |
| Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:33:35:33 | access to parameter i |
@@ -2888,8 +2885,8 @@ dominance
| MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:21:18:21 | 0 |
| MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | MultiImplementationA.cs:18:9:18:22 | exit M2 |
| MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:13:16:13:16 | this access |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:29 | ...; |
| MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:28:20:28 | access to parameter i |
| MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) |
@@ -2973,8 +2970,8 @@ dominance
| MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | MultiImplementationB.cs:16:9:16:31 | exit M2 |
| MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) |
| MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:21:16:30 | throw ... |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:13:16:13:16 | this access |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:30:18:33 | null |
| MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) |
| MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationB.cs:18:12:18:13 | exit C2 (abnormal) |
@@ -3917,7 +3914,8 @@ dominance
| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:62:127:64 | exit set_Prop (normal) |
| cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:72 | this access |
| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:80 | ... = ... |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:130:5:132:5 | {...} |
| cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:130:5:132:5 | {...} |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | call to constructor Object |
| cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | exit ControlFlow |
| cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:18 | ...; |
| cflow.cs:131:9:131:13 | this access | cflow.cs:131:17:131:17 | access to parameter s |
@@ -4278,7 +4276,8 @@ dominance
| cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:40:291:40 | 0 |
| cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:12:291:12 | exit M (normal) |
| cflow.cs:291:40:291:40 | 0 | cflow.cs:291:38:291:41 | delegate call |
| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:52:296:54 | {...} |
| cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:52:296:54 | {...} |
| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | call to constructor Object |
| cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | cflow.cs:296:5:296:25 | exit NegationInConstructor |
| cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) |
| cflow.cs:298:10:298:10 | enter M | cflow.cs:299:5:301:5 | {...} |
@@ -6550,8 +6549,8 @@ postDominance
| Foreach.cs:38:33:38:33 | Int32 y | Foreach.cs:38:26:38:26 | String x |
| Foreach.cs:38:39:38:42 | access to parameter args | Foreach.cs:37:5:40:5 | {...} |
| Foreach.cs:39:11:39:11 | ; | Foreach.cs:38:18:38:34 | (..., ...) |
| Initializers.cs:5:9:5:9 | this access | Initializers.cs:8:5:8:16 | enter Initializers |
| Initializers.cs:5:9:5:9 | this access | Initializers.cs:10:5:10:16 | enter Initializers |
| Initializers.cs:5:9:5:9 | this access | Initializers.cs:8:5:8:16 | call to constructor Object |
| Initializers.cs:5:9:5:9 | this access | Initializers.cs:10:5:10:16 | call to constructor Object |
| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:5:13:5:17 | ... + ... |
| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:5:13:5:17 | ... + ... |
| Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:9:5:9 | this access |
@@ -6572,9 +6571,11 @@ postDominance
| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:31:6:31 | 2 |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:27 | access to field H |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:27 | access to field H |
| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:5:8:16 | enter Initializers |
| Initializers.cs:8:5:8:16 | exit Initializers | Initializers.cs:8:5:8:16 | exit Initializers (normal) |
| Initializers.cs:8:5:8:16 | exit Initializers (normal) | Initializers.cs:8:20:8:22 | {...} |
| Initializers.cs:8:20:8:22 | {...} | Initializers.cs:6:25:6:31 | ... = ... |
| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | enter Initializers |
| Initializers.cs:10:5:10:16 | exit Initializers | Initializers.cs:10:5:10:16 | exit Initializers (normal) |
| Initializers.cs:10:5:10:16 | exit Initializers (normal) | Initializers.cs:10:28:10:30 | {...} |
| Initializers.cs:10:28:10:30 | {...} | Initializers.cs:6:25:6:31 | ... = ... |
@@ -6603,19 +6604,13 @@ postDominance
| Initializers.cs:20:11:20:23 | exit NoConstructor | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) |
| Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:23:23:23:27 | ... = ... |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:20:11:20:23 | enter NoConstructor |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:35:9:35:11 | enter Sub |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:22:27:22:27 | 0 |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:22:27:22:27 | 0 |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:23 | this access |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:23 | this access |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:22:23:22:27 | ... = ... |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:22:23:22:27 | ... = ... |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:23:27:23:27 | 1 |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:23:27:23:27 | 1 |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:23 | this access |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:23 | this access |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:23:23:23:27 | ... = ... |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:31:17:31:20 | call to constructor NoConstructor |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:35:9:35:11 | call to constructor NoConstructor |
| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:28:17:28:17 | 2 |
| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:28:17:28:17 | 2 |
| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:13 | this access |
@@ -6636,6 +6631,7 @@ postDominance
| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:35:33:35 | access to parameter i |
| Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:29:33:38 | {...} |
| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:31 | this access |
| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | enter Sub |
| Initializers.cs:35:9:35:11 | exit Sub | Initializers.cs:35:9:35:11 | exit Sub (normal) |
| Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:29:35:37 | ... = ... |
| Initializers.cs:35:27:35:40 | {...} | Initializers.cs:28:13:28:17 | ... = ... |
@@ -7948,9 +7944,10 @@ postDominance
| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:76:127:80 | access to parameter value |
| cflow.cs:127:68:127:81 | ...; | cflow.cs:127:66:127:83 | {...} |
| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:72 | this access |
| cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | enter ControlFlow |
| cflow.cs:129:5:129:15 | exit ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow (normal) |
| cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:131:9:131:17 | ... = ... |
| cflow.cs:130:5:132:5 | {...} | cflow.cs:129:5:129:15 | enter ControlFlow |
| cflow.cs:130:5:132:5 | {...} | cflow.cs:129:5:129:15 | call to constructor Object |
| cflow.cs:131:9:131:13 | this access | cflow.cs:131:9:131:18 | ...; |
| cflow.cs:131:9:131:17 | ... = ... | cflow.cs:131:17:131:17 | access to parameter s |
| cflow.cs:131:9:131:18 | ...; | cflow.cs:130:5:132:5 | {...} |
@@ -8301,9 +8298,10 @@ postDominance
| cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:12:291:12 | enter M |
| cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:40:291:40 | 0 |
| cflow.cs:291:40:291:40 | 0 | cflow.cs:291:38:291:38 | access to parameter f |
| cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | enter NegationInConstructor |
| cflow.cs:296:5:296:25 | exit NegationInConstructor | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) |
| cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | cflow.cs:296:52:296:54 | {...} |
| cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | enter NegationInConstructor |
| cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | call to constructor Object |
| cflow.cs:298:10:298:10 | exit M | cflow.cs:298:10:298:10 | exit M (normal) |
| cflow.cs:298:10:298:10 | exit M (normal) | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor |
| cflow.cs:299:5:301:5 | {...} | cflow.cs:298:10:298:10 | enter M |
@@ -11404,12 +11402,15 @@ blockDominance
| MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | MultiImplementationB.cs:14:17:14:18 | exit M1 (normal) |
| MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:17:5:19:5 | {...} |
| MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | enter M2 |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:13:16:13:16 | this access |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:22:20:31 | {...} |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:24:16:24:16 | this access |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | enter C2 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | exit C2 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:22:18:36 | {...} |
@@ -11534,12 +11535,15 @@ blockDominance
| MultiImplementationB.cs:14:17:14:18 | exit M1 (normal) | MultiImplementationB.cs:14:17:14:18 | exit M1 (normal) |
| MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationB.cs:15:5:17:5 | {...} |
| MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:9:16:31 | enter M2 |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:13:16:13:16 | this access |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:22:20:31 | {...} |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:24:16:24:16 | this access |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | enter C2 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | exit C2 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:22:18:36 | {...} |
@@ -14983,15 +14987,18 @@ postBlockDominance
| MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | MultiImplementationB.cs:15:5:17:5 | {...} |
| MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:17:5:19:5 | {...} |
| MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | enter M2 |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | enter C2 |
| MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 |
| MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationB.cs:18:12:18:13 | exit C2 |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:13:16:13:16 | this access |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:12:20:13 | enter C2 |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:22:20:31 | {...} |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:24:16:24:16 | this access |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationB.cs:18:12:18:13 | enter C2 |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationB.cs:22:16:22:16 | this access |
| MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:12:21:13 | enter C2 |
@@ -15087,6 +15094,7 @@ postBlockDominance
| MultiImplementationB.cs:14:17:14:18 | exit M1 (normal) | MultiImplementationB.cs:15:5:17:5 | {...} |
| MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationB.cs:15:5:17:5 | {...} |
| MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:9:16:31 | enter M2 |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | enter C2 |
| MultiImplementationB.cs:18:12:18:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 |

View File

@@ -2675,10 +2675,12 @@ nodeEnclosing
| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:10:5:10:16 | Initializers |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:8:5:8:16 | Initializers |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:10:5:10:16 | Initializers |
| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:5:8:16 | Initializers |
| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | Initializers |
| Initializers.cs:8:5:8:16 | exit Initializers | Initializers.cs:8:5:8:16 | Initializers |
| Initializers.cs:8:5:8:16 | exit Initializers (normal) | Initializers.cs:8:5:8:16 | Initializers |
| Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:5:8:16 | Initializers |
| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | Initializers |
| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | Initializers |
| Initializers.cs:10:5:10:16 | exit Initializers | Initializers.cs:10:5:10:16 | Initializers |
| Initializers.cs:10:5:10:16 | exit Initializers (normal) | Initializers.cs:10:5:10:16 | Initializers |
@@ -2709,17 +2711,11 @@ nodeEnclosing
| Initializers.cs:20:11:20:23 | exit NoConstructor | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:31:9:31:11 | Sub |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:31:9:31:11 | Sub |
@@ -2744,6 +2740,7 @@ nodeEnclosing
| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | Sub |
| Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:9:33:11 | Sub |
| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:9:33:11 | Sub |
| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:35:9:35:11 | exit Sub | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | Sub |
@@ -3167,6 +3164,8 @@ nodeEnclosing
| MultiImplementationA.cs:18:9:18:22 | exit M2 | MultiImplementationA.cs:18:9:18:22 | M2 |
| MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | MultiImplementationA.cs:18:9:18:22 | M2 |
| MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:9:18:22 | M2 |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | C2 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | C2 |
| MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | C2 |
@@ -3354,6 +3353,8 @@ nodeEnclosing
| MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | MultiImplementationB.cs:16:9:16:31 | M2 |
| MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | M2 |
| MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:9:16:31 | M2 |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | C2 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | C2 |
| MultiImplementationB.cs:18:12:18:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | C2 |
@@ -4436,6 +4437,7 @@ nodeEnclosing
| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:62:127:64 | set_Prop |
| cflow.cs:127:68:127:81 | ...; | cflow.cs:127:62:127:64 | set_Prop |
| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:62:127:64 | set_Prop |
| cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | ControlFlow |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | ControlFlow |
| cflow.cs:129:5:129:15 | exit ControlFlow | cflow.cs:129:5:129:15 | ControlFlow |
| cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | ControlFlow |
@@ -4826,6 +4828,7 @@ nodeEnclosing
| cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:12:291:12 | M |
| cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:12:291:12 | M |
| cflow.cs:291:40:291:40 | 0 | cflow.cs:291:12:291:12 | M |
| cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | NegationInConstructor |
| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | NegationInConstructor |
| cflow.cs:296:5:296:25 | exit NegationInConstructor | cflow.cs:296:5:296:25 | NegationInConstructor |
| cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | cflow.cs:296:5:296:25 | NegationInConstructor |
@@ -5628,6 +5631,8 @@ blockEnclosing
| MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:16:17:16:18 | M1 |
| MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationB.cs:14:17:14:18 | M1 |
| MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | M2 |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | C2 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | C2 |
| MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | C2 |
@@ -5716,6 +5721,8 @@ blockEnclosing
| MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationA.cs:16:17:16:18 | M1 |
| MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationB.cs:14:17:14:18 | M1 |
| MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:9:16:31 | M2 |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | C2 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | C2 |
| MultiImplementationB.cs:18:12:18:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | C2 |

View File

@@ -1687,7 +1687,9 @@
| Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:6:27:6:27 | access to field H |
| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:27:6:27 | access to field H |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:31:6:31 | 2 |
| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:5:8:16 | call to constructor Object |
| Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:20:8:22 | {...} |
| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | call to constructor Object |
| Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:28:10:30 | {...} |
| Initializers.cs:13:5:16:5 | {...} | Initializers.cs:13:5:16:5 | {...} |
| Initializers.cs:14:9:14:54 | ... ...; | Initializers.cs:14:9:14:54 | ... ...; |
@@ -1735,6 +1737,7 @@
| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:31:33:31 | this access |
| Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:36 | ...; |
| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:35:33:35 | access to parameter i |
| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to constructor NoConstructor |
| Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:27:35:40 | {...} |
| Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:29:35:29 | this access |
| Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:29:35:29 | this access |
@@ -2045,6 +2048,7 @@
| MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:17:5:19:5 | {...} |
| MultiImplementationA.cs:18:9:18:22 | M2(...) | MultiImplementationA.cs:18:9:18:22 | M2(...) |
| MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:21:18:21 | 0 |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:22:20:31 | {...} |
| MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:24:20:24 | this access |
| MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:24:20:24 | this access |
@@ -2089,6 +2093,7 @@
| MultiImplementationB.cs:16:9:16:31 | M2(...) | MultiImplementationB.cs:16:9:16:31 | M2(...) |
| MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:27:16:30 | null |
| MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:27:16:30 | null |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:22:18:36 | {...} |
| MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationB.cs:18:30:18:33 | null |
| MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationB.cs:18:30:18:33 | null |
@@ -2933,6 +2938,7 @@
| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:68:127:72 | this access |
| cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:81 | ...; |
| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:76:127:80 | access to parameter value |
| cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | call to constructor Object |
| cflow.cs:130:5:132:5 | {...} | cflow.cs:130:5:132:5 | {...} |
| cflow.cs:131:9:131:13 | access to field Field | cflow.cs:131:9:131:13 | this access |
| cflow.cs:131:9:131:13 | this access | cflow.cs:131:9:131:13 | this access |
@@ -3267,6 +3273,7 @@
| cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:38:291:38 | access to parameter f |
| cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:38:291:38 | access to parameter f |
| cflow.cs:291:40:291:40 | 0 | cflow.cs:291:40:291:40 | 0 |
| cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | call to constructor Object |
| cflow.cs:296:52:296:54 | {...} | cflow.cs:296:52:296:54 | {...} |
| cflow.cs:299:5:301:5 | {...} | cflow.cs:299:5:301:5 | {...} |
| cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | cflow.cs:300:38:300:38 | 0 |

View File

@@ -2325,7 +2325,9 @@
| Initializers.cs:6:27:6:27 | access to field H | Initializers.cs:6:27:6:27 | access to field H | normal |
| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:27:6:31 | ... + ... | normal |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:31:6:31 | 2 | normal |
| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:8:5:8:16 | call to constructor Object | normal |
| Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:20:8:22 | {...} | normal |
| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | call to constructor Object | normal |
| Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:28:10:30 | {...} | normal |
| Initializers.cs:13:5:16:5 | {...} | Initializers.cs:15:13:15:63 | Initializers[] iz = ... | normal |
| Initializers.cs:14:9:14:54 | ... ...; | Initializers.cs:14:13:14:53 | Initializers i = ... | normal |
@@ -2373,6 +2375,7 @@
| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:31:33:35 | ... = ... | normal |
| Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:35 | ... = ... | normal |
| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:35:33:35 | access to parameter i | normal |
| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | normal |
| Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:37 | ... = ... | normal |
| Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:29:35:29 | this access | normal |
| Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:29:35:29 | this access | normal |
@@ -2697,6 +2700,7 @@
| MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:18:9:18:22 | M2(...) | normal |
| MultiImplementationA.cs:18:9:18:22 | M2(...) | MultiImplementationA.cs:18:9:18:22 | M2(...) | normal |
| MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:21:18:21 | 0 | normal |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | normal |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:28 | ... = ... | normal |
| MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:24:20:24 | this access | normal |
| MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:24:20:24 | this access | normal |
@@ -2741,6 +2745,7 @@
| MultiImplementationB.cs:16:9:16:31 | M2(...) | MultiImplementationB.cs:16:9:16:31 | M2(...) | normal |
| MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:21:16:30 | throw ... | throw(NullReferenceException) |
| MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:27:16:30 | null | normal |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | normal |
| MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:24:18:34 | throw ...; | throw(NullReferenceException) |
| MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationB.cs:18:24:18:34 | throw ...; | throw(NullReferenceException) |
| MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationB.cs:18:30:18:33 | null | normal |
@@ -3868,6 +3873,7 @@
| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:68:127:80 | ... = ... | normal |
| cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:80 | ... = ... | normal |
| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:76:127:80 | access to parameter value | normal |
| cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | call to constructor Object | normal |
| cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:17 | ... = ... | normal |
| cflow.cs:131:9:131:13 | access to field Field | cflow.cs:131:9:131:13 | this access | normal |
| cflow.cs:131:9:131:13 | this access | cflow.cs:131:9:131:13 | this access | normal |
@@ -4272,6 +4278,7 @@
| cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:38:291:38 | access to parameter f | normal |
| cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:38:291:41 | delegate call | normal |
| cflow.cs:291:40:291:40 | 0 | cflow.cs:291:40:291:40 | 0 | normal |
| cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | call to constructor Object | normal |
| cflow.cs:296:52:296:54 | {...} | cflow.cs:296:52:296:54 | {...} | normal |
| cflow.cs:299:5:301:5 | {...} | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | normal |
| cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | normal |

View File

@@ -2792,10 +2792,12 @@
| Initializers.cs:6:27:6:31 | ... + ... | Initializers.cs:6:9:6:9 | access to property G | semmle.label | successor |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:31 | ... + ... | semmle.label | successor |
| Initializers.cs:6:31:6:31 | 2 | Initializers.cs:6:27:6:31 | ... + ... | semmle.label | successor |
| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:5:9:5:9 | this access | semmle.label | successor |
| Initializers.cs:8:5:8:16 | call to constructor Object | Initializers.cs:5:9:5:9 | this access | semmle.label | successor |
| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | call to constructor Object | semmle.label | successor |
| Initializers.cs:8:5:8:16 | exit Initializers (normal) | Initializers.cs:8:5:8:16 | exit Initializers | semmle.label | successor |
| Initializers.cs:8:20:8:22 | {...} | Initializers.cs:8:5:8:16 | exit Initializers (normal) | semmle.label | successor |
| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:5:9:5:9 | this access | semmle.label | successor |
| Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:5:9:5:9 | this access | semmle.label | successor |
| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | call to constructor Object | semmle.label | successor |
| Initializers.cs:10:5:10:16 | exit Initializers (normal) | Initializers.cs:10:5:10:16 | exit Initializers | semmle.label | successor |
| Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | exit Initializers (normal) | semmle.label | successor |
| Initializers.cs:12:10:12:10 | enter M | Initializers.cs:13:5:16:5 | {...} | semmle.label | successor |
@@ -2823,16 +2825,10 @@
| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:22:23:22:23 | this access | semmle.label | successor |
| Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | exit NoConstructor | semmle.label | successor |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:27:22:27 | 0 | semmle.label | successor |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:27:22:27 | 0 | semmle.label | successor |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:23:23:23:23 | this access | semmle.label | successor |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:23:23:23:23 | this access | semmle.label | successor |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:27 | ... = ... | semmle.label | successor |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:27 | ... = ... | semmle.label | successor |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:23:27:23:27 | 1 | semmle.label | successor |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:23:27:23:27 | 1 | semmle.label | successor |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | semmle.label | successor |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:28:13:28:13 | this access | semmle.label | successor |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:27 | ... = ... | semmle.label | successor |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:27 | ... = ... | semmle.label | successor |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 | semmle.label | successor |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 | semmle.label | successor |
@@ -2856,7 +2852,8 @@
| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | exit Sub (normal) | semmle.label | successor |
| Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:31 | this access | semmle.label | successor |
| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:35 | ... = ... | semmle.label | successor |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:22:23:22:23 | this access | semmle.label | successor |
| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:28:13:28:13 | this access | semmle.label | successor |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | semmle.label | successor |
| Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | exit Sub | semmle.label | successor |
| Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:38 | ...; | semmle.label | successor |
| Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:33:35:33 | access to parameter i | semmle.label | successor |
@@ -3253,8 +3250,10 @@
| MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:21:18:21 | 0 | semmle.label | successor |
| MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | MultiImplementationA.cs:18:9:18:22 | exit M2 | semmle.label | successor |
| MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:9:18:22 | exit M2 (normal) | semmle.label | successor |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:13:16:13:16 | this access | semmle.label | successor |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:11:16:11:16 | this access | semmle.label | successor |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:13:16:13:16 | this access | semmle.label | successor |
| MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationB.cs:11:16:11:16 | this access | semmle.label | successor |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | semmle.label | successor |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | semmle.label | successor |
| MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | MultiImplementationA.cs:20:12:20:13 | exit C2 | semmle.label | successor |
| MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | MultiImplementationB.cs:18:12:18:13 | exit C2 | semmle.label | successor |
| MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | MultiImplementationA.cs:20:12:20:13 | exit C2 | semmle.label | successor |
@@ -3394,8 +3393,10 @@
| MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | MultiImplementationB.cs:16:9:16:31 | exit M2 | semmle.label | successor |
| MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | semmle.label | exception(NullReferenceException) |
| MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:21:16:30 | throw ... | semmle.label | successor |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:13:16:13:16 | this access | semmle.label | successor |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:11:16:11:16 | this access | semmle.label | successor |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationA.cs:13:16:13:16 | this access | semmle.label | successor |
| MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:11:16:11:16 | this access | semmle.label | successor |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | semmle.label | successor |
| MultiImplementationB.cs:18:12:18:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | semmle.label | successor |
| MultiImplementationB.cs:18:12:18:13 | exit C2 (abnormal) | MultiImplementationA.cs:20:12:20:13 | exit C2 | semmle.label | successor |
| MultiImplementationB.cs:18:12:18:13 | exit C2 (abnormal) | MultiImplementationB.cs:18:12:18:13 | exit C2 | semmle.label | successor |
| MultiImplementationB.cs:18:12:18:13 | exit C2 (normal) | MultiImplementationA.cs:20:12:20:13 | exit C2 | semmle.label | successor |
@@ -4501,7 +4502,8 @@
| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:62:127:64 | exit set_Prop (normal) | semmle.label | successor |
| cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:72 | this access | semmle.label | successor |
| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:80 | ... = ... | semmle.label | successor |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:130:5:132:5 | {...} | semmle.label | successor |
| cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:130:5:132:5 | {...} | semmle.label | successor |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | call to constructor Object | semmle.label | successor |
| cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | exit ControlFlow | semmle.label | successor |
| cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:18 | ...; | semmle.label | successor |
| cflow.cs:131:9:131:13 | this access | cflow.cs:131:17:131:17 | access to parameter s | semmle.label | successor |
@@ -4894,7 +4896,8 @@
| cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:40:291:40 | 0 | semmle.label | successor |
| cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:12:291:12 | exit M (normal) | semmle.label | successor |
| cflow.cs:291:40:291:40 | 0 | cflow.cs:291:38:291:41 | delegate call | semmle.label | successor |
| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:52:296:54 | {...} | semmle.label | successor |
| cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:52:296:54 | {...} | semmle.label | successor |
| cflow.cs:296:5:296:25 | enter NegationInConstructor | cflow.cs:296:5:296:25 | call to constructor Object | semmle.label | successor |
| cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | cflow.cs:296:5:296:25 | exit NegationInConstructor | semmle.label | successor |
| cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | exit NegationInConstructor (normal) | semmle.label | successor |
| cflow.cs:298:10:298:10 | enter M | cflow.cs:299:5:301:5 | {...} | semmle.label | successor |

View File

@@ -1137,13 +1137,13 @@ entryPoint
| Foreach.cs:24:10:24:11 | M4 | Foreach.cs:25:5:28:5 | {...} |
| Foreach.cs:30:10:30:11 | M5 | Foreach.cs:31:5:34:5 | {...} |
| Foreach.cs:36:10:36:11 | M6 | Foreach.cs:37:5:40:5 | {...} |
| Initializers.cs:8:5:8:16 | Initializers | Initializers.cs:5:9:5:9 | this access |
| Initializers.cs:10:5:10:16 | Initializers | Initializers.cs:5:9:5:9 | this access |
| Initializers.cs:8:5:8:16 | Initializers | Initializers.cs:8:5:8:16 | call to constructor Object |
| Initializers.cs:10:5:10:16 | Initializers | Initializers.cs:10:5:10:16 | call to constructor Object |
| Initializers.cs:12:10:12:10 | M | Initializers.cs:13:5:16:5 | {...} |
| Initializers.cs:20:11:20:23 | NoConstructor | Initializers.cs:22:23:22:23 | this access |
| Initializers.cs:31:9:31:11 | Sub | Initializers.cs:31:17:31:20 | call to constructor NoConstructor |
| Initializers.cs:33:9:33:11 | Sub | Initializers.cs:33:22:33:25 | call to constructor Sub |
| Initializers.cs:35:9:35:11 | Sub | Initializers.cs:22:23:22:23 | this access |
| Initializers.cs:35:9:35:11 | Sub | Initializers.cs:35:9:35:11 | call to constructor NoConstructor |
| Initializers.cs:51:10:51:13 | Test | Initializers.cs:52:5:66:5 | {...} |
| LoopUnrolling.cs:7:10:7:11 | M1 | LoopUnrolling.cs:8:5:13:5 | {...} |
| LoopUnrolling.cs:15:10:15:11 | M2 | LoopUnrolling.cs:16:5:20:5 | {...} |
@@ -1173,8 +1173,8 @@ entryPoint
| MultiImplementationA.cs:16:17:16:18 | M1 | MultiImplementationA.cs:17:5:19:5 | {...} |
| MultiImplementationA.cs:16:17:16:18 | M1 | MultiImplementationB.cs:15:5:17:5 | {...} |
| MultiImplementationA.cs:18:9:18:22 | M2 | MultiImplementationA.cs:18:21:18:21 | 0 |
| MultiImplementationA.cs:20:12:20:13 | C2 | MultiImplementationA.cs:13:16:13:16 | this access |
| MultiImplementationA.cs:20:12:20:13 | C2 | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationA.cs:20:12:20:13 | C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationA.cs:20:12:20:13 | C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationA.cs:21:12:21:13 | C2 | MultiImplementationA.cs:21:24:21:24 | 0 |
| MultiImplementationA.cs:21:12:21:13 | C2 | MultiImplementationB.cs:19:24:19:24 | 1 |
| MultiImplementationA.cs:22:6:22:7 | ~C2 | MultiImplementationA.cs:22:11:22:13 | {...} |
@@ -1202,8 +1202,8 @@ entryPoint
| MultiImplementationB.cs:14:17:14:18 | M1 | MultiImplementationA.cs:17:5:19:5 | {...} |
| MultiImplementationB.cs:14:17:14:18 | M1 | MultiImplementationB.cs:15:5:17:5 | {...} |
| MultiImplementationB.cs:16:9:16:31 | M2 | MultiImplementationB.cs:16:27:16:30 | null |
| MultiImplementationB.cs:18:12:18:13 | C2 | MultiImplementationA.cs:13:16:13:16 | this access |
| MultiImplementationB.cs:18:12:18:13 | C2 | MultiImplementationB.cs:11:16:11:16 | this access |
| MultiImplementationB.cs:18:12:18:13 | C2 | MultiImplementationA.cs:20:12:20:13 | call to constructor Object |
| MultiImplementationB.cs:18:12:18:13 | C2 | MultiImplementationB.cs:18:12:18:13 | call to constructor Object |
| MultiImplementationB.cs:19:12:19:13 | C2 | MultiImplementationA.cs:21:24:21:24 | 0 |
| MultiImplementationB.cs:19:12:19:13 | C2 | MultiImplementationB.cs:19:24:19:24 | 1 |
| MultiImplementationB.cs:20:6:20:7 | ~C2 | MultiImplementationA.cs:22:11:22:13 | {...} |
@@ -1265,7 +1265,7 @@ entryPoint
| cflow.cs:119:20:119:21 | M5 | cflow.cs:120:5:124:5 | {...} |
| cflow.cs:127:19:127:21 | get_Prop | cflow.cs:127:23:127:60 | {...} |
| cflow.cs:127:62:127:64 | set_Prop | cflow.cs:127:66:127:83 | {...} |
| cflow.cs:129:5:129:15 | ControlFlow | cflow.cs:130:5:132:5 | {...} |
| cflow.cs:129:5:129:15 | ControlFlow | cflow.cs:129:5:129:15 | call to constructor Object |
| cflow.cs:134:5:134:15 | ControlFlow | cflow.cs:134:31:134:31 | access to parameter i |
| cflow.cs:136:12:136:22 | ControlFlow | cflow.cs:136:33:136:33 | 0 |
| cflow.cs:138:40:138:40 | + | cflow.cs:139:5:142:5 | {...} |
@@ -1285,5 +1285,5 @@ entryPoint
| cflow.cs:284:5:284:18 | ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub |
| cflow.cs:286:5:286:18 | ControlFlowSub | cflow.cs:286:34:286:34 | access to parameter i |
| cflow.cs:291:12:291:12 | M | cflow.cs:291:38:291:38 | access to parameter f |
| cflow.cs:296:5:296:25 | NegationInConstructor | cflow.cs:296:52:296:54 | {...} |
| cflow.cs:296:5:296:25 | NegationInConstructor | cflow.cs:296:5:296:25 | call to constructor Object |
| cflow.cs:298:10:298:10 | M | cflow.cs:299:5:301:5 | {...} |

View File

@@ -0,0 +1,797 @@
| GuardsStressTest.cs:8:26:8:27 | access to field ch |
| GuardsStressTest.cs:9:4:9:5 | access to field ch |
| GuardsStressTest.cs:9:17:9:18 | access to field ch |
| GuardsStressTest.cs:10:4:10:5 | access to field ch |
| GuardsStressTest.cs:11:4:11:5 | access to field ch |
| GuardsStressTest.cs:11:17:11:18 | access to field ch |
| GuardsStressTest.cs:12:4:12:5 | access to field ch |
| GuardsStressTest.cs:13:4:13:5 | access to field ch |
| GuardsStressTest.cs:14:4:14:5 | access to field ch |
| GuardsStressTest.cs:15:4:15:5 | access to field ch |
| GuardsStressTest.cs:15:17:15:18 | access to field ch |
| GuardsStressTest.cs:16:4:16:5 | access to field ch |
| GuardsStressTest.cs:16:17:16:18 | access to field ch |
| GuardsStressTest.cs:17:4:17:5 | access to field ch |
| GuardsStressTest.cs:17:17:17:18 | access to field ch |
| GuardsStressTest.cs:18:4:18:5 | access to field ch |
| GuardsStressTest.cs:18:17:18:18 | access to field ch |
| GuardsStressTest.cs:19:4:19:5 | access to field ch |
| GuardsStressTest.cs:19:17:19:18 | access to field ch |
| GuardsStressTest.cs:20:4:20:5 | access to field ch |
| GuardsStressTest.cs:21:4:21:5 | access to field ch |
| GuardsStressTest.cs:22:4:22:5 | access to field ch |
| GuardsStressTest.cs:22:17:22:18 | access to field ch |
| GuardsStressTest.cs:23:4:23:5 | access to field ch |
| GuardsStressTest.cs:23:17:23:18 | access to field ch |
| GuardsStressTest.cs:24:4:24:5 | access to field ch |
| GuardsStressTest.cs:24:17:24:18 | access to field ch |
| GuardsStressTest.cs:25:4:25:5 | access to field ch |
| GuardsStressTest.cs:26:4:26:5 | access to field ch |
| GuardsStressTest.cs:26:17:26:18 | access to field ch |
| GuardsStressTest.cs:27:4:27:5 | access to field ch |
| GuardsStressTest.cs:28:4:28:5 | access to field ch |
| GuardsStressTest.cs:28:17:28:18 | access to field ch |
| GuardsStressTest.cs:29:4:29:5 | access to field ch |
| GuardsStressTest.cs:29:17:29:18 | access to field ch |
| GuardsStressTest.cs:30:4:30:5 | access to field ch |
| GuardsStressTest.cs:30:18:30:19 | access to field ch |
| GuardsStressTest.cs:31:4:31:5 | access to field ch |
| GuardsStressTest.cs:31:18:31:19 | access to field ch |
| GuardsStressTest.cs:32:4:32:5 | access to field ch |
| GuardsStressTest.cs:32:18:32:19 | access to field ch |
| GuardsStressTest.cs:33:4:33:5 | access to field ch |
| GuardsStressTest.cs:33:18:33:19 | access to field ch |
| GuardsStressTest.cs:34:4:34:5 | access to field ch |
| GuardsStressTest.cs:35:4:35:5 | access to field ch |
| GuardsStressTest.cs:35:18:35:19 | access to field ch |
| GuardsStressTest.cs:36:4:36:5 | access to field ch |
| GuardsStressTest.cs:36:18:36:19 | access to field ch |
| GuardsStressTest.cs:37:4:37:5 | access to field ch |
| GuardsStressTest.cs:38:4:38:5 | access to field ch |
| GuardsStressTest.cs:38:18:38:19 | access to field ch |
| GuardsStressTest.cs:39:4:39:5 | access to field ch |
| GuardsStressTest.cs:39:18:39:19 | access to field ch |
| GuardsStressTest.cs:40:4:40:5 | access to field ch |
| GuardsStressTest.cs:41:4:41:5 | access to field ch |
| GuardsStressTest.cs:41:18:41:19 | access to field ch |
| GuardsStressTest.cs:42:4:42:5 | access to field ch |
| GuardsStressTest.cs:42:18:42:19 | access to field ch |
| GuardsStressTest.cs:43:4:43:5 | access to field ch |
| GuardsStressTest.cs:43:18:43:19 | access to field ch |
| GuardsStressTest.cs:44:4:44:5 | access to field ch |
| GuardsStressTest.cs:44:18:44:19 | access to field ch |
| GuardsStressTest.cs:45:4:45:5 | access to field ch |
| GuardsStressTest.cs:45:18:45:19 | access to field ch |
| GuardsStressTest.cs:46:4:46:5 | access to field ch |
| GuardsStressTest.cs:46:18:46:19 | access to field ch |
| GuardsStressTest.cs:47:4:47:5 | access to field ch |
| GuardsStressTest.cs:47:18:47:19 | access to field ch |
| GuardsStressTest.cs:48:4:48:5 | access to field ch |
| GuardsStressTest.cs:48:18:48:19 | access to field ch |
| GuardsStressTest.cs:49:4:49:5 | access to field ch |
| GuardsStressTest.cs:50:4:50:5 | access to field ch |
| GuardsStressTest.cs:50:18:50:19 | access to field ch |
| GuardsStressTest.cs:51:4:51:5 | access to field ch |
| GuardsStressTest.cs:51:18:51:19 | access to field ch |
| GuardsStressTest.cs:52:4:52:5 | access to field ch |
| GuardsStressTest.cs:52:18:52:19 | access to field ch |
| GuardsStressTest.cs:53:4:53:5 | access to field ch |
| GuardsStressTest.cs:54:4:54:5 | access to field ch |
| GuardsStressTest.cs:54:18:54:19 | access to field ch |
| GuardsStressTest.cs:55:4:55:5 | access to field ch |
| GuardsStressTest.cs:55:18:55:19 | access to field ch |
| GuardsStressTest.cs:56:4:56:5 | access to field ch |
| GuardsStressTest.cs:57:4:57:5 | access to field ch |
| GuardsStressTest.cs:57:18:57:19 | access to field ch |
| GuardsStressTest.cs:58:4:58:5 | access to field ch |
| GuardsStressTest.cs:58:18:58:19 | access to field ch |
| GuardsStressTest.cs:59:4:59:5 | access to field ch |
| GuardsStressTest.cs:59:18:59:19 | access to field ch |
| GuardsStressTest.cs:60:4:60:5 | access to field ch |
| GuardsStressTest.cs:60:18:60:19 | access to field ch |
| GuardsStressTest.cs:61:4:61:5 | access to field ch |
| GuardsStressTest.cs:61:18:61:19 | access to field ch |
| GuardsStressTest.cs:62:4:62:5 | access to field ch |
| GuardsStressTest.cs:62:18:62:19 | access to field ch |
| GuardsStressTest.cs:63:4:63:5 | access to field ch |
| GuardsStressTest.cs:63:18:63:19 | access to field ch |
| GuardsStressTest.cs:64:4:64:5 | access to field ch |
| GuardsStressTest.cs:64:18:64:19 | access to field ch |
| GuardsStressTest.cs:65:4:65:5 | access to field ch |
| GuardsStressTest.cs:65:18:65:19 | access to field ch |
| GuardsStressTest.cs:66:4:66:5 | access to field ch |
| GuardsStressTest.cs:66:18:66:19 | access to field ch |
| GuardsStressTest.cs:67:4:67:5 | access to field ch |
| GuardsStressTest.cs:67:18:67:19 | access to field ch |
| GuardsStressTest.cs:68:4:68:5 | access to field ch |
| GuardsStressTest.cs:69:4:69:5 | access to field ch |
| GuardsStressTest.cs:69:18:69:19 | access to field ch |
| GuardsStressTest.cs:70:4:70:5 | access to field ch |
| GuardsStressTest.cs:70:18:70:19 | access to field ch |
| GuardsStressTest.cs:71:4:71:5 | access to field ch |
| GuardsStressTest.cs:71:18:71:19 | access to field ch |
| GuardsStressTest.cs:72:4:72:5 | access to field ch |
| GuardsStressTest.cs:72:18:72:19 | access to field ch |
| GuardsStressTest.cs:73:4:73:5 | access to field ch |
| GuardsStressTest.cs:74:4:74:5 | access to field ch |
| GuardsStressTest.cs:74:18:74:19 | access to field ch |
| GuardsStressTest.cs:75:4:75:5 | access to field ch |
| GuardsStressTest.cs:75:18:75:19 | access to field ch |
| GuardsStressTest.cs:76:4:76:5 | access to field ch |
| GuardsStressTest.cs:76:18:76:19 | access to field ch |
| GuardsStressTest.cs:77:4:77:5 | access to field ch |
| GuardsStressTest.cs:77:18:77:19 | access to field ch |
| GuardsStressTest.cs:78:4:78:5 | access to field ch |
| GuardsStressTest.cs:78:18:78:19 | access to field ch |
| GuardsStressTest.cs:79:4:79:5 | access to field ch |
| GuardsStressTest.cs:79:18:79:19 | access to field ch |
| GuardsStressTest.cs:80:4:80:5 | access to field ch |
| GuardsStressTest.cs:80:18:80:19 | access to field ch |
| GuardsStressTest.cs:81:4:81:5 | access to field ch |
| GuardsStressTest.cs:81:18:81:19 | access to field ch |
| GuardsStressTest.cs:82:4:82:5 | access to field ch |
| GuardsStressTest.cs:82:18:82:19 | access to field ch |
| GuardsStressTest.cs:83:4:83:5 | access to field ch |
| GuardsStressTest.cs:83:18:83:19 | access to field ch |
| GuardsStressTest.cs:84:4:84:5 | access to field ch |
| GuardsStressTest.cs:84:18:84:19 | access to field ch |
| GuardsStressTest.cs:85:4:85:5 | access to field ch |
| GuardsStressTest.cs:86:4:86:5 | access to field ch |
| GuardsStressTest.cs:86:18:86:19 | access to field ch |
| GuardsStressTest.cs:87:4:87:5 | access to field ch |
| GuardsStressTest.cs:87:18:87:19 | access to field ch |
| GuardsStressTest.cs:88:4:88:5 | access to field ch |
| GuardsStressTest.cs:88:18:88:19 | access to field ch |
| GuardsStressTest.cs:89:4:89:5 | access to field ch |
| GuardsStressTest.cs:90:4:90:5 | access to field ch |
| GuardsStressTest.cs:90:18:90:19 | access to field ch |
| GuardsStressTest.cs:91:4:91:5 | access to field ch |
| GuardsStressTest.cs:92:4:92:5 | access to field ch |
| GuardsStressTest.cs:92:18:92:19 | access to field ch |
| GuardsStressTest.cs:93:4:93:5 | access to field ch |
| GuardsStressTest.cs:93:18:93:19 | access to field ch |
| GuardsStressTest.cs:94:4:94:5 | access to field ch |
| GuardsStressTest.cs:94:18:94:19 | access to field ch |
| GuardsStressTest.cs:95:4:95:5 | access to field ch |
| GuardsStressTest.cs:95:18:95:19 | access to field ch |
| GuardsStressTest.cs:96:4:96:5 | access to field ch |
| GuardsStressTest.cs:96:18:96:19 | access to field ch |
| GuardsStressTest.cs:97:4:97:5 | access to field ch |
| GuardsStressTest.cs:97:18:97:19 | access to field ch |
| GuardsStressTest.cs:98:4:98:5 | access to field ch |
| GuardsStressTest.cs:98:18:98:19 | access to field ch |
| GuardsStressTest.cs:99:4:99:5 | access to field ch |
| GuardsStressTest.cs:99:18:99:19 | access to field ch |
| GuardsStressTest.cs:100:4:100:5 | access to field ch |
| GuardsStressTest.cs:100:18:100:19 | access to field ch |
| GuardsStressTest.cs:101:4:101:5 | access to field ch |
| GuardsStressTest.cs:101:18:101:19 | access to field ch |
| GuardsStressTest.cs:102:4:102:5 | access to field ch |
| GuardsStressTest.cs:102:18:102:19 | access to field ch |
| GuardsStressTest.cs:103:4:103:5 | access to field ch |
| GuardsStressTest.cs:104:4:104:5 | access to field ch |
| GuardsStressTest.cs:104:18:104:19 | access to field ch |
| GuardsStressTest.cs:105:4:105:5 | access to field ch |
| GuardsStressTest.cs:105:18:105:19 | access to field ch |
| GuardsStressTest.cs:106:4:106:5 | access to field ch |
| GuardsStressTest.cs:106:18:106:19 | access to field ch |
| GuardsStressTest.cs:107:4:107:5 | access to field ch |
| GuardsStressTest.cs:107:18:107:19 | access to field ch |
| GuardsStressTest.cs:108:4:108:5 | access to field ch |
| GuardsStressTest.cs:108:18:108:19 | access to field ch |
| GuardsStressTest.cs:109:4:109:5 | access to field ch |
| GuardsStressTest.cs:109:18:109:19 | access to field ch |
| GuardsStressTest.cs:110:4:110:5 | access to field ch |
| GuardsStressTest.cs:110:18:110:19 | access to field ch |
| GuardsStressTest.cs:111:4:111:5 | access to field ch |
| GuardsStressTest.cs:111:18:111:19 | access to field ch |
| GuardsStressTest.cs:112:4:112:5 | access to field ch |
| GuardsStressTest.cs:112:18:112:19 | access to field ch |
| GuardsStressTest.cs:113:4:113:5 | access to field ch |
| GuardsStressTest.cs:113:18:113:19 | access to field ch |
| GuardsStressTest.cs:114:4:114:5 | access to field ch |
| GuardsStressTest.cs:114:18:114:19 | access to field ch |
| GuardsStressTest.cs:115:4:115:5 | access to field ch |
| GuardsStressTest.cs:115:18:115:19 | access to field ch |
| GuardsStressTest.cs:116:4:116:5 | access to field ch |
| GuardsStressTest.cs:116:18:116:19 | access to field ch |
| GuardsStressTest.cs:117:4:117:5 | access to field ch |
| GuardsStressTest.cs:117:18:117:19 | access to field ch |
| GuardsStressTest.cs:118:4:118:5 | access to field ch |
| GuardsStressTest.cs:118:18:118:19 | access to field ch |
| GuardsStressTest.cs:119:4:119:5 | access to field ch |
| GuardsStressTest.cs:119:18:119:19 | access to field ch |
| GuardsStressTest.cs:120:4:120:5 | access to field ch |
| GuardsStressTest.cs:121:4:121:5 | access to field ch |
| GuardsStressTest.cs:121:18:121:19 | access to field ch |
| GuardsStressTest.cs:122:4:122:5 | access to field ch |
| GuardsStressTest.cs:122:18:122:19 | access to field ch |
| GuardsStressTest.cs:123:4:123:5 | access to field ch |
| GuardsStressTest.cs:123:18:123:19 | access to field ch |
| GuardsStressTest.cs:124:4:124:5 | access to field ch |
| GuardsStressTest.cs:124:18:124:19 | access to field ch |
| GuardsStressTest.cs:125:4:125:5 | access to field ch |
| GuardsStressTest.cs:125:18:125:19 | access to field ch |
| GuardsStressTest.cs:126:4:126:5 | access to field ch |
| GuardsStressTest.cs:127:4:127:5 | access to field ch |
| GuardsStressTest.cs:127:18:127:19 | access to field ch |
| GuardsStressTest.cs:128:4:128:5 | access to field ch |
| GuardsStressTest.cs:128:18:128:19 | access to field ch |
| GuardsStressTest.cs:129:4:129:5 | access to field ch |
| GuardsStressTest.cs:129:18:129:19 | access to field ch |
| GuardsStressTest.cs:130:4:130:5 | access to field ch |
| GuardsStressTest.cs:130:18:130:19 | access to field ch |
| GuardsStressTest.cs:131:4:131:5 | access to field ch |
| GuardsStressTest.cs:131:18:131:19 | access to field ch |
| GuardsStressTest.cs:132:4:132:5 | access to field ch |
| GuardsStressTest.cs:132:18:132:19 | access to field ch |
| GuardsStressTest.cs:133:4:133:5 | access to field ch |
| GuardsStressTest.cs:133:18:133:19 | access to field ch |
| GuardsStressTest.cs:134:4:134:5 | access to field ch |
| GuardsStressTest.cs:135:4:135:5 | access to field ch |
| GuardsStressTest.cs:136:4:136:5 | access to field ch |
| GuardsStressTest.cs:136:18:136:19 | access to field ch |
| GuardsStressTest.cs:137:4:137:5 | access to field ch |
| GuardsStressTest.cs:137:18:137:19 | access to field ch |
| GuardsStressTest.cs:138:4:138:5 | access to field ch |
| GuardsStressTest.cs:138:18:138:19 | access to field ch |
| GuardsStressTest.cs:139:4:139:5 | access to field ch |
| GuardsStressTest.cs:139:18:139:19 | access to field ch |
| GuardsStressTest.cs:140:4:140:5 | access to field ch |
| GuardsStressTest.cs:140:18:140:19 | access to field ch |
| GuardsStressTest.cs:141:4:141:5 | access to field ch |
| GuardsStressTest.cs:141:18:141:19 | access to field ch |
| GuardsStressTest.cs:142:4:142:5 | access to field ch |
| GuardsStressTest.cs:142:18:142:19 | access to field ch |
| GuardsStressTest.cs:143:4:143:5 | access to field ch |
| GuardsStressTest.cs:143:18:143:19 | access to field ch |
| GuardsStressTest.cs:144:4:144:5 | access to field ch |
| GuardsStressTest.cs:144:18:144:19 | access to field ch |
| GuardsStressTest.cs:145:4:145:5 | access to field ch |
| GuardsStressTest.cs:145:18:145:19 | access to field ch |
| GuardsStressTest.cs:146:4:146:5 | access to field ch |
| GuardsStressTest.cs:146:18:146:19 | access to field ch |
| GuardsStressTest.cs:147:4:147:5 | access to field ch |
| GuardsStressTest.cs:147:18:147:19 | access to field ch |
| GuardsStressTest.cs:148:4:148:5 | access to field ch |
| GuardsStressTest.cs:148:18:148:19 | access to field ch |
| GuardsStressTest.cs:149:4:149:5 | access to field ch |
| GuardsStressTest.cs:149:18:149:19 | access to field ch |
| GuardsStressTest.cs:150:4:150:5 | access to field ch |
| GuardsStressTest.cs:150:18:150:19 | access to field ch |
| GuardsStressTest.cs:151:4:151:5 | access to field ch |
| GuardsStressTest.cs:151:18:151:19 | access to field ch |
| GuardsStressTest.cs:152:4:152:5 | access to field ch |
| GuardsStressTest.cs:152:18:152:19 | access to field ch |
| GuardsStressTest.cs:153:4:153:5 | access to field ch |
| GuardsStressTest.cs:153:18:153:19 | access to field ch |
| GuardsStressTest.cs:154:4:154:5 | access to field ch |
| GuardsStressTest.cs:154:18:154:19 | access to field ch |
| GuardsStressTest.cs:155:4:155:5 | access to field ch |
| GuardsStressTest.cs:155:18:155:19 | access to field ch |
| GuardsStressTest.cs:156:4:156:5 | access to field ch |
| GuardsStressTest.cs:156:18:156:19 | access to field ch |
| GuardsStressTest.cs:157:4:157:5 | access to field ch |
| GuardsStressTest.cs:157:18:157:19 | access to field ch |
| GuardsStressTest.cs:158:4:158:5 | access to field ch |
| GuardsStressTest.cs:158:18:158:19 | access to field ch |
| GuardsStressTest.cs:159:4:159:5 | access to field ch |
| GuardsStressTest.cs:159:18:159:19 | access to field ch |
| GuardsStressTest.cs:160:4:160:5 | access to field ch |
| GuardsStressTest.cs:161:4:161:5 | access to field ch |
| GuardsStressTest.cs:161:18:161:19 | access to field ch |
| GuardsStressTest.cs:162:4:162:5 | access to field ch |
| GuardsStressTest.cs:162:18:162:19 | access to field ch |
| GuardsStressTest.cs:163:4:163:5 | access to field ch |
| GuardsStressTest.cs:163:18:163:19 | access to field ch |
| GuardsStressTest.cs:164:4:164:5 | access to field ch |
| GuardsStressTest.cs:164:18:164:19 | access to field ch |
| GuardsStressTest.cs:165:4:165:5 | access to field ch |
| GuardsStressTest.cs:165:18:165:19 | access to field ch |
| GuardsStressTest.cs:166:4:166:5 | access to field ch |
| GuardsStressTest.cs:166:18:166:19 | access to field ch |
| GuardsStressTest.cs:167:4:167:5 | access to field ch |
| GuardsStressTest.cs:167:18:167:19 | access to field ch |
| GuardsStressTest.cs:168:4:168:5 | access to field ch |
| GuardsStressTest.cs:168:18:168:19 | access to field ch |
| GuardsStressTest.cs:169:4:169:5 | access to field ch |
| GuardsStressTest.cs:169:18:169:19 | access to field ch |
| GuardsStressTest.cs:170:4:170:5 | access to field ch |
| GuardsStressTest.cs:170:18:170:19 | access to field ch |
| GuardsStressTest.cs:171:4:171:5 | access to field ch |
| GuardsStressTest.cs:172:4:172:5 | access to field ch |
| GuardsStressTest.cs:172:18:172:19 | access to field ch |
| GuardsStressTest.cs:173:4:173:5 | access to field ch |
| GuardsStressTest.cs:173:18:173:19 | access to field ch |
| GuardsStressTest.cs:174:4:174:5 | access to field ch |
| GuardsStressTest.cs:174:18:174:19 | access to field ch |
| GuardsStressTest.cs:175:4:175:5 | access to field ch |
| GuardsStressTest.cs:175:18:175:19 | access to field ch |
| GuardsStressTest.cs:176:4:176:5 | access to field ch |
| GuardsStressTest.cs:176:18:176:19 | access to field ch |
| GuardsStressTest.cs:177:4:177:5 | access to field ch |
| GuardsStressTest.cs:177:18:177:19 | access to field ch |
| GuardsStressTest.cs:178:4:178:5 | access to field ch |
| GuardsStressTest.cs:178:18:178:19 | access to field ch |
| GuardsStressTest.cs:179:4:179:5 | access to field ch |
| GuardsStressTest.cs:180:4:180:5 | access to field ch |
| GuardsStressTest.cs:180:18:180:19 | access to field ch |
| GuardsStressTest.cs:181:4:181:5 | access to field ch |
| GuardsStressTest.cs:182:4:182:5 | access to field ch |
| GuardsStressTest.cs:182:18:182:19 | access to field ch |
| GuardsStressTest.cs:183:4:183:5 | access to field ch |
| GuardsStressTest.cs:184:4:184:5 | access to field ch |
| GuardsStressTest.cs:184:18:184:19 | access to field ch |
| GuardsStressTest.cs:185:4:185:5 | access to field ch |
| GuardsStressTest.cs:185:18:185:19 | access to field ch |
| GuardsStressTest.cs:186:4:186:5 | access to field ch |
| GuardsStressTest.cs:186:18:186:19 | access to field ch |
| GuardsStressTest.cs:187:4:187:5 | access to field ch |
| GuardsStressTest.cs:187:18:187:19 | access to field ch |
| GuardsStressTest.cs:188:4:188:5 | access to field ch |
| GuardsStressTest.cs:188:18:188:19 | access to field ch |
| GuardsStressTest.cs:189:4:189:5 | access to field ch |
| GuardsStressTest.cs:189:18:189:19 | access to field ch |
| GuardsStressTest.cs:190:4:190:5 | access to field ch |
| GuardsStressTest.cs:191:4:191:5 | access to field ch |
| GuardsStressTest.cs:191:18:191:19 | access to field ch |
| GuardsStressTest.cs:192:4:192:5 | access to field ch |
| GuardsStressTest.cs:193:4:193:5 | access to field ch |
| GuardsStressTest.cs:194:4:194:5 | access to field ch |
| GuardsStressTest.cs:194:18:194:19 | access to field ch |
| GuardsStressTest.cs:195:4:195:5 | access to field ch |
| GuardsStressTest.cs:195:18:195:19 | access to field ch |
| GuardsStressTest.cs:196:4:196:5 | access to field ch |
| GuardsStressTest.cs:196:18:196:19 | access to field ch |
| GuardsStressTest.cs:197:4:197:5 | access to field ch |
| GuardsStressTest.cs:198:4:198:5 | access to field ch |
| GuardsStressTest.cs:199:4:199:5 | access to field ch |
| GuardsStressTest.cs:199:18:199:19 | access to field ch |
| GuardsStressTest.cs:200:4:200:5 | access to field ch |
| GuardsStressTest.cs:200:18:200:19 | access to field ch |
| GuardsStressTest.cs:201:4:201:5 | access to field ch |
| GuardsStressTest.cs:201:18:201:19 | access to field ch |
| GuardsStressTest.cs:202:4:202:5 | access to field ch |
| GuardsStressTest.cs:202:18:202:19 | access to field ch |
| GuardsStressTest.cs:203:4:203:5 | access to field ch |
| GuardsStressTest.cs:204:4:204:5 | access to field ch |
| GuardsStressTest.cs:204:18:204:19 | access to field ch |
| GuardsStressTest.cs:205:4:205:5 | access to field ch |
| GuardsStressTest.cs:205:18:205:19 | access to field ch |
| GuardsStressTest.cs:206:4:206:5 | access to field ch |
| GuardsStressTest.cs:206:18:206:19 | access to field ch |
| GuardsStressTest.cs:207:4:207:5 | access to field ch |
| GuardsStressTest.cs:208:4:208:5 | access to field ch |
| GuardsStressTest.cs:208:18:208:19 | access to field ch |
| GuardsStressTest.cs:209:4:209:5 | access to field ch |
| GuardsStressTest.cs:209:18:209:19 | access to field ch |
| GuardsStressTest.cs:210:4:210:5 | access to field ch |
| GuardsStressTest.cs:211:4:211:5 | access to field ch |
| GuardsStressTest.cs:212:4:212:5 | access to field ch |
| GuardsStressTest.cs:213:4:213:5 | access to field ch |
| GuardsStressTest.cs:213:18:213:19 | access to field ch |
| GuardsStressTest.cs:214:4:214:5 | access to field ch |
| GuardsStressTest.cs:214:18:214:19 | access to field ch |
| GuardsStressTest.cs:215:4:215:5 | access to field ch |
| GuardsStressTest.cs:215:18:215:19 | access to field ch |
| GuardsStressTest.cs:216:4:216:5 | access to field ch |
| GuardsStressTest.cs:216:18:216:19 | access to field ch |
| GuardsStressTest.cs:217:4:217:5 | access to field ch |
| GuardsStressTest.cs:217:18:217:19 | access to field ch |
| GuardsStressTest.cs:218:4:218:5 | access to field ch |
| GuardsStressTest.cs:219:4:219:5 | access to field ch |
| GuardsStressTest.cs:219:18:219:19 | access to field ch |
| GuardsStressTest.cs:220:4:220:5 | access to field ch |
| GuardsStressTest.cs:220:18:220:19 | access to field ch |
| GuardsStressTest.cs:221:4:221:5 | access to field ch |
| GuardsStressTest.cs:221:18:221:19 | access to field ch |
| GuardsStressTest.cs:222:4:222:5 | access to field ch |
| GuardsStressTest.cs:223:4:223:5 | access to field ch |
| GuardsStressTest.cs:224:4:224:5 | access to field ch |
| GuardsStressTest.cs:224:18:224:19 | access to field ch |
| GuardsStressTest.cs:225:4:225:5 | access to field ch |
| GuardsStressTest.cs:225:18:225:19 | access to field ch |
| GuardsStressTest.cs:226:4:226:5 | access to field ch |
| GuardsStressTest.cs:226:18:226:19 | access to field ch |
| GuardsStressTest.cs:227:4:227:5 | access to field ch |
| GuardsStressTest.cs:227:18:227:19 | access to field ch |
| GuardsStressTest.cs:228:4:228:5 | access to field ch |
| GuardsStressTest.cs:229:4:229:5 | access to field ch |
| GuardsStressTest.cs:229:18:229:19 | access to field ch |
| GuardsStressTest.cs:230:4:230:5 | access to field ch |
| GuardsStressTest.cs:230:18:230:19 | access to field ch |
| GuardsStressTest.cs:231:4:231:5 | access to field ch |
| GuardsStressTest.cs:231:18:231:19 | access to field ch |
| GuardsStressTest.cs:232:4:232:5 | access to field ch |
| GuardsStressTest.cs:232:18:232:19 | access to field ch |
| GuardsStressTest.cs:233:4:233:5 | access to field ch |
| GuardsStressTest.cs:233:18:233:19 | access to field ch |
| GuardsStressTest.cs:234:4:234:5 | access to field ch |
| GuardsStressTest.cs:234:18:234:19 | access to field ch |
| GuardsStressTest.cs:235:4:235:5 | access to field ch |
| GuardsStressTest.cs:236:4:236:5 | access to field ch |
| GuardsStressTest.cs:236:18:236:19 | access to field ch |
| GuardsStressTest.cs:237:4:237:5 | access to field ch |
| GuardsStressTest.cs:237:18:237:19 | access to field ch |
| GuardsStressTest.cs:238:4:238:5 | access to field ch |
| GuardsStressTest.cs:238:18:238:19 | access to field ch |
| GuardsStressTest.cs:239:4:239:5 | access to field ch |
| GuardsStressTest.cs:239:18:239:19 | access to field ch |
| GuardsStressTest.cs:240:4:240:5 | access to field ch |
| GuardsStressTest.cs:240:18:240:19 | access to field ch |
| GuardsStressTest.cs:241:4:241:5 | access to field ch |
| GuardsStressTest.cs:241:18:241:19 | access to field ch |
| GuardsStressTest.cs:242:4:242:5 | access to field ch |
| GuardsStressTest.cs:242:18:242:19 | access to field ch |
| GuardsStressTest.cs:243:4:243:5 | access to field ch |
| GuardsStressTest.cs:243:18:243:19 | access to field ch |
| GuardsStressTest.cs:244:4:244:5 | access to field ch |
| GuardsStressTest.cs:244:18:244:19 | access to field ch |
| GuardsStressTest.cs:245:4:245:5 | access to field ch |
| GuardsStressTest.cs:245:18:245:19 | access to field ch |
| GuardsStressTest.cs:246:4:246:5 | access to field ch |
| GuardsStressTest.cs:246:18:246:19 | access to field ch |
| GuardsStressTest.cs:247:4:247:5 | access to field ch |
| GuardsStressTest.cs:247:18:247:19 | access to field ch |
| GuardsStressTest.cs:248:4:248:5 | access to field ch |
| GuardsStressTest.cs:248:18:248:19 | access to field ch |
| GuardsStressTest.cs:249:4:249:5 | access to field ch |
| GuardsStressTest.cs:249:18:249:19 | access to field ch |
| GuardsStressTest.cs:250:4:250:5 | access to field ch |
| GuardsStressTest.cs:250:18:250:19 | access to field ch |
| GuardsStressTest.cs:251:4:251:5 | access to field ch |
| GuardsStressTest.cs:251:18:251:19 | access to field ch |
| GuardsStressTest.cs:252:4:252:5 | access to field ch |
| GuardsStressTest.cs:252:18:252:19 | access to field ch |
| GuardsStressTest.cs:253:4:253:5 | access to field ch |
| GuardsStressTest.cs:253:18:253:19 | access to field ch |
| GuardsStressTest.cs:254:4:254:5 | access to field ch |
| GuardsStressTest.cs:254:18:254:19 | access to field ch |
| GuardsStressTest.cs:255:4:255:5 | access to field ch |
| GuardsStressTest.cs:255:18:255:19 | access to field ch |
| GuardsStressTest.cs:256:4:256:5 | access to field ch |
| GuardsStressTest.cs:256:18:256:19 | access to field ch |
| GuardsStressTest.cs:257:4:257:5 | access to field ch |
| GuardsStressTest.cs:258:4:258:5 | access to field ch |
| GuardsStressTest.cs:258:18:258:19 | access to field ch |
| GuardsStressTest.cs:259:4:259:5 | access to field ch |
| GuardsStressTest.cs:259:18:259:19 | access to field ch |
| GuardsStressTest.cs:260:4:260:5 | access to field ch |
| GuardsStressTest.cs:260:18:260:19 | access to field ch |
| GuardsStressTest.cs:261:4:261:5 | access to field ch |
| GuardsStressTest.cs:261:18:261:19 | access to field ch |
| GuardsStressTest.cs:262:4:262:5 | access to field ch |
| GuardsStressTest.cs:262:18:262:19 | access to field ch |
| GuardsStressTest.cs:263:4:263:5 | access to field ch |
| GuardsStressTest.cs:263:18:263:19 | access to field ch |
| GuardsStressTest.cs:264:4:264:5 | access to field ch |
| GuardsStressTest.cs:264:18:264:19 | access to field ch |
| GuardsStressTest.cs:265:4:265:5 | access to field ch |
| GuardsStressTest.cs:265:18:265:19 | access to field ch |
| GuardsStressTest.cs:266:4:266:5 | access to field ch |
| GuardsStressTest.cs:266:18:266:19 | access to field ch |
| GuardsStressTest.cs:267:4:267:5 | access to field ch |
| GuardsStressTest.cs:267:18:267:19 | access to field ch |
| GuardsStressTest.cs:268:4:268:5 | access to field ch |
| GuardsStressTest.cs:268:18:268:19 | access to field ch |
| GuardsStressTest.cs:269:4:269:5 | access to field ch |
| GuardsStressTest.cs:269:18:269:19 | access to field ch |
| GuardsStressTest.cs:270:4:270:5 | access to field ch |
| GuardsStressTest.cs:270:18:270:19 | access to field ch |
| GuardsStressTest.cs:271:4:271:5 | access to field ch |
| GuardsStressTest.cs:271:18:271:19 | access to field ch |
| GuardsStressTest.cs:272:4:272:5 | access to field ch |
| GuardsStressTest.cs:272:18:272:19 | access to field ch |
| GuardsStressTest.cs:273:4:273:5 | access to field ch |
| GuardsStressTest.cs:273:18:273:19 | access to field ch |
| GuardsStressTest.cs:274:4:274:5 | access to field ch |
| GuardsStressTest.cs:274:18:274:19 | access to field ch |
| GuardsStressTest.cs:275:4:275:5 | access to field ch |
| GuardsStressTest.cs:275:18:275:19 | access to field ch |
| GuardsStressTest.cs:276:4:276:5 | access to field ch |
| GuardsStressTest.cs:276:18:276:19 | access to field ch |
| GuardsStressTest.cs:277:4:277:5 | access to field ch |
| GuardsStressTest.cs:277:18:277:19 | access to field ch |
| GuardsStressTest.cs:278:4:278:5 | access to field ch |
| GuardsStressTest.cs:279:4:279:5 | access to field ch |
| GuardsStressTest.cs:279:18:279:19 | access to field ch |
| GuardsStressTest.cs:280:4:280:5 | access to field ch |
| GuardsStressTest.cs:280:18:280:19 | access to field ch |
| GuardsStressTest.cs:281:4:281:5 | access to field ch |
| GuardsStressTest.cs:281:18:281:19 | access to field ch |
| GuardsStressTest.cs:282:4:282:5 | access to field ch |
| GuardsStressTest.cs:282:18:282:19 | access to field ch |
| GuardsStressTest.cs:283:4:283:5 | access to field ch |
| GuardsStressTest.cs:283:18:283:19 | access to field ch |
| GuardsStressTest.cs:284:4:284:5 | access to field ch |
| GuardsStressTest.cs:284:18:284:19 | access to field ch |
| GuardsStressTest.cs:285:4:285:5 | access to field ch |
| GuardsStressTest.cs:285:18:285:19 | access to field ch |
| GuardsStressTest.cs:286:4:286:5 | access to field ch |
| GuardsStressTest.cs:286:18:286:19 | access to field ch |
| GuardsStressTest.cs:287:4:287:5 | access to field ch |
| GuardsStressTest.cs:287:18:287:19 | access to field ch |
| GuardsStressTest.cs:288:4:288:5 | access to field ch |
| GuardsStressTest.cs:288:18:288:19 | access to field ch |
| GuardsStressTest.cs:289:4:289:5 | access to field ch |
| GuardsStressTest.cs:289:18:289:19 | access to field ch |
| GuardsStressTest.cs:290:4:290:5 | access to field ch |
| GuardsStressTest.cs:290:18:290:19 | access to field ch |
| GuardsStressTest.cs:291:4:291:5 | access to field ch |
| GuardsStressTest.cs:291:18:291:19 | access to field ch |
| GuardsStressTest.cs:292:4:292:5 | access to field ch |
| GuardsStressTest.cs:292:18:292:19 | access to field ch |
| GuardsStressTest.cs:293:4:293:5 | access to field ch |
| GuardsStressTest.cs:293:18:293:19 | access to field ch |
| GuardsStressTest.cs:294:4:294:5 | access to field ch |
| GuardsStressTest.cs:295:4:295:5 | access to field ch |
| GuardsStressTest.cs:296:4:296:5 | access to field ch |
| GuardsStressTest.cs:297:4:297:5 | access to field ch |
| GuardsStressTest.cs:297:18:297:19 | access to field ch |
| GuardsStressTest.cs:298:4:298:5 | access to field ch |
| GuardsStressTest.cs:298:18:298:19 | access to field ch |
| GuardsStressTest.cs:299:4:299:5 | access to field ch |
| GuardsStressTest.cs:299:18:299:19 | access to field ch |
| GuardsStressTest.cs:300:4:300:5 | access to field ch |
| GuardsStressTest.cs:301:4:301:5 | access to field ch |
| GuardsStressTest.cs:301:18:301:19 | access to field ch |
| GuardsStressTest.cs:302:4:302:5 | access to field ch |
| GuardsStressTest.cs:302:18:302:19 | access to field ch |
| GuardsStressTest.cs:303:4:303:5 | access to field ch |
| GuardsStressTest.cs:303:18:303:19 | access to field ch |
| GuardsStressTest.cs:304:4:304:5 | access to field ch |
| GuardsStressTest.cs:304:18:304:19 | access to field ch |
| GuardsStressTest.cs:305:4:305:5 | access to field ch |
| GuardsStressTest.cs:305:18:305:19 | access to field ch |
| GuardsStressTest.cs:306:4:306:5 | access to field ch |
| GuardsStressTest.cs:306:18:306:19 | access to field ch |
| GuardsStressTest.cs:307:4:307:5 | access to field ch |
| GuardsStressTest.cs:307:18:307:19 | access to field ch |
| GuardsStressTest.cs:308:4:308:5 | access to field ch |
| GuardsStressTest.cs:308:18:308:19 | access to field ch |
| GuardsStressTest.cs:309:4:309:5 | access to field ch |
| GuardsStressTest.cs:309:18:309:19 | access to field ch |
| GuardsStressTest.cs:310:4:310:5 | access to field ch |
| GuardsStressTest.cs:311:4:311:5 | access to field ch |
| GuardsStressTest.cs:312:4:312:5 | access to field ch |
| GuardsStressTest.cs:313:4:313:5 | access to field ch |
| GuardsStressTest.cs:313:18:313:19 | access to field ch |
| GuardsStressTest.cs:314:4:314:5 | access to field ch |
| GuardsStressTest.cs:314:18:314:19 | access to field ch |
| GuardsStressTest.cs:315:4:315:5 | access to field ch |
| GuardsStressTest.cs:316:4:316:5 | access to field ch |
| GuardsStressTest.cs:316:18:316:19 | access to field ch |
| GuardsStressTest.cs:317:4:317:5 | access to field ch |
| GuardsStressTest.cs:318:4:318:5 | access to field ch |
| GuardsStressTest.cs:319:4:319:5 | access to field ch |
| GuardsStressTest.cs:319:18:319:19 | access to field ch |
| GuardsStressTest.cs:320:4:320:5 | access to field ch |
| GuardsStressTest.cs:321:4:321:5 | access to field ch |
| GuardsStressTest.cs:321:18:321:19 | access to field ch |
| GuardsStressTest.cs:322:4:322:5 | access to field ch |
| GuardsStressTest.cs:323:4:323:5 | access to field ch |
| GuardsStressTest.cs:324:4:324:5 | access to field ch |
| GuardsStressTest.cs:325:4:325:5 | access to field ch |
| GuardsStressTest.cs:325:18:325:19 | access to field ch |
| GuardsStressTest.cs:326:4:326:5 | access to field ch |
| GuardsStressTest.cs:326:18:326:19 | access to field ch |
| GuardsStressTest.cs:327:4:327:5 | access to field ch |
| GuardsStressTest.cs:327:18:327:19 | access to field ch |
| GuardsStressTest.cs:328:4:328:5 | access to field ch |
| GuardsStressTest.cs:328:18:328:19 | access to field ch |
| GuardsStressTest.cs:329:4:329:5 | access to field ch |
| GuardsStressTest.cs:330:4:330:5 | access to field ch |
| GuardsStressTest.cs:330:18:330:19 | access to field ch |
| GuardsStressTest.cs:331:4:331:5 | access to field ch |
| GuardsStressTest.cs:331:19:331:20 | access to field ch |
| GuardsStressTest.cs:332:4:332:5 | access to field ch |
| GuardsStressTest.cs:332:19:332:20 | access to field ch |
| GuardsStressTest.cs:333:4:333:5 | access to field ch |
| GuardsStressTest.cs:333:19:333:20 | access to field ch |
| GuardsStressTest.cs:334:4:334:5 | access to field ch |
| GuardsStressTest.cs:334:19:334:20 | access to field ch |
| GuardsStressTest.cs:335:4:335:5 | access to field ch |
| GuardsStressTest.cs:335:19:335:20 | access to field ch |
| GuardsStressTest.cs:336:4:336:5 | access to field ch |
| GuardsStressTest.cs:337:4:337:5 | access to field ch |
| GuardsStressTest.cs:338:4:338:5 | access to field ch |
| GuardsStressTest.cs:338:19:338:20 | access to field ch |
| GuardsStressTest.cs:339:4:339:5 | access to field ch |
| GuardsStressTest.cs:340:4:340:5 | access to field ch |
| GuardsStressTest.cs:340:19:340:20 | access to field ch |
| GuardsStressTest.cs:341:4:341:5 | access to field ch |
| GuardsStressTest.cs:341:19:341:20 | access to field ch |
| GuardsStressTest.cs:342:4:342:5 | access to field ch |
| GuardsStressTest.cs:342:19:342:20 | access to field ch |
| GuardsStressTest.cs:343:4:343:5 | access to field ch |
| GuardsStressTest.cs:343:19:343:20 | access to field ch |
| GuardsStressTest.cs:344:4:344:5 | access to field ch |
| GuardsStressTest.cs:344:19:344:20 | access to field ch |
| GuardsStressTest.cs:345:4:345:5 | access to field ch |
| GuardsStressTest.cs:345:19:345:20 | access to field ch |
| GuardsStressTest.cs:346:4:346:5 | access to field ch |
| GuardsStressTest.cs:346:19:346:20 | access to field ch |
| GuardsStressTest.cs:347:4:347:5 | access to field ch |
| GuardsStressTest.cs:347:19:347:20 | access to field ch |
| GuardsStressTest.cs:348:4:348:5 | access to field ch |
| GuardsStressTest.cs:348:19:348:20 | access to field ch |
| GuardsStressTest.cs:349:4:349:5 | access to field ch |
| GuardsStressTest.cs:349:19:349:20 | access to field ch |
| GuardsStressTest.cs:350:4:350:5 | access to field ch |
| GuardsStressTest.cs:351:4:351:5 | access to field ch |
| GuardsStressTest.cs:351:19:351:20 | access to field ch |
| GuardsStressTest.cs:352:4:352:5 | access to field ch |
| GuardsStressTest.cs:352:19:352:20 | access to field ch |
| GuardsStressTest.cs:353:4:353:5 | access to field ch |
| GuardsStressTest.cs:353:19:353:20 | access to field ch |
| GuardsStressTest.cs:354:4:354:5 | access to field ch |
| GuardsStressTest.cs:354:19:354:20 | access to field ch |
| GuardsStressTest.cs:355:4:355:5 | access to field ch |
| GuardsStressTest.cs:355:19:355:20 | access to field ch |
| GuardsStressTest.cs:356:4:356:5 | access to field ch |
| GuardsStressTest.cs:356:19:356:20 | access to field ch |
| GuardsStressTest.cs:357:4:357:5 | access to field ch |
| GuardsStressTest.cs:357:19:357:20 | access to field ch |
| GuardsStressTest.cs:358:4:358:5 | access to field ch |
| GuardsStressTest.cs:358:19:358:20 | access to field ch |
| GuardsStressTest.cs:359:4:359:5 | access to field ch |
| GuardsStressTest.cs:359:19:359:20 | access to field ch |
| GuardsStressTest.cs:360:4:360:5 | access to field ch |
| GuardsStressTest.cs:360:19:360:20 | access to field ch |
| GuardsStressTest.cs:361:4:361:5 | access to field ch |
| GuardsStressTest.cs:361:19:361:20 | access to field ch |
| GuardsStressTest.cs:362:4:362:5 | access to field ch |
| GuardsStressTest.cs:362:19:362:20 | access to field ch |
| GuardsStressTest.cs:363:4:363:5 | access to field ch |
| GuardsStressTest.cs:363:19:363:20 | access to field ch |
| GuardsStressTest.cs:364:4:364:5 | access to field ch |
| GuardsStressTest.cs:364:19:364:20 | access to field ch |
| GuardsStressTest.cs:365:4:365:5 | access to field ch |
| GuardsStressTest.cs:365:19:365:20 | access to field ch |
| GuardsStressTest.cs:366:4:366:5 | access to field ch |
| GuardsStressTest.cs:366:19:366:20 | access to field ch |
| GuardsStressTest.cs:367:4:367:5 | access to field ch |
| GuardsStressTest.cs:367:19:367:20 | access to field ch |
| GuardsStressTest.cs:368:4:368:5 | access to field ch |
| GuardsStressTest.cs:368:19:368:20 | access to field ch |
| GuardsStressTest.cs:369:4:369:5 | access to field ch |
| GuardsStressTest.cs:369:19:369:20 | access to field ch |
| GuardsStressTest.cs:370:4:370:5 | access to field ch |
| GuardsStressTest.cs:370:19:370:20 | access to field ch |
| GuardsStressTest.cs:371:4:371:5 | access to field ch |
| GuardsStressTest.cs:371:19:371:20 | access to field ch |
| GuardsStressTest.cs:372:4:372:5 | access to field ch |
| GuardsStressTest.cs:372:19:372:20 | access to field ch |
| GuardsStressTest.cs:373:4:373:5 | access to field ch |
| GuardsStressTest.cs:373:19:373:20 | access to field ch |
| GuardsStressTest.cs:374:4:374:5 | access to field ch |
| GuardsStressTest.cs:374:19:374:20 | access to field ch |
| GuardsStressTest.cs:375:4:375:5 | access to field ch |
| GuardsStressTest.cs:375:19:375:20 | access to field ch |
| GuardsStressTest.cs:376:4:376:5 | access to field ch |
| GuardsStressTest.cs:376:19:376:20 | access to field ch |
| GuardsStressTest.cs:377:4:377:5 | access to field ch |
| GuardsStressTest.cs:377:19:377:20 | access to field ch |
| GuardsStressTest.cs:378:4:378:5 | access to field ch |
| GuardsStressTest.cs:378:19:378:20 | access to field ch |
| GuardsStressTest.cs:379:4:379:5 | access to field ch |
| GuardsStressTest.cs:379:19:379:20 | access to field ch |
| GuardsStressTest.cs:380:4:380:5 | access to field ch |
| GuardsStressTest.cs:380:19:380:20 | access to field ch |
| GuardsStressTest.cs:381:4:381:5 | access to field ch |
| GuardsStressTest.cs:381:19:381:20 | access to field ch |
| GuardsStressTest.cs:382:4:382:5 | access to field ch |
| GuardsStressTest.cs:382:19:382:20 | access to field ch |
| GuardsStressTest.cs:383:4:383:5 | access to field ch |
| GuardsStressTest.cs:383:19:383:20 | access to field ch |
| GuardsStressTest.cs:384:4:384:5 | access to field ch |
| GuardsStressTest.cs:385:4:385:5 | access to field ch |
| GuardsStressTest.cs:385:19:385:20 | access to field ch |
| GuardsStressTest.cs:386:4:386:5 | access to field ch |
| GuardsStressTest.cs:386:19:386:20 | access to field ch |
| GuardsStressTest.cs:387:4:387:5 | access to field ch |
| GuardsStressTest.cs:387:19:387:20 | access to field ch |
| GuardsStressTest.cs:388:4:388:5 | access to field ch |
| GuardsStressTest.cs:388:19:388:20 | access to field ch |
| GuardsStressTest.cs:389:4:389:5 | access to field ch |
| GuardsStressTest.cs:389:19:389:20 | access to field ch |
| GuardsStressTest.cs:390:4:390:5 | access to field ch |
| GuardsStressTest.cs:390:19:390:20 | access to field ch |
| GuardsStressTest.cs:391:4:391:5 | access to field ch |
| GuardsStressTest.cs:391:19:391:20 | access to field ch |
| GuardsStressTest.cs:392:4:392:5 | access to field ch |
| GuardsStressTest.cs:392:19:392:20 | access to field ch |
| GuardsStressTest.cs:393:4:393:5 | access to field ch |
| GuardsStressTest.cs:393:19:393:20 | access to field ch |
| GuardsStressTest.cs:394:4:394:5 | access to field ch |
| GuardsStressTest.cs:394:19:394:20 | access to field ch |
| GuardsStressTest.cs:395:4:395:5 | access to field ch |
| GuardsStressTest.cs:395:19:395:20 | access to field ch |
| GuardsStressTest.cs:396:4:396:5 | access to field ch |
| GuardsStressTest.cs:396:19:396:20 | access to field ch |
| GuardsStressTest.cs:397:4:397:5 | access to field ch |
| GuardsStressTest.cs:397:19:397:20 | access to field ch |
| GuardsStressTest.cs:398:4:398:5 | access to field ch |
| GuardsStressTest.cs:398:19:398:20 | access to field ch |
| GuardsStressTest.cs:399:4:399:5 | access to field ch |
| GuardsStressTest.cs:399:19:399:20 | access to field ch |
| GuardsStressTest.cs:400:4:400:5 | access to field ch |
| GuardsStressTest.cs:400:19:400:20 | access to field ch |
| GuardsStressTest.cs:401:4:401:5 | access to field ch |
| GuardsStressTest.cs:401:19:401:20 | access to field ch |
| GuardsStressTest.cs:402:4:402:5 | access to field ch |
| GuardsStressTest.cs:402:19:402:20 | access to field ch |
| GuardsStressTest.cs:403:4:403:5 | access to field ch |
| GuardsStressTest.cs:403:19:403:20 | access to field ch |
| GuardsStressTest.cs:404:4:404:5 | access to field ch |
| GuardsStressTest.cs:404:19:404:20 | access to field ch |
| GuardsStressTest.cs:405:4:405:5 | access to field ch |
| GuardsStressTest.cs:405:19:405:20 | access to field ch |
| GuardsStressTest.cs:406:4:406:5 | access to field ch |
| GuardsStressTest.cs:406:19:406:20 | access to field ch |
| GuardsStressTest.cs:407:4:407:5 | access to field ch |
| GuardsStressTest.cs:407:19:407:20 | access to field ch |
| GuardsStressTest.cs:408:4:408:5 | access to field ch |
| GuardsStressTest.cs:408:19:408:20 | access to field ch |
| GuardsStressTest.cs:409:4:409:5 | access to field ch |
| GuardsStressTest.cs:409:19:409:20 | access to field ch |
| GuardsStressTest.cs:410:4:410:5 | access to field ch |
| GuardsStressTest.cs:410:19:410:20 | access to field ch |
| GuardsStressTest.cs:411:4:411:5 | access to field ch |
| GuardsStressTest.cs:411:19:411:20 | access to field ch |
| GuardsStressTest.cs:412:4:412:5 | access to field ch |
| GuardsStressTest.cs:412:19:412:20 | access to field ch |
| GuardsStressTest.cs:413:4:413:5 | access to field ch |
| GuardsStressTest.cs:413:19:413:20 | access to field ch |
| GuardsStressTest.cs:414:4:414:5 | access to field ch |
| GuardsStressTest.cs:414:19:414:20 | access to field ch |
| GuardsStressTest.cs:415:4:415:5 | access to field ch |
| GuardsStressTest.cs:415:19:415:20 | access to field ch |
| GuardsStressTest.cs:416:4:416:5 | access to field ch |
| GuardsStressTest.cs:416:19:416:20 | access to field ch |
| GuardsStressTest.cs:417:4:417:5 | access to field ch |
| GuardsStressTest.cs:418:4:418:5 | access to field ch |
| GuardsStressTest.cs:418:19:418:20 | access to field ch |
| GuardsStressTest.cs:419:4:419:5 | access to field ch |
| GuardsStressTest.cs:419:19:419:20 | access to field ch |
| GuardsStressTest.cs:420:4:420:5 | access to field ch |
| GuardsStressTest.cs:420:19:420:20 | access to field ch |
| GuardsStressTest.cs:421:4:421:5 | access to field ch |
| GuardsStressTest.cs:421:19:421:20 | access to field ch |
| GuardsStressTest.cs:422:4:422:5 | access to field ch |
| GuardsStressTest.cs:422:19:422:20 | access to field ch |
| GuardsStressTest.cs:423:4:423:5 | access to field ch |
| GuardsStressTest.cs:423:19:423:20 | access to field ch |
| GuardsStressTest.cs:424:4:424:5 | access to field ch |
| GuardsStressTest.cs:424:19:424:20 | access to field ch |
| GuardsStressTest.cs:425:4:425:5 | access to field ch |
| GuardsStressTest.cs:425:19:425:20 | access to field ch |
| GuardsStressTest.cs:426:4:426:5 | access to field ch |
| GuardsStressTest.cs:426:19:426:20 | access to field ch |
| GuardsStressTest.cs:427:4:427:5 | access to field ch |
| GuardsStressTest.cs:427:19:427:20 | access to field ch |
| GuardsStressTest.cs:428:4:428:5 | access to field ch |
| GuardsStressTest.cs:428:19:428:20 | access to field ch |
| GuardsStressTest.cs:429:4:429:5 | access to field ch |
| GuardsStressTest.cs:429:19:429:20 | access to field ch |
| GuardsStressTest.cs:430:4:430:5 | access to field ch |
| GuardsStressTest.cs:430:19:430:20 | access to field ch |
| GuardsStressTest.cs:431:4:431:5 | access to field ch |
| GuardsStressTest.cs:431:19:431:20 | access to field ch |
| GuardsStressTest.cs:432:4:432:5 | access to field ch |
| GuardsStressTest.cs:432:19:432:20 | access to field ch |
| GuardsStressTest.cs:433:4:433:5 | access to field ch |
| GuardsStressTest.cs:434:4:434:5 | access to field ch |
| GuardsStressTest.cs:434:19:434:20 | access to field ch |
| GuardsStressTest.cs:435:4:435:5 | access to field ch |
| GuardsStressTest.cs:435:19:435:20 | access to field ch |
| GuardsStressTest.cs:436:4:436:5 | access to field ch |
| GuardsStressTest.cs:436:19:436:20 | access to field ch |
| GuardsStressTest.cs:437:4:437:5 | access to field ch |
| GuardsStressTest.cs:437:19:437:20 | access to field ch |
| GuardsStressTest.cs:438:4:438:5 | access to field ch |
| GuardsStressTest.cs:438:19:438:20 | access to field ch |
| GuardsStressTest.cs:439:4:439:5 | access to field ch |
| GuardsStressTest.cs:439:19:439:20 | access to field ch |
| GuardsStressTest.cs:439:41:439:42 | access to field ch |
| GuardsStressTest.cs:440:23:440:24 | access to field ch |

View File

@@ -0,0 +1,5 @@
import csharp
import semmle.code.csharp.controlflow.Guards
from GuardedExpr ge
select ge

View File

@@ -0,0 +1,443 @@
using System;
#nullable enable
public class StressTest
{
int ch;
int Ors()
{
if (ch >= '0' && ch <= '9'
|| ch >= 'A' && ch <= 'Z'
|| ch == '_'
|| ch >= 'a' && ch <= 'z'
|| ch == 170
|| ch == 181
|| ch == 186
|| ch >= 192 && ch <= 214
|| ch >= 216 && ch <= 246
|| ch >= 248 && ch <= 705
|| ch >= 710 && ch <= 721
|| ch >= 736 && ch <= 740
|| ch == 748
|| ch == 750
|| ch >= 768 && ch <= 884
|| ch >= 886 && ch <= 887
|| ch >= 890 && ch <= 893
|| ch == 902
|| ch >= 904 && ch <= 906
|| ch == 908
|| ch >= 910 && ch <= 929
|| ch >= 931 && ch <= 1013
|| ch >= 1015 && ch <= 1153
|| ch >= 1155 && ch <= 1159
|| ch >= 1162 && ch <= 1319
|| ch >= 1329 && ch <= 1366
|| ch == 1369
|| ch >= 1377 && ch <= 1415
|| ch >= 1425 && ch <= 1469
|| ch == 1471
|| ch >= 1473 && ch <= 1474
|| ch >= 1476 && ch <= 1477
|| ch == 1479
|| ch >= 1488 && ch <= 1514
|| ch >= 1520 && ch <= 1522
|| ch >= 1552 && ch <= 1562
|| ch >= 1568 && ch <= 1641
|| ch >= 1646 && ch <= 1747
|| ch >= 1749 && ch <= 1756
|| ch >= 1759 && ch <= 1768
|| ch >= 1770 && ch <= 1788
|| ch == 1791
|| ch >= 1808 && ch <= 1866
|| ch >= 1869 && ch <= 1969
|| ch >= 1984 && ch <= 2037
|| ch == 2042
|| ch >= 2048 && ch <= 2093
|| ch >= 2112 && ch <= 2139
|| ch == 2208
|| ch >= 2210 && ch <= 2220
|| ch >= 2276 && ch <= 2302
|| ch >= 2304 && ch <= 2403
|| ch >= 2406 && ch <= 2415
|| ch >= 2417 && ch <= 2423
|| ch >= 2425 && ch <= 2431
|| ch >= 2433 && ch <= 2435
|| ch >= 2437 && ch <= 2444
|| ch >= 2447 && ch <= 2448
|| ch >= 2451 && ch <= 2472
|| ch >= 2474 && ch <= 2480
|| ch == 2482
|| ch >= 2486 && ch <= 2489
|| ch >= 2492 && ch <= 2500
|| ch >= 2503 && ch <= 2504
|| ch >= 2507 && ch <= 2510
|| ch == 2519
|| ch >= 2524 && ch <= 2525
|| ch >= 2527 && ch <= 2531
|| ch >= 2534 && ch <= 2545
|| ch >= 2561 && ch <= 2563
|| ch >= 2565 && ch <= 2570
|| ch >= 2575 && ch <= 2576
|| ch >= 2579 && ch <= 2600
|| ch >= 2602 && ch <= 2608
|| ch >= 2610 && ch <= 2611
|| ch >= 2613 && ch <= 2614
|| ch >= 2616 && ch <= 2617
|| ch == 2620
|| ch >= 2622 && ch <= 2626
|| ch >= 2631 && ch <= 2632
|| ch >= 2635 && ch <= 2637
|| ch == 2641
|| ch >= 2649 && ch <= 2652
|| ch == 2654
|| ch >= 2662 && ch <= 2677
|| ch >= 2689 && ch <= 2691
|| ch >= 2693 && ch <= 2701
|| ch >= 2703 && ch <= 2705
|| ch >= 2707 && ch <= 2728
|| ch >= 2730 && ch <= 2736
|| ch >= 2738 && ch <= 2739
|| ch >= 2741 && ch <= 2745
|| ch >= 2748 && ch <= 2757
|| ch >= 2759 && ch <= 2761
|| ch >= 2763 && ch <= 2765
|| ch == 2768
|| ch >= 2784 && ch <= 2787
|| ch >= 2790 && ch <= 2799
|| ch >= 2817 && ch <= 2819
|| ch >= 2821 && ch <= 2828
|| ch >= 2831 && ch <= 2832
|| ch >= 2835 && ch <= 2856
|| ch >= 2858 && ch <= 2864
|| ch >= 2866 && ch <= 2867
|| ch >= 2869 && ch <= 2873
|| ch >= 2876 && ch <= 2884
|| ch >= 2887 && ch <= 2888
|| ch >= 2891 && ch <= 2893
|| ch >= 2902 && ch <= 2903
|| ch >= 2908 && ch <= 2909
|| ch >= 2911 && ch <= 2915
|| ch >= 2918 && ch <= 2927
|| ch == 2929
|| ch >= 2946 && ch <= 2947
|| ch >= 2949 && ch <= 2954
|| ch >= 2958 && ch <= 2960
|| ch >= 2962 && ch <= 2965
|| ch >= 2969 && ch <= 2970
|| ch == 2972
|| ch >= 2974 && ch <= 2975
|| ch >= 2979 && ch <= 2980
|| ch >= 2984 && ch <= 2986
|| ch >= 2990 && ch <= 3001
|| ch >= 3006 && ch <= 3010
|| ch >= 3014 && ch <= 3016
|| ch >= 3018 && ch <= 3021
|| ch == 3024
|| ch == 3031
|| ch >= 3046 && ch <= 3055
|| ch >= 3073 && ch <= 3075
|| ch >= 3077 && ch <= 3084
|| ch >= 3086 && ch <= 3088
|| ch >= 3090 && ch <= 3112
|| ch >= 3114 && ch <= 3123
|| ch >= 3125 && ch <= 3129
|| ch >= 3133 && ch <= 3140
|| ch >= 3142 && ch <= 3144
|| ch >= 3146 && ch <= 3149
|| ch >= 3157 && ch <= 3158
|| ch >= 3160 && ch <= 3161
|| ch >= 3168 && ch <= 3171
|| ch >= 3174 && ch <= 3183
|| ch >= 3202 && ch <= 3203
|| ch >= 3205 && ch <= 3212
|| ch >= 3214 && ch <= 3216
|| ch >= 3218 && ch <= 3240
|| ch >= 3242 && ch <= 3251
|| ch >= 3253 && ch <= 3257
|| ch >= 3260 && ch <= 3268
|| ch >= 3270 && ch <= 3272
|| ch >= 3274 && ch <= 3277
|| ch >= 3285 && ch <= 3286
|| ch == 3294
|| ch >= 3296 && ch <= 3299
|| ch >= 3302 && ch <= 3311
|| ch >= 3313 && ch <= 3314
|| ch >= 3330 && ch <= 3331
|| ch >= 3333 && ch <= 3340
|| ch >= 3342 && ch <= 3344
|| ch >= 3346 && ch <= 3386
|| ch >= 3389 && ch <= 3396
|| ch >= 3398 && ch <= 3400
|| ch >= 3402 && ch <= 3406
|| ch == 3415
|| ch >= 3424 && ch <= 3427
|| ch >= 3430 && ch <= 3439
|| ch >= 3450 && ch <= 3455
|| ch >= 3458 && ch <= 3459
|| ch >= 3461 && ch <= 3478
|| ch >= 3482 && ch <= 3505
|| ch >= 3507 && ch <= 3515
|| ch == 3517
|| ch >= 3520 && ch <= 3526
|| ch == 3530
|| ch >= 3535 && ch <= 3540
|| ch == 3542
|| ch >= 3544 && ch <= 3551
|| ch >= 3570 && ch <= 3571
|| ch >= 3585 && ch <= 3642
|| ch >= 3648 && ch <= 3662
|| ch >= 3664 && ch <= 3673
|| ch >= 3713 && ch <= 3714
|| ch == 3716
|| ch >= 3719 && ch <= 3720
|| ch == 3722
|| ch == 3725
|| ch >= 3732 && ch <= 3735
|| ch >= 3737 && ch <= 3743
|| ch >= 3745 && ch <= 3747
|| ch == 3749
|| ch == 3751
|| ch >= 3754 && ch <= 3755
|| ch >= 3757 && ch <= 3769
|| ch >= 3771 && ch <= 3773
|| ch >= 3776 && ch <= 3780
|| ch == 3782
|| ch >= 3784 && ch <= 3789
|| ch >= 3792 && ch <= 3801
|| ch >= 3804 && ch <= 3807
|| ch == 3840
|| ch >= 3864 && ch <= 3865
|| ch >= 3872 && ch <= 3881
|| ch == 3893
|| ch == 3895
|| ch == 3897
|| ch >= 3902 && ch <= 3911
|| ch >= 3913 && ch <= 3948
|| ch >= 3953 && ch <= 3972
|| ch >= 3974 && ch <= 3991
|| ch >= 3993 && ch <= 4028
|| ch == 4038
|| ch >= 4096 && ch <= 4169
|| ch >= 4176 && ch <= 4253
|| ch >= 4256 && ch <= 4293
|| ch == 4295
|| ch == 4301
|| ch >= 4304 && ch <= 4346
|| ch >= 4348 && ch <= 4680
|| ch >= 4682 && ch <= 4685
|| ch >= 4688 && ch <= 4694
|| ch == 4696
|| ch >= 4698 && ch <= 4701
|| ch >= 4704 && ch <= 4744
|| ch >= 4746 && ch <= 4749
|| ch >= 4752 && ch <= 4784
|| ch >= 4786 && ch <= 4789
|| ch >= 4792 && ch <= 4798
|| ch == 4800
|| ch >= 4802 && ch <= 4805
|| ch >= 4808 && ch <= 4822
|| ch >= 4824 && ch <= 4880
|| ch >= 4882 && ch <= 4885
|| ch >= 4888 && ch <= 4954
|| ch >= 4957 && ch <= 4959
|| ch >= 4992 && ch <= 5007
|| ch >= 5024 && ch <= 5108
|| ch >= 5121 && ch <= 5740
|| ch >= 5743 && ch <= 5759
|| ch >= 5761 && ch <= 5786
|| ch >= 5792 && ch <= 5866
|| ch >= 5870 && ch <= 5872
|| ch >= 5888 && ch <= 5900
|| ch >= 5902 && ch <= 5908
|| ch >= 5920 && ch <= 5940
|| ch >= 5952 && ch <= 5971
|| ch >= 5984 && ch <= 5996
|| ch >= 5998 && ch <= 6000
|| ch >= 6002 && ch <= 6003
|| ch >= 6016 && ch <= 6099
|| ch == 6103
|| ch >= 6108 && ch <= 6109
|| ch >= 6112 && ch <= 6121
|| ch >= 6155 && ch <= 6157
|| ch >= 6160 && ch <= 6169
|| ch >= 6176 && ch <= 6263
|| ch >= 6272 && ch <= 6314
|| ch >= 6320 && ch <= 6389
|| ch >= 6400 && ch <= 6428
|| ch >= 6432 && ch <= 6443
|| ch >= 6448 && ch <= 6459
|| ch >= 6470 && ch <= 6509
|| ch >= 6512 && ch <= 6516
|| ch >= 6528 && ch <= 6571
|| ch >= 6576 && ch <= 6601
|| ch >= 6608 && ch <= 6617
|| ch >= 6656 && ch <= 6683
|| ch >= 6688 && ch <= 6750
|| ch >= 6752 && ch <= 6780
|| ch >= 6783 && ch <= 6793
|| ch >= 6800 && ch <= 6809
|| ch == 6823
|| ch >= 6912 && ch <= 6987
|| ch >= 6992 && ch <= 7001
|| ch >= 7019 && ch <= 7027
|| ch >= 7040 && ch <= 7155
|| ch >= 7168 && ch <= 7223
|| ch >= 7232 && ch <= 7241
|| ch >= 7245 && ch <= 7293
|| ch >= 7376 && ch <= 7378
|| ch >= 7380 && ch <= 7414
|| ch >= 7424 && ch <= 7654
|| ch >= 7676 && ch <= 7957
|| ch >= 7960 && ch <= 7965
|| ch >= 7968 && ch <= 8005
|| ch >= 8008 && ch <= 8013
|| ch >= 8016 && ch <= 8023
|| ch == 8025
|| ch == 8027
|| ch == 8029
|| ch >= 8031 && ch <= 8061
|| ch >= 8064 && ch <= 8116
|| ch >= 8118 && ch <= 8124
|| ch == 8126
|| ch >= 8130 && ch <= 8132
|| ch >= 8134 && ch <= 8140
|| ch >= 8144 && ch <= 8147
|| ch >= 8150 && ch <= 8155
|| ch >= 8160 && ch <= 8172
|| ch >= 8178 && ch <= 8180
|| ch >= 8182 && ch <= 8188
|| ch >= 8204 && ch <= 8205
|| ch >= 8255 && ch <= 8256
|| ch == 8276
|| ch == 8305
|| ch == 8319
|| ch >= 8336 && ch <= 8348
|| ch >= 8400 && ch <= 8412
|| ch == 8417
|| ch >= 8421 && ch <= 8432
|| ch == 8450
|| ch == 8455
|| ch >= 8458 && ch <= 8467
|| ch == 8469
|| ch >= 8473 && ch <= 8477
|| ch == 8484
|| ch == 8486
|| ch == 8488
|| ch >= 8490 && ch <= 8493
|| ch >= 8495 && ch <= 8505
|| ch >= 8508 && ch <= 8511
|| ch >= 8517 && ch <= 8521
|| ch == 8526
|| ch >= 8544 && ch <= 8584
|| ch >= 11264 && ch <= 11310
|| ch >= 11312 && ch <= 11358
|| ch >= 11360 && ch <= 11492
|| ch >= 11499 && ch <= 11507
|| ch >= 11520 && ch <= 11557
|| ch == 11559
|| ch == 11565
|| ch >= 11568 && ch <= 11623
|| ch == 11631
|| ch >= 11647 && ch <= 11670
|| ch >= 11680 && ch <= 11686
|| ch >= 11688 && ch <= 11694
|| ch >= 11696 && ch <= 11702
|| ch >= 11704 && ch <= 11710
|| ch >= 11712 && ch <= 11718
|| ch >= 11720 && ch <= 11726
|| ch >= 11728 && ch <= 11734
|| ch >= 11736 && ch <= 11742
|| ch >= 11744 && ch <= 11775
|| ch == 11823
|| ch >= 12293 && ch <= 12295
|| ch >= 12321 && ch <= 12335
|| ch >= 12337 && ch <= 12341
|| ch >= 12344 && ch <= 12348
|| ch >= 12353 && ch <= 12438
|| ch >= 12441 && ch <= 12442
|| ch >= 12445 && ch <= 12447
|| ch >= 12449 && ch <= 12538
|| ch >= 12540 && ch <= 12543
|| ch >= 12549 && ch <= 12589
|| ch >= 12593 && ch <= 12686
|| ch >= 12704 && ch <= 12730
|| ch >= 12784 && ch <= 12799
|| ch >= 13312 && ch <= 19893
|| ch >= 19968 && ch <= 40908
|| ch >= 40960 && ch <= 42124
|| ch >= 42192 && ch <= 42237
|| ch >= 42240 && ch <= 42508
|| ch >= 42512 && ch <= 42539
|| ch >= 42560 && ch <= 42607
|| ch >= 42612 && ch <= 42621
|| ch >= 42623 && ch <= 42647
|| ch >= 42655 && ch <= 42737
|| ch >= 42775 && ch <= 42783
|| ch >= 42786 && ch <= 42888
|| ch >= 42891 && ch <= 42894
|| ch >= 42896 && ch <= 42899
|| ch >= 42912 && ch <= 42922
|| ch >= 43000 && ch <= 43047
|| ch >= 43072 && ch <= 43123
|| ch >= 43136 && ch <= 43204
|| ch >= 43216 && ch <= 43225
|| ch >= 43232 && ch <= 43255
|| ch == 43259
|| ch >= 43264 && ch <= 43309
|| ch >= 43312 && ch <= 43347
|| ch >= 43360 && ch <= 43388
|| ch >= 43392 && ch <= 43456
|| ch >= 43471 && ch <= 43481
|| ch >= 43520 && ch <= 43574
|| ch >= 43584 && ch <= 43597
|| ch >= 43600 && ch <= 43609
|| ch >= 43616 && ch <= 43638
|| ch >= 43642 && ch <= 43643
|| ch >= 43648 && ch <= 43714
|| ch >= 43739 && ch <= 43741
|| ch >= 43744 && ch <= 43759
|| ch >= 43762 && ch <= 43766
|| ch >= 43777 && ch <= 43782
|| ch >= 43785 && ch <= 43790
|| ch >= 43793 && ch <= 43798
|| ch >= 43808 && ch <= 43814
|| ch >= 43816 && ch <= 43822
|| ch >= 43968 && ch <= 44010
|| ch >= 44012 && ch <= 44013
|| ch >= 44016 && ch <= 44025
|| ch >= 44032 && ch <= 55203
|| ch >= 55216 && ch <= 55238
|| ch >= 55243 && ch <= 55291
|| ch >= 63744 && ch <= 64109
|| ch >= 64112 && ch <= 64217
|| ch >= 64256 && ch <= 64262
|| ch >= 64275 && ch <= 64279
|| ch >= 64285 && ch <= 64296
|| ch >= 64298 && ch <= 64310
|| ch >= 64312 && ch <= 64316
|| ch == 64318
|| ch >= 64320 && ch <= 64321
|| ch >= 64323 && ch <= 64324
|| ch >= 64326 && ch <= 64433
|| ch >= 64467 && ch <= 64829
|| ch >= 64848 && ch <= 64911
|| ch >= 64914 && ch <= 64967
|| ch >= 65008 && ch <= 65019
|| ch >= 65024 && ch <= 65039
|| ch >= 65056 && ch <= 65062
|| ch >= 65075 && ch <= 65076
|| ch >= 65101 && ch <= 65103
|| ch >= 65136 && ch <= 65140
|| ch >= 65142 && ch <= 65276
|| ch >= 65296 && ch <= 65305
|| ch >= 65313 && ch <= 65338
|| ch == 65343
|| ch >= 65345 && ch <= 65370
|| ch >= 65382 && ch <= 65470
|| ch >= 65474 && ch <= 65479
|| ch >= 65482 && ch <= 65487
|| ch >= 65490 && ch <= 65495
|| ch >= 65498 && ch <= 65500) { return ch; }
else { return ch + 1; }
}
}

View File

@@ -5,16 +5,12 @@
| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:24 | access to local variable s | false |
| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | false |
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:23 | access to local variable s | true |
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:23 | access to local variable s | true |
| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false |
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:24 | access to local variable s | false |
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:24 | access to local variable s | false |
| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true |
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:23 | access to local variable s | true |
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:23 | access to local variable s | true |
| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | true |
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:24 | access to local variable s | false |
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:24 | access to local variable s | false |
| Assert.cs:94:16:94:17 | access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | true |
| Assert.cs:94:23:94:24 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | false |
| Collections.cs:52:17:52:20 | access to parameter args | Collections.cs:50:13:50:27 | ... == ... | Collections.cs:50:13:50:16 | access to parameter args | false |
@@ -22,39 +18,17 @@
| Collections.cs:54:13:54:16 | access to parameter args | Collections.cs:50:13:50:27 | ... == ... | Collections.cs:50:13:50:16 | access to parameter args | false |
| Collections.cs:67:13:67:13 | access to local variable x | Collections.cs:65:13:65:24 | ... == ... | Collections.cs:65:13:65:13 | access to local variable x | true |
| Collections.cs:68:13:68:13 | access to local variable x | Collections.cs:65:13:65:24 | ... == ... | Collections.cs:65:13:65:13 | access to local variable x | true |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:13:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:14:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | true |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:13:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:14:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | true |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:12:13:12:24 | ... > ... | Guards.cs:12:13:12:13 | access to parameter s | true |
| Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:21 | ... != ... | Guards.cs:24:13:24:13 | access to parameter s | true |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:13:32:36 | !... | Guards.cs:32:35:32:35 | access to parameter x | true |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:13:32:51 | ... & ... | Guards.cs:32:35:32:35 | access to parameter x | true |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:14:32:36 | call to method IsNullOrEmpty | Guards.cs:32:35:32:35 | access to parameter x | false |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:13:32:51 | ... & ... | Guards.cs:32:42:32:42 | access to parameter y | true |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:40:32:51 | !... | Guards.cs:32:42:32:42 | access to parameter y | true |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:50 | ... == ... | Guards.cs:32:42:32:42 | access to parameter y | false |
| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:21 | ... == ... | Guards.cs:35:13:35:13 | access to parameter x | false |
| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:34 | ... \|\| ... | Guards.cs:35:13:35:13 | access to parameter x | false |
| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:13:35:34 | ... \|\| ... | Guards.cs:35:26:35:26 | access to parameter y | false |
| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:34 | ... == ... | Guards.cs:35:26:35:26 | access to parameter y | false |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:13:38:37 | !... | Guards.cs:38:15:38:15 | access to parameter x | true |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:23 | ... == ... | Guards.cs:38:15:38:15 | access to parameter x | false |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:36 | ... \|\| ... | Guards.cs:38:15:38:15 | access to parameter x | false |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:13:38:37 | !... | Guards.cs:38:28:38:28 | access to parameter y | true |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:15:38:36 | ... \|\| ... | Guards.cs:38:28:38:28 | access to parameter y | false |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:36 | ... == ... | Guards.cs:38:28:38:28 | access to parameter y | false |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:13:41:39 | !... | Guards.cs:41:17:41:17 | access to parameter x | false |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:14:41:39 | !... | Guards.cs:41:17:41:17 | access to parameter x | true |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:15:41:39 | !... | Guards.cs:41:17:41:17 | access to parameter x | false |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:25 | ... != ... | Guards.cs:41:17:41:17 | access to parameter x | true |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:38 | ... && ... | Guards.cs:41:17:41:17 | access to parameter x | true |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:13:41:39 | !... | Guards.cs:41:30:41:30 | access to parameter y | false |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:14:41:39 | !... | Guards.cs:41:30:41:30 | access to parameter y | true |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:15:41:39 | !... | Guards.cs:41:30:41:30 | access to parameter y | false |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:17:41:38 | ... && ... | Guards.cs:41:30:41:30 | access to parameter y | true |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:38 | ... != ... | Guards.cs:41:30:41:30 | access to parameter y | true |
| Guards.cs:48:31:48:40 | access to field Field | Guards.cs:47:13:47:25 | ... != ... | Guards.cs:47:13:47:17 | access to field Field | true |
| Guards.cs:55:27:55:27 | access to parameter g | Guards.cs:53:13:53:27 | ... == ... | Guards.cs:53:13:53:13 | access to parameter g | false |
@@ -85,16 +59,11 @@
| Guards.cs:138:20:138:20 | access to parameter s | Guards.cs:137:13:137:25 | ... is ... | Guards.cs:137:13:137:13 | access to parameter s | true |
| Guards.cs:139:16:139:16 | access to parameter s | Guards.cs:137:13:137:25 | ... is ... | Guards.cs:137:13:137:13 | access to parameter s | false |
| Guards.cs:146:16:146:16 | access to parameter o | Guards.cs:144:13:144:25 | ... is ... | Guards.cs:144:13:144:13 | access to parameter o | false |
| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:13:168:41 | !... | Guards.cs:168:40:168:40 | access to parameter x | true |
| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:14:168:41 | call to method IsNullOrWhiteSpace | Guards.cs:168:40:168:40 | access to parameter x | false |
| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:13:189:25 | !... | Guards.cs:189:24:189:24 | access to parameter s | true |
| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:14:189:25 | call to method NullTest1 | Guards.cs:189:24:189:24 | access to parameter s | false |
| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:13:191:25 | !... | Guards.cs:191:24:191:24 | access to parameter s | true |
| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:14:191:25 | call to method NullTest2 | Guards.cs:191:24:191:24 | access to parameter s | false |
| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:13:193:25 | !... | Guards.cs:193:24:193:24 | access to parameter s | true |
| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:14:193:25 | call to method NullTest3 | Guards.cs:193:24:193:24 | access to parameter s | false |
| Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:13:195:27 | call to method NotNullTest4 | Guards.cs:195:26:195:26 | access to parameter s | true |
| Guards.cs:198:31:198:31 | access to parameter s | Guards.cs:197:13:197:29 | !... | Guards.cs:197:28:197:28 | access to parameter s | true |
| Guards.cs:198:31:198:31 | access to parameter s | Guards.cs:197:14:197:29 | call to method NullTestWrong | Guards.cs:197:28:197:28 | access to parameter s | false |
| Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:21 | ... != ... | Guards.cs:203:13:203:13 | access to parameter o | true |
| Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:21 | ... != ... | Guards.cs:203:13:203:13 | access to parameter o | true |
@@ -102,7 +71,6 @@
| Guards.cs:271:13:271:14 | access to parameter o1 | Guards.cs:270:13:270:42 | call to operator == | Guards.cs:270:13:270:14 | access to parameter o1 | true |
| Guards.cs:342:27:342:27 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | false |
| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:21 | ... != ... | Guards.cs:342:13:342:13 | access to local variable s | true |
| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:27 | ... && ... | Guards.cs:342:13:342:13 | access to local variable s | true |
| Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:25 | ... is ... | Guards.cs:348:13:348:13 | access to parameter o | true |
| Splitting.cs:13:17:13:17 | access to parameter o | Splitting.cs:12:17:12:25 | ... != ... | Splitting.cs:12:17:12:17 | access to parameter o | true |
| Splitting.cs:23:24:23:24 | access to parameter o | Splitting.cs:22:17:22:25 | ... != ... | Splitting.cs:22:17:22:17 | access to parameter o | true |

View File

@@ -17,7 +17,6 @@
| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | non-null |
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | non-null |
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:23 | access to local variable s | true |
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:23 | access to local variable s | true |
| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false |
| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | non-null |
| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false |
@@ -25,7 +24,6 @@
| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | non-null |
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | non-null |
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:24 | access to local variable s | false |
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:24 | access to local variable s | false |
| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | false |
| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true |
| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:20 | access to parameter b | null |
@@ -33,7 +31,6 @@
| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:20 | access to parameter b | null |
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | null |
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:23 | access to local variable s | true |
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:23 | access to local variable s | true |
| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | false |
| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | true |
| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:20 | access to parameter b | null |
@@ -41,7 +38,6 @@
| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:20 | access to parameter b | null |
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | null |
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:24 | access to local variable s | false |
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:24 | access to local variable s | false |
| Assert.cs:93:33:93:34 | [assertion failure, b1 (line 91): false] access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | false |
| Assert.cs:93:33:93:34 | [assertion failure, b1 (line 91): false] access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | true |
| Assert.cs:93:33:93:34 | [assertion failure, b1 (line 91): true] access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | true |
@@ -56,49 +52,27 @@
| Collections.cs:67:13:67:13 | access to local variable x | Collections.cs:65:13:65:24 | ... == ... | Collections.cs:65:13:65:13 | access to local variable x | true |
| Collections.cs:68:13:68:13 | access to local variable x | Collections.cs:65:13:65:24 | ... == ... | Collections.cs:65:13:65:13 | access to local variable x | true |
| Collections.cs:96:31:96:34 | access to parameter args | Collections.cs:95:29:95:32 | access to parameter args | Collections.cs:95:29:95:32 | access to parameter args | non-empty |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:13:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:14:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | true |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | non-null |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:13:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:14:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | true |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | non-null |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:12:13:12:24 | ... > ... | Guards.cs:12:13:12:13 | access to parameter s | true |
| Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | non-null |
| Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:21 | ... != ... | Guards.cs:24:13:24:13 | access to parameter s | true |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:13:32:36 | !... | Guards.cs:32:35:32:35 | access to parameter x | true |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:13:32:51 | ... & ... | Guards.cs:32:35:32:35 | access to parameter x | true |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:14:32:36 | call to method IsNullOrEmpty | Guards.cs:32:35:32:35 | access to parameter x | false |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | non-null |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:13:32:51 | ... & ... | Guards.cs:32:42:32:42 | access to parameter y | true |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:40:32:51 | !... | Guards.cs:32:42:32:42 | access to parameter y | true |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | non-null |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:50 | ... == ... | Guards.cs:32:42:32:42 | access to parameter y | false |
| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | non-null |
| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:21 | ... == ... | Guards.cs:35:13:35:13 | access to parameter x | false |
| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:34 | ... \|\| ... | Guards.cs:35:13:35:13 | access to parameter x | false |
| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:13:35:34 | ... \|\| ... | Guards.cs:35:26:35:26 | access to parameter y | false |
| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | non-null |
| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:34 | ... == ... | Guards.cs:35:26:35:26 | access to parameter y | false |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:13:38:37 | !... | Guards.cs:38:15:38:15 | access to parameter x | true |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | non-null |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:23 | ... == ... | Guards.cs:38:15:38:15 | access to parameter x | false |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:36 | ... \|\| ... | Guards.cs:38:15:38:15 | access to parameter x | false |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:13:38:37 | !... | Guards.cs:38:28:38:28 | access to parameter y | true |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:15:38:36 | ... \|\| ... | Guards.cs:38:28:38:28 | access to parameter y | false |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | non-null |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:36 | ... == ... | Guards.cs:38:28:38:28 | access to parameter y | false |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:13:41:39 | !... | Guards.cs:41:17:41:17 | access to parameter x | false |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:14:41:39 | !... | Guards.cs:41:17:41:17 | access to parameter x | true |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:15:41:39 | !... | Guards.cs:41:17:41:17 | access to parameter x | false |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | non-null |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:25 | ... != ... | Guards.cs:41:17:41:17 | access to parameter x | true |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:38 | ... && ... | Guards.cs:41:17:41:17 | access to parameter x | true |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:13:41:39 | !... | Guards.cs:41:30:41:30 | access to parameter y | false |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:14:41:39 | !... | Guards.cs:41:30:41:30 | access to parameter y | true |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:15:41:39 | !... | Guards.cs:41:30:41:30 | access to parameter y | false |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:17:41:38 | ... && ... | Guards.cs:41:30:41:30 | access to parameter y | true |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | non-null |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:38 | ... != ... | Guards.cs:41:30:41:30 | access to parameter y | true |
| Guards.cs:48:31:48:40 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | non-null |
@@ -193,21 +167,16 @@
| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match access to type Action<Object> |
| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match null |
| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-null |
| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:13:168:41 | !... | Guards.cs:168:40:168:40 | access to parameter x | true |
| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:14:168:41 | call to method IsNullOrWhiteSpace | Guards.cs:168:40:168:40 | access to parameter x | false |
| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | non-null |
| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:13:189:25 | !... | Guards.cs:189:24:189:24 | access to parameter s | true |
| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:14:189:25 | call to method NullTest1 | Guards.cs:189:24:189:24 | access to parameter s | false |
| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | non-null |
| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:13:191:25 | !... | Guards.cs:191:24:191:24 | access to parameter s | true |
| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:14:191:25 | call to method NullTest2 | Guards.cs:191:24:191:24 | access to parameter s | false |
| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | non-null |
| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:13:193:25 | !... | Guards.cs:193:24:193:24 | access to parameter s | true |
| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:14:193:25 | call to method NullTest3 | Guards.cs:193:24:193:24 | access to parameter s | false |
| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | non-null |
| Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:13:195:27 | call to method NotNullTest4 | Guards.cs:195:26:195:26 | access to parameter s | true |
| Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | non-null |
| Guards.cs:198:31:198:31 | access to parameter s | Guards.cs:197:13:197:29 | !... | Guards.cs:197:28:197:28 | access to parameter s | true |
| Guards.cs:198:31:198:31 | access to parameter s | Guards.cs:197:14:197:29 | call to method NullTestWrong | Guards.cs:197:28:197:28 | access to parameter s | false |
| Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | non-null |
| Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:21 | ... != ... | Guards.cs:203:13:203:13 | access to parameter o | true |
@@ -241,7 +210,6 @@
| Guards.cs:342:27:342:27 | [b (line 339): true] access to parameter b | Guards.cs:341:20:341:32 | ... ? ... : ... | Guards.cs:341:20:341:20 | access to parameter b | non-null |
| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | non-null |
| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:21 | ... != ... | Guards.cs:342:13:342:13 | access to local variable s | true |
| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:27 | ... && ... | Guards.cs:342:13:342:13 | access to local variable s | true |
| Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | non-null |
| Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:25 | ... is ... | Guards.cs:348:13:348:13 | access to parameter o | true |
| Splitting.cs:13:17:13:17 | [b (line 9): true] access to parameter o | Splitting.cs:12:17:12:17 | access to parameter o | Splitting.cs:12:17:12:17 | access to parameter o | non-null |

View File

@@ -14,22 +14,18 @@
| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | non-null |
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | non-null |
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:23 | access to local variable s | true |
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:23 | access to local variable s | true |
| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false |
| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | non-null |
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | non-null |
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:24 | access to local variable s | false |
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:24 | access to local variable s | false |
| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true |
| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:20 | access to parameter b | null |
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | null |
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:23 | access to local variable s | true |
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:23 | access to local variable s | true |
| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | true |
| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:20 | access to parameter b | null |
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | null |
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:24 | access to local variable s | false |
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:24 | access to local variable s | false |
| Assert.cs:94:16:94:17 | access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | true |
| Assert.cs:94:23:94:24 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | false |
| Collections.cs:52:17:52:20 | access to parameter args | Collections.cs:50:13:50:16 | access to parameter args | Collections.cs:50:13:50:16 | access to parameter args | non-empty |
@@ -40,49 +36,27 @@
| Collections.cs:67:13:67:13 | access to local variable x | Collections.cs:65:13:65:24 | ... == ... | Collections.cs:65:13:65:13 | access to local variable x | true |
| Collections.cs:68:13:68:13 | access to local variable x | Collections.cs:65:13:65:24 | ... == ... | Collections.cs:65:13:65:13 | access to local variable x | true |
| Collections.cs:96:31:96:34 | access to parameter args | Collections.cs:95:29:95:32 | access to parameter args | Collections.cs:95:29:95:32 | access to parameter args | non-empty |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:13:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:14:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | true |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | non-null |
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:13:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:14:10:25 | !... | Guards.cs:10:16:10:16 | access to parameter s | true |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | non-null |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false |
| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:12:13:12:24 | ... > ... | Guards.cs:12:13:12:13 | access to parameter s | true |
| Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | non-null |
| Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:21 | ... != ... | Guards.cs:24:13:24:13 | access to parameter s | true |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:13:32:36 | !... | Guards.cs:32:35:32:35 | access to parameter x | true |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:13:32:51 | ... & ... | Guards.cs:32:35:32:35 | access to parameter x | true |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:14:32:36 | call to method IsNullOrEmpty | Guards.cs:32:35:32:35 | access to parameter x | false |
| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | non-null |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:13:32:51 | ... & ... | Guards.cs:32:42:32:42 | access to parameter y | true |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:40:32:51 | !... | Guards.cs:32:42:32:42 | access to parameter y | true |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | non-null |
| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:50 | ... == ... | Guards.cs:32:42:32:42 | access to parameter y | false |
| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | non-null |
| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:21 | ... == ... | Guards.cs:35:13:35:13 | access to parameter x | false |
| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:34 | ... \|\| ... | Guards.cs:35:13:35:13 | access to parameter x | false |
| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:13:35:34 | ... \|\| ... | Guards.cs:35:26:35:26 | access to parameter y | false |
| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | non-null |
| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:34 | ... == ... | Guards.cs:35:26:35:26 | access to parameter y | false |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:13:38:37 | !... | Guards.cs:38:15:38:15 | access to parameter x | true |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | non-null |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:23 | ... == ... | Guards.cs:38:15:38:15 | access to parameter x | false |
| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:36 | ... \|\| ... | Guards.cs:38:15:38:15 | access to parameter x | false |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:13:38:37 | !... | Guards.cs:38:28:38:28 | access to parameter y | true |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:15:38:36 | ... \|\| ... | Guards.cs:38:28:38:28 | access to parameter y | false |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | non-null |
| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:36 | ... == ... | Guards.cs:38:28:38:28 | access to parameter y | false |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:13:41:39 | !... | Guards.cs:41:17:41:17 | access to parameter x | false |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:14:41:39 | !... | Guards.cs:41:17:41:17 | access to parameter x | true |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:15:41:39 | !... | Guards.cs:41:17:41:17 | access to parameter x | false |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | non-null |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:25 | ... != ... | Guards.cs:41:17:41:17 | access to parameter x | true |
| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:38 | ... && ... | Guards.cs:41:17:41:17 | access to parameter x | true |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:13:41:39 | !... | Guards.cs:41:30:41:30 | access to parameter y | false |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:14:41:39 | !... | Guards.cs:41:30:41:30 | access to parameter y | true |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:15:41:39 | !... | Guards.cs:41:30:41:30 | access to parameter y | false |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:17:41:38 | ... && ... | Guards.cs:41:30:41:30 | access to parameter y | true |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | non-null |
| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:38 | ... != ... | Guards.cs:41:30:41:30 | access to parameter y | true |
| Guards.cs:48:31:48:40 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | non-null |
@@ -177,21 +151,16 @@
| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match access to type Action<Object> |
| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match null |
| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-null |
| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:13:168:41 | !... | Guards.cs:168:40:168:40 | access to parameter x | true |
| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:14:168:41 | call to method IsNullOrWhiteSpace | Guards.cs:168:40:168:40 | access to parameter x | false |
| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | non-null |
| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:13:189:25 | !... | Guards.cs:189:24:189:24 | access to parameter s | true |
| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:14:189:25 | call to method NullTest1 | Guards.cs:189:24:189:24 | access to parameter s | false |
| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | non-null |
| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:13:191:25 | !... | Guards.cs:191:24:191:24 | access to parameter s | true |
| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:14:191:25 | call to method NullTest2 | Guards.cs:191:24:191:24 | access to parameter s | false |
| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | non-null |
| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:13:193:25 | !... | Guards.cs:193:24:193:24 | access to parameter s | true |
| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:14:193:25 | call to method NullTest3 | Guards.cs:193:24:193:24 | access to parameter s | false |
| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | non-null |
| Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:13:195:27 | call to method NotNullTest4 | Guards.cs:195:26:195:26 | access to parameter s | true |
| Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | non-null |
| Guards.cs:198:31:198:31 | access to parameter s | Guards.cs:197:13:197:29 | !... | Guards.cs:197:28:197:28 | access to parameter s | true |
| Guards.cs:198:31:198:31 | access to parameter s | Guards.cs:197:14:197:29 | call to method NullTestWrong | Guards.cs:197:28:197:28 | access to parameter s | false |
| Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | non-null |
| Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:21 | ... != ... | Guards.cs:203:13:203:13 | access to parameter o | true |
@@ -222,7 +191,6 @@
| Guards.cs:342:27:342:27 | access to parameter b | Guards.cs:341:20:341:32 | ... ? ... : ... | Guards.cs:341:20:341:20 | access to parameter b | non-null |
| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | non-null |
| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:21 | ... != ... | Guards.cs:342:13:342:13 | access to local variable s | true |
| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:27 | ... && ... | Guards.cs:342:13:342:13 | access to local variable s | true |
| Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | non-null |
| Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:25 | ... is ... | Guards.cs:348:13:348:13 | access to parameter o | true |
| Splitting.cs:13:17:13:17 | access to parameter o | Splitting.cs:12:17:12:17 | access to parameter o | Splitting.cs:12:17:12:17 | access to parameter o | non-null |

View File

@@ -167,7 +167,9 @@
| Splitting.cs:32:9:32:16 | [b (line 24): false] dynamic call to method Check | normal | Splitting.cs:32:9:32:16 | [b (line 24): false] dynamic call to method Check |
| Splitting.cs:32:9:32:16 | [b (line 24): true] dynamic call to method Check | normal | Splitting.cs:32:9:32:16 | [b (line 24): true] dynamic call to method Check |
| Splitting.cs:34:13:34:20 | dynamic call to method Check | normal | Splitting.cs:34:13:34:20 | dynamic call to method Check |
| This.cs:7:5:7:8 | call to constructor Object | normal | This.cs:7:5:7:8 | call to constructor Object |
| This.cs:17:9:17:18 | object creation of type This | normal | This.cs:17:9:17:18 | object creation of type This |
| This.cs:22:9:22:11 | call to constructor This | normal | This.cs:22:9:22:11 | call to constructor This |
| This.cs:28:13:28:21 | object creation of type Sub | normal | This.cs:28:13:28:21 | object creation of type Sub |
| file://:0:0:0:0 | [summary] call to collectionSelector in SelectMany | normal | file://:0:0:0:0 | [summary] read: return (normal) of argument 1 in SelectMany |
| file://:0:0:0:0 | [summary] call to collectionSelector in SelectMany | normal | file://:0:0:0:0 | [summary] read: return (normal) of argument 1 in SelectMany |

View File

@@ -2211,54 +2211,83 @@
| System.Text.RegularExpressions.MatchCollection.get_Item(int) | element of argument -1 -> return (normal) | true |
| System.Text.RegularExpressions.MatchCollection.set_Item(int, Match) | argument 1 -> element of argument -1 | true |
| System.Text.RegularExpressions.MatchCollection.set_Item(int, object) | argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.Append(Char[]) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(Char[]) | element of argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.Append(Char[], int, int) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(Char[], int, int) | element of argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.Append(ReadOnlyMemory<Char>) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(ReadOnlySpan<Char>) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(StringBuilder) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(StringBuilder, int, int) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(bool) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(byte) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(char) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(char*, int) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(char, int) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(decimal) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(double) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(float) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(int) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(long) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(object) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.Append(object) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.Append(object) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(sbyte) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(short) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(string) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.Append(string) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.Append(string) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(string, int, int) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.Append(string, int, int) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.Append(string, int, int) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(uint) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(ulong) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.Append(ushort) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object) | argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object) | argument 1 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object) | argument 2 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object) | argument 2 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object) | argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object) | argument 1 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object) | argument 2 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object) | argument 2 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object) | argument 3 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object) | argument 3 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object, object) | argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object, object) | argument 1 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object, object) | argument 2 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object, object) | argument 2 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object, object) | argument 3 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object, object) | argument 3 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object, object) | argument 4 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object, object) | argument 4 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, object, object, object) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, params Object[]) | argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, params Object[]) | argument 1 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, params Object[]) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendFormat(IFormatProvider, string, params Object[]) | element of argument 2 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object) | argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object) | argument 1 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object, object) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object, object) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object, object) | argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object, object) | argument 1 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object, object) | argument 2 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object, object) | argument 2 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object, object) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object, object, object) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object, object, object) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object, object, object) | argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object, object, object) | argument 1 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object, object, object) | argument 2 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object, object, object) | argument 2 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object, object, object) | argument 3 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, object, object, object) | argument 3 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, object, object, object) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, params Object[]) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendFormat(string, params Object[]) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, params Object[]) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendFormat(string, params Object[]) | element of argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendJoin(char, params Object[]) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendJoin(char, params Object[]) | element of argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendJoin(char, params String[]) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendJoin(char, params String[]) | element of argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendJoin(string, params Object[]) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendJoin(string, params Object[]) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendJoin(string, params Object[]) | element of argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendJoin(string, params String[]) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendJoin(string, params String[]) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendJoin(string, params String[]) | element of argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendJoin<T>(char, IEnumerable<T>) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendJoin<T>(char, IEnumerable<T>) | element of argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendJoin<T>(string, IEnumerable<T>) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendJoin<T>(string, IEnumerable<T>) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendJoin<T>(string, IEnumerable<T>) | element of argument 1 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendLine() | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.AppendLine(string) | argument 0 -> element of argument -1 | true |
| System.Text.StringBuilder.AppendLine(string) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.AppendLine(string) | argument -1 -> return (normal) | true |
| System.Text.StringBuilder.StringBuilder(string) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.StringBuilder(string, int) | argument 0 -> element of return (normal) | true |
| System.Text.StringBuilder.StringBuilder(string, int, int, int) | argument 0 -> element of return (normal) | true |

View File

@@ -310,6 +310,7 @@
| LocalDataFlow.cs:234:13:234:42 | SSA def(sink36) | LocalDataFlow.cs:235:9:235:14 | access to local variable sink36 |
| LocalDataFlow.cs:234:22:234:42 | object creation of type StringBuilder | LocalDataFlow.cs:234:13:234:42 | SSA def(sink36) |
| LocalDataFlow.cs:235:9:235:14 | [post] access to local variable sink36 | LocalDataFlow.cs:236:15:236:20 | access to local variable sink36 |
| LocalDataFlow.cs:235:9:235:14 | access to local variable sink36 | LocalDataFlow.cs:235:9:235:33 | call to method AppendLine |
| LocalDataFlow.cs:235:9:235:14 | access to local variable sink36 | LocalDataFlow.cs:236:15:236:20 | access to local variable sink36 |
| LocalDataFlow.cs:239:13:239:51 | SSA def(nonSink10) | LocalDataFlow.cs:240:15:240:23 | access to local variable nonSink10 |
| LocalDataFlow.cs:239:25:239:51 | object creation of type StringBuilder | LocalDataFlow.cs:239:13:239:51 | SSA def(nonSink10) |
@@ -322,6 +323,7 @@
| LocalDataFlow.cs:242:15:242:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:243:30:243:37 | access to local variable nonSink0 |
| LocalDataFlow.cs:242:15:242:22 | access to local variable nonSink0 | LocalDataFlow.cs:243:30:243:37 | access to local variable nonSink0 |
| LocalDataFlow.cs:243:9:243:17 | [post] access to local variable nonSink10 | LocalDataFlow.cs:244:15:244:23 | access to local variable nonSink10 |
| LocalDataFlow.cs:243:9:243:17 | access to local variable nonSink10 | LocalDataFlow.cs:243:9:243:38 | call to method AppendLine |
| LocalDataFlow.cs:243:9:243:17 | access to local variable nonSink10 | LocalDataFlow.cs:244:15:244:23 | access to local variable nonSink10 |
| LocalDataFlow.cs:247:13:247:52 | SSA def(taintedDataContract) | LocalDataFlow.cs:248:22:248:40 | access to local variable taintedDataContract |
| LocalDataFlow.cs:247:13:247:52 | SSA qualifier def(taintedDataContract.AList) | LocalDataFlow.cs:250:22:250:46 | access to property AList |

View File

@@ -400,9 +400,9 @@
| LocalDataFlow.cs:234:22:234:42 | object creation of type StringBuilder | LocalDataFlow.cs:234:13:234:42 | SSA def(sink36) |
| LocalDataFlow.cs:234:40:234:41 | "" | LocalDataFlow.cs:234:22:234:42 | object creation of type StringBuilder |
| LocalDataFlow.cs:235:9:235:14 | [post] access to local variable sink36 | LocalDataFlow.cs:236:15:236:20 | access to local variable sink36 |
| LocalDataFlow.cs:235:9:235:14 | access to local variable sink36 | LocalDataFlow.cs:235:9:235:33 | call to method AppendLine |
| LocalDataFlow.cs:235:9:235:14 | access to local variable sink36 | LocalDataFlow.cs:236:15:236:20 | access to local variable sink36 |
| LocalDataFlow.cs:235:27:235:32 | access to local variable sink35 | LocalDataFlow.cs:235:9:235:14 | [post] access to local variable sink36 |
| LocalDataFlow.cs:235:27:235:32 | access to local variable sink35 | LocalDataFlow.cs:235:9:235:33 | call to method AppendLine |
| LocalDataFlow.cs:239:13:239:51 | SSA def(nonSink10) | LocalDataFlow.cs:240:15:240:23 | access to local variable nonSink10 |
| LocalDataFlow.cs:239:25:239:51 | object creation of type StringBuilder | LocalDataFlow.cs:239:13:239:51 | SSA def(nonSink10) |
| LocalDataFlow.cs:239:43:239:50 | access to local variable nonSink0 | LocalDataFlow.cs:239:25:239:51 | object creation of type StringBuilder |
@@ -416,9 +416,9 @@
| LocalDataFlow.cs:242:15:242:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:243:30:243:37 | access to local variable nonSink0 |
| LocalDataFlow.cs:242:15:242:22 | access to local variable nonSink0 | LocalDataFlow.cs:243:30:243:37 | access to local variable nonSink0 |
| LocalDataFlow.cs:243:9:243:17 | [post] access to local variable nonSink10 | LocalDataFlow.cs:244:15:244:23 | access to local variable nonSink10 |
| LocalDataFlow.cs:243:9:243:17 | access to local variable nonSink10 | LocalDataFlow.cs:243:9:243:38 | call to method AppendLine |
| LocalDataFlow.cs:243:9:243:17 | access to local variable nonSink10 | LocalDataFlow.cs:244:15:244:23 | access to local variable nonSink10 |
| LocalDataFlow.cs:243:30:243:37 | access to local variable nonSink0 | LocalDataFlow.cs:243:9:243:17 | [post] access to local variable nonSink10 |
| LocalDataFlow.cs:243:30:243:37 | access to local variable nonSink0 | LocalDataFlow.cs:243:9:243:38 | call to method AppendLine |
| LocalDataFlow.cs:247:13:247:52 | SSA def(taintedDataContract) | LocalDataFlow.cs:248:22:248:40 | access to local variable taintedDataContract |
| LocalDataFlow.cs:247:13:247:52 | SSA qualifier def(taintedDataContract.AList) | LocalDataFlow.cs:250:22:250:46 | access to property AList |
| LocalDataFlow.cs:247:13:247:52 | SSA qualifier def(taintedDataContract.AString) | LocalDataFlow.cs:248:22:248:48 | access to property AString |

View File

@@ -0,0 +1,4 @@
public class A
{
public void M() { }
}

View File

@@ -0,0 +1 @@
| Unexpected C# extractor error in Program.cs: Unable to resolve target for call. (Compilation error?) | 2 |

View File

@@ -0,0 +1 @@
Diagnostics/DiagnosticExtractionErrors.ql

View File

@@ -0,0 +1 @@
| A.cs:0:0:0:0 | A.cs | |

View File

@@ -0,0 +1 @@
Diagnostics/DiagnosticNoExtractionErrors.ql

View File

@@ -0,0 +1,17 @@
// semmle-extractor-options: --standalone
using System;
class Class
{
static void Main(string[] args)
{
int z = GetParamLength(__arglist(1, 2));
}
public static int GetParamLength(__arglist)
{
ArgIterator iterator = new ArgIterator(__arglist);
return iterator.GetRemainingCount();
}
}

View File

@@ -0,0 +1,8 @@
| expressions.cs:56:9:56:13 | Class | expressions.cs:56:19:56:22 | call to constructor Class | expressions.cs:58:19:58:23 | Class |
| expressions.cs:58:19:58:23 | Class | expressions.cs:58:19:58:23 | call to constructor Object | file://:0:0:0:0 | Object |
| expressions.cs:132:13:132:18 | Nested | expressions.cs:132:13:132:18 | call to constructor Class | expressions.cs:56:9:56:13 | Class |
| expressions.cs:133:13:133:18 | Nested | expressions.cs:133:29:133:32 | call to constructor Class | expressions.cs:58:19:58:23 | Class |
| expressions.cs:249:16:249:26 | LoginDialog | expressions.cs:249:16:249:26 | call to constructor Object | file://:0:0:0:0 | Object |
| expressions.cs:270:16:270:24 | IntVector | expressions.cs:270:16:270:24 | call to constructor Object | file://:0:0:0:0 | Object |
| expressions.cs:310:16:310:20 | Digit | expressions.cs:310:16:310:20 | call to constructor ValueType | file://:0:0:0:0 | ValueType |
| expressions.cs:480:20:480:22 | Num | expressions.cs:480:20:480:22 | call to constructor Object | file://:0:0:0:0 | Object |

View File

@@ -0,0 +1,21 @@
import csharp
private class ConstructorInitializerTarget extends Constructor {
override predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
if this.fromSource()
then this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
else (
filepath = "" and
startline = 0 and
startcolumn = 0 and
endline = 0 and
endcolumn = 0
)
}
}
from Constructor c, ConstructorInitializer i, ConstructorInitializerTarget target
where c.getInitializer() = i and target = i.getTarget()
select c, i, target

View File

@@ -835,7 +835,14 @@ expressions.cs:
# 129| 21: [Class] Nested
#-----| 3: (Base types)
# 129| 0: [TypeMention] Class
# 133| 4: [InstanceConstructor] Nested
# 131| 4: [StaticConstructor] Nested
# 131| 4: [BlockStmt] {...}
# 132| 5: [InstanceConstructor] Nested
#-----| 2: (Parameters)
# 132| 0: [Parameter] b
# 132| -1: [TypeMention] bool
# 132| 4: [BlockStmt] {...}
# 133| 6: [InstanceConstructor] Nested
#-----| 2: (Parameters)
# 133| 0: [Parameter] i
# 133| -1: [TypeMention] int
@@ -844,7 +851,7 @@ expressions.cs:
# 133| 0: [ParameterAccess] access to parameter i
# 133| 1: [IntLiteral] 1
# 133| 4: [BlockStmt] {...}
# 135| 5: [Method] OtherAccesses
# 135| 7: [Method] OtherAccesses
# 135| -1: [TypeMention] Void
# 136| 4: [BlockStmt] {...}
# 137| 0: [ExprStmt] ...;

View File

@@ -128,8 +128,8 @@ namespace Expressions
class Nested : Class
{
static Nested() { }
Nested(bool b) { }
Nested(int i) : base(i + 1) { }
void OtherAccesses()

View File

@@ -1,2 +1,13 @@
compilationMessages
extractorMessages
| errors.cs:8:1:8:22 | Namespace not found |
| errors.cs:24:31:24:32 | Failed to determine type |
| errors.cs:24:31:24:40 | Failed to determine type |
| errors.cs:24:31:24:40 | Unable to resolve target for call. (Compilation error?) |
| errors.cs:24:38:24:39 | Failed to determine type |
| errors.cs:57:20:57:20 | Failed to determine type |
| errors.cs:93:45:93:45 | Failed to determine type |
| errors.cs:93:45:93:45 | Failed to resolve name |
| errors.cs:94:45:94:45 | Failed to determine type |
| errors.cs:94:45:94:45 | Failed to resolve name |
| file://:0:0:0:0 | Extracting default argument value 'object RecordNumber = default' instead of 'object RecordNumber = -1'. The latter is not supported in C#. |

View File

@@ -0,0 +1 @@
| 4 |

View File

@@ -0,0 +1 @@
Metrics/Summaries/LinesOfCode.ql

View File

@@ -0,0 +1,14 @@
class C1
{
/*
int M()
{
return 0;
}
*/
// int M() => 0;
int M() => 0; // Comment
}

View File

@@ -0,0 +1,13 @@
using System;
using System;
public class Program
{
public static void Main()
{
var format = Console.ReadLine();
// BAD: Uncontrolled format string.
var x = string.Format(format, 1, 2);
}
}

View File

@@ -1,8 +1,11 @@
edges
| ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format |
| UncontrolledFormatString.cs:11:23:11:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:14:23:14:26 | access to local variable path |
| UncontrolledFormatString.cs:11:23:11:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:17:46:17:49 | access to local variable path |
| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format |
nodes
| ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | semmle.label | call to method ReadLine : String |
| ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | semmle.label | access to local variable format |
| UncontrolledFormatString.cs:11:23:11:45 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection |
| UncontrolledFormatString.cs:14:23:14:26 | access to local variable path | semmle.label | access to local variable path |
| UncontrolledFormatString.cs:17:46:17:49 | access to local variable path | semmle.label | access to local variable path |
@@ -10,6 +13,7 @@ nodes
| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection |
| UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | semmle.label | access to local variable format |
#select
| ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | $@ flows to here and is used as a format string. | ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine | call to method ReadLine |
| UncontrolledFormatString.cs:14:23:14:26 | access to local variable path | UncontrolledFormatString.cs:11:23:11:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:14:23:14:26 | access to local variable path | $@ flows to here and is used as a format string. | UncontrolledFormatString.cs:11:23:11:45 | access to property QueryString | access to property QueryString |
| UncontrolledFormatString.cs:17:46:17:49 | access to local variable path | UncontrolledFormatString.cs:11:23:11:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:17:46:17:49 | access to local variable path | $@ flows to here and is used as a format string. | UncontrolledFormatString.cs:11:23:11:45 | access to property QueryString | access to property QueryString |
| UncontrolledFormatString.cs:34:23:34:31 | access to property Text | UncontrolledFormatString.cs:34:23:34:31 | access to property Text | UncontrolledFormatString.cs:34:23:34:31 | access to property Text | $@ flows to here and is used as a format string. | UncontrolledFormatString.cs:34:23:34:31 | access to property Text | access to property Text |