mirror of
https://github.com/github/codeql.git
synced 2026-04-30 19:26:02 +02:00
Merge branch 'main' into python-port-code-injection
This commit is contained in:
@@ -3,6 +3,8 @@
|
||||
## General improvements
|
||||
|
||||
* Support for the following frameworks and libraries has been improved:
|
||||
- [AWS Serverless](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)
|
||||
- [Alibaba Serverless](https://www.alibabacloud.com/help/doc-detail/156876.htm)
|
||||
- [bluebird](https://www.npmjs.com/package/bluebird)
|
||||
- [express](https://www.npmjs.com/package/express)
|
||||
- [fast-json-stable-stringify](https://www.npmjs.com/package/fast-json-stable-stringify)
|
||||
|
||||
@@ -62,6 +62,14 @@
|
||||
"java/ql/src/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll",
|
||||
"csharp/ql/src/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll"
|
||||
],
|
||||
"Bound Java/C#": [
|
||||
"java/ql/src/semmle/code/java/dataflow/Bound.qll",
|
||||
"csharp/ql/src/semmle/code/csharp/dataflow/Bound.qll"
|
||||
],
|
||||
"ModulusAnalysis Java/C#": [
|
||||
"java/ql/src/semmle/code/java/dataflow/ModulusAnalysis.qll",
|
||||
"csharp/ql/src/semmle/code/csharp/dataflow/ModulusAnalysis.qll"
|
||||
],
|
||||
"C++ SubBasicBlocks": [
|
||||
"cpp/ql/src/semmle/code/cpp/controlflow/SubBasicBlocks.qll",
|
||||
"cpp/ql/src/semmle/code/cpp/dataflow/internal/SubBasicBlocks.qll"
|
||||
|
||||
14
cpp/change-notes/2020-09-29-range-analysis-rollup.md
Normal file
14
cpp/change-notes/2020-09-29-range-analysis-rollup.md
Normal file
@@ -0,0 +1,14 @@
|
||||
lgtm,codescanning
|
||||
* The `SimpleRangeAnalysis` library has gained support for several language
|
||||
constructs it did not support previously. These improvements primarily affect
|
||||
the queries `cpp/constant-comparison`, `cpp/comparison-with-wider-type`, and
|
||||
`cpp/integer-multiplication-cast-to-long`. The newly supported language
|
||||
features are:
|
||||
* Multiplication of unsigned numbers.
|
||||
* Multiplication by a constant.
|
||||
* Reference-typed function parameters.
|
||||
* Comparing a variable not equal to an endpoint of its range, thus narrowing the range by one.
|
||||
* Using `if (x)` or `if (!x)` or similar to test for equality to zero.
|
||||
* The `SimpleRangeAnalysis` library can now be extended with custom rules. See
|
||||
examples in
|
||||
`cpp/ql/src/experimental/semmle/code/cpp/rangeanalysis/extensions/`.
|
||||
@@ -23,10 +23,7 @@ import semmle.code.cpp.security.TaintTracking
|
||||
* ```
|
||||
*/
|
||||
predicate sourceSized(FunctionCall fc, Expr src) {
|
||||
exists(string name |
|
||||
(name = "strncpy" or name = "strncat" or name = "memcpy" or name = "memmove") and
|
||||
fc.getTarget().hasGlobalOrStdName(name)
|
||||
) and
|
||||
fc.getTarget().hasGlobalOrStdName(["strncpy", "strncat", "memcpy", "memmove"]) and
|
||||
exists(Expr dest, Expr size, Variable v |
|
||||
fc.getArgument(0) = dest and
|
||||
fc.getArgument(1) = src and
|
||||
|
||||
@@ -15,12 +15,7 @@
|
||||
import cpp
|
||||
|
||||
class Allocation extends FunctionCall {
|
||||
Allocation() {
|
||||
exists(string name |
|
||||
this.getTarget().hasGlobalOrStdName(name) and
|
||||
(name = "malloc" or name = "calloc" or name = "realloc")
|
||||
)
|
||||
}
|
||||
Allocation() { this.getTarget().hasGlobalOrStdName(["malloc", "calloc", "realloc"]) }
|
||||
|
||||
private string getName() { this.getTarget().hasGlobalOrStdName(result) }
|
||||
|
||||
|
||||
@@ -13,14 +13,7 @@
|
||||
import cpp
|
||||
|
||||
class ForbiddenFunction extends Function {
|
||||
ForbiddenFunction() {
|
||||
exists(string name | name = this.getName() |
|
||||
name = "setjmp" or
|
||||
name = "longjmp" or
|
||||
name = "sigsetjmp" or
|
||||
name = "siglongjmp"
|
||||
)
|
||||
}
|
||||
ForbiddenFunction() { this.getName() = ["setjmp", "longjmp", "sigsetjmp", "siglongjmp"] }
|
||||
}
|
||||
|
||||
from FunctionCall call
|
||||
|
||||
@@ -40,9 +40,7 @@ class DateStructModifiedFieldAccess extends LeapYearFieldAccess {
|
||||
*/
|
||||
class SafeTimeGatheringFunction extends Function {
|
||||
SafeTimeGatheringFunction() {
|
||||
this.getQualifiedName() = "GetFileTime" or
|
||||
this.getQualifiedName() = "GetSystemTime" or
|
||||
this.getQualifiedName() = "NtQuerySystemTime"
|
||||
this.getQualifiedName() = ["GetFileTime", "GetSystemTime", "NtQuerySystemTime"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,15 +49,11 @@ class SafeTimeGatheringFunction extends Function {
|
||||
*/
|
||||
class TimeConversionFunction extends Function {
|
||||
TimeConversionFunction() {
|
||||
this.getQualifiedName() = "FileTimeToSystemTime" or
|
||||
this.getQualifiedName() = "SystemTimeToFileTime" or
|
||||
this.getQualifiedName() = "SystemTimeToTzSpecificLocalTime" or
|
||||
this.getQualifiedName() = "SystemTimeToTzSpecificLocalTimeEx" or
|
||||
this.getQualifiedName() = "TzSpecificLocalTimeToSystemTime" or
|
||||
this.getQualifiedName() = "TzSpecificLocalTimeToSystemTimeEx" or
|
||||
this.getQualifiedName() = "RtlLocalTimeToSystemTime" or
|
||||
this.getQualifiedName() = "RtlTimeToSecondsSince1970" or
|
||||
this.getQualifiedName() = "_mkgmtime"
|
||||
this.getQualifiedName() =
|
||||
["FileTimeToSystemTime", "SystemTimeToFileTime", "SystemTimeToTzSpecificLocalTime",
|
||||
"SystemTimeToTzSpecificLocalTimeEx", "TzSpecificLocalTimeToSystemTime",
|
||||
"TzSpecificLocalTimeToSystemTimeEx", "RtlLocalTimeToSystemTime",
|
||||
"RtlTimeToSecondsSince1970", "_mkgmtime"]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,13 +10,8 @@ import cpp
|
||||
*/
|
||||
class SALMacro extends Macro {
|
||||
SALMacro() {
|
||||
exists(string filename | filename = this.getFile().getBaseName() |
|
||||
filename = "sal.h" or
|
||||
filename = "specstrings_strict.h" or
|
||||
filename = "specstrings.h" or
|
||||
filename = "w32p.h" or
|
||||
filename = "minwindef.h"
|
||||
) and
|
||||
this.getFile().getBaseName() =
|
||||
["sal.h", "specstrings_strict.h", "specstrings.h", "w32p.h", "minwindef.h"] and
|
||||
(
|
||||
// Dialect for Windows 8 and above
|
||||
this.getName().matches("\\_%\\_")
|
||||
@@ -58,10 +53,7 @@ class SALAnnotation extends MacroInvocation {
|
||||
*/
|
||||
class SALCheckReturn extends SALAnnotation {
|
||||
SALCheckReturn() {
|
||||
exists(SALMacro m | m = this.getMacro() |
|
||||
m.getName() = "_Check_return_" or
|
||||
m.getName() = "_Must_inspect_result_"
|
||||
)
|
||||
this.getMacro().(SALMacro).getName() = ["_Check_return_", "_Must_inspect_result_"]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ class VarargsFunction extends Function {
|
||||
}
|
||||
|
||||
string normalTerminator(int cnt) {
|
||||
(result = "0" or result = "-1") and
|
||||
result = ["0", "-1"] and
|
||||
cnt = trailingArgValueCount(result) and
|
||||
2 * cnt > totalCount() and
|
||||
not exists(FunctionCall fc, int index |
|
||||
|
||||
@@ -66,10 +66,7 @@ class IFStream extends Type {
|
||||
*/
|
||||
class CinVariable extends NamespaceVariable {
|
||||
CinVariable() {
|
||||
(
|
||||
getName() = "cin" or
|
||||
getName() = "wcin"
|
||||
) and
|
||||
getName() = ["cin", "wcin"] and
|
||||
getNamespace().getName() = "std"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,12 +14,7 @@ import cpp
|
||||
|
||||
predicate potentiallyDangerousFunction(Function f, string message) {
|
||||
exists(string name | f.hasGlobalName(name) |
|
||||
(
|
||||
name = "gmtime" or
|
||||
name = "localtime" or
|
||||
name = "ctime" or
|
||||
name = "asctime"
|
||||
) and
|
||||
name = ["gmtime", "localtime", "ctime", "asctime"] and
|
||||
message = "Call to " + name + " is potentially dangerous"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -19,12 +19,7 @@ predicate worldWritableCreation(FileCreationExpr fc, int mode) {
|
||||
}
|
||||
|
||||
predicate setWorldWritable(FunctionCall fc, int mode) {
|
||||
exists(string name | fc.getTarget().getName() = name |
|
||||
name = "chmod" or
|
||||
name = "fchmod" or
|
||||
name = "_chmod" or
|
||||
name = "_wchmod"
|
||||
) and
|
||||
fc.getTarget().getName() = ["chmod", "fchmod", "_chmod", "_wchmod"] and
|
||||
mode = fc.getArgument(1).getValue().toInt() and
|
||||
sets(mode, s_iwoth())
|
||||
}
|
||||
|
||||
@@ -31,11 +31,7 @@ predicate sets(int mask, int fields) { mask.bitAnd(fields) != 0 }
|
||||
* one of the `umask` family of functions.
|
||||
*/
|
||||
private int umask(FunctionCall fc) {
|
||||
exists(string name | name = fc.getTarget().getName() |
|
||||
name = "umask" or
|
||||
name = "_umask" or
|
||||
name = "_umask_s"
|
||||
) and
|
||||
fc.getTarget().getName() = ["umask", "_umask", "_umask_s"] and
|
||||
result = fc.getArgument(0).getValue().toInt()
|
||||
}
|
||||
|
||||
@@ -89,11 +85,7 @@ abstract class FileCreationExpr extends FunctionCall {
|
||||
|
||||
class OpenCreationExpr extends FileCreationExpr {
|
||||
OpenCreationExpr() {
|
||||
exists(string name | name = this.getTarget().getName() |
|
||||
name = "open" or
|
||||
name = "_open" or
|
||||
name = "_wopen"
|
||||
) and
|
||||
this.getTarget().getName() = ["open", "_open", "_wopen"] and
|
||||
sets(this.getArgument(1).getValue().toInt(), o_creat())
|
||||
}
|
||||
|
||||
@@ -134,14 +126,9 @@ private int fopenMode() {
|
||||
|
||||
class FopenCreationExpr extends FileCreationExpr {
|
||||
FopenCreationExpr() {
|
||||
exists(string name | name = this.getTarget().getName() |
|
||||
name = "fopen" or
|
||||
name = "_wfopen" or
|
||||
name = "fsopen" or
|
||||
name = "_wfsopen"
|
||||
) and
|
||||
this.getTarget().getName() = ["fopen", "_wfopen", "fsopen", "_wfsopen"] and
|
||||
exists(string mode |
|
||||
(mode = "w" or mode = "a") and
|
||||
mode = ["w", "a"] and
|
||||
this.getArgument(1).getValue().matches(mode + "%")
|
||||
)
|
||||
}
|
||||
|
||||
@@ -2,3 +2,4 @@ import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis
|
||||
//
|
||||
// Import each extension we want to enable
|
||||
import extensions.SubtractSelf
|
||||
import extensions.ConstantBitwiseAndExprRange
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
private import cpp
|
||||
private import experimental.semmle.code.cpp.models.interfaces.SimpleRangeAnalysisExpr
|
||||
private import semmle.code.cpp.rangeanalysis.RangeAnalysisUtils
|
||||
|
||||
/**
|
||||
* Holds if `e` is a constant or if it is a variable with a constant value
|
||||
*/
|
||||
float evaluateConstantExpr(Expr e) {
|
||||
result = e.getValue().toFloat()
|
||||
or
|
||||
exists(SsaDefinition defn, StackVariable sv |
|
||||
defn.getAUse(sv) = e and
|
||||
result = defn.getDefiningValue(sv).getValue().toFloat()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* The current implementation for `BitwiseAndExpr` only handles cases where both operands are
|
||||
* either unsigned or non-negative constants. This class not only covers these cases, but also
|
||||
* adds support for `&` expressions between a signed integer with a non-negative range and a
|
||||
* non-negative constant. It also adds support for `&=` for the same set of cases as `&`.
|
||||
*/
|
||||
private class ConstantBitwiseAndExprRange extends SimpleRangeAnalysisExpr {
|
||||
ConstantBitwiseAndExprRange() {
|
||||
exists(Expr l, Expr r |
|
||||
l = this.(BitwiseAndExpr).getLeftOperand() and
|
||||
r = this.(BitwiseAndExpr).getRightOperand()
|
||||
or
|
||||
l = this.(AssignAndExpr).getLValue() and
|
||||
r = this.(AssignAndExpr).getRValue()
|
||||
|
|
||||
// No operands can be negative constants
|
||||
not (evaluateConstantExpr(l) < 0 or evaluateConstantExpr(r) < 0) and
|
||||
// At least one operand must be a non-negative constant
|
||||
(evaluateConstantExpr(l) >= 0 or evaluateConstantExpr(r) >= 0)
|
||||
)
|
||||
}
|
||||
|
||||
Expr getLeftOperand() {
|
||||
result = this.(BitwiseAndExpr).getLeftOperand() or
|
||||
result = this.(AssignAndExpr).getLValue()
|
||||
}
|
||||
|
||||
Expr getRightOperand() {
|
||||
result = this.(BitwiseAndExpr).getRightOperand() or
|
||||
result = this.(AssignAndExpr).getRValue()
|
||||
}
|
||||
|
||||
override float getLowerBounds() {
|
||||
// If an operand can have negative values, the lower bound is unconstrained.
|
||||
// Otherwise, the lower bound is zero.
|
||||
exists(float lLower, float rLower |
|
||||
lLower = getFullyConvertedLowerBounds(getLeftOperand()) and
|
||||
rLower = getFullyConvertedLowerBounds(getRightOperand()) and
|
||||
(
|
||||
(lLower < 0 or rLower < 0) and
|
||||
result = exprMinVal(this)
|
||||
or
|
||||
// This technically results in two lowerBounds when an operand range is negative, but
|
||||
// that's fine since `exprMinVal(x) <= 0`. We can't use an if statement here without
|
||||
// non-monotonic recursion issues
|
||||
result = 0
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override float getUpperBounds() {
|
||||
// If an operand can have negative values, the upper bound is unconstrained.
|
||||
// Otherwise, the upper bound is the minimum of the upper bounds of the operands
|
||||
exists(float lLower, float lUpper, float rLower, float rUpper |
|
||||
lLower = getFullyConvertedLowerBounds(getLeftOperand()) and
|
||||
lUpper = getFullyConvertedUpperBounds(getLeftOperand()) and
|
||||
rLower = getFullyConvertedLowerBounds(getRightOperand()) and
|
||||
rUpper = getFullyConvertedUpperBounds(getRightOperand()) and
|
||||
(
|
||||
(lLower < 0 or rLower < 0) and
|
||||
result = exprMaxVal(this)
|
||||
or
|
||||
// This technically results in two upperBounds when an operand range is negative, but
|
||||
// that's fine since `exprMaxVal(b) >= result`. We can't use an if statement here without
|
||||
// non-monotonic recursion issues
|
||||
result = rUpper.minimum(lUpper)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override predicate dependsOnChild(Expr child) {
|
||||
child = getLeftOperand() or child = getRightOperand()
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,6 @@ import cpp
|
||||
|
||||
from File f
|
||||
where
|
||||
(f.getExtension().toLowerCase() = "h" or f.getExtension().toLowerCase() = "hpp") and
|
||||
f.getExtension().toLowerCase() = ["h", "hpp"] and
|
||||
f.getExtension() != "h"
|
||||
select f, "AV Rule 53: Header files will always have a file name extension of .h."
|
||||
|
||||
@@ -21,8 +21,8 @@ import cpp
|
||||
*/
|
||||
class WarningLateTemplateSpecialization extends CompilerWarning {
|
||||
WarningLateTemplateSpecialization() {
|
||||
this.getTag() = "partial_spec_after_instantiation" or
|
||||
this.getTag() = "partial_spec_after_instantiation_ambiguous"
|
||||
this.getTag() =
|
||||
["partial_spec_after_instantiation", "partial_spec_after_instantiation_ambiguous"]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ private predicate readsEnvironment(Expr read, string sourceDescription) {
|
||||
exists(FunctionCall call, string name |
|
||||
read = call and
|
||||
call.getTarget().hasGlobalOrStdName(name) and
|
||||
(name = "getenv" or name = "secure_getenv" or name = "_wgetenv") and
|
||||
name = ["getenv", "secure_getenv", "_wgetenv"] and
|
||||
sourceDescription = name
|
||||
)
|
||||
}
|
||||
|
||||
@@ -9,10 +9,7 @@ import semmle.code.cpp.models.interfaces.FormattingFunction
|
||||
import semmle.code.cpp.models.implementations.Printf
|
||||
|
||||
class PrintfFormatAttribute extends FormatAttribute {
|
||||
PrintfFormatAttribute() {
|
||||
getArchetype() = "printf" or
|
||||
getArchetype() = "__printf__"
|
||||
}
|
||||
PrintfFormatAttribute() { getArchetype() = ["printf", "__printf__"] }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -601,12 +598,12 @@ class FormatLiteral extends Literal {
|
||||
or
|
||||
len = "l" and result = this.getLongType()
|
||||
or
|
||||
(len = "ll" or len = "L" or len = "q") and
|
||||
len = ["ll", "L", "q"] and
|
||||
result instanceof LongLongType
|
||||
or
|
||||
len = "j" and result = this.getIntmax_t()
|
||||
or
|
||||
(len = "z" or len = "Z") and
|
||||
len = ["z", "Z"] and
|
||||
(result = this.getSize_t() or result = this.getSsize_t())
|
||||
or
|
||||
len = "t" and result = this.getPtrdiff_t()
|
||||
@@ -639,12 +636,12 @@ class FormatLiteral extends Literal {
|
||||
or
|
||||
len = "l" and result = this.getLongType()
|
||||
or
|
||||
(len = "ll" or len = "L" or len = "q") and
|
||||
len = ["ll", "L", "q"] and
|
||||
result instanceof LongLongType
|
||||
or
|
||||
len = "j" and result = this.getIntmax_t()
|
||||
or
|
||||
(len = "z" or len = "Z") and
|
||||
len = ["z", "Z"] and
|
||||
(result = this.getSize_t() or result = this.getSsize_t())
|
||||
or
|
||||
len = "t" and result = this.getPtrdiff_t()
|
||||
@@ -670,9 +667,7 @@ class FormatLiteral extends Literal {
|
||||
FloatingPointType getFloatingPointConversion(int n) {
|
||||
exists(string len |
|
||||
len = this.getLength(n) and
|
||||
if len = "L" or len = "ll"
|
||||
then result instanceof LongDoubleType
|
||||
else result instanceof DoubleType
|
||||
if len = ["L", "ll"] then result instanceof LongDoubleType else result instanceof DoubleType
|
||||
)
|
||||
}
|
||||
|
||||
@@ -689,7 +684,7 @@ class FormatLiteral extends Literal {
|
||||
or
|
||||
len = "l" and base = this.getLongType()
|
||||
or
|
||||
(len = "ll" or len = "L") and
|
||||
len = ["ll", "L"] and
|
||||
base instanceof LongLongType
|
||||
or
|
||||
len = "q" and base instanceof LongLongType
|
||||
@@ -736,12 +731,12 @@ class FormatLiteral extends Literal {
|
||||
exists(string len, string conv |
|
||||
this.parseConvSpec(n, _, _, _, _, _, len, conv) and
|
||||
(
|
||||
(conv = "c" or conv = "C") and
|
||||
conv = ["c", "C"] and
|
||||
len = "h" and
|
||||
result instanceof PlainCharType
|
||||
or
|
||||
(conv = "c" or conv = "C") and
|
||||
(len = "l" or len = "w") and
|
||||
conv = ["c", "C"] and
|
||||
len = ["l", "w"] and
|
||||
result = getWideCharType()
|
||||
or
|
||||
conv = "c" and
|
||||
@@ -781,12 +776,12 @@ class FormatLiteral extends Literal {
|
||||
exists(string len, string conv |
|
||||
this.parseConvSpec(n, _, _, _, _, _, len, conv) and
|
||||
(
|
||||
(conv = "s" or conv = "S") and
|
||||
conv = ["s", "S"] and
|
||||
len = "h" and
|
||||
result.(PointerType).getBaseType() instanceof PlainCharType
|
||||
or
|
||||
(conv = "s" or conv = "S") and
|
||||
(len = "l" or len = "w") and
|
||||
conv = ["s", "S"] and
|
||||
len = ["l", "w"] and
|
||||
result.(PointerType).getBaseType() = getWideCharType()
|
||||
or
|
||||
conv = "s" and
|
||||
@@ -823,10 +818,7 @@ class FormatLiteral extends Literal {
|
||||
|
||||
private Type getConversionType9(int n) {
|
||||
this.getConversionChar(n) = "Z" and
|
||||
(
|
||||
this.getLength(n) = "l" or
|
||||
this.getLength(n) = "w"
|
||||
) and
|
||||
this.getLength(n) = ["l", "w"] and
|
||||
exists(Type t |
|
||||
t.getName() = "UNICODE_STRING" and
|
||||
result.(PointerType).getBaseType() = t
|
||||
@@ -979,10 +971,7 @@ class FormatLiteral extends Literal {
|
||||
len = (afterdot.maximum(1) + 6).maximum(1 + 1 + dot + afterdot + 1 + 1 + 3)
|
||||
) // (e.g. "-1.59203e-319")
|
||||
or
|
||||
(
|
||||
this.getConversionChar(n).toLowerCase() = "d" or
|
||||
this.getConversionChar(n).toLowerCase() = "i"
|
||||
) and
|
||||
this.getConversionChar(n).toLowerCase() = ["d", "i"] and
|
||||
// e.g. -2^31 = "-2147483648"
|
||||
exists(int sizeBits |
|
||||
sizeBits =
|
||||
|
||||
@@ -8,14 +8,13 @@ import cpp
|
||||
*/
|
||||
class StrcatFunction extends Function {
|
||||
StrcatFunction() {
|
||||
exists(string name | name = getName() |
|
||||
name = "strcat" or // strcat(dst, src)
|
||||
name = "strncat" or // strncat(dst, src, max_amount)
|
||||
name = "wcscat" or // wcscat(dst, src)
|
||||
name = "_mbscat" or // _mbscat(dst, src)
|
||||
name = "wcsncat" or // wcsncat(dst, src, max_amount)
|
||||
name = "_mbsncat" or // _mbsncat(dst, src, max_amount)
|
||||
name = "_mbsncat_l" // _mbsncat_l(dst, src, max_amount, locale)
|
||||
)
|
||||
getName() =
|
||||
["strcat", // strcat(dst, src)
|
||||
"strncat", // strncat(dst, src, max_amount)
|
||||
"wcscat", // wcscat(dst, src)
|
||||
"_mbscat", // _mbscat(dst, src)
|
||||
"wcsncat", // wcsncat(dst, src, max_amount)
|
||||
"_mbsncat", // _mbsncat(dst, src, max_amount)
|
||||
"_mbsncat_l"] // _mbsncat_l(dst, src, max_amount, locale)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,4 +167,9 @@ module Consistency {
|
||||
not isImmutableOrUnobservable(n) and
|
||||
msg = "ArgumentNode is missing PostUpdateNode."
|
||||
}
|
||||
|
||||
query predicate postWithInFlow(PostUpdateNode n, string msg) {
|
||||
simpleLocalFlowStep(_, n) and
|
||||
msg = "PostUpdateNode should not be the target of local flow."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,4 +167,9 @@ module Consistency {
|
||||
not isImmutableOrUnobservable(n) and
|
||||
msg = "ArgumentNode is missing PostUpdateNode."
|
||||
}
|
||||
|
||||
query predicate postWithInFlow(PostUpdateNode n, string msg) {
|
||||
simpleLocalFlowStep(_, n) and
|
||||
msg = "PostUpdateNode should not be the target of local flow."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,11 +16,10 @@ import semmle.code.cpp.models.interfaces.FlowSource
|
||||
class GetsFunction extends DataFlowFunction, TaintFunction, ArrayFunction, AliasFunction,
|
||||
SideEffectFunction, RemoteFlowFunction {
|
||||
GetsFunction() {
|
||||
exists(string name | hasGlobalOrStdName(name) |
|
||||
name = "gets" or // gets(str)
|
||||
name = "fgets" or // fgets(str, num, stream)
|
||||
name = "fgetws" // fgetws(wstr, num, stream)
|
||||
)
|
||||
// gets(str)
|
||||
// fgets(str, num, stream)
|
||||
// fgetws(wstr, num, stream)
|
||||
hasGlobalOrStdName(["gets", "fgets", "fgetws"])
|
||||
}
|
||||
|
||||
override predicate hasDataFlow(FunctionInput input, FunctionOutput output) {
|
||||
|
||||
@@ -4,16 +4,13 @@ import semmle.code.cpp.models.interfaces.DataFlow
|
||||
import semmle.code.cpp.models.interfaces.SideEffect
|
||||
|
||||
/**
|
||||
* The standard function templates `std::move` and `std::identity`
|
||||
* The standard function templates `std::move` and `std::forward`.
|
||||
*/
|
||||
class IdentityFunction extends DataFlowFunction, SideEffectFunction, AliasFunction {
|
||||
IdentityFunction() {
|
||||
this.getNamespace().getParentNamespace() instanceof GlobalNamespace and
|
||||
this.getNamespace().getName() = "std" and
|
||||
(
|
||||
this.getName() = "move" or
|
||||
this.getName() = "forward"
|
||||
)
|
||||
this.getName() = ["move", "forward"]
|
||||
}
|
||||
|
||||
override predicate hasOnlySpecificReadSideEffects() { any() }
|
||||
|
||||
@@ -52,7 +52,58 @@ class StdMapInsert extends TaintFunction {
|
||||
}
|
||||
|
||||
/**
|
||||
* The standard map `swap` functions.
|
||||
* The standard map `emplace` and `emplace_hint` functions.
|
||||
*/
|
||||
class StdMapEmplace extends TaintFunction {
|
||||
StdMapEmplace() {
|
||||
this.hasQualifiedName("std", ["map", "unordered_map"], ["emplace", "emplace_hint"])
|
||||
}
|
||||
|
||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||
// flow from the last parameter (which may be the value part used to
|
||||
// construct a pair, or a pair to be copied / moved) to the qualifier and
|
||||
// return value.
|
||||
// (where the return value is a pair, this should really flow just to the first part of it)
|
||||
input.isParameterDeref(getNumberOfParameters() - 1) and
|
||||
(
|
||||
output.isQualifierObject() or
|
||||
output.isReturnValue()
|
||||
)
|
||||
or
|
||||
input.isQualifierObject() and
|
||||
output.isReturnValue()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The standard map `try_emplace` function.
|
||||
*/
|
||||
class StdMapTryEmplace extends TaintFunction {
|
||||
StdMapTryEmplace() { this.hasQualifiedName("std", ["map", "unordered_map"], "try_emplace") }
|
||||
|
||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||
// flow from any parameter apart from the key to qualifier and return value
|
||||
// (here we assume taint flow from any constructor parameter to the constructed object)
|
||||
// (where the return value is a pair, this should really flow just to the first part of it)
|
||||
exists(int arg | arg = [1 .. getNumberOfParameters() - 1] |
|
||||
(
|
||||
not getUnspecifiedType() instanceof Iterator or
|
||||
arg != 1
|
||||
) and
|
||||
input.isParameterDeref(arg)
|
||||
) and
|
||||
(
|
||||
output.isQualifierObject() or
|
||||
output.isReturnValue()
|
||||
)
|
||||
or
|
||||
input.isQualifierObject() and
|
||||
output.isReturnValue()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The standard map `swap` function.
|
||||
*/
|
||||
class StdMapSwap extends TaintFunction {
|
||||
StdMapSwap() { this.hasQualifiedName("std", ["map", "unordered_map"], "swap") }
|
||||
@@ -67,6 +118,19 @@ class StdMapSwap extends TaintFunction {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The standard map `merge` function.
|
||||
*/
|
||||
class StdMapMerge extends TaintFunction {
|
||||
StdMapMerge() { this.hasQualifiedName("std", ["map", "unordered_map"], "merge") }
|
||||
|
||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||
// container1.merge(container2)
|
||||
input.isParameterDeref(0) and
|
||||
output.isQualifierObject()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The standard map functions `at` and `operator[]`.
|
||||
*/
|
||||
@@ -109,3 +173,20 @@ class StdMapErase extends TaintFunction {
|
||||
output.isReturnValue()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The standard map `lower_bound`, `upper_bound` and `equal_range` functions.
|
||||
*/
|
||||
class StdMapEqualRange extends TaintFunction {
|
||||
StdMapEqualRange() {
|
||||
this
|
||||
.hasQualifiedName("std", ["map", "unordered_map"],
|
||||
["lower_bound", "upper_bound", "equal_range"])
|
||||
}
|
||||
|
||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||
// flow from qualifier to return value
|
||||
input.isQualifierObject() and
|
||||
output.isReturnValue()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,43 +13,24 @@ import semmle.code.cpp.models.interfaces.SideEffect
|
||||
*/
|
||||
class StrcpyFunction extends ArrayFunction, DataFlowFunction, TaintFunction, SideEffectFunction {
|
||||
StrcpyFunction() {
|
||||
exists(string name | name = getName() |
|
||||
// strcpy(dst, src)
|
||||
name = "strcpy"
|
||||
or
|
||||
// wcscpy(dst, src)
|
||||
name = "wcscpy"
|
||||
or
|
||||
// _mbscpy(dst, src)
|
||||
name = "_mbscpy"
|
||||
or
|
||||
(
|
||||
name = "strcpy_s" or // strcpy_s(dst, max_amount, src)
|
||||
name = "wcscpy_s" or // wcscpy_s(dst, max_amount, src)
|
||||
name = "_mbscpy_s" // _mbscpy_s(dst, max_amount, src)
|
||||
) and
|
||||
// exclude the 2-parameter template versions
|
||||
// that find the size of a fixed size destination buffer.
|
||||
getNumberOfParameters() = 3
|
||||
or
|
||||
// strncpy(dst, src, max_amount)
|
||||
name = "strncpy"
|
||||
or
|
||||
// _strncpy_l(dst, src, max_amount, locale)
|
||||
name = "_strncpy_l"
|
||||
or
|
||||
// wcsncpy(dst, src, max_amount)
|
||||
name = "wcsncpy"
|
||||
or
|
||||
// _wcsncpy_l(dst, src, max_amount, locale)
|
||||
name = "_wcsncpy_l"
|
||||
or
|
||||
// _mbsncpy(dst, src, max_amount)
|
||||
name = "_mbsncpy"
|
||||
or
|
||||
// _mbsncpy_l(dst, src, max_amount, locale)
|
||||
name = "_mbsncpy_l"
|
||||
)
|
||||
getName() =
|
||||
["strcpy", // strcpy(dst, src)
|
||||
"wcscpy", // wcscpy(dst, src)
|
||||
"_mbscpy", // _mbscpy(dst, src)
|
||||
"strncpy", // strncpy(dst, src, max_amount)
|
||||
"_strncpy_l", // _strncpy_l(dst, src, max_amount, locale)
|
||||
"wcsncpy", // wcsncpy(dst, src, max_amount)
|
||||
"_wcsncpy_l", // _wcsncpy_l(dst, src, max_amount, locale)
|
||||
"_mbsncpy", // _mbsncpy(dst, src, max_amount)
|
||||
"_mbsncpy_l"] // _mbsncpy_l(dst, src, max_amount, locale)
|
||||
or
|
||||
getName() =
|
||||
["strcpy_s", // strcpy_s(dst, max_amount, src)
|
||||
"wcscpy_s", // wcscpy_s(dst, max_amount, src)
|
||||
"_mbscpy_s"] and // _mbscpy_s(dst, max_amount, src)
|
||||
// exclude the 2-parameter template versions
|
||||
// that find the size of a fixed size destination buffer.
|
||||
getNumberOfParameters() = 3
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -460,6 +460,39 @@ private predicate isRecursiveDef(RangeSsaDefinition def, StackVariable v) {
|
||||
defDependsOnDefTransitively(def, v, def, v)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the bounds of `e` depend on a recursive definition, meaning that
|
||||
* `e` is likely to have many candidate bounds during the main recursion.
|
||||
*/
|
||||
private predicate isRecursiveExpr(Expr e) {
|
||||
exists(RangeSsaDefinition def, StackVariable v | exprDependsOnDef(e, def, v) |
|
||||
isRecursiveDef(def, v)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `binop` is a binary operation that's likely to be assigned a
|
||||
* quadratic (or more) number of candidate bounds during the analysis. This can
|
||||
* happen when two conditions are satisfied:
|
||||
* 1. It is likely there are many more candidate bounds for `binop` than for
|
||||
* its operands. For example, the number of candidate bounds for `x + y`,
|
||||
* denoted here nbounds(`x + y`), will be O(nbounds(`x`) * nbounds(`y`)).
|
||||
* In contrast, nbounds(`b ? x : y`) is only O(nbounds(`x`) + nbounds(`y`)).
|
||||
* 2. Both operands of `binop` are recursively determined and are therefore
|
||||
* likely to have a large number of candidate bounds.
|
||||
*/
|
||||
private predicate isRecursiveBinary(BinaryOperation binop) {
|
||||
(
|
||||
binop instanceof UnsignedMulExpr
|
||||
or
|
||||
binop instanceof AddExpr
|
||||
or
|
||||
binop instanceof SubExpr
|
||||
) and
|
||||
isRecursiveExpr(binop.getLeftOperand()) and
|
||||
isRecursiveExpr(binop.getRightOperand())
|
||||
}
|
||||
|
||||
/**
|
||||
* We distinguish 3 kinds of RangeSsaDefinition:
|
||||
*
|
||||
@@ -581,7 +614,16 @@ private float getTruncatedLowerBounds(Expr expr) {
|
||||
// overflow, so we replace invalid bounds with exprMinVal.
|
||||
exists(float newLB | newLB = normalizeFloatUp(getLowerBoundsImpl(expr)) |
|
||||
if exprMinVal(expr) <= newLB and newLB <= exprMaxVal(expr)
|
||||
then result = newLB
|
||||
then
|
||||
// Apply widening where we might get a combinatorial explosion.
|
||||
if isRecursiveBinary(expr)
|
||||
then
|
||||
result =
|
||||
max(float widenLB |
|
||||
widenLB = wideningLowerBounds(expr.getUnspecifiedType()) and
|
||||
not widenLB > newLB
|
||||
)
|
||||
else result = newLB
|
||||
else result = exprMinVal(expr)
|
||||
)
|
||||
or
|
||||
@@ -628,7 +670,16 @@ private float getTruncatedUpperBounds(Expr expr) {
|
||||
// `exprMaxVal`.
|
||||
exists(float newUB | newUB = normalizeFloatUp(getUpperBoundsImpl(expr)) |
|
||||
if exprMinVal(expr) <= newUB and newUB <= exprMaxVal(expr)
|
||||
then result = newUB
|
||||
then
|
||||
// Apply widening where we might get a combinatorial explosion.
|
||||
if isRecursiveBinary(expr)
|
||||
then
|
||||
result =
|
||||
min(float widenUB |
|
||||
widenUB = wideningUpperBounds(expr.getUnspecifiedType()) and
|
||||
not widenUB < newUB
|
||||
)
|
||||
else result = newUB
|
||||
else result = exprMaxVal(expr)
|
||||
)
|
||||
or
|
||||
|
||||
@@ -354,11 +354,10 @@ class SnprintfBW extends BufferWriteCall {
|
||||
*/
|
||||
class GetsBW extends BufferWriteCall {
|
||||
GetsBW() {
|
||||
exists(TopLevelFunction fn, string name | fn = getTarget() and name = fn.getName() |
|
||||
name = "gets" or // gets(dst)
|
||||
name = "fgets" or // fgets(dst, max_amount, src_stream)
|
||||
name = "fgetws" // fgetws(dst, max_amount, src_stream)
|
||||
)
|
||||
getTarget().(TopLevelFunction).getName() =
|
||||
["gets", // gets(dst)
|
||||
"fgets", // fgets(dst, max_amount, src_stream)
|
||||
"fgetws"] // fgetws(dst, max_amount, src_stream)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -123,9 +123,7 @@ class WriteFunctionCall extends ChainedOutputCall {
|
||||
private predicate fileStreamChain(ChainedOutputCall out, Expr source, Expr dest) {
|
||||
source = out.getSource() and
|
||||
dest = out.getEndDest() and
|
||||
exists(string nme | nme = "basic_ofstream" or nme = "basic_fstream" |
|
||||
dest.getUnderlyingType().(Class).getSimpleName() = nme
|
||||
)
|
||||
dest.getUnderlyingType().(Class).getSimpleName() = ["basic_ofstream", "basic_fstream"]
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -139,15 +137,7 @@ private predicate fileWrite(Call write, Expr source, Expr dest) {
|
||||
// named functions
|
||||
name = "fwrite" and s = 0 and d = 3
|
||||
or
|
||||
(
|
||||
name = "fputs" or
|
||||
name = "fputws" or
|
||||
name = "fputc" or
|
||||
name = "fputwc" or
|
||||
name = "putc" or
|
||||
name = "putwc" or
|
||||
name = "putw"
|
||||
) and
|
||||
name = ["fputs", "fputws", "fputc", "fputwc", "putc", "putwc", "putw"] and
|
||||
s = 0 and
|
||||
d = 1
|
||||
)
|
||||
|
||||
@@ -48,10 +48,7 @@ private predicate outputFile(Expr e) {
|
||||
name = e.(VariableAccess).getTarget().(GlobalVariable).toString() or
|
||||
name = e.findRootCause().(Macro).getName()
|
||||
) and
|
||||
(
|
||||
name = "stdout" or
|
||||
name = "stderr"
|
||||
)
|
||||
name = ["stdout", "stderr"]
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -252,11 +252,10 @@ private predicate insideFunctionValueMoveTo(Element src, Element dest) {
|
||||
copyValueBetweenArguments(c.getTarget(), sourceArg, destArg) and
|
||||
// Only consider copies from `printf`-like functions if the format is a string
|
||||
(
|
||||
exists(FormattingFunctionCall ffc, FormatLiteral format, string argFormat |
|
||||
exists(FormattingFunctionCall ffc, FormatLiteral format |
|
||||
ffc = c and
|
||||
format = ffc.getFormat() and
|
||||
format.getConversionChar(sourceArg - ffc.getTarget().getNumberOfParameters()) = argFormat and
|
||||
(argFormat = "s" or argFormat = "S")
|
||||
format.getConversionChar(sourceArg - ffc.getTarget().getNumberOfParameters()) = ["s", "S"]
|
||||
)
|
||||
or
|
||||
not exists(FormatLiteral fl | fl = c.(FormattingFunctionCall).getFormat())
|
||||
@@ -273,12 +272,12 @@ private predicate insideFunctionValueMoveTo(Element src, Element dest) {
|
||||
dest = c
|
||||
)
|
||||
or
|
||||
exists(FormattingFunctionCall formattingSend, int arg, FormatLiteral format, string argFormat |
|
||||
exists(FormattingFunctionCall formattingSend, int arg, FormatLiteral format |
|
||||
dest = formattingSend and
|
||||
formattingSend.getArgument(arg) = src and
|
||||
format = formattingSend.getFormat() and
|
||||
format.getConversionChar(arg - formattingSend.getTarget().getNumberOfParameters()) = argFormat and
|
||||
(argFormat = "s" or argFormat = "S" or argFormat = "@")
|
||||
format.getConversionChar(arg - formattingSend.getTarget().getNumberOfParameters()) =
|
||||
["s", "S", "@"]
|
||||
)
|
||||
or
|
||||
// Expressions computed from tainted data are also tainted
|
||||
|
||||
@@ -65,15 +65,8 @@ class UMLElement extends XMLElement {
|
||||
*/
|
||||
class UMLType extends UMLElement {
|
||||
UMLType() {
|
||||
exists(string type |
|
||||
this.getName() = "packagedElement" and
|
||||
this.getAttribute("type").getValue() = type and
|
||||
(
|
||||
type = "uml:Class" or
|
||||
type = "uml:Interface" or
|
||||
type = "uml:PrimitiveType"
|
||||
)
|
||||
)
|
||||
this.getName() = "packagedElement" and
|
||||
this.getAttribute("type").getValue() = ["uml:Class", "uml:Interface", "uml:PrimitiveType"]
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
typedef unsigned char uint8_t;
|
||||
typedef signed char int8_t;
|
||||
typedef unsigned uint32_t;
|
||||
typedef signed long long int64_t;
|
||||
|
||||
void test_assign_operator(uint8_t x) {
|
||||
x &= 7; // [0 .. 7]
|
||||
}
|
||||
|
||||
void test_non_negative_const(uint8_t x) {
|
||||
uint8_t unsigned_const = 7;
|
||||
|
||||
// Non-negative range operand and non-negative constant. The operands are promoted
|
||||
// to signed ints.
|
||||
x & 0; // [0 .. 0]
|
||||
x & 7; // [0 .. 7]
|
||||
x & unsigned_const; // [0 .. 7]
|
||||
|
||||
// This tests what happens when both arguments are promoted to `unsigned int` instead
|
||||
// of `int`, and when the constant is larger than the max bound
|
||||
x & 0xFFFFFFFF; // [0 .. 255]
|
||||
}
|
||||
|
||||
void test_non_const(uint8_t a, uint8_t b, uint32_t c, uint32_t d) {
|
||||
if (b <= 100) {
|
||||
// `a` and `b` are promoted to signed ints, meaning neither the range analysis library
|
||||
// nor this extension handle it
|
||||
a & b; // [-2147483648 .. 2147483647]
|
||||
}
|
||||
if (d <= 100) {
|
||||
// Handled by the range analysis library
|
||||
c & d; // [0 .. 100]
|
||||
}
|
||||
}
|
||||
|
||||
void test_negative_operand(uint8_t x, int8_t y) {
|
||||
uint8_t unsigned_const = 7;
|
||||
int8_t signed_const = -7;
|
||||
|
||||
// The right operand can be negative
|
||||
x & -7; // [-2147483648 .. 2147483647]
|
||||
x & signed_const; // [-2147483648 .. 2147483647]
|
||||
x & y; // [-2147483648 .. 2147483647]
|
||||
|
||||
// The left operand can be negative
|
||||
y & 7; // [-2147483648 .. 2147483647]
|
||||
y & unsigned_const; // [-2147483648 .. 2147483647]
|
||||
y & 0xFFFFFFFF; // [0 .. 4294967295]
|
||||
(int64_t)y & 0xFFFFFFFF; // [-9223372036854776000 .. 9223372036854776000]
|
||||
y & x; // [-2147483648 .. 2147483647]
|
||||
|
||||
// Both can be negative
|
||||
y & -7; // [-2147483648 .. 2147483647]
|
||||
y & signed_const; // [-2147483648 .. 2147483647]
|
||||
signed_const & -7; // [-2147483648 .. 2147483647]
|
||||
signed_const & y; // [-2147483648 .. 2147483647]
|
||||
-7 & y; // [-2147483648 .. 2147483647]
|
||||
-7 & signed_const; // [-2147483648 .. 2147483647]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
| bitwiseand.cpp:7:3:7:8 | ... &= ... | 0.0 | 7.0 |
|
||||
| bitwiseand.cpp:15:3:15:7 | ... & ... | 0.0 | 0.0 |
|
||||
| bitwiseand.cpp:16:3:16:7 | ... & ... | 0.0 | 7.0 |
|
||||
| bitwiseand.cpp:17:3:17:20 | ... & ... | 0.0 | 7.0 |
|
||||
| bitwiseand.cpp:21:3:21:16 | ... & ... | 0.0 | 255.0 |
|
||||
| bitwiseand.cpp:28:5:28:9 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:32:5:32:9 | ... & ... | 0.0 | 100.0 |
|
||||
| bitwiseand.cpp:41:3:41:8 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:42:3:42:18 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:43:3:43:7 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:46:3:46:7 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:47:3:47:20 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:48:3:48:16 | ... & ... | 0.0 | 4.294967295E9 |
|
||||
| bitwiseand.cpp:49:3:49:25 | ... & ... | -9.223372036854776E18 | 9.223372036854776E18 |
|
||||
| bitwiseand.cpp:50:3:50:7 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:53:3:53:8 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:54:3:54:18 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:55:3:55:19 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:56:3:56:18 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:57:3:57:8 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
| bitwiseand.cpp:58:3:58:19 | ... & ... | -2.147483648E9 | 2.147483647E9 |
|
||||
@@ -0,0 +1,8 @@
|
||||
import experimental.semmle.code.cpp.rangeanalysis.ExtendedRangeAnalysis
|
||||
|
||||
from Operation expr, float lower, float upper
|
||||
where
|
||||
(expr instanceof BitwiseAndExpr or expr instanceof AssignAndExpr) and
|
||||
lower = lowerBound(expr) and
|
||||
upper = upperBound(expr)
|
||||
select expr, lower, upper
|
||||
@@ -21,3 +21,69 @@ argHasPostUpdate
|
||||
| lambdas.cpp:38:2:38:2 | d | ArgumentNode is missing PostUpdateNode. |
|
||||
| lambdas.cpp:45:2:45:2 | e | ArgumentNode is missing PostUpdateNode. |
|
||||
| test.cpp:67:29:67:35 | source1 | ArgumentNode is missing PostUpdateNode. |
|
||||
postWithInFlow
|
||||
| BarrierGuard.cpp:49:6:49:6 | x [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| BarrierGuard.cpp:60:7:60:7 | x [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:22:9:22:20 | sourceArray1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:28:22:28:23 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:50:3:50:12 | stackArray [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:50:3:50:15 | access to array [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| dispatch.cpp:60:3:60:14 | globalBottom [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| dispatch.cpp:61:3:61:14 | globalMiddle [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| dispatch.cpp:78:24:78:37 | call to allocateBottom [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| dispatch.cpp:148:5:148:5 | f [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| dispatch.cpp:168:8:168:8 | f [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:24:9:24:9 | x [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:24:20:24:20 | y [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:26:9:26:9 | x [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:26:19:26:24 | coords [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:28:23:28:25 | pos [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| globals.cpp:13:5:13:19 | flowTestGlobal1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| globals.cpp:23:5:23:19 | flowTestGlobal2 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| lambdas.cpp:23:3:23:14 | v [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| lambdas.cpp:43:3:43:3 | c [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:11:5:11:7 | lhs [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:11:5:11:7 | lhs [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:20:5:20:7 | lhs [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:22:7:22:9 | lhs [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:24:7:24:9 | lhs [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:29:5:29:7 | out [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:31:7:31:9 | out [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:39:7:39:9 | out [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:44:5:44:7 | out [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:46:7:46:9 | out [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:48:7:48:9 | out [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:75:9:75:11 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:83:9:83:11 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:87:11:87:13 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:89:11:89:13 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:94:9:94:11 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:96:11:96:13 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:104:11:104:13 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:109:9:109:11 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:113:11:113:13 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:115:11:115:13 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:91:3:91:9 | source1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:115:3:115:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:115:4:115:6 | out [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:120:3:120:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:120:4:120:6 | out [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:125:3:125:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:125:4:125:6 | out [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:333:5:333:13 | globalVar [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:347:5:347:13 | globalVar [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:359:5:359:9 | field [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:373:5:373:9 | field [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:384:10:384:13 | ref arg & ... | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:384:11:384:13 | tmp [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:391:10:391:13 | ref arg & ... | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:391:11:391:13 | tmp [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:400:10:400:13 | ref arg & ... | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:400:11:400:13 | tmp [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:407:10:407:13 | ref arg & ... | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:407:11:407:13 | tmp [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:423:21:423:25 | local [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:436:19:436:23 | local [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:465:3:465:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:465:4:465:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:470:22:470:22 | x [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
|
||||
@@ -30,3 +30,56 @@ uniquePostUpdate
|
||||
postIsInSameCallable
|
||||
reverseRead
|
||||
argHasPostUpdate
|
||||
postWithInFlow
|
||||
| BarrierGuard.cpp:49:3:49:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| BarrierGuard.cpp:60:3:60:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:28:3:28:34 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:34:22:34:27 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:34:32:34:37 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:39:32:39:37 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:39:42:39:47 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:43:35:43:40 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:43:51:43:51 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:49:25:49:30 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:49:35:49:40 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| clang.cpp:50:3:50:26 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:17:19:17:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:17:21:17:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:24:2:24:30 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:24:13:24:30 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| example.c:26:2:26:25 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| file://:0:0:0:0 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| file://:0:0:0:0 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| file://:0:0:0:0 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| lambdas.cpp:13:12:13:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| lambdas.cpp:13:15:13:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| lambdas.cpp:28:10:31:2 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| lambdas.cpp:28:10:31:2 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| lambdas.cpp:43:3:43:14 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:11:5:11:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:20:5:20:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:22:7:22:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:24:7:24:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:29:5:29:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:31:7:31:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:39:7:39:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:44:5:44:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:46:7:46:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:48:7:48:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:75:5:75:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:83:5:83:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:87:7:87:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:89:7:89:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:94:5:94:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:96:7:96:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:104:7:104:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:109:5:109:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:113:7:113:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ref.cpp:115:7:115:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:91:3:91:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:115:3:115:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:120:3:120:10 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:125:3:125:11 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:359:5:359:20 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:373:5:373:20 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| test.cpp:465:3:465:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
|
||||
@@ -39,3 +39,111 @@ argHasPostUpdate
|
||||
| by_reference.cpp:51:8:51:8 | s | ArgumentNode is missing PostUpdateNode. |
|
||||
| by_reference.cpp:57:8:57:8 | s | ArgumentNode is missing PostUpdateNode. |
|
||||
| by_reference.cpp:63:8:63:8 | s | ArgumentNode is missing PostUpdateNode. |
|
||||
postWithInFlow
|
||||
| A.cpp:25:13:25:13 | c [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:27:28:27:28 | c [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:42:11:42:12 | cc [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:43:11:43:12 | ct [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:100:9:100:9 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:142:10:142:10 | c [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:143:13:143:13 | b [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:183:7:183:10 | head [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:184:13:184:16 | next [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| B.cpp:35:13:35:17 | elem1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| B.cpp:36:13:36:17 | elem2 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| B.cpp:46:13:46:16 | box1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| C.cpp:24:11:24:12 | s3 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:9:21:9:24 | elem [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:11:29:11:32 | elem [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:16:21:16:23 | box [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:18:29:18:31 | box [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:30:13:30:16 | elem [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:44:19:44:22 | elem [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:57:5:57:12 | boxfield [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:58:20:58:23 | elem [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| E.cpp:33:19:33:19 | p [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:9:6:9:7 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:13:5:13:6 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:17:5:17:6 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:25:18:25:19 | s1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:37:8:37:9 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:42:6:42:7 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:49:9:49:10 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:54:6:54:7 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:60:6:60:7 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:72:5:72:6 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:79:6:79:7 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:86:5:86:6 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:92:7:92:8 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:98:5:98:6 | m1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:106:3:106:5 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:106:4:106:5 | pa [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:111:18:111:19 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:126:15:126:16 | xs [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:136:16:136:17 | xs [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:147:16:147:16 | s [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:147:21:147:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:175:21:175:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:181:21:181:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:187:21:187:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:194:21:194:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:200:23:200:24 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:205:23:205:24 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:6:3:6:5 | arr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:6:3:6:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:15:3:15:10 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:15:5:15:7 | arr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:36:12:36:14 | arr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:36:19:36:22 | data [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:37:17:37:19 | arr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:38:17:38:19 | arr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:42:15:42:17 | arr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:42:22:42:25 | data [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:43:20:43:22 | arr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:44:20:44:22 | arr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:48:15:48:17 | ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:48:22:48:25 | data [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:49:20:49:22 | ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:50:20:50:22 | ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:12:8:12:8 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:16:11:16:11 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:68:18:68:18 | s [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:84:10:84:10 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:88:9:88:9 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:92:3:92:5 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:92:4:92:5 | pa [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:96:3:96:4 | pa [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:102:28:102:39 | inner_nested [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:104:22:104:22 | a [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:106:30:106:41 | inner_nested [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:108:24:108:24 | a [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| complex.cpp:11:22:11:23 | a_ [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| complex.cpp:12:22:12:23 | b_ [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| constructors.cpp:20:24:20:25 | a_ [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| constructors.cpp:21:24:21:25 | b_ [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:9:36:9:36 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:12:56:12:56 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:13:57:13:57 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:22:23:22:23 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:42:25:42:25 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:47:7:47:11 | outer [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:47:27:47:27 | a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:49:13:49:15 | bar [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:49:20:49:22 | baz [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:53:13:53:15 | bar [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:53:35:53:43 | bufferLen [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:54:20:54:22 | bar [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:60:16:60:18 | ref arg dst | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:61:25:61:27 | bar [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:65:25:65:27 | bar [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:20:24:20:25 | a_ [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:21:24:21:25 | b_ [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:65:7:65:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:83:12:83:13 | f1 [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:92:7:92:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:24:11:24:12 | ab [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:36:17:36:24 | nestedAB [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
|
||||
@@ -22,3 +22,129 @@ uniquePostUpdate
|
||||
postIsInSameCallable
|
||||
reverseRead
|
||||
argHasPostUpdate
|
||||
postWithInFlow
|
||||
| A.cpp:25:7:25:17 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:27:22:27:32 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:98:12:98:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:100:5:100:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:142:7:142:20 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:143:7:143:31 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:183:7:183:20 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| A.cpp:184:7:184:23 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| B.cpp:6:15:6:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| B.cpp:15:15:15:27 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| B.cpp:35:7:35:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| B.cpp:36:7:36:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| B.cpp:46:7:46:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| C.cpp:22:12:22:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| C.cpp:22:12:22:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| C.cpp:24:5:24:25 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| C.cpp:24:16:24:25 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:9:21:9:28 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:11:29:11:36 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:16:21:16:27 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:18:29:18:35 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:28:15:28:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:35:15:35:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:42:15:42:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:49:15:49:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:56:15:56:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| D.cpp:57:5:57:42 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:9:3:9:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:13:3:13:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:17:3:17:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:21:12:21:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:21:15:21:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:22:12:22:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:22:15:22:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:23:12:23:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:23:15:23:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:35:12:35:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:35:15:35:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:37:3:37:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:40:12:40:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:40:15:40:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:42:3:42:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:47:12:47:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:47:15:47:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:49:3:49:25 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:52:12:52:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:52:15:52:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:54:3:54:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:59:12:59:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:59:15:59:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:60:3:60:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:70:19:70:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:70:22:70:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:72:3:72:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:77:19:77:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:77:22:77:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:79:3:79:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:84:19:84:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:84:22:84:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:86:3:86:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:91:19:91:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:91:22:91:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:92:3:92:23 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:98:3:98:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:106:3:106:20 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:111:15:111:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:147:15:147:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:175:15:175:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:181:15:181:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:187:15:187:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:194:15:194:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:200:15:200:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aliasing.cpp:205:15:205:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:5:18:5:23 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:5:21:5:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:6:3:6:23 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:14:18:14:23 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:14:21:14:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:15:3:15:25 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| arrays.cpp:36:3:36:37 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:12:5:12:16 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:16:5:16:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:84:3:84:25 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:88:3:88:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:92:3:92:20 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:96:3:96:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:102:21:102:39 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:104:15:104:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:106:21:106:41 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:108:15:108:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:122:21:122:38 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:124:15:124:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:126:21:126:40 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| by_reference.cpp:128:15:128:23 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| complex.cpp:11:22:11:27 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| complex.cpp:12:22:12:27 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| complex.cpp:14:26:14:26 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| complex.cpp:14:33:14:33 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| constructors.cpp:20:24:20:29 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| constructors.cpp:21:24:21:29 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| constructors.cpp:23:28:23:28 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| constructors.cpp:23:35:23:35 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:9:30:9:44 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:12:49:12:64 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| qualifiers.cpp:13:51:13:65 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:39:12:39:95 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| realistic.cpp:49:9:49:64 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:20:24:20:29 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:21:24:21:29 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:23:28:23:28 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:23:35:23:35 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:65:5:65:22 | Store | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:83:9:83:28 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| simple.cpp:92:5:92:22 | Store | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:20:20:20:29 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:20:34:20:34 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:27:7:27:16 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:27:21:27:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:28:5:28:7 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:36:10:36:24 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:40:20:40:29 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:40:34:40:34 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:42:7:42:16 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:42:21:42:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| struct_init.c:43:5:43:7 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,11 +7,14 @@ char *source();
|
||||
|
||||
void sink(char *);
|
||||
void sink(const char *);
|
||||
void sink(bool);
|
||||
void sink(std::pair<char *, char *>);
|
||||
void sink(std::map<char *, char *>);
|
||||
void sink(std::map<char *, char *>::iterator);
|
||||
void sink(std::unordered_map<char *, char *>);
|
||||
void sink(std::unordered_map<char *, char *>::iterator);
|
||||
void sink(std::unordered_map<char *, std::pair<int, int> >);
|
||||
void sink(std::unordered_map<char *, std::pair<int, int> >::iterator);
|
||||
|
||||
void test_pair()
|
||||
{
|
||||
@@ -176,12 +179,12 @@ void test_map()
|
||||
m14.insert(std::make_pair("b", source()));
|
||||
m14.insert(std::make_pair("c", source()));
|
||||
m14.insert(std::make_pair("d", "d"));
|
||||
sink(m2.lower_bound("b")); // tainted [NOT DETECTED]
|
||||
sink(m2.upper_bound("b")); // tainted [NOT DETECTED]
|
||||
sink(m2.equal_range("b").first); // tainted [NOT DETECTED]
|
||||
sink(m2.equal_range("b").second); // tainted [NOT DETECTED]
|
||||
sink(m2.upper_bound("c"));
|
||||
sink(m2.equal_range("c").second);
|
||||
sink(m2.lower_bound("b")); // tainted
|
||||
sink(m2.upper_bound("b")); // tainted
|
||||
sink(m2.equal_range("b").first); // tainted
|
||||
sink(m2.equal_range("b").second); // tainted
|
||||
sink(m2.upper_bound("c")); // [FALSE POSITIVE]
|
||||
sink(m2.equal_range("c").second); // [FALSE POSITIVE]
|
||||
|
||||
// swap
|
||||
std::map<char *, char *> m15, m16, m17, m18;
|
||||
@@ -208,11 +211,11 @@ void test_map()
|
||||
sink(m20);
|
||||
sink(m21);
|
||||
sink(m22); // tainted
|
||||
m15.merge(m16);
|
||||
m17.merge(m18);
|
||||
m19.merge(m20);
|
||||
m21.merge(m22);
|
||||
sink(m19); // tainted
|
||||
sink(m20); // tainted [NOT DETECTED]
|
||||
sink(m21); // tainted [NOT DETECTED]
|
||||
sink(m20);
|
||||
sink(m21); // tainted
|
||||
sink(m22); // tainted
|
||||
|
||||
// erase, clear
|
||||
@@ -229,23 +232,23 @@ void test_map()
|
||||
std::map<char *, char *> m24, m25;
|
||||
sink(m24.emplace("abc", "def").first);
|
||||
sink(m24);
|
||||
sink(m24.emplace("abc", source()).first); // tainted [NOT DETECTED]
|
||||
sink(m24); // tainted [NOT DETECTED]
|
||||
sink(m24.emplace("abc", source()).first); // tainted
|
||||
sink(m24); // tainted
|
||||
sink(m25.emplace_hint(m25.begin(), "abc", "def"));
|
||||
sink(m25);
|
||||
sink(m25.emplace_hint(m25.begin(), "abc", source())); // tainted [NOT DETECTED]
|
||||
sink(m25); // tainted [NOT DETECTED]
|
||||
sink(m25.emplace_hint(m25.begin(), "abc", source())); // tainted
|
||||
sink(m25); // tainted
|
||||
|
||||
// try_emplace
|
||||
std::map<char *, char *> m26, m27;
|
||||
sink(m26.try_emplace("abc", "def").first);
|
||||
sink(m26);
|
||||
sink(m26.try_emplace("abc", source()).first); // tainted [NOT DETECTED]
|
||||
sink(m26); // tainted [NOT DETECTED]
|
||||
sink(m26.try_emplace("abc", source()).first); // tainted
|
||||
sink(m26); // tainted
|
||||
sink(m27.try_emplace(m27.begin(), "abc", "def"));
|
||||
sink(m27);
|
||||
sink(m27.try_emplace(m27.begin(), "abc", source())); // tainted [NOT DETECTED]
|
||||
sink(m27); // tainted [NOT DETECTED]
|
||||
sink(m27.try_emplace(m27.begin(), "abc", source())); // tainted
|
||||
sink(m27); // tainted
|
||||
}
|
||||
|
||||
void test_unordered_map()
|
||||
@@ -328,9 +331,9 @@ void test_unordered_map()
|
||||
m14.insert(std::make_pair("b", source()));
|
||||
m14.insert(std::make_pair("c", source()));
|
||||
m14.insert(std::make_pair("d", "d"));
|
||||
sink(m2.equal_range("b").first); // tainted [NOT DETECTED]
|
||||
sink(m2.equal_range("b").second); // tainted [NOT DETECTED]
|
||||
sink(m2.equal_range("c").second);
|
||||
sink(m2.equal_range("b").first); // tainted
|
||||
sink(m2.equal_range("b").second); // tainted
|
||||
sink(m2.equal_range("c").second); // [FALSE POSITIVE]
|
||||
|
||||
// swap
|
||||
std::unordered_map<char *, char *> m15, m16, m17, m18;
|
||||
@@ -357,11 +360,11 @@ void test_unordered_map()
|
||||
sink(m20);
|
||||
sink(m21);
|
||||
sink(m22); // tainted
|
||||
m15.merge(m16);
|
||||
m17.merge(m18);
|
||||
m19.merge(m20);
|
||||
m21.merge(m22);
|
||||
sink(m19); // tainted
|
||||
sink(m20); // tainted [NOT DETECTED]
|
||||
sink(m21); // tainted [NOT DETECTED]
|
||||
sink(m20);
|
||||
sink(m21); // tainted
|
||||
sink(m22); // tainted
|
||||
|
||||
// erase, clear
|
||||
@@ -378,21 +381,58 @@ void test_unordered_map()
|
||||
std::unordered_map<char *, char *> m24, m25;
|
||||
sink(m24.emplace("abc", "def").first);
|
||||
sink(m24);
|
||||
sink(m24.emplace("abc", source()).first); // tainted [NOT DETECTED]
|
||||
sink(m24); // tainted [NOT DETECTED]
|
||||
sink(m24.emplace("abc", source()).first); // tainted
|
||||
sink(m24); // tainted
|
||||
sink(m25.emplace_hint(m25.begin(), "abc", "def"));
|
||||
sink(m25);
|
||||
sink(m25.emplace_hint(m25.begin(), "abc", source())); // tainted [NOT DETECTED]
|
||||
sink(m25); // tainted [NOT DETECTED]
|
||||
|
||||
sink(m25.emplace_hint(m25.begin(), "abc", source())); // tainted
|
||||
sink(m25); // tainted
|
||||
|
||||
// try_emplace
|
||||
std::unordered_map<char *, char *> m26, m27;
|
||||
std::unordered_map<char *, char *> m26, m27, m28;
|
||||
sink(m26.try_emplace("abc", "def").first);
|
||||
sink(m26.try_emplace("abc", "def").second);
|
||||
sink(m26);
|
||||
sink(m26.try_emplace("abc", source()).first); // tainted [NOT DETECTED]
|
||||
sink(m26); // tainted [NOT DETECTED]
|
||||
sink(m26.try_emplace("abc", source()).first); // tainted
|
||||
sink(m26.try_emplace("abc", source()).second); // [FALSE POSITIVE]
|
||||
sink(m26); // tainted
|
||||
sink(m27.try_emplace(m27.begin(), "abc", "def"));
|
||||
sink(m27);
|
||||
sink(m27.try_emplace(m27.begin(), "abc", source())); // tainted [NOT DETECTED]
|
||||
sink(m27); // tainted [NOT DETECTED]
|
||||
sink(m27.try_emplace(m27.begin(), "abc", source())); // tainted
|
||||
sink(m27); // tainted
|
||||
sink(m28.try_emplace(m28.begin(), "abc", "def"));
|
||||
sink(m28);
|
||||
sink(m28.try_emplace(m28.begin(), source(), "def")); // tainted [NOT DETECTED]
|
||||
sink(m28); // tainted [NOT DETECTED]
|
||||
|
||||
// additional try_emplace test cases
|
||||
std::unordered_map<char *, std::pair<int, int>> m29, m30, m31, m32;
|
||||
sink(m29.try_emplace("abc", 1, 2));
|
||||
sink(m29);
|
||||
sink(m29["abc"]);
|
||||
sink(m30.try_emplace(source(), 1, 2)); // tainted [NOT DETECTED]
|
||||
sink(m30); // tainted [NOT DETECTED]
|
||||
sink(m30["abc"]);
|
||||
sink(m31.try_emplace("abc", source(), 2)); // tainted
|
||||
sink(m31); // tainted
|
||||
sink(m31["abc"]); // tainted
|
||||
sink(m32.try_emplace("abc", 1, source())); // tainted
|
||||
sink(m32); // tainted
|
||||
sink(m32["abc"]); // tainted
|
||||
|
||||
// additional emplace test cases
|
||||
std::unordered_map<char *, char *> m33;
|
||||
sink(m33.emplace(source(), "def").first); // tainted [NOT DETECTED]
|
||||
sink(m33); // tainted [NOT DETECTED]
|
||||
|
||||
std::unordered_map<char *, char *> m34, m35;
|
||||
sink(m34.emplace(std::pair<char *, char *>("abc", "def")).first);
|
||||
sink(m34);
|
||||
sink(m34.emplace(std::pair<char *, char *>("abc", source())).first); // tainted
|
||||
sink(m34); // tainted
|
||||
sink(m34.emplace_hint(m34.begin(), "abc", "def")); // tainted
|
||||
sink(m35.emplace().first);
|
||||
sink(m35);
|
||||
sink(m35.emplace(std::pair<char *, char *>(source(), "def")).first); // tainted [NOT DETECTED]
|
||||
sink(m35); // tainted [NOT DETECTED]
|
||||
}
|
||||
|
||||
@@ -33,108 +33,134 @@
|
||||
| format.cpp:115:8:115:13 | buffer | format.cpp:114:37:114:50 | call to source |
|
||||
| format.cpp:157:7:157:22 | access to array | format.cpp:147:12:147:25 | call to source |
|
||||
| format.cpp:158:7:158:27 | ... + ... | format.cpp:148:16:148:30 | call to source |
|
||||
| map.cpp:26:9:26:13 | first | map.cpp:25:12:25:17 | call to source |
|
||||
| map.cpp:32:9:32:14 | second | map.cpp:30:13:30:18 | call to source |
|
||||
| map.cpp:41:9:41:13 | first | map.cpp:40:30:40:35 | call to source |
|
||||
| map.cpp:47:9:47:14 | second | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:48:7:48:7 | f | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:52:9:52:14 | second | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:53:7:53:7 | g | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:58:9:58:14 | second | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:59:7:59:7 | h | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:69:7:69:7 | i | map.cpp:62:37:62:42 | call to source |
|
||||
| map.cpp:71:9:71:14 | second | map.cpp:62:37:62:42 | call to source |
|
||||
| map.cpp:72:7:72:7 | j | map.cpp:62:37:62:42 | call to source |
|
||||
| map.cpp:74:9:74:14 | second | map.cpp:63:37:63:42 | call to source |
|
||||
| map.cpp:75:7:75:7 | k | map.cpp:63:37:63:42 | call to source |
|
||||
| map.cpp:78:7:78:7 | l | map.cpp:63:37:63:42 | call to source |
|
||||
| map.cpp:86:7:86:32 | call to pair | map.cpp:86:24:86:29 | call to source |
|
||||
| map.cpp:107:10:107:15 | call to insert | map.cpp:107:62:107:67 | call to source |
|
||||
| map.cpp:109:10:109:25 | call to insert_or_assign | map.cpp:109:46:109:51 | call to source |
|
||||
| map.cpp:111:7:111:8 | call to map | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:113:7:113:8 | call to map | map.cpp:107:62:107:67 | call to source |
|
||||
| map.cpp:114:7:114:8 | call to map | map.cpp:108:34:108:39 | call to source |
|
||||
| map.cpp:115:7:115:8 | call to map | map.cpp:109:46:109:51 | call to source |
|
||||
| map.cpp:117:10:117:13 | call to find | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:119:10:119:13 | call to find | map.cpp:107:62:107:67 | call to source |
|
||||
| map.cpp:120:10:120:13 | call to find | map.cpp:108:34:108:39 | call to source |
|
||||
| map.cpp:121:10:121:13 | call to find | map.cpp:109:46:109:51 | call to source |
|
||||
| map.cpp:123:10:123:13 | call to find | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:125:10:125:13 | call to find | map.cpp:107:62:107:67 | call to source |
|
||||
| map.cpp:126:10:126:13 | call to find | map.cpp:108:34:108:39 | call to source |
|
||||
| map.cpp:127:10:127:13 | call to find | map.cpp:109:46:109:51 | call to source |
|
||||
| map.cpp:134:7:134:8 | call to map | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:135:7:135:8 | call to map | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:136:7:136:8 | call to map | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:137:10:137:13 | call to find | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:138:10:138:13 | call to find | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:139:10:139:13 | call to find | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:151:8:151:10 | call to pair | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:165:7:165:27 | ... = ... | map.cpp:165:20:165:25 | call to source |
|
||||
| map.cpp:167:7:167:30 | ... = ... | map.cpp:167:23:167:28 | call to source |
|
||||
| map.cpp:169:10:169:10 | call to operator[] | map.cpp:165:20:165:25 | call to source |
|
||||
| map.cpp:171:10:171:10 | call to operator[] | map.cpp:167:23:167:28 | call to source |
|
||||
| map.cpp:190:7:190:9 | call to map | map.cpp:188:49:188:54 | call to source |
|
||||
| map.cpp:193:7:193:9 | call to map | map.cpp:189:49:189:54 | call to source |
|
||||
| map.cpp:196:7:196:9 | call to map | map.cpp:188:49:188:54 | call to source |
|
||||
| map.cpp:197:7:197:9 | call to map | map.cpp:188:49:188:54 | call to source |
|
||||
| map.cpp:198:7:198:9 | call to map | map.cpp:189:49:189:54 | call to source |
|
||||
| map.cpp:199:7:199:9 | call to map | map.cpp:189:49:189:54 | call to source |
|
||||
| map.cpp:207:7:207:9 | call to map | map.cpp:203:49:203:54 | call to source |
|
||||
| map.cpp:29:9:29:13 | first | map.cpp:28:12:28:17 | call to source |
|
||||
| map.cpp:35:9:35:14 | second | map.cpp:33:13:33:18 | call to source |
|
||||
| map.cpp:44:9:44:13 | first | map.cpp:43:30:43:35 | call to source |
|
||||
| map.cpp:50:9:50:14 | second | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:51:7:51:7 | f | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:55:9:55:14 | second | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:56:7:56:7 | g | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:61:9:61:14 | second | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:62:7:62:7 | h | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:72:7:72:7 | i | map.cpp:65:37:65:42 | call to source |
|
||||
| map.cpp:74:9:74:14 | second | map.cpp:65:37:65:42 | call to source |
|
||||
| map.cpp:75:7:75:7 | j | map.cpp:65:37:65:42 | call to source |
|
||||
| map.cpp:77:9:77:14 | second | map.cpp:66:37:66:42 | call to source |
|
||||
| map.cpp:78:7:78:7 | k | map.cpp:66:37:66:42 | call to source |
|
||||
| map.cpp:81:7:81:7 | l | map.cpp:66:37:66:42 | call to source |
|
||||
| map.cpp:89:7:89:32 | call to pair | map.cpp:89:24:89:29 | call to source |
|
||||
| map.cpp:110:10:110:15 | call to insert | map.cpp:110:62:110:67 | call to source |
|
||||
| map.cpp:112:10:112:25 | call to insert_or_assign | map.cpp:112:46:112:51 | call to source |
|
||||
| map.cpp:114:7:114:8 | call to map | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:116:7:116:8 | call to map | map.cpp:110:62:110:67 | call to source |
|
||||
| map.cpp:117:7:117:8 | call to map | map.cpp:111:34:111:39 | call to source |
|
||||
| map.cpp:118:7:118:8 | call to map | map.cpp:112:46:112:51 | call to source |
|
||||
| map.cpp:120:10:120:13 | call to find | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:122:10:122:13 | call to find | map.cpp:110:62:110:67 | call to source |
|
||||
| map.cpp:123:10:123:13 | call to find | map.cpp:111:34:111:39 | call to source |
|
||||
| map.cpp:124:10:124:13 | call to find | map.cpp:112:46:112:51 | call to source |
|
||||
| map.cpp:126:10:126:13 | call to find | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:128:10:128:13 | call to find | map.cpp:110:62:110:67 | call to source |
|
||||
| map.cpp:129:10:129:13 | call to find | map.cpp:111:34:111:39 | call to source |
|
||||
| map.cpp:130:10:130:13 | call to find | map.cpp:112:46:112:51 | call to source |
|
||||
| map.cpp:137:7:137:8 | call to map | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:138:7:138:8 | call to map | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:139:7:139:8 | call to map | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:140:10:140:13 | call to find | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:141:10:141:13 | call to find | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:142:10:142:13 | call to find | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:154:8:154:10 | call to pair | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:168:7:168:27 | ... = ... | map.cpp:168:20:168:25 | call to source |
|
||||
| map.cpp:170:7:170:30 | ... = ... | map.cpp:170:23:170:28 | call to source |
|
||||
| map.cpp:172:10:172:10 | call to operator[] | map.cpp:168:20:168:25 | call to source |
|
||||
| map.cpp:174:10:174:10 | call to operator[] | map.cpp:170:23:170:28 | call to source |
|
||||
| map.cpp:182:10:182:20 | call to lower_bound | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:183:10:183:20 | call to upper_bound | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:186:10:186:20 | call to upper_bound | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:193:7:193:9 | call to map | map.cpp:191:49:191:54 | call to source |
|
||||
| map.cpp:196:7:196:9 | call to map | map.cpp:192:49:192:54 | call to source |
|
||||
| map.cpp:199:7:199:9 | call to map | map.cpp:191:49:191:54 | call to source |
|
||||
| map.cpp:200:7:200:9 | call to map | map.cpp:191:49:191:54 | call to source |
|
||||
| map.cpp:201:7:201:9 | call to map | map.cpp:192:49:192:54 | call to source |
|
||||
| map.cpp:202:7:202:9 | call to map | map.cpp:192:49:192:54 | call to source |
|
||||
| map.cpp:210:7:210:9 | call to map | map.cpp:206:49:206:54 | call to source |
|
||||
| map.cpp:213:7:213:9 | call to map | map.cpp:203:49:203:54 | call to source |
|
||||
| map.cpp:213:7:213:9 | call to map | map.cpp:209:49:209:54 | call to source |
|
||||
| map.cpp:216:7:216:9 | call to map | map.cpp:206:49:206:54 | call to source |
|
||||
| map.cpp:222:7:222:9 | call to map | map.cpp:220:49:220:54 | call to source |
|
||||
| map.cpp:222:7:222:9 | call to map | map.cpp:221:49:221:54 | call to source |
|
||||
| map.cpp:223:11:223:15 | call to erase | map.cpp:220:49:220:54 | call to source |
|
||||
| map.cpp:223:11:223:15 | call to erase | map.cpp:221:49:221:54 | call to source |
|
||||
| map.cpp:224:7:224:9 | call to map | map.cpp:220:49:220:54 | call to source |
|
||||
| map.cpp:224:7:224:9 | call to map | map.cpp:221:49:221:54 | call to source |
|
||||
| map.cpp:226:7:226:9 | call to map | map.cpp:220:49:220:54 | call to source |
|
||||
| map.cpp:226:7:226:9 | call to map | map.cpp:221:49:221:54 | call to source |
|
||||
| map.cpp:259:10:259:15 | call to insert | map.cpp:259:62:259:67 | call to source |
|
||||
| map.cpp:261:10:261:25 | call to insert_or_assign | map.cpp:261:46:261:51 | call to source |
|
||||
| map.cpp:263:7:263:8 | call to unordered_map | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:265:7:265:8 | call to unordered_map | map.cpp:259:62:259:67 | call to source |
|
||||
| map.cpp:266:7:266:8 | call to unordered_map | map.cpp:260:34:260:39 | call to source |
|
||||
| map.cpp:267:7:267:8 | call to unordered_map | map.cpp:261:46:261:51 | call to source |
|
||||
| map.cpp:269:10:269:13 | call to find | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:271:10:271:13 | call to find | map.cpp:259:62:259:67 | call to source |
|
||||
| map.cpp:272:10:272:13 | call to find | map.cpp:260:34:260:39 | call to source |
|
||||
| map.cpp:273:10:273:13 | call to find | map.cpp:261:46:261:51 | call to source |
|
||||
| map.cpp:275:10:275:13 | call to find | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:277:10:277:13 | call to find | map.cpp:259:62:259:67 | call to source |
|
||||
| map.cpp:278:10:278:13 | call to find | map.cpp:260:34:260:39 | call to source |
|
||||
| map.cpp:279:10:279:13 | call to find | map.cpp:261:46:261:51 | call to source |
|
||||
| map.cpp:286:7:286:8 | call to unordered_map | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:287:7:287:8 | call to unordered_map | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:288:7:288:8 | call to unordered_map | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:289:10:289:13 | call to find | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:290:10:290:13 | call to find | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:291:10:291:13 | call to find | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:303:8:303:10 | call to pair | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:317:7:317:27 | ... = ... | map.cpp:317:20:317:25 | call to source |
|
||||
| map.cpp:319:7:319:30 | ... = ... | map.cpp:319:23:319:28 | call to source |
|
||||
| map.cpp:321:10:321:10 | call to operator[] | map.cpp:317:20:317:25 | call to source |
|
||||
| map.cpp:323:10:323:10 | call to operator[] | map.cpp:319:23:319:28 | call to source |
|
||||
| map.cpp:339:7:339:9 | call to unordered_map | map.cpp:337:49:337:54 | call to source |
|
||||
| map.cpp:342:7:342:9 | call to unordered_map | map.cpp:338:49:338:54 | call to source |
|
||||
| map.cpp:345:7:345:9 | call to unordered_map | map.cpp:337:49:337:54 | call to source |
|
||||
| map.cpp:346:7:346:9 | call to unordered_map | map.cpp:337:49:337:54 | call to source |
|
||||
| map.cpp:347:7:347:9 | call to unordered_map | map.cpp:338:49:338:54 | call to source |
|
||||
| map.cpp:348:7:348:9 | call to unordered_map | map.cpp:338:49:338:54 | call to source |
|
||||
| map.cpp:356:7:356:9 | call to unordered_map | map.cpp:352:49:352:54 | call to source |
|
||||
| map.cpp:218:7:218:9 | call to map | map.cpp:209:49:209:54 | call to source |
|
||||
| map.cpp:219:7:219:9 | call to map | map.cpp:209:49:209:54 | call to source |
|
||||
| map.cpp:225:7:225:9 | call to map | map.cpp:223:49:223:54 | call to source |
|
||||
| map.cpp:225:7:225:9 | call to map | map.cpp:224:49:224:54 | call to source |
|
||||
| map.cpp:226:11:226:15 | call to erase | map.cpp:223:49:223:54 | call to source |
|
||||
| map.cpp:226:11:226:15 | call to erase | map.cpp:224:49:224:54 | call to source |
|
||||
| map.cpp:227:7:227:9 | call to map | map.cpp:223:49:223:54 | call to source |
|
||||
| map.cpp:227:7:227:9 | call to map | map.cpp:224:49:224:54 | call to source |
|
||||
| map.cpp:229:7:229:9 | call to map | map.cpp:223:49:223:54 | call to source |
|
||||
| map.cpp:229:7:229:9 | call to map | map.cpp:224:49:224:54 | call to source |
|
||||
| map.cpp:236:7:236:9 | call to map | map.cpp:235:26:235:31 | call to source |
|
||||
| map.cpp:239:11:239:22 | call to emplace_hint | map.cpp:239:44:239:49 | call to source |
|
||||
| map.cpp:240:7:240:9 | call to map | map.cpp:239:44:239:49 | call to source |
|
||||
| map.cpp:247:7:247:9 | call to map | map.cpp:246:30:246:35 | call to source |
|
||||
| map.cpp:250:11:250:21 | call to try_emplace | map.cpp:250:43:250:48 | call to source |
|
||||
| map.cpp:251:7:251:9 | call to map | map.cpp:250:43:250:48 | call to source |
|
||||
| map.cpp:262:10:262:15 | call to insert | map.cpp:262:62:262:67 | call to source |
|
||||
| map.cpp:264:10:264:25 | call to insert_or_assign | map.cpp:264:46:264:51 | call to source |
|
||||
| map.cpp:266:7:266:8 | call to unordered_map | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:268:7:268:8 | call to unordered_map | map.cpp:262:62:262:67 | call to source |
|
||||
| map.cpp:269:7:269:8 | call to unordered_map | map.cpp:263:34:263:39 | call to source |
|
||||
| map.cpp:270:7:270:8 | call to unordered_map | map.cpp:264:46:264:51 | call to source |
|
||||
| map.cpp:272:10:272:13 | call to find | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:274:10:274:13 | call to find | map.cpp:262:62:262:67 | call to source |
|
||||
| map.cpp:275:10:275:13 | call to find | map.cpp:263:34:263:39 | call to source |
|
||||
| map.cpp:276:10:276:13 | call to find | map.cpp:264:46:264:51 | call to source |
|
||||
| map.cpp:278:10:278:13 | call to find | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:280:10:280:13 | call to find | map.cpp:262:62:262:67 | call to source |
|
||||
| map.cpp:281:10:281:13 | call to find | map.cpp:263:34:263:39 | call to source |
|
||||
| map.cpp:282:10:282:13 | call to find | map.cpp:264:46:264:51 | call to source |
|
||||
| map.cpp:289:7:289:8 | call to unordered_map | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:290:7:290:8 | call to unordered_map | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:291:7:291:8 | call to unordered_map | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:292:10:292:13 | call to find | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:293:10:293:13 | call to find | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:294:10:294:13 | call to find | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:306:8:306:10 | call to pair | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:320:7:320:27 | ... = ... | map.cpp:320:20:320:25 | call to source |
|
||||
| map.cpp:322:7:322:30 | ... = ... | map.cpp:322:23:322:28 | call to source |
|
||||
| map.cpp:324:10:324:10 | call to operator[] | map.cpp:320:20:320:25 | call to source |
|
||||
| map.cpp:326:10:326:10 | call to operator[] | map.cpp:322:23:322:28 | call to source |
|
||||
| map.cpp:342:7:342:9 | call to unordered_map | map.cpp:340:49:340:54 | call to source |
|
||||
| map.cpp:345:7:345:9 | call to unordered_map | map.cpp:341:49:341:54 | call to source |
|
||||
| map.cpp:348:7:348:9 | call to unordered_map | map.cpp:340:49:340:54 | call to source |
|
||||
| map.cpp:349:7:349:9 | call to unordered_map | map.cpp:340:49:340:54 | call to source |
|
||||
| map.cpp:350:7:350:9 | call to unordered_map | map.cpp:341:49:341:54 | call to source |
|
||||
| map.cpp:351:7:351:9 | call to unordered_map | map.cpp:341:49:341:54 | call to source |
|
||||
| map.cpp:359:7:359:9 | call to unordered_map | map.cpp:355:49:355:54 | call to source |
|
||||
| map.cpp:362:7:362:9 | call to unordered_map | map.cpp:352:49:352:54 | call to source |
|
||||
| map.cpp:362:7:362:9 | call to unordered_map | map.cpp:358:49:358:54 | call to source |
|
||||
| map.cpp:365:7:365:9 | call to unordered_map | map.cpp:355:49:355:54 | call to source |
|
||||
| map.cpp:371:7:371:9 | call to unordered_map | map.cpp:369:49:369:54 | call to source |
|
||||
| map.cpp:371:7:371:9 | call to unordered_map | map.cpp:370:49:370:54 | call to source |
|
||||
| map.cpp:372:11:372:15 | call to erase | map.cpp:369:49:369:54 | call to source |
|
||||
| map.cpp:372:11:372:15 | call to erase | map.cpp:370:49:370:54 | call to source |
|
||||
| map.cpp:373:7:373:9 | call to unordered_map | map.cpp:369:49:369:54 | call to source |
|
||||
| map.cpp:373:7:373:9 | call to unordered_map | map.cpp:370:49:370:54 | call to source |
|
||||
| map.cpp:375:7:375:9 | call to unordered_map | map.cpp:369:49:369:54 | call to source |
|
||||
| map.cpp:375:7:375:9 | call to unordered_map | map.cpp:370:49:370:54 | call to source |
|
||||
| map.cpp:367:7:367:9 | call to unordered_map | map.cpp:358:49:358:54 | call to source |
|
||||
| map.cpp:368:7:368:9 | call to unordered_map | map.cpp:358:49:358:54 | call to source |
|
||||
| map.cpp:374:7:374:9 | call to unordered_map | map.cpp:372:49:372:54 | call to source |
|
||||
| map.cpp:374:7:374:9 | call to unordered_map | map.cpp:373:49:373:54 | call to source |
|
||||
| map.cpp:375:11:375:15 | call to erase | map.cpp:372:49:372:54 | call to source |
|
||||
| map.cpp:375:11:375:15 | call to erase | map.cpp:373:49:373:54 | call to source |
|
||||
| map.cpp:376:7:376:9 | call to unordered_map | map.cpp:372:49:372:54 | call to source |
|
||||
| map.cpp:376:7:376:9 | call to unordered_map | map.cpp:373:49:373:54 | call to source |
|
||||
| map.cpp:378:7:378:9 | call to unordered_map | map.cpp:372:49:372:54 | call to source |
|
||||
| map.cpp:378:7:378:9 | call to unordered_map | map.cpp:373:49:373:54 | call to source |
|
||||
| map.cpp:385:7:385:9 | call to unordered_map | map.cpp:384:26:384:31 | call to source |
|
||||
| map.cpp:388:11:388:22 | call to emplace_hint | map.cpp:388:44:388:49 | call to source |
|
||||
| map.cpp:389:7:389:9 | call to unordered_map | map.cpp:388:44:388:49 | call to source |
|
||||
| map.cpp:398:7:398:9 | call to unordered_map | map.cpp:396:30:396:35 | call to source |
|
||||
| map.cpp:398:7:398:9 | call to unordered_map | map.cpp:397:30:397:35 | call to source |
|
||||
| map.cpp:401:11:401:21 | call to try_emplace | map.cpp:401:43:401:48 | call to source |
|
||||
| map.cpp:402:7:402:9 | call to unordered_map | map.cpp:401:43:401:48 | call to source |
|
||||
| map.cpp:416:7:416:41 | call to pair | map.cpp:416:30:416:35 | call to source |
|
||||
| map.cpp:417:7:417:9 | call to unordered_map | map.cpp:416:30:416:35 | call to source |
|
||||
| map.cpp:418:7:418:16 | call to pair | map.cpp:416:30:416:35 | call to source |
|
||||
| map.cpp:419:7:419:41 | call to pair | map.cpp:419:33:419:38 | call to source |
|
||||
| map.cpp:420:7:420:9 | call to unordered_map | map.cpp:419:33:419:38 | call to source |
|
||||
| map.cpp:421:7:421:16 | call to pair | map.cpp:419:33:419:38 | call to source |
|
||||
| map.cpp:432:7:432:9 | call to unordered_map | map.cpp:431:52:431:57 | call to source |
|
||||
| map.cpp:433:11:433:22 | call to emplace_hint | map.cpp:431:52:431:57 | call to source |
|
||||
| movableclass.cpp:44:8:44:9 | s1 | movableclass.cpp:39:21:39:26 | call to source |
|
||||
| movableclass.cpp:45:8:45:9 | s2 | movableclass.cpp:40:23:40:28 | call to source |
|
||||
| movableclass.cpp:46:8:46:9 | s3 | movableclass.cpp:42:8:42:13 | call to source |
|
||||
|
||||
@@ -17,91 +17,119 @@
|
||||
| copyableclass.cpp:67:11:67:21 | copyableclass.cpp:67:13:67:18 | IR only |
|
||||
| copyableclass_declonly.cpp:42:8:42:9 | copyableclass_declonly.cpp:34:30:34:35 | AST only |
|
||||
| copyableclass_declonly.cpp:67:11:67:11 | copyableclass_declonly.cpp:67:13:67:18 | AST only |
|
||||
| map.cpp:46:9:46:13 | map.cpp:45:37:45:42 | IR only |
|
||||
| map.cpp:51:9:51:13 | map.cpp:45:37:45:42 | IR only |
|
||||
| map.cpp:57:9:57:13 | map.cpp:45:37:45:42 | IR only |
|
||||
| map.cpp:67:9:67:13 | map.cpp:62:37:62:42 | IR only |
|
||||
| map.cpp:68:9:68:14 | map.cpp:62:37:62:42 | IR only |
|
||||
| map.cpp:70:9:70:13 | map.cpp:62:37:62:42 | IR only |
|
||||
| map.cpp:73:9:73:13 | map.cpp:63:37:63:42 | IR only |
|
||||
| map.cpp:76:9:76:13 | map.cpp:63:37:63:42 | IR only |
|
||||
| map.cpp:77:9:77:14 | map.cpp:63:37:63:42 | IR only |
|
||||
| map.cpp:87:34:87:38 | map.cpp:87:24:87:29 | IR only |
|
||||
| map.cpp:88:34:88:39 | map.cpp:88:24:88:29 | IR only |
|
||||
| map.cpp:105:7:105:54 | map.cpp:105:39:105:44 | IR only |
|
||||
| map.cpp:108:7:108:48 | map.cpp:108:34:108:39 | IR only |
|
||||
| map.cpp:111:7:111:8 | map.cpp:105:39:105:44 | AST only |
|
||||
| map.cpp:113:7:113:8 | map.cpp:107:62:107:67 | AST only |
|
||||
| map.cpp:114:7:114:8 | map.cpp:108:34:108:39 | AST only |
|
||||
| map.cpp:115:7:115:8 | map.cpp:109:46:109:51 | AST only |
|
||||
| map.cpp:120:10:120:13 | map.cpp:108:34:108:39 | AST only |
|
||||
| map.cpp:121:10:121:13 | map.cpp:109:46:109:51 | AST only |
|
||||
| map.cpp:126:10:126:13 | map.cpp:108:34:108:39 | AST only |
|
||||
| map.cpp:127:10:127:13 | map.cpp:109:46:109:51 | AST only |
|
||||
| map.cpp:134:7:134:8 | map.cpp:105:39:105:44 | AST only |
|
||||
| map.cpp:135:7:135:8 | map.cpp:105:39:105:44 | AST only |
|
||||
| map.cpp:136:7:136:8 | map.cpp:105:39:105:44 | AST only |
|
||||
| map.cpp:137:10:137:13 | map.cpp:105:39:105:44 | AST only |
|
||||
| map.cpp:138:10:138:13 | map.cpp:105:39:105:44 | AST only |
|
||||
| map.cpp:152:12:152:16 | map.cpp:105:39:105:44 | IR only |
|
||||
| map.cpp:153:12:153:17 | map.cpp:105:39:105:44 | IR only |
|
||||
| map.cpp:158:12:158:16 | map.cpp:105:39:105:44 | IR only |
|
||||
| map.cpp:159:12:159:17 | map.cpp:105:39:105:44 | IR only |
|
||||
| map.cpp:169:10:169:10 | map.cpp:165:20:165:25 | AST only |
|
||||
| map.cpp:171:10:171:10 | map.cpp:167:23:167:28 | AST only |
|
||||
| map.cpp:190:7:190:9 | map.cpp:188:49:188:54 | AST only |
|
||||
| map.cpp:193:7:193:9 | map.cpp:189:49:189:54 | AST only |
|
||||
| map.cpp:196:7:196:9 | map.cpp:188:49:188:54 | AST only |
|
||||
| map.cpp:197:7:197:9 | map.cpp:188:49:188:54 | AST only |
|
||||
| map.cpp:198:7:198:9 | map.cpp:189:49:189:54 | AST only |
|
||||
| map.cpp:199:7:199:9 | map.cpp:189:49:189:54 | AST only |
|
||||
| map.cpp:207:7:207:9 | map.cpp:203:49:203:54 | AST only |
|
||||
| map.cpp:49:9:49:13 | map.cpp:48:37:48:42 | IR only |
|
||||
| map.cpp:54:9:54:13 | map.cpp:48:37:48:42 | IR only |
|
||||
| map.cpp:60:9:60:13 | map.cpp:48:37:48:42 | IR only |
|
||||
| map.cpp:70:9:70:13 | map.cpp:65:37:65:42 | IR only |
|
||||
| map.cpp:71:9:71:14 | map.cpp:65:37:65:42 | IR only |
|
||||
| map.cpp:73:9:73:13 | map.cpp:65:37:65:42 | IR only |
|
||||
| map.cpp:76:9:76:13 | map.cpp:66:37:66:42 | IR only |
|
||||
| map.cpp:79:9:79:13 | map.cpp:66:37:66:42 | IR only |
|
||||
| map.cpp:80:9:80:14 | map.cpp:66:37:66:42 | IR only |
|
||||
| map.cpp:90:34:90:38 | map.cpp:90:24:90:29 | IR only |
|
||||
| map.cpp:91:34:91:39 | map.cpp:91:24:91:29 | IR only |
|
||||
| map.cpp:108:7:108:54 | map.cpp:108:39:108:44 | IR only |
|
||||
| map.cpp:111:7:111:48 | map.cpp:111:34:111:39 | IR only |
|
||||
| map.cpp:114:7:114:8 | map.cpp:108:39:108:44 | AST only |
|
||||
| map.cpp:116:7:116:8 | map.cpp:110:62:110:67 | AST only |
|
||||
| map.cpp:117:7:117:8 | map.cpp:111:34:111:39 | AST only |
|
||||
| map.cpp:118:7:118:8 | map.cpp:112:46:112:51 | AST only |
|
||||
| map.cpp:123:10:123:13 | map.cpp:111:34:111:39 | AST only |
|
||||
| map.cpp:124:10:124:13 | map.cpp:112:46:112:51 | AST only |
|
||||
| map.cpp:129:10:129:13 | map.cpp:111:34:111:39 | AST only |
|
||||
| map.cpp:130:10:130:13 | map.cpp:112:46:112:51 | AST only |
|
||||
| map.cpp:137:7:137:8 | map.cpp:108:39:108:44 | AST only |
|
||||
| map.cpp:138:7:138:8 | map.cpp:108:39:108:44 | AST only |
|
||||
| map.cpp:139:7:139:8 | map.cpp:108:39:108:44 | AST only |
|
||||
| map.cpp:140:10:140:13 | map.cpp:108:39:108:44 | AST only |
|
||||
| map.cpp:141:10:141:13 | map.cpp:108:39:108:44 | AST only |
|
||||
| map.cpp:155:12:155:16 | map.cpp:108:39:108:44 | IR only |
|
||||
| map.cpp:156:12:156:17 | map.cpp:108:39:108:44 | IR only |
|
||||
| map.cpp:161:12:161:16 | map.cpp:108:39:108:44 | IR only |
|
||||
| map.cpp:162:12:162:17 | map.cpp:108:39:108:44 | IR only |
|
||||
| map.cpp:172:10:172:10 | map.cpp:168:20:168:25 | AST only |
|
||||
| map.cpp:174:10:174:10 | map.cpp:170:23:170:28 | AST only |
|
||||
| map.cpp:184:7:184:31 | map.cpp:108:39:108:44 | IR only |
|
||||
| map.cpp:185:7:185:32 | map.cpp:108:39:108:44 | IR only |
|
||||
| map.cpp:187:7:187:32 | map.cpp:108:39:108:44 | IR only |
|
||||
| map.cpp:193:7:193:9 | map.cpp:191:49:191:54 | AST only |
|
||||
| map.cpp:196:7:196:9 | map.cpp:192:49:192:54 | AST only |
|
||||
| map.cpp:199:7:199:9 | map.cpp:191:49:191:54 | AST only |
|
||||
| map.cpp:200:7:200:9 | map.cpp:191:49:191:54 | AST only |
|
||||
| map.cpp:201:7:201:9 | map.cpp:192:49:192:54 | AST only |
|
||||
| map.cpp:202:7:202:9 | map.cpp:192:49:192:54 | AST only |
|
||||
| map.cpp:210:7:210:9 | map.cpp:206:49:206:54 | AST only |
|
||||
| map.cpp:213:7:213:9 | map.cpp:203:49:203:54 | AST only |
|
||||
| map.cpp:213:7:213:9 | map.cpp:209:49:209:54 | AST only |
|
||||
| map.cpp:216:7:216:9 | map.cpp:206:49:206:54 | AST only |
|
||||
| map.cpp:222:7:222:9 | map.cpp:220:49:220:54 | AST only |
|
||||
| map.cpp:222:7:222:9 | map.cpp:221:49:221:54 | AST only |
|
||||
| map.cpp:224:7:224:9 | map.cpp:220:49:220:54 | AST only |
|
||||
| map.cpp:224:7:224:9 | map.cpp:221:49:221:54 | AST only |
|
||||
| map.cpp:226:7:226:9 | map.cpp:220:49:220:54 | AST only |
|
||||
| map.cpp:226:7:226:9 | map.cpp:221:49:221:54 | AST only |
|
||||
| map.cpp:257:7:257:54 | map.cpp:257:39:257:44 | IR only |
|
||||
| map.cpp:260:7:260:48 | map.cpp:260:34:260:39 | IR only |
|
||||
| map.cpp:263:7:263:8 | map.cpp:257:39:257:44 | AST only |
|
||||
| map.cpp:265:7:265:8 | map.cpp:259:62:259:67 | AST only |
|
||||
| map.cpp:266:7:266:8 | map.cpp:260:34:260:39 | AST only |
|
||||
| map.cpp:267:7:267:8 | map.cpp:261:46:261:51 | AST only |
|
||||
| map.cpp:272:10:272:13 | map.cpp:260:34:260:39 | AST only |
|
||||
| map.cpp:273:10:273:13 | map.cpp:261:46:261:51 | AST only |
|
||||
| map.cpp:278:10:278:13 | map.cpp:260:34:260:39 | AST only |
|
||||
| map.cpp:279:10:279:13 | map.cpp:261:46:261:51 | AST only |
|
||||
| map.cpp:286:7:286:8 | map.cpp:257:39:257:44 | AST only |
|
||||
| map.cpp:287:7:287:8 | map.cpp:257:39:257:44 | AST only |
|
||||
| map.cpp:288:7:288:8 | map.cpp:257:39:257:44 | AST only |
|
||||
| map.cpp:289:10:289:13 | map.cpp:257:39:257:44 | AST only |
|
||||
| map.cpp:290:10:290:13 | map.cpp:257:39:257:44 | AST only |
|
||||
| map.cpp:304:12:304:16 | map.cpp:257:39:257:44 | IR only |
|
||||
| map.cpp:305:12:305:17 | map.cpp:257:39:257:44 | IR only |
|
||||
| map.cpp:310:12:310:16 | map.cpp:257:39:257:44 | IR only |
|
||||
| map.cpp:311:12:311:17 | map.cpp:257:39:257:44 | IR only |
|
||||
| map.cpp:321:10:321:10 | map.cpp:317:20:317:25 | AST only |
|
||||
| map.cpp:323:10:323:10 | map.cpp:319:23:319:28 | AST only |
|
||||
| map.cpp:339:7:339:9 | map.cpp:337:49:337:54 | AST only |
|
||||
| map.cpp:342:7:342:9 | map.cpp:338:49:338:54 | AST only |
|
||||
| map.cpp:345:7:345:9 | map.cpp:337:49:337:54 | AST only |
|
||||
| map.cpp:346:7:346:9 | map.cpp:337:49:337:54 | AST only |
|
||||
| map.cpp:347:7:347:9 | map.cpp:338:49:338:54 | AST only |
|
||||
| map.cpp:348:7:348:9 | map.cpp:338:49:338:54 | AST only |
|
||||
| map.cpp:356:7:356:9 | map.cpp:352:49:352:54 | AST only |
|
||||
| map.cpp:218:7:218:9 | map.cpp:209:49:209:54 | AST only |
|
||||
| map.cpp:219:7:219:9 | map.cpp:209:49:209:54 | AST only |
|
||||
| map.cpp:225:7:225:9 | map.cpp:223:49:223:54 | AST only |
|
||||
| map.cpp:225:7:225:9 | map.cpp:224:49:224:54 | AST only |
|
||||
| map.cpp:227:7:227:9 | map.cpp:223:49:223:54 | AST only |
|
||||
| map.cpp:227:7:227:9 | map.cpp:224:49:224:54 | AST only |
|
||||
| map.cpp:229:7:229:9 | map.cpp:223:49:223:54 | AST only |
|
||||
| map.cpp:229:7:229:9 | map.cpp:224:49:224:54 | AST only |
|
||||
| map.cpp:235:7:235:40 | map.cpp:235:26:235:31 | IR only |
|
||||
| map.cpp:236:7:236:9 | map.cpp:235:26:235:31 | AST only |
|
||||
| map.cpp:240:7:240:9 | map.cpp:239:44:239:49 | AST only |
|
||||
| map.cpp:246:7:246:44 | map.cpp:246:30:246:35 | IR only |
|
||||
| map.cpp:247:7:247:9 | map.cpp:246:30:246:35 | AST only |
|
||||
| map.cpp:251:7:251:9 | map.cpp:250:43:250:48 | AST only |
|
||||
| map.cpp:260:7:260:54 | map.cpp:260:39:260:44 | IR only |
|
||||
| map.cpp:263:7:263:48 | map.cpp:263:34:263:39 | IR only |
|
||||
| map.cpp:266:7:266:8 | map.cpp:260:39:260:44 | AST only |
|
||||
| map.cpp:268:7:268:8 | map.cpp:262:62:262:67 | AST only |
|
||||
| map.cpp:269:7:269:8 | map.cpp:263:34:263:39 | AST only |
|
||||
| map.cpp:270:7:270:8 | map.cpp:264:46:264:51 | AST only |
|
||||
| map.cpp:275:10:275:13 | map.cpp:263:34:263:39 | AST only |
|
||||
| map.cpp:276:10:276:13 | map.cpp:264:46:264:51 | AST only |
|
||||
| map.cpp:281:10:281:13 | map.cpp:263:34:263:39 | AST only |
|
||||
| map.cpp:282:10:282:13 | map.cpp:264:46:264:51 | AST only |
|
||||
| map.cpp:289:7:289:8 | map.cpp:260:39:260:44 | AST only |
|
||||
| map.cpp:290:7:290:8 | map.cpp:260:39:260:44 | AST only |
|
||||
| map.cpp:291:7:291:8 | map.cpp:260:39:260:44 | AST only |
|
||||
| map.cpp:292:10:292:13 | map.cpp:260:39:260:44 | AST only |
|
||||
| map.cpp:293:10:293:13 | map.cpp:260:39:260:44 | AST only |
|
||||
| map.cpp:307:12:307:16 | map.cpp:260:39:260:44 | IR only |
|
||||
| map.cpp:308:12:308:17 | map.cpp:260:39:260:44 | IR only |
|
||||
| map.cpp:313:12:313:16 | map.cpp:260:39:260:44 | IR only |
|
||||
| map.cpp:314:12:314:17 | map.cpp:260:39:260:44 | IR only |
|
||||
| map.cpp:324:10:324:10 | map.cpp:320:20:320:25 | AST only |
|
||||
| map.cpp:326:10:326:10 | map.cpp:322:23:322:28 | AST only |
|
||||
| map.cpp:334:7:334:31 | map.cpp:260:39:260:44 | IR only |
|
||||
| map.cpp:335:7:335:32 | map.cpp:260:39:260:44 | IR only |
|
||||
| map.cpp:336:7:336:32 | map.cpp:260:39:260:44 | IR only |
|
||||
| map.cpp:342:7:342:9 | map.cpp:340:49:340:54 | AST only |
|
||||
| map.cpp:345:7:345:9 | map.cpp:341:49:341:54 | AST only |
|
||||
| map.cpp:348:7:348:9 | map.cpp:340:49:340:54 | AST only |
|
||||
| map.cpp:349:7:349:9 | map.cpp:340:49:340:54 | AST only |
|
||||
| map.cpp:350:7:350:9 | map.cpp:341:49:341:54 | AST only |
|
||||
| map.cpp:351:7:351:9 | map.cpp:341:49:341:54 | AST only |
|
||||
| map.cpp:359:7:359:9 | map.cpp:355:49:355:54 | AST only |
|
||||
| map.cpp:362:7:362:9 | map.cpp:352:49:352:54 | AST only |
|
||||
| map.cpp:362:7:362:9 | map.cpp:358:49:358:54 | AST only |
|
||||
| map.cpp:365:7:365:9 | map.cpp:355:49:355:54 | AST only |
|
||||
| map.cpp:371:7:371:9 | map.cpp:369:49:369:54 | AST only |
|
||||
| map.cpp:371:7:371:9 | map.cpp:370:49:370:54 | AST only |
|
||||
| map.cpp:373:7:373:9 | map.cpp:369:49:369:54 | AST only |
|
||||
| map.cpp:373:7:373:9 | map.cpp:370:49:370:54 | AST only |
|
||||
| map.cpp:375:7:375:9 | map.cpp:369:49:369:54 | AST only |
|
||||
| map.cpp:375:7:375:9 | map.cpp:370:49:370:54 | AST only |
|
||||
| map.cpp:367:7:367:9 | map.cpp:358:49:358:54 | AST only |
|
||||
| map.cpp:368:7:368:9 | map.cpp:358:49:358:54 | AST only |
|
||||
| map.cpp:374:7:374:9 | map.cpp:372:49:372:54 | AST only |
|
||||
| map.cpp:374:7:374:9 | map.cpp:373:49:373:54 | AST only |
|
||||
| map.cpp:376:7:376:9 | map.cpp:372:49:372:54 | AST only |
|
||||
| map.cpp:376:7:376:9 | map.cpp:373:49:373:54 | AST only |
|
||||
| map.cpp:378:7:378:9 | map.cpp:372:49:372:54 | AST only |
|
||||
| map.cpp:378:7:378:9 | map.cpp:373:49:373:54 | AST only |
|
||||
| map.cpp:384:7:384:40 | map.cpp:384:26:384:31 | IR only |
|
||||
| map.cpp:385:7:385:9 | map.cpp:384:26:384:31 | AST only |
|
||||
| map.cpp:389:7:389:9 | map.cpp:388:44:388:49 | AST only |
|
||||
| map.cpp:396:7:396:44 | map.cpp:396:30:396:35 | IR only |
|
||||
| map.cpp:397:40:397:45 | map.cpp:397:30:397:35 | IR only |
|
||||
| map.cpp:398:7:398:9 | map.cpp:396:30:396:35 | AST only |
|
||||
| map.cpp:398:7:398:9 | map.cpp:397:30:397:35 | AST only |
|
||||
| map.cpp:402:7:402:9 | map.cpp:401:43:401:48 | AST only |
|
||||
| map.cpp:417:7:417:9 | map.cpp:416:30:416:35 | AST only |
|
||||
| map.cpp:418:7:418:16 | map.cpp:416:30:416:35 | AST only |
|
||||
| map.cpp:420:7:420:9 | map.cpp:419:33:419:38 | AST only |
|
||||
| map.cpp:421:7:421:16 | map.cpp:419:33:419:38 | AST only |
|
||||
| map.cpp:431:7:431:67 | map.cpp:431:52:431:57 | IR only |
|
||||
| map.cpp:432:7:432:9 | map.cpp:431:52:431:57 | AST only |
|
||||
| movableclass.cpp:65:11:65:11 | movableclass.cpp:65:13:65:18 | AST only |
|
||||
| movableclass.cpp:65:11:65:21 | movableclass.cpp:65:13:65:18 | IR only |
|
||||
| set.cpp:20:7:20:31 | set.cpp:20:17:20:22 | IR only |
|
||||
|
||||
@@ -42,69 +42,91 @@
|
||||
| format.cpp:115:8:115:13 | Argument 0 indirection | format.cpp:114:37:114:50 | call to source |
|
||||
| format.cpp:157:7:157:22 | access to array | format.cpp:147:12:147:25 | call to source |
|
||||
| format.cpp:158:7:158:27 | ... + ... | format.cpp:148:16:148:30 | call to source |
|
||||
| map.cpp:26:9:26:13 | first | map.cpp:25:12:25:17 | call to source |
|
||||
| map.cpp:32:9:32:14 | second | map.cpp:30:13:30:18 | call to source |
|
||||
| map.cpp:41:9:41:13 | first | map.cpp:40:30:40:35 | call to source |
|
||||
| map.cpp:46:9:46:13 | first | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:47:9:47:14 | second | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:48:7:48:7 | f | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:51:9:51:13 | first | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:52:9:52:14 | second | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:53:7:53:7 | g | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:57:9:57:13 | first | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:58:9:58:14 | second | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:59:7:59:7 | h | map.cpp:45:37:45:42 | call to source |
|
||||
| map.cpp:67:9:67:13 | first | map.cpp:62:37:62:42 | call to source |
|
||||
| map.cpp:68:9:68:14 | second | map.cpp:62:37:62:42 | call to source |
|
||||
| map.cpp:69:7:69:7 | i | map.cpp:62:37:62:42 | call to source |
|
||||
| map.cpp:70:9:70:13 | first | map.cpp:62:37:62:42 | call to source |
|
||||
| map.cpp:71:9:71:14 | second | map.cpp:62:37:62:42 | call to source |
|
||||
| map.cpp:72:7:72:7 | j | map.cpp:62:37:62:42 | call to source |
|
||||
| map.cpp:73:9:73:13 | first | map.cpp:63:37:63:42 | call to source |
|
||||
| map.cpp:74:9:74:14 | second | map.cpp:63:37:63:42 | call to source |
|
||||
| map.cpp:75:7:75:7 | k | map.cpp:63:37:63:42 | call to source |
|
||||
| map.cpp:76:9:76:13 | first | map.cpp:63:37:63:42 | call to source |
|
||||
| map.cpp:77:9:77:14 | second | map.cpp:63:37:63:42 | call to source |
|
||||
| map.cpp:78:7:78:7 | l | map.cpp:63:37:63:42 | call to source |
|
||||
| map.cpp:86:7:86:32 | call to pair | map.cpp:86:24:86:29 | call to source |
|
||||
| map.cpp:87:34:87:38 | first | map.cpp:87:24:87:29 | call to source |
|
||||
| map.cpp:88:34:88:39 | second | map.cpp:88:24:88:29 | call to source |
|
||||
| map.cpp:105:7:105:54 | call to iterator | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:107:10:107:15 | call to insert | map.cpp:107:62:107:67 | call to source |
|
||||
| map.cpp:108:7:108:48 | call to iterator | map.cpp:108:34:108:39 | call to source |
|
||||
| map.cpp:109:10:109:25 | call to insert_or_assign | map.cpp:109:46:109:51 | call to source |
|
||||
| map.cpp:117:10:117:13 | call to find | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:119:10:119:13 | call to find | map.cpp:107:62:107:67 | call to source |
|
||||
| map.cpp:123:10:123:13 | call to find | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:125:10:125:13 | call to find | map.cpp:107:62:107:67 | call to source |
|
||||
| map.cpp:139:10:139:13 | call to find | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:151:8:151:10 | call to pair | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:152:12:152:16 | first | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:153:12:153:17 | second | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:158:12:158:16 | first | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:159:12:159:17 | second | map.cpp:105:39:105:44 | call to source |
|
||||
| map.cpp:165:7:165:27 | ... = ... | map.cpp:165:20:165:25 | call to source |
|
||||
| map.cpp:167:7:167:30 | ... = ... | map.cpp:167:23:167:28 | call to source |
|
||||
| map.cpp:223:11:223:15 | call to erase | map.cpp:220:49:220:54 | call to source |
|
||||
| map.cpp:223:11:223:15 | call to erase | map.cpp:221:49:221:54 | call to source |
|
||||
| map.cpp:257:7:257:54 | call to iterator | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:259:10:259:15 | call to insert | map.cpp:259:62:259:67 | call to source |
|
||||
| map.cpp:260:7:260:48 | call to iterator | map.cpp:260:34:260:39 | call to source |
|
||||
| map.cpp:261:10:261:25 | call to insert_or_assign | map.cpp:261:46:261:51 | call to source |
|
||||
| map.cpp:269:10:269:13 | call to find | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:271:10:271:13 | call to find | map.cpp:259:62:259:67 | call to source |
|
||||
| map.cpp:275:10:275:13 | call to find | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:277:10:277:13 | call to find | map.cpp:259:62:259:67 | call to source |
|
||||
| map.cpp:291:10:291:13 | call to find | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:303:8:303:10 | call to pair | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:304:12:304:16 | first | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:305:12:305:17 | second | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:310:12:310:16 | first | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:311:12:311:17 | second | map.cpp:257:39:257:44 | call to source |
|
||||
| map.cpp:317:7:317:27 | ... = ... | map.cpp:317:20:317:25 | call to source |
|
||||
| map.cpp:319:7:319:30 | ... = ... | map.cpp:319:23:319:28 | call to source |
|
||||
| map.cpp:372:11:372:15 | call to erase | map.cpp:369:49:369:54 | call to source |
|
||||
| map.cpp:372:11:372:15 | call to erase | map.cpp:370:49:370:54 | call to source |
|
||||
| map.cpp:29:9:29:13 | first | map.cpp:28:12:28:17 | call to source |
|
||||
| map.cpp:35:9:35:14 | second | map.cpp:33:13:33:18 | call to source |
|
||||
| map.cpp:44:9:44:13 | first | map.cpp:43:30:43:35 | call to source |
|
||||
| map.cpp:49:9:49:13 | first | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:50:9:50:14 | second | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:51:7:51:7 | f | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:54:9:54:13 | first | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:55:9:55:14 | second | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:56:7:56:7 | g | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:60:9:60:13 | first | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:61:9:61:14 | second | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:62:7:62:7 | h | map.cpp:48:37:48:42 | call to source |
|
||||
| map.cpp:70:9:70:13 | first | map.cpp:65:37:65:42 | call to source |
|
||||
| map.cpp:71:9:71:14 | second | map.cpp:65:37:65:42 | call to source |
|
||||
| map.cpp:72:7:72:7 | i | map.cpp:65:37:65:42 | call to source |
|
||||
| map.cpp:73:9:73:13 | first | map.cpp:65:37:65:42 | call to source |
|
||||
| map.cpp:74:9:74:14 | second | map.cpp:65:37:65:42 | call to source |
|
||||
| map.cpp:75:7:75:7 | j | map.cpp:65:37:65:42 | call to source |
|
||||
| map.cpp:76:9:76:13 | first | map.cpp:66:37:66:42 | call to source |
|
||||
| map.cpp:77:9:77:14 | second | map.cpp:66:37:66:42 | call to source |
|
||||
| map.cpp:78:7:78:7 | k | map.cpp:66:37:66:42 | call to source |
|
||||
| map.cpp:79:9:79:13 | first | map.cpp:66:37:66:42 | call to source |
|
||||
| map.cpp:80:9:80:14 | second | map.cpp:66:37:66:42 | call to source |
|
||||
| map.cpp:81:7:81:7 | l | map.cpp:66:37:66:42 | call to source |
|
||||
| map.cpp:89:7:89:32 | call to pair | map.cpp:89:24:89:29 | call to source |
|
||||
| map.cpp:90:34:90:38 | first | map.cpp:90:24:90:29 | call to source |
|
||||
| map.cpp:91:34:91:39 | second | map.cpp:91:24:91:29 | call to source |
|
||||
| map.cpp:108:7:108:54 | call to iterator | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:110:10:110:15 | call to insert | map.cpp:110:62:110:67 | call to source |
|
||||
| map.cpp:111:7:111:48 | call to iterator | map.cpp:111:34:111:39 | call to source |
|
||||
| map.cpp:112:10:112:25 | call to insert_or_assign | map.cpp:112:46:112:51 | call to source |
|
||||
| map.cpp:120:10:120:13 | call to find | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:122:10:122:13 | call to find | map.cpp:110:62:110:67 | call to source |
|
||||
| map.cpp:126:10:126:13 | call to find | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:128:10:128:13 | call to find | map.cpp:110:62:110:67 | call to source |
|
||||
| map.cpp:142:10:142:13 | call to find | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:154:8:154:10 | call to pair | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:155:12:155:16 | first | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:156:12:156:17 | second | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:161:12:161:16 | first | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:162:12:162:17 | second | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:168:7:168:27 | ... = ... | map.cpp:168:20:168:25 | call to source |
|
||||
| map.cpp:170:7:170:30 | ... = ... | map.cpp:170:23:170:28 | call to source |
|
||||
| map.cpp:182:10:182:20 | call to lower_bound | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:183:10:183:20 | call to upper_bound | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:184:7:184:31 | call to iterator | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:185:7:185:32 | call to iterator | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:186:10:186:20 | call to upper_bound | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:187:7:187:32 | call to iterator | map.cpp:108:39:108:44 | call to source |
|
||||
| map.cpp:226:11:226:15 | call to erase | map.cpp:223:49:223:54 | call to source |
|
||||
| map.cpp:226:11:226:15 | call to erase | map.cpp:224:49:224:54 | call to source |
|
||||
| map.cpp:235:7:235:40 | call to iterator | map.cpp:235:26:235:31 | call to source |
|
||||
| map.cpp:239:11:239:22 | call to emplace_hint | map.cpp:239:44:239:49 | call to source |
|
||||
| map.cpp:246:7:246:44 | call to iterator | map.cpp:246:30:246:35 | call to source |
|
||||
| map.cpp:250:11:250:21 | call to try_emplace | map.cpp:250:43:250:48 | call to source |
|
||||
| map.cpp:260:7:260:54 | call to iterator | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:262:10:262:15 | call to insert | map.cpp:262:62:262:67 | call to source |
|
||||
| map.cpp:263:7:263:48 | call to iterator | map.cpp:263:34:263:39 | call to source |
|
||||
| map.cpp:264:10:264:25 | call to insert_or_assign | map.cpp:264:46:264:51 | call to source |
|
||||
| map.cpp:272:10:272:13 | call to find | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:274:10:274:13 | call to find | map.cpp:262:62:262:67 | call to source |
|
||||
| map.cpp:278:10:278:13 | call to find | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:280:10:280:13 | call to find | map.cpp:262:62:262:67 | call to source |
|
||||
| map.cpp:294:10:294:13 | call to find | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:306:8:306:10 | call to pair | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:307:12:307:16 | first | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:308:12:308:17 | second | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:313:12:313:16 | first | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:314:12:314:17 | second | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:320:7:320:27 | ... = ... | map.cpp:320:20:320:25 | call to source |
|
||||
| map.cpp:322:7:322:30 | ... = ... | map.cpp:322:23:322:28 | call to source |
|
||||
| map.cpp:334:7:334:31 | call to iterator | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:335:7:335:32 | call to iterator | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:336:7:336:32 | call to iterator | map.cpp:260:39:260:44 | call to source |
|
||||
| map.cpp:375:11:375:15 | call to erase | map.cpp:372:49:372:54 | call to source |
|
||||
| map.cpp:375:11:375:15 | call to erase | map.cpp:373:49:373:54 | call to source |
|
||||
| map.cpp:384:7:384:40 | call to iterator | map.cpp:384:26:384:31 | call to source |
|
||||
| map.cpp:388:11:388:22 | call to emplace_hint | map.cpp:388:44:388:49 | call to source |
|
||||
| map.cpp:396:7:396:44 | call to iterator | map.cpp:396:30:396:35 | call to source |
|
||||
| map.cpp:397:40:397:45 | second | map.cpp:397:30:397:35 | call to source |
|
||||
| map.cpp:401:11:401:21 | call to try_emplace | map.cpp:401:43:401:48 | call to source |
|
||||
| map.cpp:416:7:416:41 | call to pair | map.cpp:416:30:416:35 | call to source |
|
||||
| map.cpp:419:7:419:41 | call to pair | map.cpp:419:33:419:38 | call to source |
|
||||
| map.cpp:431:7:431:67 | call to iterator | map.cpp:431:52:431:57 | call to source |
|
||||
| map.cpp:433:11:433:22 | call to emplace_hint | map.cpp:431:52:431:57 | call to source |
|
||||
| movableclass.cpp:44:8:44:9 | s1 | movableclass.cpp:39:21:39:26 | call to source |
|
||||
| movableclass.cpp:45:8:45:9 | s2 | movableclass.cpp:40:23:40:28 | call to source |
|
||||
| movableclass.cpp:46:8:46:9 | s3 | movableclass.cpp:42:8:42:13 | call to source |
|
||||
|
||||
@@ -582,6 +582,16 @@
|
||||
| test.c:635:9:635:10 | ss | -32768 |
|
||||
| test.c:638:7:638:8 | ss | -32768 |
|
||||
| test.c:639:9:639:10 | ss | -1 |
|
||||
| test.c:645:8:645:8 | s | -2147483648 |
|
||||
| test.c:645:15:645:15 | s | 0 |
|
||||
| test.c:645:23:645:23 | s | 0 |
|
||||
| test.c:646:18:646:18 | s | 0 |
|
||||
| test.c:646:22:646:22 | s | 0 |
|
||||
| test.c:647:9:647:14 | result | 0 |
|
||||
| test.c:653:7:653:7 | i | 0 |
|
||||
| test.c:654:9:654:9 | i | -2147483648 |
|
||||
| test.c:658:7:658:7 | u | 0 |
|
||||
| test.c:659:9:659:9 | u | 0 |
|
||||
| test.cpp:10:7:10:7 | b | -2147483648 |
|
||||
| test.cpp:11:5:11:5 | x | -2147483648 |
|
||||
| test.cpp:13:10:13:10 | x | -2147483648 |
|
||||
|
||||
@@ -638,4 +638,24 @@ void two_bounds_from_one_test(short ss, unsigned short us) {
|
||||
if (ss + 1 < sizeof(int)) {
|
||||
out(ss); // -1 .. 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void widen_recursive_expr() {
|
||||
int s;
|
||||
for (s = 0; s < 10; s++) {
|
||||
int result = s + s; // 0 .. 9 [BUG: upper bound is 15 due to widening]
|
||||
out(result); // 0 .. 18 [BUG: upper bound is 127 due to double widening]
|
||||
}
|
||||
}
|
||||
|
||||
void guard_bound_out_of_range(void) {
|
||||
int i = 0;
|
||||
if (i < 0) {
|
||||
out(i); // unreachable [BUG: is -max .. +max]
|
||||
}
|
||||
|
||||
unsigned int u = 0;
|
||||
if (u < 0) {
|
||||
out(u); // unreachable [BUG: is 0 .. +max]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -582,6 +582,16 @@
|
||||
| test.c:635:9:635:10 | ss | 32767 |
|
||||
| test.c:638:7:638:8 | ss | 32767 |
|
||||
| test.c:639:9:639:10 | ss | 2 |
|
||||
| test.c:645:8:645:8 | s | 2147483647 |
|
||||
| test.c:645:15:645:15 | s | 127 |
|
||||
| test.c:645:23:645:23 | s | 15 |
|
||||
| test.c:646:18:646:18 | s | 15 |
|
||||
| test.c:646:22:646:22 | s | 15 |
|
||||
| test.c:647:9:647:14 | result | 127 |
|
||||
| test.c:653:7:653:7 | i | 0 |
|
||||
| test.c:654:9:654:9 | i | 2147483647 |
|
||||
| test.c:658:7:658:7 | u | 0 |
|
||||
| test.c:659:9:659:9 | u | 4294967295 |
|
||||
| test.cpp:10:7:10:7 | b | 2147483647 |
|
||||
| test.cpp:11:5:11:5 | x | 2147483647 |
|
||||
| test.cpp:13:10:13:10 | x | 2147483647 |
|
||||
|
||||
@@ -70,3 +70,56 @@ argHasPostUpdate
|
||||
| destructors.cpp:52:14:52:16 | ref | ArgumentNode is missing PostUpdateNode. |
|
||||
| ir.cpp:623:5:623:5 | r | ArgumentNode is missing PostUpdateNode. |
|
||||
| ir.cpp:625:5:625:5 | s | ArgumentNode is missing PostUpdateNode. |
|
||||
postWithInFlow
|
||||
| VacuousDestructorCall.cpp:10:22:10:22 | i [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| allocators.cpp:4:11:4:13 | m_x [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| allocators.cpp:4:17:4:19 | m_y [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| assignexpr.cpp:9:4:9:4 | i [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| builtin.c:34:23:34:31 | staticint [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| builtin.c:39:37:39:45 | carry_out [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| builtin.c:43:41:43:49 | staticint [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| builtin.c:51:30:51:38 | staticint [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| builtin.c:54:29:54:38 | atomic_int [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| condition_decls.cpp:3:5:3:9 | m_ptr [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| condition_decls.cpp:17:11:17:15 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| condition_decls.cpp:20:11:20:15 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| condition_decls.cpp:28:11:28:15 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| condition_decls.cpp:31:11:31:15 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| condition_decls.cpp:34:9:34:13 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| conditional_destructors.cpp:6:13:6:15 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| conditional_destructors.cpp:18:13:18:15 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| cpp11.cpp:7:7:7:8 | el [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| cpp11.cpp:77:19:77:21 | call to Val | PostUpdateNode should not be the target of local flow. |
|
||||
| cpp11.cpp:82:11:82:14 | call to Val | PostUpdateNode should not be the target of local flow. |
|
||||
| cpp11.cpp:82:45:82:48 | call to Val | PostUpdateNode should not be the target of local flow. |
|
||||
| cpp11.cpp:82:51:82:51 | call to Val | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:177:5:177:5 | p [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:177:5:177:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:178:5:178:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:178:7:178:7 | p [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:183:5:183:5 | a [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:183:5:183:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:184:5:184:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:184:7:184:7 | a [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:342:5:342:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:342:6:342:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:428:8:428:8 | x [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:429:8:429:8 | y [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:643:15:643:17 | m_a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:644:11:644:14 | this [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:644:17:644:19 | m_a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:645:9:645:11 | m_a [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:654:11:654:14 | this [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:745:8:745:8 | base_s [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:754:8:754:8 | middle_s [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:763:8:763:8 | derived_s [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:809:7:809:13 | call to Base | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:810:7:810:26 | call to Base | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:823:7:823:13 | call to Base | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:824:7:824:26 | call to Base | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:130:7:130:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:131:9:131:9 | i [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:220:3:220:5 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:220:4:220:5 | sp [inner post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| static_init_templates.cpp:3:2:3:4 | ref [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
| static_init_templates.cpp:21:2:21:4 | val [post update] | PostUpdateNode should not be the target of local flow. |
|
||||
|
||||
@@ -1472,3 +1472,92 @@ uniquePostUpdate
|
||||
postIsInSameCallable
|
||||
reverseRead
|
||||
argHasPostUpdate
|
||||
postWithInFlow
|
||||
| aggregateinitializer.c:3:14:3:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| aggregateinitializer.c:3:21:3:25 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| allocators.cpp:3:27:3:27 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| allocators.cpp:3:35:3:35 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| allocators.cpp:4:11:4:23 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| allocators.cpp:4:17:4:23 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| assignexpr.cpp:9:2:9:12 | Store | PostUpdateNode should not be the target of local flow. |
|
||||
| bad_asts.cpp:15:10:15:12 | Store | PostUpdateNode should not be the target of local flow. |
|
||||
| builtin.c:14:26:14:26 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| builtin.c:14:29:14:29 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| builtin.c:14:32:14:32 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| builtin.c:14:35:14:35 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| condition_decls.cpp:3:5:3:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| condition_decls.cpp:3:21:3:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| conditional_destructors.cpp:6:13:6:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| conditional_destructors.cpp:18:13:18:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| cpp11.cpp:65:19:65:45 | Store | PostUpdateNode should not be the target of local flow. |
|
||||
| cpp11.cpp:82:17:82:55 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| cpp11.cpp:82:45:82:48 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| defdestructordeleteexpr.cpp:4:9:4:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| deleteexpr.cpp:7:9:7:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| file://:0:0:0:0 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| file://:0:0:0:0 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| file://:0:0:0:0 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:177:5:177:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:178:5:178:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:183:5:183:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:184:5:184:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:342:5:342:10 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:428:5:428:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:429:5:429:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:504:19:504:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:504:22:504:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:505:16:505:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:505:19:505:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:506:16:506:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:506:16:506:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:513:14:513:16 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:513:14:513:16 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:514:14:514:26 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:514:19:514:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:514:22:514:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:515:19:515:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:515:22:515:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:515:29:515:29 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:515:32:515:32 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:516:17:516:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:516:19:516:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:516:24:516:28 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:516:26:516:26 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:521:19:521:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:521:22:521:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:521:25:521:25 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:522:16:522:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:522:19:522:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:531:14:531:14 | Store | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:577:16:577:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:577:19:577:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:578:19:578:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:578:22:578:22 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:579:16:579:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:579:19:579:19 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:643:9:643:21 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:644:9:644:23 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:645:9:645:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:659:9:659:14 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:660:13:660:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:661:9:661:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:943:3:943:11 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:947:3:947:25 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:962:17:962:47 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:962:17:962:47 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:962:17:962:47 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:962:26:962:30 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| ir.cpp:962:41:962:45 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:130:5:130:11 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:131:5:131:13 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:154:32:154:32 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:154:35:154:35 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:154:40:154:40 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:154:43:154:43 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:157:14:157:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:158:14:158:18 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:160:31:160:33 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| misc.c:160:31:160:33 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| range_analysis.c:102:5:102:15 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| static_init_templates.cpp:3:2:3:8 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
| static_init_templates.cpp:21:2:21:12 | Chi | PostUpdateNode should not be the target of local flow. |
|
||||
|
||||
@@ -710,9 +710,9 @@ Microsoft.NETCore.App 2.2.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.Ap
|
||||
[Fact]
|
||||
public void TestWindowCSharpMsBuild()
|
||||
{
|
||||
Actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\test1.sln"] = 0;
|
||||
Actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\test1.sln -DisableParallelProcessing"] = 0;
|
||||
Actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program Files ^(x86^)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && C:\\odasa\\tools\\odasa index --auto msbuild C:\\Project\\test1.sln /p:UseSharedCompilation=false /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /p:MvcBuildViews=true /P:Fu=Bar"] = 0;
|
||||
Actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\test2.sln"] = 0;
|
||||
Actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\test2.sln -DisableParallelProcessing"] = 0;
|
||||
Actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program Files ^(x86^)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && C:\\odasa\\tools\\odasa index --auto msbuild C:\\Project\\test2.sln /p:UseSharedCompilation=false /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /p:MvcBuildViews=true /P:Fu=Bar"] = 0;
|
||||
Actions.FileExists["csharp.log"] = true;
|
||||
Actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false;
|
||||
@@ -741,9 +741,9 @@ Microsoft.NETCore.App 2.2.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.Ap
|
||||
[Fact]
|
||||
public void TestWindowCSharpMsBuildMultipleSolutions()
|
||||
{
|
||||
Actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test1.csproj"] = 0;
|
||||
Actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test1.csproj -DisableParallelProcessing"] = 0;
|
||||
Actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program Files ^(x86^)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && C:\\odasa\\tools\\odasa index --auto msbuild C:\\Project\\test1.csproj /p:UseSharedCompilation=false /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /p:MvcBuildViews=true /P:Fu=Bar"] = 0;
|
||||
Actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test2.csproj"] = 0;
|
||||
Actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test2.csproj -DisableParallelProcessing"] = 0;
|
||||
Actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program Files ^(x86^)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && C:\\odasa\\tools\\odasa index --auto msbuild C:\\Project\\test2.csproj /p:UseSharedCompilation=false /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /p:MvcBuildViews=true /P:Fu=Bar"] = 0;
|
||||
Actions.FileExists["csharp.log"] = true;
|
||||
Actions.FileExists[@"C:\Project\test1.csproj"] = true;
|
||||
@@ -786,7 +786,7 @@ Microsoft.NETCore.App 2.2.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.Ap
|
||||
[Fact]
|
||||
public void TestWindowCSharpMsBuildFailed()
|
||||
{
|
||||
Actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test1.sln"] = 0;
|
||||
Actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test1.sln -DisableParallelProcessing"] = 0;
|
||||
Actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program Files ^(x86^)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && C:\\odasa\\tools\\odasa index --auto msbuild C:\\Project\\test1.sln /p:UseSharedCompilation=false /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /p:MvcBuildViews=true /P:Fu=Bar"] = 1;
|
||||
Actions.FileExists["csharp.log"] = true;
|
||||
Actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false;
|
||||
@@ -994,8 +994,8 @@ Microsoft.NETCore.App 2.1.4 [/usr/local/share/dotnet/shared/Microsoft.NETCore.Ap
|
||||
[Fact]
|
||||
public void TestDirsProjWindows()
|
||||
{
|
||||
Actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\dirs.proj"] = 1;
|
||||
Actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\dirs.proj"] = 0;
|
||||
Actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\dirs.proj -DisableParallelProcessing"] = 1;
|
||||
Actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\dirs.proj -DisableParallelProcessing"] = 0;
|
||||
Actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program Files ^(x86^)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && C:\\odasa\\tools\\odasa index --auto msbuild C:\\Project\\dirs.proj /p:UseSharedCompilation=false /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /p:MvcBuildViews=true /P:Fu=Bar"] = 0;
|
||||
Actions.FileExists["csharp.log"] = true;
|
||||
Actions.FileExists[@"C:\Project\a\test.csproj"] = true;
|
||||
@@ -1038,8 +1038,8 @@ Microsoft.NETCore.App 2.1.4 [/usr/local/share/dotnet/shared/Microsoft.NETCore.Ap
|
||||
[Fact]
|
||||
public void TestDirsProjLinux()
|
||||
{
|
||||
Actions.RunProcess[@"nuget restore C:\Project/dirs.proj"] = 1;
|
||||
Actions.RunProcess[@"mono C:\Project/.nuget/nuget.exe restore C:\Project/dirs.proj"] = 0;
|
||||
Actions.RunProcess[@"nuget restore C:\Project/dirs.proj -DisableParallelProcessing"] = 1;
|
||||
Actions.RunProcess[@"mono C:\Project/.nuget/nuget.exe restore C:\Project/dirs.proj -DisableParallelProcessing"] = 0;
|
||||
Actions.RunProcess[@"C:\odasa/tools/odasa index --auto msbuild C:\Project/dirs.proj /p:UseSharedCompilation=false /t:rebuild /p:MvcBuildViews=true"] = 0;
|
||||
Actions.FileExists["csharp.log"] = true;
|
||||
Actions.FileExists[@"C:\Project/a/test.csproj"] = true;
|
||||
|
||||
@@ -53,6 +53,7 @@ namespace Semmle.Autobuild.Shared
|
||||
RunCommand(nuget).
|
||||
Argument("restore").
|
||||
QuoteArgument(projectOrSolution.FullPath).
|
||||
Argument("-DisableParallelProcessing").
|
||||
Script;
|
||||
var nugetRestore = GetNugetRestoreScript();
|
||||
var msbuildRestoreCommand = new CommandBuilder(builder.Actions).
|
||||
|
||||
@@ -9,25 +9,28 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
protected Accessor(Context cx, IMethodSymbol init)
|
||||
: base(cx, init) { }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the property symbol associated accessor `symbol`, or `null`
|
||||
/// if there is no associated symbol.
|
||||
/// </summary>
|
||||
public static IPropertySymbol GetPropertySymbol(IMethodSymbol symbol)
|
||||
{
|
||||
// Usually, the property/indexer can be fetched from the associated symbol
|
||||
var prop = symbol.AssociatedSymbol as IPropertySymbol;
|
||||
if (prop != null)
|
||||
return prop;
|
||||
|
||||
// But for properties/indexers that implement explicit interfaces, Roslyn
|
||||
// does not properly populate `AssociatedSymbol`
|
||||
var props = symbol.ContainingType.GetMembers().OfType<IPropertySymbol>();
|
||||
props = props.Where(p => SymbolEqualityComparer.Default.Equals(symbol, p.GetMethod) || SymbolEqualityComparer.Default.Equals(symbol, p.SetMethod));
|
||||
return props.SingleOrDefault();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the property symbol associated with this accessor.
|
||||
/// </summary>
|
||||
IPropertySymbol PropertySymbol
|
||||
{
|
||||
get
|
||||
{
|
||||
// Usually, the property/indexer can be fetched from the associated symbol
|
||||
var prop = symbol.AssociatedSymbol as IPropertySymbol;
|
||||
if (prop != null)
|
||||
return prop;
|
||||
|
||||
// But for properties/indexers that implement explicit interfaces, Roslyn
|
||||
// does not properly populate `AssociatedSymbol`
|
||||
var props = symbol.ContainingType.GetMembers().OfType<IPropertySymbol>();
|
||||
props = props.Where(p => SymbolEqualityComparer.Default.Equals(symbol, p.GetMethod) || SymbolEqualityComparer.Default.Equals(symbol, p.SetMethod));
|
||||
return props.SingleOrDefault();
|
||||
}
|
||||
}
|
||||
IPropertySymbol PropertySymbol => GetPropertySymbol(symbol);
|
||||
|
||||
public new Accessor OriginalDefinition => Create(Context, symbol.OriginalDefinition);
|
||||
|
||||
|
||||
@@ -240,7 +240,7 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
return Destructor.Create(cx, methodDecl);
|
||||
case MethodKind.PropertyGet:
|
||||
case MethodKind.PropertySet:
|
||||
return methodDecl.AssociatedSymbol is null ? OrdinaryMethod.Create(cx, methodDecl) : (Method)Accessor.Create(cx, methodDecl);
|
||||
return Accessor.GetPropertySymbol(methodDecl) is null ? OrdinaryMethod.Create(cx, methodDecl) : (Method)Accessor.Create(cx, methodDecl);
|
||||
case MethodKind.EventAdd:
|
||||
case MethodKind.EventRemove:
|
||||
return EventAccessor.Create(cx, methodDecl);
|
||||
|
||||
@@ -45,10 +45,14 @@ namespace Semmle.Extraction.Tests
|
||||
Directory.SetCurrentDirectory(tmpDir);
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
|
||||
{
|
||||
// `Directory.SetCurrentDirectory()` doesn't seem to work on macOS,
|
||||
// so disable this test on macOS, for now
|
||||
// `Directory.SetCurrentDirectory()` seems to slightly change the path on macOS,
|
||||
// so adjusting it:
|
||||
Assert.NotEqual(Directory.GetCurrentDirectory(), tmpDir);
|
||||
return;
|
||||
tmpDir = "/private" + tmpDir;
|
||||
// Remove trailing slash:
|
||||
Assert.Equal('/', tmpDir[tmpDir.Length - 1]);
|
||||
tmpDir = tmpDir.Substring(0, tmpDir.Length - 1);
|
||||
Assert.Equal(Directory.GetCurrentDirectory(), tmpDir);
|
||||
}
|
||||
var f1 = project!.GetTrapPath(Logger, new TransformedPathStub("foo.cs"), TrapWriter.CompressionMode.Gzip);
|
||||
var g1 = TrapWriter.NestPaths(Logger, tmpDir, "foo.cs.trap.gz");
|
||||
|
||||
@@ -39,7 +39,7 @@ module Stages {
|
||||
|
||||
cached
|
||||
private predicate forceCachingInSameStageRev() {
|
||||
any(ControlFlowElement cfe).controlsBlock(_, _)
|
||||
any(ControlFlowElement cfe).controlsBlock(_, _, _)
|
||||
or
|
||||
exists(GuardedExpr ge)
|
||||
or
|
||||
|
||||
@@ -62,7 +62,7 @@ class Assertion extends MethodCall {
|
||||
* does not work.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private predicate immediatelyDominatesBlockSplit(BasicBlock succ) {
|
||||
deprecated private predicate immediatelyDominatesBlockSplit(BasicBlock succ) {
|
||||
// Only calculate dominance by explicit recursion for split nodes;
|
||||
// all other nodes can use regular CFG dominance
|
||||
this instanceof ControlFlow::Internal::SplitControlFlowElement and
|
||||
@@ -78,11 +78,11 @@ class Assertion extends MethodCall {
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate strictlyDominatesJoinBlockPredecessor(JoinBlock jb, int i) {
|
||||
deprecated private predicate strictlyDominatesJoinBlockPredecessor(JoinBlock jb, int i) {
|
||||
this.strictlyDominatesSplit(jb.getJoinBlockPredecessor(i))
|
||||
}
|
||||
|
||||
private predicate strictlyDominatesJoinBlockSplit(JoinBlock jb, int i) {
|
||||
deprecated private predicate strictlyDominatesJoinBlockSplit(JoinBlock jb, int i) {
|
||||
i = -1 and
|
||||
this.strictlyDominatesJoinBlockPredecessor(jb, _)
|
||||
or
|
||||
@@ -95,7 +95,7 @@ class Assertion extends MethodCall {
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate strictlyDominatesSplit(BasicBlock bb) {
|
||||
deprecated private predicate strictlyDominatesSplit(BasicBlock bb) {
|
||||
this.immediatelyDominatesBlockSplit(bb)
|
||||
or
|
||||
// Equivalent with
|
||||
@@ -121,6 +121,8 @@ class Assertion extends MethodCall {
|
||||
}
|
||||
|
||||
/**
|
||||
* DEPRECATED: Use `getExpr().controlsBlock()` instead.
|
||||
*
|
||||
* Holds if this assertion strictly dominates basic block `bb`. That is, `bb`
|
||||
* can only be reached from the callable entry point by going via *some* basic
|
||||
* block containing this element.
|
||||
@@ -130,7 +132,7 @@ class Assertion extends MethodCall {
|
||||
* in that it takes control flow splitting into account.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
predicate strictlyDominates(BasicBlock bb) {
|
||||
deprecated predicate strictlyDominates(BasicBlock bb) {
|
||||
this.strictlyDominatesSplit(bb)
|
||||
or
|
||||
this.getAControlFlowNode().getBasicBlock().strictlyDominates(bb)
|
||||
|
||||
@@ -126,39 +126,47 @@ class ControlFlowElement extends ExprOrStmtParent, @control_flow_element {
|
||||
* ```
|
||||
*
|
||||
* does not work.
|
||||
*
|
||||
* `cb` records all of the possible condition blocks for this control flow element
|
||||
* that a path from the callable entry point to `succ` may go through.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private predicate immediatelyControlsBlockSplit(BasicBlock succ, ConditionalSuccessor s) {
|
||||
exists(ConditionBlock cb | this.immediatelyControlsBlockSplit0(cb, succ, s) |
|
||||
forall(BasicBlock pred, SuccessorType t |
|
||||
this.immediatelyControlsBlockSplit1(cb, succ, s, pred, t)
|
||||
|
|
||||
this.immediatelyControlsBlockSplit2(cb, succ, s, pred, t)
|
||||
)
|
||||
private predicate immediatelyControlsBlockSplit(
|
||||
BasicBlock succ, ConditionalSuccessor s, ConditionBlock cb
|
||||
) {
|
||||
this.immediatelyControlsBlockSplit0(cb, succ, s) and
|
||||
forall(BasicBlock pred, SuccessorType t |
|
||||
this.immediatelyControlsBlockSplit1(cb, succ, s, pred, t)
|
||||
|
|
||||
this.immediatelyControlsBlockSplit2(cb, succ, s, pred, t)
|
||||
)
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate controlsJoinBlockPredecessor(JoinBlock controlled, ConditionalSuccessor s, int i) {
|
||||
this.controlsBlockSplit(controlled.getJoinBlockPredecessor(i), s)
|
||||
private predicate controlsJoinBlockPredecessor(
|
||||
JoinBlock controlled, ConditionalSuccessor s, int i, ConditionBlock cb
|
||||
) {
|
||||
this.controlsBlockSplit(controlled.getJoinBlockPredecessor(i), s, cb)
|
||||
}
|
||||
|
||||
private predicate controlsJoinBlockSplit(JoinBlock controlled, ConditionalSuccessor s, int i) {
|
||||
i = -1 and
|
||||
this.controlsJoinBlockPredecessor(controlled, s, _)
|
||||
this.controlsJoinBlockPredecessor(controlled, s, _, _)
|
||||
or
|
||||
this.controlsJoinBlockSplit(controlled, s, i - 1) and
|
||||
(
|
||||
this.controlsJoinBlockPredecessor(controlled, s, i)
|
||||
this.controlsJoinBlockPredecessor(controlled, s, i, _)
|
||||
or
|
||||
controlled.dominates(controlled.getJoinBlockPredecessor(i))
|
||||
)
|
||||
}
|
||||
|
||||
cached
|
||||
private predicate controlsBlockSplit(BasicBlock controlled, ConditionalSuccessor s) {
|
||||
private predicate controlsBlockSplit(
|
||||
BasicBlock controlled, ConditionalSuccessor s, ConditionBlock cb
|
||||
) {
|
||||
Stages::GuardsStage::forceCachingInSameStage() and
|
||||
this.immediatelyControlsBlockSplit(controlled, s)
|
||||
this.immediatelyControlsBlockSplit(controlled, s, cb)
|
||||
or
|
||||
// Equivalent with
|
||||
//
|
||||
@@ -178,10 +186,11 @@ class ControlFlowElement extends ExprOrStmtParent, @control_flow_element {
|
||||
last = max(int i | exists(controlled.(JoinBlock).getJoinBlockPredecessor(i)))
|
||||
|
|
||||
this.controlsJoinBlockSplit(controlled, s, last)
|
||||
)
|
||||
) and
|
||||
this.controlsJoinBlockPredecessor(controlled, s, _, cb)
|
||||
or
|
||||
not controlled instanceof JoinBlock and
|
||||
this.controlsBlockSplit(controlled.getAPredecessor(), s)
|
||||
this.controlsBlockSplit(controlled.getAPredecessor(), s, cb)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -200,16 +209,25 @@ class ControlFlowElement extends ExprOrStmtParent, @control_flow_element {
|
||||
* ```
|
||||
*
|
||||
* as control flow splitting is taken into account.
|
||||
*
|
||||
* `cb` records all of the possible condition blocks for this control flow element
|
||||
* that a path from the callable entry point to `controlled` may go through.
|
||||
*/
|
||||
predicate controlsBlock(BasicBlock controlled, ConditionalSuccessor s) {
|
||||
this.controlsBlockSplit(controlled, s)
|
||||
predicate controlsBlock(BasicBlock controlled, ConditionalSuccessor s, ConditionBlock cb) {
|
||||
this.controlsBlockSplit(controlled, s, cb)
|
||||
or
|
||||
exists(ConditionBlock cb | cb.getLastNode() = this.getAControlFlowNode() |
|
||||
cb.controls(controlled, s)
|
||||
)
|
||||
cb.getLastNode() = this.getAControlFlowNode() and
|
||||
cb.controls(controlled, s)
|
||||
}
|
||||
|
||||
/** DEPRECATED: Use `controlsBlock/3` instead. */
|
||||
deprecated predicate controlsBlock(BasicBlock controlled, ConditionalSuccessor s) {
|
||||
this.controlsBlock(controlled, s, _)
|
||||
}
|
||||
|
||||
/**
|
||||
* DEPRECATED.
|
||||
*
|
||||
* Holds if control flow element `controlled` is controlled by this control flow
|
||||
* element with conditional value `s`. That is, `controlled` can only be reached
|
||||
* from the callable entry point by going via the `s` edge out of this element.
|
||||
@@ -227,7 +245,7 @@ class ControlFlowElement extends ExprOrStmtParent, @control_flow_element {
|
||||
*/
|
||||
// potentially very large predicate, so must be inlined
|
||||
pragma[inline]
|
||||
predicate controlsElement(ControlFlowElement controlled, ConditionalSuccessor s) {
|
||||
deprecated predicate controlsElement(ControlFlowElement controlled, ConditionalSuccessor s) {
|
||||
forex(BasicBlock bb | bb = controlled.getAControlFlowNode().getBasicBlock() |
|
||||
this.controlsBlock(bb, s)
|
||||
)
|
||||
|
||||
@@ -659,13 +659,12 @@ module ControlFlow {
|
||||
or
|
||||
cfe =
|
||||
any(ArrayCreation ac |
|
||||
if ac.isImplicitlySized()
|
||||
then
|
||||
// No length argument: element itself
|
||||
result = ac
|
||||
else
|
||||
// First element of first length argument
|
||||
result = first(ac.getLengthArgument(0))
|
||||
// First element of first length argument
|
||||
result = first(ac.getLengthArgument(0))
|
||||
or
|
||||
// No length argument: element itself
|
||||
not exists(ac.getLengthArgument(0)) and
|
||||
result = ac
|
||||
)
|
||||
or
|
||||
cfe =
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -612,14 +612,11 @@ private Ssa::Definition getAnSsaQualifier(Expr e, ControlFlow::Node cfn) {
|
||||
}
|
||||
|
||||
private AssignableAccess getATrackedAccess(Ssa::Definition def, ControlFlow::Node cfn) {
|
||||
(
|
||||
result = def.getAReadAtNode(cfn)
|
||||
or
|
||||
result = def.(Ssa::ExplicitDefinition).getADefinition().getTargetAccess() and
|
||||
result.getAControlFlowNode() = cfn and
|
||||
cfn.getBasicBlock() = def.getBasicBlock()
|
||||
) and
|
||||
result = def.getAReadAtNode(cfn) and
|
||||
not def instanceof Ssa::ImplicitUntrackedDefinition
|
||||
or
|
||||
result = def.(Ssa::ExplicitDefinition).getADefinition().getTargetAccess() and
|
||||
cfn = def.getControlFlowNode()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -962,41 +959,6 @@ module Internal {
|
||||
e = any(BinaryArithmeticOperation bao | result = bao.getAnOperand())
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate assertionControlsNodeInSameBasicBlock0(
|
||||
Guard g, AbstractValue v, BasicBlock bb, int i
|
||||
) {
|
||||
exists(Assertion a, Guard g0, AbstractValue v0 |
|
||||
asserts(a, g0, v0) and
|
||||
impliesSteps(g0, v0, g, v) and
|
||||
bb.getNode(i) = a.getAControlFlowNode()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if control flow node `cfn` only is reached when guard `g` evaluates to `v`,
|
||||
* because of an assertion.
|
||||
*/
|
||||
private predicate assertionControlsNodeInSameBasicBlock(
|
||||
Guard g, ControlFlow::Node cfn, AbstractValue v
|
||||
) {
|
||||
exists(BasicBlock bb, int i, int j |
|
||||
assertionControlsNodeInSameBasicBlock0(g, v, bb, i) and
|
||||
bb.getNode(j) = cfn and
|
||||
j > i
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if control flow element `cfe` only is reached when guard `g` evaluates to `v`,
|
||||
* because of an assertion.
|
||||
*/
|
||||
private predicate guardAssertionControlsElement(Guard g, ControlFlowElement cfe, AbstractValue v) {
|
||||
forex(ControlFlow::Node cfn | cfn = cfe.getAControlFlowNode() |
|
||||
assertionControlsNodeInSameBasicBlock(g, cfn, v)
|
||||
)
|
||||
}
|
||||
|
||||
/** Same as `this.getAChildExpr*()`, but avoids `fastTC`. */
|
||||
private Expr getAChildExprStar(Guard g) {
|
||||
result = g
|
||||
@@ -1004,26 +966,6 @@ module Internal {
|
||||
result = getAChildExprStar(g).getAChildExpr()
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if assertion `a` directly asserts that expression `e` evaluates to value `v`.
|
||||
*/
|
||||
predicate asserts(Assertion a, Expr e, AbstractValue v) {
|
||||
e = a.getExpr() and
|
||||
(
|
||||
a.getAssertMethod() instanceof AssertTrueMethod and
|
||||
v.(BooleanValue).getValue() = true
|
||||
or
|
||||
a.getAssertMethod() instanceof AssertFalseMethod and
|
||||
v.(BooleanValue).getValue() = false
|
||||
or
|
||||
a.getAssertMethod() instanceof AssertNullMethod and
|
||||
v.(NullValue).isNull()
|
||||
or
|
||||
a.getAssertMethod() instanceof AssertNonNullMethod and
|
||||
v.(NullValue).isNonNull()
|
||||
)
|
||||
}
|
||||
|
||||
private Expr stripConditionalExpr(Expr e) {
|
||||
e =
|
||||
any(ConditionalExpr ce |
|
||||
@@ -1453,8 +1395,6 @@ module Internal {
|
||||
or
|
||||
val.branch(_, _, e)
|
||||
or
|
||||
asserts(_, e, val)
|
||||
or
|
||||
e instanceof CollectionExpr and
|
||||
val = TEmptyCollectionValue(_)
|
||||
) and
|
||||
@@ -1767,11 +1707,7 @@ module Internal {
|
||||
pragma[noinline]
|
||||
private predicate candidateAux(AccessOrCallExpr e, Declaration target, BasicBlock bb) {
|
||||
target = e.getTarget() and
|
||||
exists(Guard g | e = getAChildExprStar(g) |
|
||||
guardControls(g, bb, _)
|
||||
or
|
||||
assertionControlsNodeInSameBasicBlock(g, bb.getANode(), _)
|
||||
)
|
||||
exists(Guard g | e = getAChildExprStar(g) | guardControls(g, _, bb, _))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1779,42 +1715,52 @@ module Internal {
|
||||
private module Cached {
|
||||
private import semmle.code.csharp.Caching
|
||||
|
||||
/** Holds if basic block `bb` only is reached when guard `g` has abstract value `v`. */
|
||||
/**
|
||||
* 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, BasicBlock bb, AbstractValue v) {
|
||||
exists(AbstractValue v0, Guard g0 | impliesSteps(g0, v0, g, v) |
|
||||
exists(ControlFlowElement cfe, ConditionalSuccessor s |
|
||||
v0.branch(cfe, s, g0) and cfe.controlsBlock(bb, s)
|
||||
)
|
||||
or
|
||||
exists(Assertion a |
|
||||
asserts(a, g0, v0) and
|
||||
a.strictlyDominates(bb)
|
||||
predicate guardControls(Guard g, ConditionBlock cb, BasicBlock bb, AbstractValue v) {
|
||||
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)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate isGuardedByNode0(
|
||||
ControlFlow::Node cfn, AccessOrCallExpr guarded, Guard g, AccessOrCallExpr sub,
|
||||
AbstractValue v
|
||||
private predicate nodeIsGuardedBySameSubExpr0(
|
||||
ControlFlow::Node guardedCfn, AccessOrCallExpr guarded, Guard g, ConditionBlock cb,
|
||||
AccessOrCallExpr sub, AbstractValue v
|
||||
) {
|
||||
Stages::GuardsStage::forceCachingInSameStage() and
|
||||
cfn = guarded.getAControlFlowNode() and
|
||||
guardControls(g, cfn.getBasicBlock(), v) and
|
||||
guardedCfn = guarded.getAControlFlowNode() and
|
||||
guardControls(g, cb, guardedCfn.getBasicBlock(), v) and
|
||||
exists(ConditionOnExprComparisonConfig c | c.same(sub, guarded))
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate isGuardedByExpr1(
|
||||
AccessOrCallExpr guarded, Guard g, AccessOrCallExpr sub, AbstractValue v
|
||||
private predicate nodeIsGuardedBySameSubExpr(
|
||||
ControlFlow::Node guardedCfn, AccessOrCallExpr guarded, Guard g, ConditionBlock cb,
|
||||
AccessOrCallExpr sub, AbstractValue v
|
||||
) {
|
||||
forex(ControlFlow::Node cfn | cfn = guarded.getAControlFlowNode() |
|
||||
isGuardedByNode0(cfn, guarded, g, sub, v)
|
||||
nodeIsGuardedBySameSubExpr0(guardedCfn, guarded, g, cb, sub, v) and
|
||||
sub = getAChildExprStar(g)
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate nodeIsGuardedBySameSubExprSsaDef(
|
||||
ControlFlow::Node cfn, 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)
|
||||
)
|
||||
or
|
||||
guardAssertionControlsElement(g, guarded, v) and
|
||||
exists(ConditionOnExprComparisonConfig c | c.same(sub, guarded))
|
||||
}
|
||||
|
||||
private predicate adjacentReadPairSameVarUniquePredecessor(
|
||||
@@ -1828,47 +1774,45 @@ module Internal {
|
||||
)
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate isGuardedByExpr0(
|
||||
AccessOrCallExpr guarded, Guard g, AccessOrCallExpr sub, AbstractValue v
|
||||
) {
|
||||
forex(ControlFlow::Node cfn | cfn = guarded.getAControlFlowNode() |
|
||||
nodeIsGuardedBySameSubExpr(cfn, guarded, g, _, sub, v)
|
||||
)
|
||||
}
|
||||
|
||||
cached
|
||||
predicate isGuardedByExpr(
|
||||
AccessOrCallExpr guarded, Guard g, AccessOrCallExpr sub, AbstractValue v
|
||||
) {
|
||||
isGuardedByExpr1(guarded, g, sub, v) and
|
||||
sub = getAChildExprStar(g) and
|
||||
forall(Ssa::Definition def, ControlFlow::Node subCfn | def = sub.getAnSsaQualifier(subCfn) |
|
||||
exists(ControlFlow::Node defCfn | def = guarded.getAnSsaQualifier(defCfn) |
|
||||
isGuardedByExpr0(guarded, g, sub, v) and
|
||||
forall(ControlFlow::Node subCfn, Ssa::Definition def |
|
||||
nodeIsGuardedBySameSubExprSsaDef(_, guarded, g, subCfn, sub, v, def)
|
||||
|
|
||||
exists(ControlFlow::Node guardedCfn |
|
||||
def = guarded.getAnSsaQualifier(guardedCfn) and
|
||||
if v.isReferentialProperty()
|
||||
then adjacentReadPairSameVarUniquePredecessor(def, subCfn, defCfn)
|
||||
then adjacentReadPairSameVarUniquePredecessor(def, subCfn, guardedCfn)
|
||||
else any()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate isGuardedByNode1(
|
||||
ControlFlow::Nodes::ElementNode guarded, Guard g, AccessOrCallExpr sub, AbstractValue v
|
||||
) {
|
||||
isGuardedByNode0(guarded, _, g, sub, v)
|
||||
or
|
||||
assertionControlsNodeInSameBasicBlock(g, guarded, v) and
|
||||
exists(ConditionOnExprComparisonConfig c | c.same(sub, guarded.getElement()))
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate isGuardedByNode2(ControlFlow::Nodes::ElementNode guarded, Ssa::Definition def) {
|
||||
isGuardedByNode1(guarded, _, _, _) and
|
||||
exists(BasicBlock bb | bb = guarded.getBasicBlock() |
|
||||
def = guarded.getElement().(AccessOrCallExpr).getAnSsaQualifier(bb.getANode())
|
||||
)
|
||||
}
|
||||
|
||||
cached
|
||||
predicate isGuardedByNode(
|
||||
ControlFlow::Nodes::ElementNode guarded, Guard g, AccessOrCallExpr sub, AbstractValue v
|
||||
) {
|
||||
isGuardedByNode1(guarded, g, sub, v) and
|
||||
sub = getAChildExprStar(g) and
|
||||
forall(Ssa::Definition def, ControlFlow::Node subCfn | def = sub.getAnSsaQualifier(subCfn) |
|
||||
isGuardedByNode2(guarded, def) and
|
||||
nodeIsGuardedBySameSubExpr(guarded, _, g, _, sub, v) and
|
||||
forall(ControlFlow::Node subCfn, Ssa::Definition def |
|
||||
nodeIsGuardedBySameSubExprSsaDef(guarded, _, g, subCfn, sub, v, def)
|
||||
|
|
||||
def =
|
||||
guarded
|
||||
.getElement()
|
||||
.(AccessOrCallExpr)
|
||||
.getAnSsaQualifier(guarded.getBasicBlock().getANode()) and
|
||||
if v.isReferentialProperty()
|
||||
then adjacentReadPairSameVarUniquePredecessor(def, subCfn, guarded)
|
||||
else any()
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
*/
|
||||
|
||||
import csharp
|
||||
private import semmle.code.csharp.commons.Assertions
|
||||
private import semmle.code.csharp.commons.Constants
|
||||
private import semmle.code.csharp.frameworks.System
|
||||
private import NonReturning
|
||||
@@ -98,6 +99,13 @@ class Completion extends TCompletion {
|
||||
cfe instanceof ThrowElement and
|
||||
this = TThrowCompletion(cfe.(ThrowElement).getThrownExceptionType())
|
||||
or
|
||||
exists(AssertMethod m | assertion(cfe, m, _) |
|
||||
this = TThrowCompletion(m.getExceptionClass())
|
||||
or
|
||||
not exists(m.getExceptionClass()) and
|
||||
this = TExitCompletion()
|
||||
)
|
||||
or
|
||||
completionIsValidForStmt(cfe, this)
|
||||
or
|
||||
mustHaveBooleanCompletion(cfe) and
|
||||
@@ -382,6 +390,11 @@ private predicate invalidCastCandidate(CastExpr ce) {
|
||||
ce.getType() = ce.getExpr().getType().(ValueOrRefType).getASubType+()
|
||||
}
|
||||
|
||||
private predicate assertion(Assertion a, AssertMethod am, Expr e) {
|
||||
e = a.getExpr() and
|
||||
am = a.getAssertMethod()
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if a normal completion of `e` must be a Boolean completion.
|
||||
*/
|
||||
@@ -409,6 +422,9 @@ private predicate inBooleanContext(Expr e, boolean isBooleanCompletionForParent)
|
||||
or
|
||||
exists(SpecificCatchClause scc | scc.getFilterClause() = e | isBooleanCompletionForParent = false)
|
||||
or
|
||||
assertion(_, [any(AssertTrueMethod m).(AssertMethod), any(AssertFalseMethod m)], e) and
|
||||
isBooleanCompletionForParent = false
|
||||
or
|
||||
exists(LogicalNotExpr lne | lne.getAnOperand() = e |
|
||||
inBooleanContext(lne, _) and
|
||||
isBooleanCompletionForParent = true
|
||||
@@ -479,6 +495,9 @@ private predicate inNullnessContext(Expr e, boolean isNullnessCompletionForParen
|
||||
isNullnessCompletionForParent = false
|
||||
)
|
||||
or
|
||||
assertion(_, [any(AssertNullMethod m).(AssertMethod), any(AssertNonNullMethod m)], e) and
|
||||
isNullnessCompletionForParent = false
|
||||
or
|
||||
exists(ConditionalExpr ce | inNullnessContext(ce, _) |
|
||||
(e = ce.getThen() or e = ce.getElse()) and
|
||||
isNullnessCompletionForParent = true
|
||||
|
||||
@@ -89,10 +89,14 @@ class PreBasicBlock extends ControlFlowElement {
|
||||
private predicate dominatesPredecessor(PreBasicBlock df) { this.dominates(df.getAPredecessor()) }
|
||||
}
|
||||
|
||||
private Completion getConditionalCompletion(ConditionalCompletion cc) {
|
||||
result.getInnerCompletion() = cc
|
||||
}
|
||||
|
||||
class ConditionBlock extends PreBasicBlock {
|
||||
ConditionBlock() {
|
||||
strictcount(Completion c |
|
||||
c.getInnerCompletion() instanceof ConditionalCompletion and
|
||||
c = getConditionalCompletion(_) and
|
||||
(
|
||||
exists(succ(this.getLastElement(), c))
|
||||
or
|
||||
@@ -102,9 +106,20 @@ class ConditionBlock extends PreBasicBlock {
|
||||
}
|
||||
|
||||
private predicate immediatelyControls(PreBasicBlock succ, ConditionalCompletion cc) {
|
||||
succ = succ(this.getLastElement(), any(Completion c | c.getInnerCompletion() = cc)) and
|
||||
forall(PreBasicBlock pred | pred = succ.getAPredecessor() and pred != this |
|
||||
succ.dominates(pred)
|
||||
exists(ControlFlowElement last, Completion c |
|
||||
last = this.getLastElement() and
|
||||
c = getConditionalCompletion(cc) and
|
||||
succ = succ(last, c) and
|
||||
// In the pre-CFG, we need to account for case where one predecessor node has
|
||||
// two edges to the same successor node. Assertion expressions are examples of
|
||||
// such nodes.
|
||||
not exists(Completion other |
|
||||
succ = succ(last, other) and
|
||||
other != c
|
||||
) and
|
||||
forall(PreBasicBlock pred | pred = succ.getAPredecessor() and pred != this |
|
||||
succ.dominates(pred)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ private module Cached {
|
||||
cached
|
||||
newtype TSplitKind =
|
||||
TInitializerSplitKind() or
|
||||
TAssertionSplitKind() or
|
||||
TFinallySplitKind(int nestLevel) { nestLevel = FinallySplitting::nestLevel(_) } or
|
||||
TExceptionHandlerSplitKind() or
|
||||
TBooleanSplitKind(BooleanSplitting::BooleanSplitSubKind kind) { kind.startsSplit(_) } or
|
||||
@@ -35,6 +36,7 @@ private module Cached {
|
||||
cached
|
||||
newtype TSplit =
|
||||
TInitializerSplit(Constructor c) { InitializerSplitting::constructorInitializes(c, _) } or
|
||||
TAssertionSplit(AssertionSplitting::Assertion a, boolean success) { success = [true, false] } or
|
||||
TFinallySplit(FinallySplitting::FinallySplitType type, int nestLevel) {
|
||||
nestLevel = FinallySplitting::nestLevel(_)
|
||||
} or
|
||||
@@ -385,6 +387,135 @@ module InitializerSplitting {
|
||||
}
|
||||
}
|
||||
|
||||
module AssertionSplitting {
|
||||
import semmle.code.csharp.commons.Assertions
|
||||
private import semmle.code.csharp.ExprOrStmtParent
|
||||
|
||||
private ControlFlowElement getAnAssertionDescendant(Assertion a) {
|
||||
result = a
|
||||
or
|
||||
result = getAnAssertionDescendant(a).getAChild()
|
||||
}
|
||||
|
||||
/**
|
||||
* A split for assertions. For example, in
|
||||
*
|
||||
* ```csharp
|
||||
* void M(int i)
|
||||
* {
|
||||
* Debug.Assert(i >= 0);
|
||||
* System.Console.WriteLine("i is positive")
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* we record whether `i >= 0` evaluates to `true` or `false`, and restrict the
|
||||
* edges out of the assertion accordingly.
|
||||
*/
|
||||
class AssertionSplitImpl extends SplitImpl, TAssertionSplit {
|
||||
Assertion a;
|
||||
boolean success;
|
||||
|
||||
AssertionSplitImpl() { this = TAssertionSplit(a, success) }
|
||||
|
||||
/** Gets the assertion. */
|
||||
Assertion getAssertion() { result = a }
|
||||
|
||||
/** Holds if this split represents a successful assertion. */
|
||||
predicate isSuccess() { success = true }
|
||||
|
||||
override string toString() {
|
||||
success = true and result = "assertion success"
|
||||
or
|
||||
success = false and result = "assertion failure"
|
||||
}
|
||||
}
|
||||
|
||||
private class AssertionSplitKind extends SplitKind, TAssertionSplitKind {
|
||||
override int getListOrder() { result = InitializerSplitting::getNextListOrder() }
|
||||
|
||||
override predicate isEnabled(ControlFlowElement cfe) { this.appliesTo(cfe) }
|
||||
|
||||
override string toString() { result = "Assertion" }
|
||||
}
|
||||
|
||||
int getNextListOrder() { result = InitializerSplitting::getNextListOrder() + 1 }
|
||||
|
||||
private class AssertionSplitInternal extends SplitInternal, AssertionSplitImpl {
|
||||
override AssertionSplitKind getKind() { any() }
|
||||
|
||||
override predicate hasEntry(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
|
||||
exists(AssertMethod m |
|
||||
pred = last(a.getExpr(), c) and
|
||||
succ = succ(pred, c) and
|
||||
this.getAssertion() = a and
|
||||
m = a.getAssertMethod()
|
||||
|
|
||||
m instanceof AssertTrueMethod and
|
||||
(
|
||||
c instanceof TrueCompletion and success = true
|
||||
or
|
||||
c instanceof FalseCompletion and success = false
|
||||
)
|
||||
or
|
||||
m instanceof AssertFalseMethod and
|
||||
(
|
||||
c instanceof TrueCompletion and success = false
|
||||
or
|
||||
c instanceof FalseCompletion and success = true
|
||||
)
|
||||
or
|
||||
m instanceof AssertNullMethod and
|
||||
(
|
||||
c.(NullnessCompletion).isNull() and success = true
|
||||
or
|
||||
c.(NullnessCompletion).isNonNull() and success = false
|
||||
)
|
||||
or
|
||||
m instanceof AssertNonNullMethod and
|
||||
(
|
||||
c.(NullnessCompletion).isNull() and success = false
|
||||
or
|
||||
c.(NullnessCompletion).isNonNull() and success = true
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override predicate hasEntry(Callable c, ControlFlowElement succ) { none() }
|
||||
|
||||
override predicate hasExit(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
|
||||
this.appliesTo(pred) and
|
||||
pred = a and
|
||||
succ = succ(pred, c) and
|
||||
(
|
||||
success = true and
|
||||
c instanceof NormalCompletion
|
||||
or
|
||||
success = false and
|
||||
not c instanceof NormalCompletion
|
||||
)
|
||||
}
|
||||
|
||||
override Callable hasExit(ControlFlowElement pred, Completion c) {
|
||||
this.appliesTo(pred) and
|
||||
pred = a and
|
||||
result = succExit(pred, c) and
|
||||
(
|
||||
success = true and
|
||||
c instanceof NormalCompletion
|
||||
or
|
||||
success = false and
|
||||
not c instanceof NormalCompletion
|
||||
)
|
||||
}
|
||||
|
||||
override predicate hasSuccessor(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
|
||||
this.appliesTo(pred) and
|
||||
succ = succ(pred, c) and
|
||||
succ = getAnAssertionDescendant(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private ControlFlowElement getAChild(ControlFlowElement cfe, Callable c) {
|
||||
result = cfe.getAChild() and
|
||||
@@ -509,11 +640,11 @@ module FinallySplitting {
|
||||
}
|
||||
|
||||
private int getListOrder(FinallySplitKind kind) {
|
||||
result = InitializerSplitting::getNextListOrder() + kind.getNestLevel()
|
||||
result = AssertionSplitting::getNextListOrder() + kind.getNestLevel()
|
||||
}
|
||||
|
||||
int getNextListOrder() {
|
||||
result = max(int i | i = getListOrder(_) + 1 or i = InitializerSplitting::getNextListOrder())
|
||||
result = max(int i | i = getListOrder(_) + 1 or i = AssertionSplitting::getNextListOrder())
|
||||
}
|
||||
|
||||
private class FinallySplitKind extends SplitKind, TFinallySplitKind {
|
||||
|
||||
78
csharp/ql/src/semmle/code/csharp/dataflow/Bound.qll
Normal file
78
csharp/ql/src/semmle/code/csharp/dataflow/Bound.qll
Normal file
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* Provides classes for representing abstract bounds for use in, for example, range analysis.
|
||||
*/
|
||||
|
||||
private import internal.rangeanalysis.BoundSpecific
|
||||
|
||||
private newtype TBound =
|
||||
TBoundZero() or
|
||||
TBoundSsa(SsaVariable v) { v.getSourceVariable().getType() instanceof IntegralType } or
|
||||
TBoundExpr(Expr e) {
|
||||
interestingExprBound(e) and
|
||||
not exists(SsaVariable v | e = v.getAUse())
|
||||
}
|
||||
|
||||
/**
|
||||
* A bound that may be inferred for an expression plus/minus an integer delta.
|
||||
*/
|
||||
abstract class Bound extends TBound {
|
||||
/** Gets a textual representation of this bound. */
|
||||
abstract string toString();
|
||||
|
||||
/** Gets an expression that equals this bound plus `delta`. */
|
||||
abstract Expr getExpr(int delta);
|
||||
|
||||
/** Gets an expression that equals this bound. */
|
||||
Expr getExpr() { result = getExpr(0) }
|
||||
|
||||
/**
|
||||
* Holds if this element is at the specified location.
|
||||
* The location spans column `sc` of line `sl` to
|
||||
* column `ec` of line `el` in file `path`.
|
||||
* For more information, see
|
||||
* [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
|
||||
*/
|
||||
predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) {
|
||||
path = "" and sl = 0 and sc = 0 and el = 0 and ec = 0
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The bound that corresponds to the integer 0. This is used to represent all
|
||||
* integer bounds as bounds are always accompanied by an added integer delta.
|
||||
*/
|
||||
class ZeroBound extends Bound, TBoundZero {
|
||||
override string toString() { result = "0" }
|
||||
|
||||
override Expr getExpr(int delta) { result.(ConstantIntegerExpr).getIntValue() = delta }
|
||||
}
|
||||
|
||||
/**
|
||||
* A bound corresponding to the value of an SSA variable.
|
||||
*/
|
||||
class SsaBound extends Bound, TBoundSsa {
|
||||
/** Gets the SSA variable that equals this bound. */
|
||||
SsaVariable getSsa() { this = TBoundSsa(result) }
|
||||
|
||||
override string toString() { result = getSsa().toString() }
|
||||
|
||||
override Expr getExpr(int delta) { result = getSsa().getAUse() and delta = 0 }
|
||||
|
||||
override predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) {
|
||||
getSsa().getLocation().hasLocationInfo(path, sl, sc, el, ec)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A bound that corresponds to the value of a specific expression that might be
|
||||
* interesting, but isn't otherwise represented by the value of an SSA variable.
|
||||
*/
|
||||
class ExprBound extends Bound, TBoundExpr {
|
||||
override string toString() { result = getExpr().toString() }
|
||||
|
||||
override Expr getExpr(int delta) { this = TBoundExpr(result) and delta = 0 }
|
||||
|
||||
override predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) {
|
||||
getExpr().getLocation().hasLocationInfo(path, sl, sc, el, ec)
|
||||
}
|
||||
}
|
||||
302
csharp/ql/src/semmle/code/csharp/dataflow/ModulusAnalysis.qll
Normal file
302
csharp/ql/src/semmle/code/csharp/dataflow/ModulusAnalysis.qll
Normal file
@@ -0,0 +1,302 @@
|
||||
/**
|
||||
* Provides inferences of the form: `e` equals `b + v` modulo `m` where `e` is
|
||||
* an expression, `b` is a `Bound` (typically zero or the value of an SSA
|
||||
* variable), and `v` is an integer in the range `[0 .. m-1]`.
|
||||
*/
|
||||
|
||||
private import internal.rangeanalysis.ModulusAnalysisSpecific::Private
|
||||
private import Bound
|
||||
private import internal.rangeanalysis.SsaReadPositionCommon
|
||||
|
||||
/**
|
||||
* Holds if `e + delta` equals `v` at `pos`.
|
||||
*/
|
||||
private predicate valueFlowStepSsa(SsaVariable v, SsaReadPosition pos, Expr e, int delta) {
|
||||
ssaUpdateStep(v, e, delta) and pos.hasReadOfVar(v)
|
||||
or
|
||||
exists(Guard guard, boolean testIsTrue |
|
||||
pos.hasReadOfVar(v) and
|
||||
guard = eqFlowCond(v, e, delta, true, testIsTrue) and
|
||||
guardDirectlyControlsSsaRead(guard, pos, testIsTrue)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `add` is the addition of `larg` and `rarg`, neither of which are
|
||||
* `ConstantIntegerExpr`s.
|
||||
*/
|
||||
private predicate nonConstAddition(Expr add, Expr larg, Expr rarg) {
|
||||
exists(AddExpr a | a = add |
|
||||
larg = a.getLhs() and
|
||||
rarg = a.getRhs()
|
||||
) and
|
||||
not larg instanceof ConstantIntegerExpr and
|
||||
not rarg instanceof ConstantIntegerExpr
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `sub` is the subtraction of `larg` and `rarg`, where `rarg` is not
|
||||
* a `ConstantIntegerExpr`.
|
||||
*/
|
||||
private predicate nonConstSubtraction(Expr sub, Expr larg, Expr rarg) {
|
||||
exists(SubExpr s | s = sub |
|
||||
larg = s.getLhs() and
|
||||
rarg = s.getRhs()
|
||||
) and
|
||||
not rarg instanceof ConstantIntegerExpr
|
||||
}
|
||||
|
||||
/** Gets an expression that is the remainder modulo `mod` of `arg`. */
|
||||
private Expr modExpr(Expr arg, int mod) {
|
||||
exists(RemExpr rem |
|
||||
result = rem and
|
||||
arg = rem.getLeftOperand() and
|
||||
rem.getRightOperand().(ConstantIntegerExpr).getIntValue() = mod and
|
||||
mod >= 2
|
||||
)
|
||||
or
|
||||
exists(ConstantIntegerExpr c |
|
||||
mod = 2.pow([1 .. 30]) and
|
||||
c.getIntValue() = mod - 1 and
|
||||
result.(BitwiseAndExpr).hasOperands(arg, c)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a guard that tests whether `v` is congruent with `val` modulo `mod` on
|
||||
* its `testIsTrue` branch.
|
||||
*/
|
||||
private Guard moduloCheck(SsaVariable v, int val, int mod, boolean testIsTrue) {
|
||||
exists(Expr rem, ConstantIntegerExpr c, int r, boolean polarity |
|
||||
result.isEquality(rem, c, polarity) and
|
||||
c.getIntValue() = r and
|
||||
rem = modExpr(v.getAUse(), mod) and
|
||||
(
|
||||
testIsTrue = polarity and val = r
|
||||
or
|
||||
testIsTrue = polarity.booleanNot() and
|
||||
mod = 2 and
|
||||
val = 1 - r and
|
||||
(r = 0 or r = 1)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if a guard ensures that `v` at `pos` is congruent with `val` modulo `mod`.
|
||||
*/
|
||||
private predicate moduloGuardedRead(SsaVariable v, SsaReadPosition pos, int val, int mod) {
|
||||
exists(Guard guard, boolean testIsTrue |
|
||||
pos.hasReadOfVar(v) and
|
||||
guard = moduloCheck(v, val, mod, testIsTrue) and
|
||||
guardControlsSsaRead(guard, pos, testIsTrue)
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if `factor` is a power of 2 that divides `mask`. */
|
||||
bindingset[mask]
|
||||
private predicate andmaskFactor(int mask, int factor) {
|
||||
mask % factor = 0 and
|
||||
factor = 2.pow([1 .. 30])
|
||||
}
|
||||
|
||||
/** Holds if `e` is evenly divisible by `factor`. */
|
||||
private predicate evenlyDivisibleExpr(Expr e, int factor) {
|
||||
exists(ConstantIntegerExpr c, int k | k = c.getIntValue() |
|
||||
e.(MulExpr).getAnOperand() = c and factor = k.abs() and factor >= 2
|
||||
or
|
||||
e.(LShiftExpr).getRhs() = c and factor = 2.pow(k) and k > 0
|
||||
or
|
||||
e.(BitwiseAndExpr).getAnOperand() = c and factor = max(int f | andmaskFactor(k, f))
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `inp` is an input to `phi` along `edge` and this input has index `r`
|
||||
* in an arbitrary 1-based numbering of the input edges to `phi`.
|
||||
*/
|
||||
private predicate rankedPhiInput(
|
||||
SsaPhiNode phi, SsaVariable inp, SsaReadPositionPhiInputEdge edge, int r
|
||||
) {
|
||||
edge.phiInput(phi, inp) and
|
||||
edge =
|
||||
rank[r](SsaReadPositionPhiInputEdge e | e.phiInput(phi, _) | e order by getId(e.getOrigBlock()))
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `rix` is the number of input edges to `phi`.
|
||||
*/
|
||||
private predicate maxPhiInputRank(SsaPhiNode phi, int rix) {
|
||||
rix = max(int r | rankedPhiInput(phi, _, _, r))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the remainder of `val` modulo `mod`.
|
||||
*
|
||||
* For `mod = 0` the result equals `val` and for `mod > 1` the result is within
|
||||
* the range `[0 .. mod-1]`.
|
||||
*/
|
||||
bindingset[val, mod]
|
||||
private int remainder(int val, int mod) {
|
||||
mod = 0 and result = val
|
||||
or
|
||||
mod > 1 and result = ((val % mod) + mod) % mod
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `inp` is an input to `phi` and equals `phi` modulo `mod` along `edge`.
|
||||
*/
|
||||
private predicate phiSelfModulus(
|
||||
SsaPhiNode phi, SsaVariable inp, SsaReadPositionPhiInputEdge edge, int mod
|
||||
) {
|
||||
exists(SsaBound phibound, int v, int m |
|
||||
edge.phiInput(phi, inp) and
|
||||
phibound.getSsa() = phi and
|
||||
ssaModulus(inp, edge, phibound, v, m) and
|
||||
mod = m.gcd(v) and
|
||||
mod != 1
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `b + val` modulo `mod` is a candidate congruence class for `phi`.
|
||||
*/
|
||||
private predicate phiModulusInit(SsaPhiNode phi, Bound b, int val, int mod) {
|
||||
exists(SsaVariable inp, SsaReadPositionPhiInputEdge edge |
|
||||
edge.phiInput(phi, inp) and
|
||||
ssaModulus(inp, edge, b, val, mod)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if all inputs to `phi` numbered `1` to `rix` are equal to `b + val` modulo `mod`.
|
||||
*/
|
||||
private predicate phiModulusRankStep(SsaPhiNode phi, Bound b, int val, int mod, int rix) {
|
||||
rix = 0 and
|
||||
phiModulusInit(phi, b, val, mod)
|
||||
or
|
||||
exists(SsaVariable inp, SsaReadPositionPhiInputEdge edge, int v1, int m1 |
|
||||
mod != 1 and
|
||||
val = remainder(v1, mod)
|
||||
|
|
||||
exists(int v2, int m2 |
|
||||
rankedPhiInput(phi, inp, edge, rix) and
|
||||
phiModulusRankStep(phi, b, v1, m1, rix - 1) and
|
||||
ssaModulus(inp, edge, b, v2, m2) and
|
||||
mod = m1.gcd(m2).gcd(v1 - v2)
|
||||
)
|
||||
or
|
||||
exists(int m2 |
|
||||
rankedPhiInput(phi, inp, edge, rix) and
|
||||
phiModulusRankStep(phi, b, v1, m1, rix - 1) and
|
||||
phiSelfModulus(phi, inp, edge, m2) and
|
||||
mod = m1.gcd(m2)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `phi` is equal to `b + val` modulo `mod`.
|
||||
*/
|
||||
private predicate phiModulus(SsaPhiNode phi, Bound b, int val, int mod) {
|
||||
exists(int r |
|
||||
maxPhiInputRank(phi, r) and
|
||||
phiModulusRankStep(phi, b, val, mod, r)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `v` at `pos` is equal to `b + val` modulo `mod`.
|
||||
*/
|
||||
private predicate ssaModulus(SsaVariable v, SsaReadPosition pos, Bound b, int val, int mod) {
|
||||
phiModulus(v, b, val, mod) and pos.hasReadOfVar(v)
|
||||
or
|
||||
b.(SsaBound).getSsa() = v and pos.hasReadOfVar(v) and val = 0 and mod = 0
|
||||
or
|
||||
exists(Expr e, int val0, int delta |
|
||||
exprModulus(e, b, val0, mod) and
|
||||
valueFlowStepSsa(v, pos, e, delta) and
|
||||
val = remainder(val0 + delta, mod)
|
||||
)
|
||||
or
|
||||
moduloGuardedRead(v, pos, val, mod) and b instanceof ZeroBound
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `e` is equal to `b + val` modulo `mod`.
|
||||
*
|
||||
* There are two cases for the modulus:
|
||||
* - `mod = 0`: The equality `e = b + val` is an ordinary equality.
|
||||
* - `mod > 1`: `val` lies within the range `[0 .. mod-1]`.
|
||||
*/
|
||||
cached
|
||||
predicate exprModulus(Expr e, Bound b, int val, int mod) {
|
||||
e = b.getExpr(val) and mod = 0
|
||||
or
|
||||
evenlyDivisibleExpr(e, mod) and val = 0 and b instanceof ZeroBound
|
||||
or
|
||||
exists(SsaVariable v, SsaReadPositionBlock bb |
|
||||
ssaModulus(v, bb, b, val, mod) and
|
||||
e = v.getAUse() and
|
||||
getABasicBlockExpr(bb.getBlock()) = e
|
||||
)
|
||||
or
|
||||
exists(Expr mid, int val0, int delta |
|
||||
exprModulus(mid, b, val0, mod) and
|
||||
valueFlowStep(e, mid, delta) and
|
||||
val = remainder(val0 + delta, mod)
|
||||
)
|
||||
or
|
||||
exists(ConditionalExpr cond, int v1, int v2, int m1, int m2 |
|
||||
cond = e and
|
||||
condExprBranchModulus(cond, true, b, v1, m1) and
|
||||
condExprBranchModulus(cond, false, b, v2, m2) and
|
||||
mod = m1.gcd(m2).gcd(v1 - v2) and
|
||||
mod != 1 and
|
||||
val = remainder(v1, mod)
|
||||
)
|
||||
or
|
||||
exists(Bound b1, Bound b2, int v1, int v2, int m1, int m2 |
|
||||
addModulus(e, true, b1, v1, m1) and
|
||||
addModulus(e, false, b2, v2, m2) and
|
||||
mod = m1.gcd(m2) and
|
||||
mod != 1 and
|
||||
val = remainder(v1 + v2, mod)
|
||||
|
|
||||
b = b1 and b2 instanceof ZeroBound
|
||||
or
|
||||
b = b2 and b1 instanceof ZeroBound
|
||||
)
|
||||
or
|
||||
exists(int v1, int v2, int m1, int m2 |
|
||||
subModulus(e, true, b, v1, m1) and
|
||||
subModulus(e, false, any(ZeroBound zb), v2, m2) and
|
||||
mod = m1.gcd(m2) and
|
||||
mod != 1 and
|
||||
val = remainder(v1 - v2, mod)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate condExprBranchModulus(
|
||||
ConditionalExpr cond, boolean branch, Bound b, int val, int mod
|
||||
) {
|
||||
exprModulus(cond.getTrueExpr(), b, val, mod) and branch = true
|
||||
or
|
||||
exprModulus(cond.getFalseExpr(), b, val, mod) and branch = false
|
||||
}
|
||||
|
||||
private predicate addModulus(Expr add, boolean isLeft, Bound b, int val, int mod) {
|
||||
exists(Expr larg, Expr rarg | nonConstAddition(add, larg, rarg) |
|
||||
exprModulus(larg, b, val, mod) and isLeft = true
|
||||
or
|
||||
exprModulus(rarg, b, val, mod) and isLeft = false
|
||||
)
|
||||
}
|
||||
|
||||
private predicate subModulus(Expr sub, boolean isLeft, Bound b, int val, int mod) {
|
||||
exists(Expr larg, Expr rarg | nonConstSubtraction(sub, larg, rarg) |
|
||||
exprModulus(larg, b, val, mod) and isLeft = true
|
||||
or
|
||||
exprModulus(rarg, b, val, mod) and isLeft = false
|
||||
)
|
||||
}
|
||||
@@ -136,30 +136,6 @@ private predicate exprImpliesSsaDef(
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the `i`th node of basic block `bb` ensures that SSA definition
|
||||
* `def` is not `null` in any subsequent uses.
|
||||
*/
|
||||
private predicate ensureNotNullAt(BasicBlock bb, int i, Ssa::Definition def) {
|
||||
exists(Expr e, G::AbstractValue v, NullValue nv |
|
||||
G::Internal::asserts(bb.getNode(i).getElement(), e, v)
|
||||
|
|
||||
exprImpliesSsaDef(e, v, def, nv) and
|
||||
nv.isNonNull()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the `i`th node of basic block `bb` is a dereference `d` of SSA
|
||||
* definition `def`, and `def` may potentially be `null`.
|
||||
*/
|
||||
private predicate potentialNullDereferenceAt(
|
||||
BasicBlock bb, int i, Ssa::Definition def, Dereference d
|
||||
) {
|
||||
dereferenceAt(bb, i, def, d) and
|
||||
not exists(int j | ensureNotNullAt(bb, j, def) | j < i)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an element that tests whether a given SSA definition, `def`, is
|
||||
* `null` or not.
|
||||
@@ -269,7 +245,6 @@ private predicate defNullImpliesStep(
|
||||
bb2 = def.getBasicBlock()
|
||||
)
|
||||
) and
|
||||
not ensureNotNullAt(bb1, _, def1) and
|
||||
not exists(SuccessorTypes::ConditionalSuccessor s, NullValue nv |
|
||||
bb1.getLastNode() = getANullCheck(def1, s, nv).getAControlFlowNode()
|
||||
|
|
||||
@@ -296,7 +271,7 @@ private predicate defMaybeNullInBlock(Ssa::Definition def, BasicBlock bb) {
|
||||
* dereference.
|
||||
*/
|
||||
private predicate nullDerefCandidateVariable(Ssa::SourceVariable v) {
|
||||
exists(Ssa::Definition def, BasicBlock bb | potentialNullDereferenceAt(bb, _, def, _) |
|
||||
exists(Ssa::Definition def, BasicBlock bb | dereferenceAt(bb, _, def, _) |
|
||||
defMaybeNullInBlock(def, bb) and
|
||||
v = def.getSourceVariable()
|
||||
)
|
||||
@@ -328,7 +303,7 @@ private newtype TPathNode =
|
||||
succNullArgument(_, def, bb)
|
||||
} or
|
||||
TSinkPathNode(Ssa::Definition def, BasicBlock bb, int i, Dereference d) {
|
||||
potentialNullDereferenceAt(bb, i, def, d) and
|
||||
dereferenceAt(bb, i, def, d) and
|
||||
(
|
||||
succStep(_, def, bb)
|
||||
or
|
||||
|
||||
@@ -1430,7 +1430,14 @@ module Ssa {
|
||||
) {
|
||||
possiblyLiveAtAllNodes(bb, v) and
|
||||
callAt(bb, i, call) and
|
||||
relevantDefinition(_, v.getAssignable(), _)
|
||||
exists(Assignable a |
|
||||
a = v.getAssignable() and
|
||||
relevantDefinition(_, a, _) and
|
||||
not exists(AssignableDefinitions::OutRefDefinition def |
|
||||
def.getCall() = call and
|
||||
def.getTarget() = a
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -167,4 +167,9 @@ module Consistency {
|
||||
not isImmutableOrUnobservable(n) and
|
||||
msg = "ArgumentNode is missing PostUpdateNode."
|
||||
}
|
||||
|
||||
query predicate postWithInFlow(PostUpdateNode n, string msg) {
|
||||
simpleLocalFlowStep(_, n) and
|
||||
msg = "PostUpdateNode should not be the target of local flow."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,6 +171,10 @@ module LocalFlow {
|
||||
e1 = e2.(ArrayCreation).getInitializer() and
|
||||
scope = e2 and
|
||||
isSuccessor = false
|
||||
or
|
||||
e1 = e2.(SwitchExpr).getACase().getBody() and
|
||||
scope = e2 and
|
||||
isSuccessor = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -739,7 +743,7 @@ private module Cached {
|
||||
viableConstantBooleanParamArg(paramNode, bs.getValue().booleanNot(), call) and
|
||||
paramNode.getDefinition() = param and
|
||||
param.getARead() = guard and
|
||||
guard.controlsBlock(n.getControlFlowNode().getBasicBlock(), bs)
|
||||
guard.controlsBlock(n.getControlFlowNode().getBasicBlock(), bs, _)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Provides C#-specific definitions for bounds.
|
||||
*/
|
||||
|
||||
private import csharp as CS
|
||||
private import semmle.code.csharp.dataflow.SSA::Ssa as Ssa
|
||||
private import semmle.code.csharp.dataflow.internal.rangeanalysis.ConstantUtils as CU
|
||||
|
||||
class SsaVariable extends Ssa::Definition {
|
||||
/** Gets a read of the source variable underlying this SSA definition. */
|
||||
Expr getAUse() { result = getARead() }
|
||||
}
|
||||
|
||||
class Expr = CS::Expr;
|
||||
|
||||
class IntegralType = CS::IntegralType;
|
||||
|
||||
class ConstantIntegerExpr = CU::ConstantIntegerExpr;
|
||||
|
||||
/** Holds if `e` is a bound expression and it is not an SSA variable read. */
|
||||
predicate interestingExprBound(Expr e) { CU::systemArrayLengthAccess(e.(CS::PropertyRead)) }
|
||||
@@ -17,6 +17,13 @@ predicate propertyOverrides(Property p, string baseClass, string property) {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `pa` is an access to the `Length` property of an array.
|
||||
*/
|
||||
predicate systemArrayLengthAccess(PropertyAccess pa) {
|
||||
propertyOverrides(pa.getTarget(), "System.Array", "Length")
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if expression `e` is either
|
||||
* - a compile time constant with integer value `val`, or
|
||||
@@ -47,7 +54,7 @@ private int getArrayLengthRec(ArrayCreation arrCreation, int index) {
|
||||
}
|
||||
|
||||
private predicate isArrayLengthAccess(PropertyAccess pa, int length) {
|
||||
propertyOverrides(pa.getTarget(), "System.Array", "Length") and
|
||||
systemArrayLengthAccess(pa) and
|
||||
exists(ExplicitDefinition arr, ArrayCreation arrCreation |
|
||||
getArrayLengthRec(arrCreation, arrCreation.getNumberOfLengthArguments() - 1) = length and
|
||||
arrCreation = arr.getADefinition().getSource() and
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
module Private {
|
||||
private import csharp as CS
|
||||
private import ConstantUtils as CU
|
||||
private import semmle.code.csharp.controlflow.Guards as G
|
||||
private import semmle.code.csharp.dataflow.internal.rangeanalysis.RangeUtils as RU
|
||||
private import SsaUtils as SU
|
||||
private import SignAnalysisSpecific::Private as SA
|
||||
|
||||
class BasicBlock = CS::Ssa::BasicBlock;
|
||||
|
||||
class SsaVariable extends CS::Ssa::Definition {
|
||||
CS::AssignableRead getAUse() { result = this.getARead() }
|
||||
}
|
||||
|
||||
class SsaPhiNode = CS::Ssa::PhiNode;
|
||||
|
||||
class Expr = CS::Expr;
|
||||
|
||||
class Guard = G::Guard;
|
||||
|
||||
class ConstantIntegerExpr = CU::ConstantIntegerExpr;
|
||||
|
||||
class ConditionalExpr extends CS::ConditionalExpr {
|
||||
/** Gets the "then" expression of this conditional expression. */
|
||||
Expr getTrueExpr() { result = this.getThen() }
|
||||
|
||||
/** Gets the "else" expression of this conditional expression. */
|
||||
Expr getFalseExpr() { result = this.getElse() }
|
||||
}
|
||||
|
||||
/** Represent an addition expression. */
|
||||
class AddExpr extends CS::AddExpr {
|
||||
/** Gets the LHS operand of this add expression. */
|
||||
Expr getLhs() { result = this.getLeftOperand() }
|
||||
|
||||
/** Gets the RHS operand of this add expression. */
|
||||
Expr getRhs() { result = this.getRightOperand() }
|
||||
}
|
||||
|
||||
/** Represent a subtraction expression. */
|
||||
class SubExpr extends CS::SubExpr {
|
||||
/** Gets the LHS operand of this subtraction expression. */
|
||||
Expr getLhs() { result = this.getLeftOperand() }
|
||||
|
||||
/** Gets the RHS operand of this subtraction expression. */
|
||||
Expr getRhs() { result = this.getRightOperand() }
|
||||
}
|
||||
|
||||
class RemExpr = CS::RemExpr;
|
||||
|
||||
/** Represent a bitwise and or an assign-and expression. */
|
||||
class BitwiseAndExpr extends CS::Expr {
|
||||
BitwiseAndExpr() { this instanceof CS::BitwiseAndExpr or this instanceof CS::AssignAndExpr }
|
||||
|
||||
/** Gets an operand of this bitwise and operation. */
|
||||
Expr getAnOperand() {
|
||||
result = this.(CS::BitwiseAndExpr).getAnOperand() or
|
||||
result = this.(CS::AssignAndExpr).getRValue() or
|
||||
result = this.(CS::AssignAndExpr).getLValue()
|
||||
}
|
||||
|
||||
/** Holds if this expression has operands `e1` and `e2`. */
|
||||
predicate hasOperands(Expr e1, Expr e2) {
|
||||
this.getAnOperand() = e1 and
|
||||
this.getAnOperand() = e2 and
|
||||
e1 != e2
|
||||
}
|
||||
}
|
||||
|
||||
/** Represent a multiplication or an assign-mul expression. */
|
||||
class MulExpr extends CS::Expr {
|
||||
MulExpr() { this instanceof CS::MulExpr or this instanceof CS::AssignMulExpr }
|
||||
|
||||
/** Gets an operand of this multiplication. */
|
||||
Expr getAnOperand() {
|
||||
result = this.(CS::MulExpr).getAnOperand() or
|
||||
result = this.(CS::AssignMulExpr).getRValue() or
|
||||
result = this.(CS::AssignMulExpr).getLValue()
|
||||
}
|
||||
}
|
||||
|
||||
/** Represent a left shift or an assign-lshift expression. */
|
||||
class LShiftExpr extends CS::Expr {
|
||||
LShiftExpr() { this instanceof CS::LShiftExpr or this instanceof CS::AssignLShiftExpr }
|
||||
|
||||
/** Gets the RHS operand of this shift. */
|
||||
Expr getRhs() {
|
||||
result = this.(CS::LShiftExpr).getRightOperand() or
|
||||
result = this.(CS::AssignLShiftExpr).getRValue()
|
||||
}
|
||||
}
|
||||
|
||||
predicate guardDirectlyControlsSsaRead = SA::guardControlsSsaRead/3;
|
||||
|
||||
predicate guardControlsSsaRead = SA::guardControlsSsaRead/3;
|
||||
|
||||
predicate valueFlowStep = RU::valueFlowStep/3;
|
||||
|
||||
predicate eqFlowCond = RU::eqFlowCond/5;
|
||||
|
||||
predicate ssaUpdateStep = RU::ssaUpdateStep/3;
|
||||
|
||||
Expr getABasicBlockExpr(BasicBlock bb) { result = bb.getANode().getElement() }
|
||||
|
||||
private predicate id(CS::ControlFlowElement x, CS::ControlFlowElement y) { x = y }
|
||||
|
||||
private predicate idOf(CS::ControlFlowElement x, int y) = equivalenceRelation(id/2)(x, y)
|
||||
|
||||
int getId(BasicBlock bb) { idOf(bb.getFirstNode().getElement(), result) }
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
* Provides predicates for range and modulus analysis.
|
||||
*/
|
||||
|
||||
private import csharp
|
||||
private import Ssa
|
||||
private import SsaUtils
|
||||
private import ConstantUtils
|
||||
private import SsaReadPositionCommon
|
||||
private import semmle.code.csharp.controlflow.Guards as G
|
||||
|
||||
private class BooleanValue = G::AbstractValues::BooleanValue;
|
||||
|
||||
/**
|
||||
* Holds if `v` is an `ExplicitDefinition` that equals `e + delta`.
|
||||
*/
|
||||
predicate ssaUpdateStep(ExplicitDefinition v, Expr e, int delta) {
|
||||
v.getADefinition().getExpr().(Assignment).getRValue() = e and delta = 0
|
||||
or
|
||||
v.getADefinition().getExpr().(PostIncrExpr).getOperand() = e and delta = 1
|
||||
or
|
||||
v.getADefinition().getExpr().(PreIncrExpr).getOperand() = e and delta = 1
|
||||
or
|
||||
v.getADefinition().getExpr().(PostDecrExpr).getOperand() = e and delta = -1
|
||||
or
|
||||
v.getADefinition().getExpr().(PreDecrExpr).getOperand() = e and delta = -1
|
||||
}
|
||||
|
||||
private G::Guard eqFlowCondAbs(Definition def, Expr e, int delta, boolean isEq, G::AbstractValue v) {
|
||||
exists(boolean eqpolarity |
|
||||
result.isEquality(ssaRead(def, delta), e, eqpolarity) and
|
||||
eqpolarity.booleanXor(v.(BooleanValue).getValue()).booleanNot() = isEq
|
||||
)
|
||||
or
|
||||
exists(G::AbstractValue v0 |
|
||||
G::Internal::impliesSteps(result, v, eqFlowCondAbs(def, e, delta, isEq, v0), v0)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a condition that tests whether `def` equals `e + delta`.
|
||||
*
|
||||
* If the condition evaluates to `testIsTrue`:
|
||||
* - `isEq = true` : `def == e + delta`
|
||||
* - `isEq = false` : `def != e + delta`
|
||||
*/
|
||||
G::Guard eqFlowCond(Definition def, Expr e, int delta, boolean isEq, boolean testIsTrue) {
|
||||
exists(BooleanValue v |
|
||||
result = eqFlowCondAbs(def, e, delta, isEq, v) and
|
||||
testIsTrue = v.getValue()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `e1 + delta` equals `e2`.
|
||||
*/
|
||||
predicate valueFlowStep(Expr e2, Expr e1, int delta) {
|
||||
valueFlowStep(e2.(AssignOperation).getExpandedAssignment(), e1, delta)
|
||||
or
|
||||
e2.(AssignExpr).getRValue() = e1 and delta = 0
|
||||
or
|
||||
e2.(UnaryPlusExpr).getOperand() = e1 and delta = 0
|
||||
or
|
||||
e2.(PostIncrExpr).getOperand() = e1 and delta = 0
|
||||
or
|
||||
e2.(PostDecrExpr).getOperand() = e1 and delta = 0
|
||||
or
|
||||
e2.(PreIncrExpr).getOperand() = e1 and delta = 1
|
||||
or
|
||||
e2.(PreDecrExpr).getOperand() = e1 and delta = -1
|
||||
or
|
||||
exists(ConstantIntegerExpr x |
|
||||
e2.(AddExpr).getAnOperand() = e1 and
|
||||
e2.(AddExpr).getAnOperand() = x and
|
||||
not e1 = x
|
||||
|
|
||||
x.getIntValue() = delta
|
||||
)
|
||||
or
|
||||
exists(ConstantIntegerExpr x |
|
||||
exists(SubExpr sub |
|
||||
e2 = sub and
|
||||
sub.getLeftOperand() = e1 and
|
||||
sub.getRightOperand() = x
|
||||
)
|
||||
|
|
||||
x.getIntValue() = -delta
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `guard` controls the position `controlled` with the value `testIsTrue`.
|
||||
*/
|
||||
predicate guardControlsSsaRead(G::Guard guard, SsaReadPosition controlled, boolean testIsTrue) {
|
||||
exists(BooleanValue b | b.getValue() = testIsTrue |
|
||||
guard.controlsBasicBlock(controlled.(SsaReadPositionBlock).getBlock(), b)
|
||||
)
|
||||
}
|
||||
@@ -3,6 +3,25 @@ newtype TSign =
|
||||
TZero() or
|
||||
TPos()
|
||||
|
||||
newtype TUnarySignOperation =
|
||||
TNegOp() or
|
||||
TIncOp() or
|
||||
TDecOp() or
|
||||
TBitNotOp()
|
||||
|
||||
newtype TBinarySignOperation =
|
||||
TAddOp() or
|
||||
TSubOp() or
|
||||
TMulOp() or
|
||||
TDivOp() or
|
||||
TRemOp() or
|
||||
TBitAndOp() or
|
||||
TBitOrOp() or
|
||||
TBitXorOp() or
|
||||
TLShiftOp() or
|
||||
TRShiftOp() or
|
||||
TURShiftOp()
|
||||
|
||||
/** Class representing expression signs (+, -, 0). */
|
||||
class Sign extends TSign {
|
||||
/** Gets the string representation of this sign. */
|
||||
@@ -67,6 +86,12 @@ class Sign extends TSign {
|
||||
this = TNeg() and s = TPos()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a possible sign after subtracting an expression with sign `s` from an expression
|
||||
* that has this sign.
|
||||
*/
|
||||
Sign sub(Sign s) { result = add(s.neg()) }
|
||||
|
||||
/**
|
||||
* Gets a possible sign after multiplying an expression with sign `s` to an expression
|
||||
* that has this sign.
|
||||
@@ -216,4 +241,40 @@ class Sign extends TSign {
|
||||
or
|
||||
result != TNeg() and this = TPos() and s != TZero()
|
||||
}
|
||||
|
||||
/** Perform `op` on this sign. */
|
||||
Sign applyUnaryOp(TUnarySignOperation op) {
|
||||
op = TIncOp() and result = inc()
|
||||
or
|
||||
op = TDecOp() and result = dec()
|
||||
or
|
||||
op = TNegOp() and result = neg()
|
||||
or
|
||||
op = TBitNotOp() and result = bitnot()
|
||||
}
|
||||
|
||||
/** Perform `op` on this sign and sign `s`. */
|
||||
Sign applyBinaryOp(Sign s, TBinarySignOperation op) {
|
||||
op = TAddOp() and result = add(s)
|
||||
or
|
||||
op = TSubOp() and result = sub(s)
|
||||
or
|
||||
op = TMulOp() and result = mul(s)
|
||||
or
|
||||
op = TDivOp() and result = div(s)
|
||||
or
|
||||
op = TRemOp() and result = rem(s)
|
||||
or
|
||||
op = TBitAndOp() and result = bitand(s)
|
||||
or
|
||||
op = TBitOrOp() and result = bitor(s)
|
||||
or
|
||||
op = TBitXorOp() and result = bitxor(s)
|
||||
or
|
||||
op = TLShiftOp() and result = lshift(s)
|
||||
or
|
||||
op = TRShiftOp() and result = rshift(s)
|
||||
or
|
||||
op = TURShiftOp() and result = urshift(s)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ private import SsaReadPositionCommon
|
||||
private import Sign
|
||||
|
||||
/** Gets the sign of `e` if this can be directly determined. */
|
||||
Sign certainExprSign(Expr e) {
|
||||
private Sign certainExprSign(Expr e) {
|
||||
exists(int i | e.(ConstantIntegerExpr).getIntValue() = i |
|
||||
i < 0 and result = TNeg()
|
||||
or
|
||||
@@ -42,7 +42,7 @@ Sign certainExprSign(Expr e) {
|
||||
}
|
||||
|
||||
/** Holds if the sign of `e` is too complicated to determine. */
|
||||
predicate unknownSign(Expr e) {
|
||||
private predicate unknownSign(Expr e) {
|
||||
not exists(certainExprSign(e)) and
|
||||
(
|
||||
exists(IntegerLiteral lit | lit = e and not exists(lit.getValue().toInt()))
|
||||
@@ -55,7 +55,7 @@ predicate unknownSign(Expr e) {
|
||||
not fromtyp instanceof NumericOrCharType
|
||||
)
|
||||
or
|
||||
unknownIntegerAccess(e)
|
||||
numericExprWithUnknownSign(e)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -185,29 +185,32 @@ private predicate hasGuard(SsaVariable v, SsaReadPosition pos, Sign s) {
|
||||
s = TZero() and zeroBound(_, v, pos)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a possible sign of `v` at `pos` based on its definition, where the sign
|
||||
* might be ruled out by a guard.
|
||||
*/
|
||||
pragma[noinline]
|
||||
private Sign guardedSsaSign(SsaVariable v, SsaReadPosition pos) {
|
||||
// SSA variable can have sign `result`
|
||||
result = ssaDefSign(v) and
|
||||
pos.hasReadOfVar(v) and
|
||||
// there are guards at this position on `v` that might restrict it to be sign `result`.
|
||||
// (So we need to check if they are satisfied)
|
||||
hasGuard(v, pos, result)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a possible sign of `v` at `pos` based on its definition, where no guard
|
||||
* can rule it out.
|
||||
*/
|
||||
pragma[noinline]
|
||||
private Sign unguardedSsaSign(SsaVariable v, SsaReadPosition pos) {
|
||||
// SSA variable can have sign `result`
|
||||
result = ssaDefSign(v) and
|
||||
pos.hasReadOfVar(v) and
|
||||
// there's no guard at this position on `v` that might restrict it to be sign `result`.
|
||||
not hasGuard(v, pos, result)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the sign of `v` at read position `pos`, when there's at least one guard
|
||||
* on `v` at position `pos`. Each bound corresponding to a given sign must be met
|
||||
* in order for `v` to be of that sign.
|
||||
* Gets a possible sign of `v` at read position `pos`, where a guard could have
|
||||
* ruled out the sign but does not.
|
||||
* This does not check that the definition of `v` also allows the sign.
|
||||
*/
|
||||
private Sign guardedSsaSignOk(SsaVariable v, SsaReadPosition pos) {
|
||||
result = TPos() and
|
||||
@@ -221,7 +224,7 @@ private Sign guardedSsaSignOk(SsaVariable v, SsaReadPosition pos) {
|
||||
}
|
||||
|
||||
/** Gets a possible sign for `v` at `pos`. */
|
||||
Sign ssaSign(SsaVariable v, SsaReadPosition pos) {
|
||||
private Sign ssaSign(SsaVariable v, SsaReadPosition pos) {
|
||||
result = unguardedSsaSign(v, pos)
|
||||
or
|
||||
result = guardedSsaSign(v, pos) and
|
||||
@@ -230,7 +233,7 @@ Sign ssaSign(SsaVariable v, SsaReadPosition pos) {
|
||||
|
||||
/** Gets a possible sign for `v`. */
|
||||
pragma[nomagic]
|
||||
Sign ssaDefSign(SsaVariable v) {
|
||||
private Sign ssaDefSign(SsaVariable v) {
|
||||
result = explicitSsaDefSign(v)
|
||||
or
|
||||
result = implicitSsaDefSign(v)
|
||||
@@ -242,6 +245,40 @@ Sign ssaDefSign(SsaVariable v) {
|
||||
)
|
||||
}
|
||||
|
||||
/** Returns the sign of explicit SSA definition `v`. */
|
||||
private Sign explicitSsaDefSign(SsaVariable v) {
|
||||
exists(VariableUpdate def | def = getExplicitSsaAssignment(v) |
|
||||
result = exprSign(getExprFromSsaAssignment(def))
|
||||
or
|
||||
anySign(result) and explicitSsaDefWithAnySign(def)
|
||||
or
|
||||
result = exprSign(getIncrementOperand(def)).inc()
|
||||
or
|
||||
result = exprSign(getDecrementOperand(def)).dec()
|
||||
)
|
||||
}
|
||||
|
||||
/** Returns the sign of implicit SSA definition `v`. */
|
||||
private Sign implicitSsaDefSign(SsaVariable v) {
|
||||
result = fieldSign(getImplicitSsaDeclaration(v))
|
||||
or
|
||||
anySign(result) and nonFieldImplicitSsaDefinition(v)
|
||||
}
|
||||
|
||||
/** Gets a possible sign for `f`. */
|
||||
private Sign fieldSign(Field f) {
|
||||
if not fieldWithUnknownSign(f)
|
||||
then
|
||||
result = exprSign(getAssignedValueToField(f))
|
||||
or
|
||||
fieldIncrementOperationOperand(f) and result = fieldSign(f).inc()
|
||||
or
|
||||
fieldDecrementOperationOperand(f) and result = fieldSign(f).dec()
|
||||
or
|
||||
result = specificFieldSign(f)
|
||||
else anySign(result)
|
||||
}
|
||||
|
||||
/** Gets a possible sign for `e`. */
|
||||
cached
|
||||
Sign exprSign(Expr e) {
|
||||
@@ -250,18 +287,23 @@ Sign exprSign(Expr e) {
|
||||
or
|
||||
not exists(certainExprSign(e)) and
|
||||
(
|
||||
unknownSign(e)
|
||||
anySign(s) and unknownSign(e)
|
||||
or
|
||||
exists(SsaVariable v | getARead(v) = e | s = ssaVariableSign(v, e))
|
||||
exists(SsaVariable v | getARead(v) = e |
|
||||
s = ssaSign(v, any(SsaReadPositionBlock bb | getAnExpression(bb) = e))
|
||||
or
|
||||
not exists(SsaReadPositionBlock bb | getAnExpression(bb) = e) and
|
||||
s = ssaDefSign(v)
|
||||
)
|
||||
or
|
||||
e =
|
||||
any(VarAccess access |
|
||||
not exists(SsaVariable v | getARead(v) = access) and
|
||||
(
|
||||
s = fieldSign(getField(access.(FieldAccess))) or
|
||||
not access instanceof FieldAccess
|
||||
)
|
||||
exists(VarAccess access | access = e |
|
||||
not exists(SsaVariable v | getARead(v) = access) and
|
||||
(
|
||||
s = fieldSign(getField(access.(FieldAccess)))
|
||||
or
|
||||
anySign(s) and not access instanceof FieldAccess
|
||||
)
|
||||
)
|
||||
or
|
||||
s = specificSubExprSign(e)
|
||||
)
|
||||
@@ -272,6 +314,41 @@ Sign exprSign(Expr e) {
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets a possible sign for `e` from the signs of its child nodes. */
|
||||
private Sign specificSubExprSign(Expr e) {
|
||||
result = exprSign(getASubExprWithSameSign(e))
|
||||
or
|
||||
exists(DivExpr div | div = e |
|
||||
result = exprSign(div.getLeftOperand()) and
|
||||
result != TZero() and
|
||||
div.getRightOperand().(RealLiteral).getValue().toFloat() = 0
|
||||
)
|
||||
or
|
||||
exists(UnaryOperation unary | unary = e |
|
||||
result = exprSign(unary.getOperand()).applyUnaryOp(unary.getOp())
|
||||
)
|
||||
or
|
||||
exists(Sign s1, Sign s2 | binaryOpSigns(e, s1, s2) |
|
||||
result = s1.applyBinaryOp(s2, e.(BinaryOperation).getOp())
|
||||
)
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate binaryOpSigns(Expr e, Sign lhs, Sign rhs) {
|
||||
lhs = binaryOpLhsSign(e) and
|
||||
rhs = binaryOpRhsSign(e)
|
||||
}
|
||||
|
||||
private Sign binaryOpLhsSign(BinaryOperation e) { result = exprSign(e.getLeftOperand()) }
|
||||
|
||||
private Sign binaryOpRhsSign(BinaryOperation e) { result = exprSign(e.getRightOperand()) }
|
||||
|
||||
/**
|
||||
* Dummy predicate that holds for any sign. This is added to improve readability
|
||||
* of cases where the sign is unrestricted.
|
||||
*/
|
||||
predicate anySign(Sign s) { any() }
|
||||
|
||||
/** Holds if `e` can be positive and cannot be negative. */
|
||||
predicate positive(Expr e) {
|
||||
exprSign(e) = TPos() and
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
* Provides C#-specific definitions for use in sign analysis.
|
||||
*/
|
||||
module Private {
|
||||
private import SsaUtils as SU
|
||||
private import csharp as CS
|
||||
private import SsaUtils as SU
|
||||
private import ConstantUtils as CU
|
||||
private import RangeUtils as RU
|
||||
private import semmle.code.csharp.controlflow.Guards as G
|
||||
private import Sign
|
||||
import Impl
|
||||
|
||||
class Guard = G::Guard;
|
||||
@@ -32,7 +34,85 @@ module Private {
|
||||
|
||||
class Expr = CS::Expr;
|
||||
|
||||
class VariableUpdate = CS::AssignableDefinition;
|
||||
|
||||
class Field = CS::Field;
|
||||
|
||||
class RealLiteral = CS::RealLiteral;
|
||||
|
||||
class DivExpr = CS::DivExpr;
|
||||
|
||||
/** Class to represent unary operation. */
|
||||
class UnaryOperation extends Expr {
|
||||
UnaryOperation() {
|
||||
this instanceof CS::PreIncrExpr or
|
||||
this instanceof CS::PreDecrExpr or
|
||||
this instanceof CS::UnaryMinusExpr or
|
||||
this instanceof CS::ComplementExpr
|
||||
}
|
||||
|
||||
/** Returns the operand of this expression. */
|
||||
Expr getOperand() {
|
||||
result = this.(CS::PreIncrExpr).getOperand() or
|
||||
result = this.(CS::PreDecrExpr).getOperand() or
|
||||
result = this.(CS::UnaryMinusExpr).getOperand() or
|
||||
result = this.(CS::ComplementExpr).getOperand()
|
||||
}
|
||||
|
||||
/** Returns the operation representing this expression. */
|
||||
TUnarySignOperation getOp() {
|
||||
this instanceof CS::PreIncrExpr and result = TIncOp()
|
||||
or
|
||||
this instanceof CS::PreDecrExpr and result = TDecOp()
|
||||
or
|
||||
this instanceof CS::UnaryMinusExpr and result = TNegOp()
|
||||
or
|
||||
this instanceof CS::ComplementExpr and result = TBitNotOp()
|
||||
}
|
||||
}
|
||||
|
||||
/** Class to represent binary operation. */
|
||||
class BinaryOperation extends CS::BinaryOperation {
|
||||
BinaryOperation() {
|
||||
this instanceof CS::AddExpr or
|
||||
this instanceof CS::SubExpr or
|
||||
this instanceof CS::MulExpr or
|
||||
this instanceof CS::DivExpr or
|
||||
this instanceof CS::RemExpr or
|
||||
this instanceof CS::BitwiseAndExpr or
|
||||
this instanceof CS::BitwiseOrExpr or
|
||||
this instanceof CS::BitwiseXorExpr or
|
||||
this instanceof CS::LShiftExpr or
|
||||
this instanceof CS::RShiftExpr
|
||||
}
|
||||
|
||||
/** Returns the operation representing this expression. */
|
||||
TBinarySignOperation getOp() {
|
||||
this instanceof CS::AddExpr and result = TAddOp()
|
||||
or
|
||||
this instanceof CS::SubExpr and result = TSubOp()
|
||||
or
|
||||
this instanceof CS::MulExpr and result = TMulOp()
|
||||
or
|
||||
this instanceof CS::DivExpr and result = TDivOp()
|
||||
or
|
||||
this instanceof CS::RemExpr and result = TRemOp()
|
||||
or
|
||||
this instanceof CS::BitwiseAndExpr and result = TBitAndOp()
|
||||
or
|
||||
this instanceof CS::BitwiseOrExpr and result = TBitOrOp()
|
||||
or
|
||||
this instanceof CS::BitwiseXorExpr and result = TBitXorOp()
|
||||
or
|
||||
this instanceof CS::LShiftExpr and result = TLShiftOp()
|
||||
or
|
||||
this instanceof CS::RShiftExpr and result = TRShiftOp()
|
||||
}
|
||||
}
|
||||
|
||||
predicate ssaRead = SU::ssaRead/2;
|
||||
|
||||
predicate guardControlsSsaRead = RU::guardControlsSsaRead/3;
|
||||
}
|
||||
|
||||
private module Impl {
|
||||
@@ -48,6 +128,10 @@ private module Impl {
|
||||
|
||||
private class BooleanValue = AbstractValues::BooleanValue;
|
||||
|
||||
/** Gets the character value of expression `e`. */
|
||||
string getCharValue(Expr e) { result = e.getValue() and e.getType() instanceof CharType }
|
||||
|
||||
/** Gets the constant `float` value of non-`ConstantIntegerExpr` expressions. */
|
||||
float getNonIntegerValue(Expr e) {
|
||||
exists(string s |
|
||||
s = e.getValue() and
|
||||
@@ -56,8 +140,10 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
string getCharValue(Expr e) { result = e.getValue() and e.getType() instanceof CharType }
|
||||
|
||||
/**
|
||||
* Holds if `e` is an access to the size of a container (`string`, `Array`,
|
||||
* `IEnumerable`, or `ICollection`).
|
||||
*/
|
||||
predicate containerSizeAccess(Expr e) {
|
||||
exists(Property p | p = e.(PropertyAccess).getTarget() |
|
||||
propertyOverrides(p, "System.Collections.Generic.IEnumerable<>", "Count") or
|
||||
@@ -69,6 +155,7 @@ private module Impl {
|
||||
e instanceof CountCall
|
||||
}
|
||||
|
||||
/** Holds if `e` is by definition strictly positive. */
|
||||
predicate positiveExpression(Expr e) { e instanceof SizeofExpr }
|
||||
|
||||
abstract class NumericOrCharType extends Type { }
|
||||
@@ -97,46 +184,67 @@ private module Impl {
|
||||
}
|
||||
}
|
||||
|
||||
Sign explicitSsaDefSign(Ssa::ExplicitDefinition v) {
|
||||
exists(AssignableDefinition def | def = v.getADefinition() |
|
||||
result = exprSign(def.getSource())
|
||||
or
|
||||
not exists(def.getSource()) and
|
||||
not def.getElement() instanceof MutatorOperation
|
||||
or
|
||||
result = exprSign(def.getElement().(IncrementOperation).getOperand()).inc()
|
||||
or
|
||||
result = exprSign(def.getElement().(DecrementOperation).getOperand()).dec()
|
||||
)
|
||||
/** Returns the underlying variable update of the explicit SSA variable `v`. */
|
||||
AssignableDefinition getExplicitSsaAssignment(Ssa::ExplicitDefinition v) {
|
||||
result = v.getADefinition()
|
||||
}
|
||||
|
||||
Sign implicitSsaDefSign(Ssa::ImplicitDefinition v) {
|
||||
result = fieldSign(v.getSourceVariable().getAssignable()) or
|
||||
not v.getSourceVariable().getAssignable() instanceof Field
|
||||
/** Returns the assignment of the variable update `def`. */
|
||||
Expr getExprFromSsaAssignment(AssignableDefinition def) { result = def.getSource() }
|
||||
|
||||
/** Holds if `def` can have any sign. */
|
||||
predicate explicitSsaDefWithAnySign(AssignableDefinition def) {
|
||||
not exists(def.getSource()) and
|
||||
not def.getElement() instanceof MutatorOperation
|
||||
}
|
||||
|
||||
/** Returns the operand of the operation if `def` is a decrement. */
|
||||
Expr getDecrementOperand(AssignableDefinition def) {
|
||||
result = def.getElement().(DecrementOperation).getOperand()
|
||||
}
|
||||
|
||||
/** Returns the operand of the operation if `def` is an increment. */
|
||||
Expr getIncrementOperand(AssignableDefinition def) {
|
||||
result = def.getElement().(IncrementOperation).getOperand()
|
||||
}
|
||||
|
||||
/** Gets the variable underlying the implicit SSA variable `v`. */
|
||||
Declaration getImplicitSsaDeclaration(Ssa::ImplicitDefinition v) {
|
||||
result = v.getSourceVariable().getAssignable()
|
||||
}
|
||||
|
||||
/** Holds if the variable underlying the implicit SSA variable `v` is not a field. */
|
||||
predicate nonFieldImplicitSsaDefinition(Ssa::ImplicitDefinition v) {
|
||||
not getImplicitSsaDeclaration(v) instanceof Field
|
||||
}
|
||||
|
||||
/** Returned an expression that is assigned to `f`. */
|
||||
Expr getAssignedValueToField(Field f) {
|
||||
result = f.getAnAssignedValue() or
|
||||
result = any(AssignOperation a | a.getLValue() = f.getAnAccess())
|
||||
}
|
||||
|
||||
/** Holds if `f` can have any sign. */
|
||||
predicate fieldWithUnknownSign(Field f) { not f.fromSource() or not f.isEffectivelyPrivate() }
|
||||
|
||||
/** Holds if `f` is accessed in an increment operation. */
|
||||
predicate fieldIncrementOperationOperand(Field f) {
|
||||
any(IncrementOperation inc).getOperand() = f.getAnAccess()
|
||||
}
|
||||
|
||||
/** Holds if `f` is accessed in a decrement operation. */
|
||||
predicate fieldDecrementOperationOperand(Field f) {
|
||||
any(DecrementOperation dec).getOperand() = f.getAnAccess()
|
||||
}
|
||||
|
||||
/** Returns possible signs of `f` based on the declaration. */
|
||||
pragma[inline]
|
||||
Sign ssaVariableSign(Ssa::Definition v, Expr e) {
|
||||
result = ssaSign(v, any(SsaReadPositionBlock bb | getAnExpression(bb) = e))
|
||||
}
|
||||
Sign specificFieldSign(Field f) { not exists(f.getInitializer()) and result = TZero() }
|
||||
|
||||
/** Gets a possible sign for `f`. */
|
||||
Sign fieldSign(Field f) {
|
||||
if f.fromSource() and f.isEffectivelyPrivate()
|
||||
then
|
||||
result = exprSign(f.getAnAssignedValue())
|
||||
or
|
||||
any(IncrementOperation inc).getOperand() = f.getAnAccess() and result = fieldSign(f).inc()
|
||||
or
|
||||
any(DecrementOperation dec).getOperand() = f.getAnAccess() and result = fieldSign(f).dec()
|
||||
or
|
||||
exists(AssignOperation a | a.getLValue() = f.getAnAccess() | result = exprSign(a))
|
||||
or
|
||||
not exists(f.getInitializer()) and result = TZero()
|
||||
else any()
|
||||
}
|
||||
|
||||
predicate unknownIntegerAccess(Expr e) {
|
||||
/**
|
||||
* Holds if `e` has type `NumericOrCharType`, but the sign of `e` is unknown.
|
||||
*/
|
||||
predicate numericExprWithUnknownSign(Expr e) {
|
||||
e.getType() instanceof NumericOrCharType and
|
||||
not e = getARead(_) and
|
||||
not e instanceof FieldAccess and
|
||||
@@ -171,79 +279,20 @@ private module Impl {
|
||||
not e instanceof NullCoalescingExpr
|
||||
}
|
||||
|
||||
Sign specificSubExprSign(Expr e) {
|
||||
// The expression types that are handled here should be excluded in `unknownIntegerAccess`.
|
||||
// Keep them in sync.
|
||||
result = exprSign(e.(AssignExpr).getRValue())
|
||||
or
|
||||
result = exprSign(e.(AssignOperation).getExpandedAssignment())
|
||||
or
|
||||
result = exprSign(e.(UnaryPlusExpr).getOperand())
|
||||
or
|
||||
result = exprSign(e.(PostIncrExpr).getOperand())
|
||||
or
|
||||
result = exprSign(e.(PostDecrExpr).getOperand())
|
||||
or
|
||||
result = exprSign(e.(PreIncrExpr).getOperand()).inc()
|
||||
or
|
||||
result = exprSign(e.(PreDecrExpr).getOperand()).dec()
|
||||
or
|
||||
result = exprSign(e.(UnaryMinusExpr).getOperand()).neg()
|
||||
or
|
||||
result = exprSign(e.(ComplementExpr).getOperand()).bitnot()
|
||||
or
|
||||
e =
|
||||
any(DivExpr div |
|
||||
result = exprSign(div.getLeftOperand()) and
|
||||
result != TZero() and
|
||||
div.getRightOperand().(RealLiteral).getValue().toFloat() = 0
|
||||
)
|
||||
or
|
||||
exists(Sign s1, Sign s2 | binaryOpSigns(e, s1, s2) |
|
||||
e instanceof AddExpr and result = s1.add(s2)
|
||||
or
|
||||
e instanceof SubExpr and result = s1.add(s2.neg())
|
||||
or
|
||||
e instanceof MulExpr and result = s1.mul(s2)
|
||||
or
|
||||
e instanceof DivExpr and result = s1.div(s2)
|
||||
or
|
||||
e instanceof RemExpr and result = s1.rem(s2)
|
||||
or
|
||||
e instanceof BitwiseAndExpr and result = s1.bitand(s2)
|
||||
or
|
||||
e instanceof BitwiseOrExpr and result = s1.bitor(s2)
|
||||
or
|
||||
e instanceof BitwiseXorExpr and result = s1.bitxor(s2)
|
||||
or
|
||||
e instanceof LShiftExpr and result = s1.lshift(s2)
|
||||
or
|
||||
e instanceof RShiftExpr and result = s1.rshift(s2)
|
||||
)
|
||||
or
|
||||
result = exprSign(e.(ConditionalExpr).getAChild())
|
||||
or
|
||||
result = exprSign(e.(NullCoalescingExpr).getAChild())
|
||||
or
|
||||
result = exprSign(e.(SwitchExpr).getACase().getBody())
|
||||
or
|
||||
result = exprSign(e.(CastExpr).getExpr())
|
||||
or
|
||||
result = exprSign(e.(SwitchCaseExpr).getBody())
|
||||
or
|
||||
result = exprSign(e.(LocalVariableDeclAndInitExpr).getInitializer())
|
||||
or
|
||||
result = exprSign(e.(RefExpr).getExpr())
|
||||
}
|
||||
|
||||
private Sign binaryOpLhsSign(BinaryOperation e) { result = exprSign(e.getLeftOperand()) }
|
||||
|
||||
private Sign binaryOpRhsSign(BinaryOperation e) { result = exprSign(e.getRightOperand()) }
|
||||
|
||||
pragma[noinline]
|
||||
private predicate binaryOpSigns(Expr e, Sign lhs, Sign rhs) {
|
||||
lhs = binaryOpLhsSign(e) and
|
||||
rhs = binaryOpRhsSign(e)
|
||||
/** Returns a sub expression of `e` for expression types where the sign depends on the child. */
|
||||
Expr getASubExprWithSameSign(Expr e) {
|
||||
result = e.(AssignExpr).getRValue() or
|
||||
result = e.(AssignOperation).getExpandedAssignment() or
|
||||
result = e.(UnaryPlusExpr).getOperand() or
|
||||
result = e.(PostIncrExpr).getOperand() or
|
||||
result = e.(PostDecrExpr).getOperand() or
|
||||
result = e.(ConditionalExpr).getAChild() or
|
||||
result = e.(NullCoalescingExpr).getAChild() or
|
||||
result = e.(SwitchExpr).getACase().getBody() or
|
||||
result = e.(SwitchCaseExpr).getBody() or
|
||||
result = e.(LocalVariableDeclAndInitExpr).getInitializer() or
|
||||
result = e.(RefExpr).getExpr() or
|
||||
result = e.(CastExpr).getExpr()
|
||||
}
|
||||
|
||||
Expr getARead(Ssa::Definition v) { result = v.getARead() }
|
||||
@@ -254,15 +303,6 @@ private module Impl {
|
||||
|
||||
Guard getComparisonGuard(ComparisonExpr ce) { result = ce.getExpr() }
|
||||
|
||||
/**
|
||||
* Holds if `guard` controls the position `controlled` with the value `testIsTrue`.
|
||||
*/
|
||||
predicate guardControlsSsaRead(Guard guard, SsaReadPosition controlled, boolean testIsTrue) {
|
||||
exists(BooleanValue b | b.getValue() = testIsTrue |
|
||||
guard.controlsBasicBlock(controlled.(SsaReadPositionBlock).getBlock(), b)
|
||||
)
|
||||
}
|
||||
|
||||
/** A relational comparison */
|
||||
class ComparisonExpr extends ComparisonTest {
|
||||
private boolean strict;
|
||||
|
||||
@@ -61,7 +61,9 @@ module UserControlledBypassOfSensitiveMethod {
|
||||
private predicate conditionControlsCall0(
|
||||
SensitiveExecutionMethodCall call, Expr e, ControlFlow::SuccessorTypes::BooleanSuccessor s
|
||||
) {
|
||||
forex(BasicBlock bb | bb = call.getAControlFlowNode().getBasicBlock() | e.controlsBlock(bb, s))
|
||||
forex(BasicBlock bb | bb = call.getAControlFlowNode().getBasicBlock() |
|
||||
e.controlsBlock(bb, s, _)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate conditionControlsCall(
|
||||
|
||||
130
csharp/ql/test/library-tests/controlflow/graph/Assert.cs
Normal file
130
csharp/ql/test/library-tests/controlflow/graph/Assert.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
class AssertTests
|
||||
{
|
||||
void M1(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Debug.Assert(s != null);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M2(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsNull(s);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M3(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsNotNull(s);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M4(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsTrue(s == null);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M5(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsTrue(s != null);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M6(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsFalse(s != null);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M7(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsFalse(s == null);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M8(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsTrue(s != null && b);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M9(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsFalse(s == null || b);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M10(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsTrue(s == null && b);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M11(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Assert.IsFalse(s != null || b);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
|
||||
void M12(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
Debug.Assert(s != null);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsNull(s);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsNotNull(s);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsTrue(s == null);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsTrue(s != null);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsFalse(s != null);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsFalse(s == null);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsTrue(s != null && b);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsFalse(s == null || !b);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsTrue(s == null && b);
|
||||
Console.WriteLine(s.Length);
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsFalse(s != null || !b);
|
||||
Console.WriteLine(s.Length);
|
||||
}
|
||||
}
|
||||
@@ -13,8 +13,127 @@
|
||||
| AccessorCalls.cs:66:10:66:11 | enter M9 | AccessorCalls.cs:66:10:66:11 | exit M9 | 57 |
|
||||
| ArrayCreation.cs:3:11:3:12 | enter M1 | ArrayCreation.cs:3:11:3:12 | exit M1 | 4 |
|
||||
| ArrayCreation.cs:5:12:5:13 | enter M2 | ArrayCreation.cs:5:12:5:13 | exit M2 | 5 |
|
||||
| ArrayCreation.cs:7:11:7:12 | enter M3 | ArrayCreation.cs:7:11:7:12 | exit M3 | 6 |
|
||||
| ArrayCreation.cs:9:12:9:13 | enter M4 | ArrayCreation.cs:9:12:9:13 | exit M4 | 10 |
|
||||
| ArrayCreation.cs:7:11:7:12 | enter M3 | ArrayCreation.cs:7:11:7:12 | exit M3 | 7 |
|
||||
| ArrayCreation.cs:9:12:9:13 | enter M4 | ArrayCreation.cs:9:12:9:13 | exit M4 | 12 |
|
||||
| Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:20:9:20 | access to parameter b | 5 |
|
||||
| Assert.cs:7:10:7:11 | exit M1 | Assert.cs:7:10:7:11 | exit M1 | 1 |
|
||||
| Assert.cs:9:16:9:32 | String s = ... | Assert.cs:10:22:10:30 | ... != ... | 5 |
|
||||
| Assert.cs:9:24:9:27 | null | Assert.cs:9:24:9:27 | null | 1 |
|
||||
| Assert.cs:9:31:9:32 | "" | Assert.cs:9:31:9:32 | "" | 1 |
|
||||
| Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | 1 |
|
||||
| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:11:9:11:35 | call to method WriteLine | 5 |
|
||||
| Assert.cs:14:10:14:11 | enter M2 | Assert.cs:16:20:16:20 | access to parameter b | 5 |
|
||||
| Assert.cs:14:10:14:11 | exit M2 | Assert.cs:14:10:14:11 | exit M2 | 1 |
|
||||
| Assert.cs:16:16:16:32 | String s = ... | Assert.cs:17:23:17:23 | access to local variable s | 3 |
|
||||
| Assert.cs:16:24:16:27 | null | Assert.cs:16:24:16:27 | null | 1 |
|
||||
| Assert.cs:16:31:16:32 | "" | Assert.cs:16:31:16:32 | "" | 1 |
|
||||
| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | 1 |
|
||||
| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:18:9:18:35 | call to method WriteLine | 5 |
|
||||
| Assert.cs:21:10:21:11 | enter M3 | Assert.cs:23:20:23:20 | access to parameter b | 5 |
|
||||
| Assert.cs:21:10:21:11 | exit M3 | Assert.cs:21:10:21:11 | exit M3 | 1 |
|
||||
| Assert.cs:23:16:23:32 | String s = ... | Assert.cs:24:26:24:26 | access to local variable s | 3 |
|
||||
| Assert.cs:23:24:23:27 | null | Assert.cs:23:24:23:27 | null | 1 |
|
||||
| Assert.cs:23:31:23:32 | "" | Assert.cs:23:31:23:32 | "" | 1 |
|
||||
| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | 1 |
|
||||
| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:25:9:25:35 | call to method WriteLine | 5 |
|
||||
| Assert.cs:28:10:28:11 | enter M4 | Assert.cs:30:20:30:20 | access to parameter b | 5 |
|
||||
| Assert.cs:28:10:28:11 | exit M4 | Assert.cs:28:10:28:11 | exit M4 | 1 |
|
||||
| Assert.cs:30:16:30:32 | String s = ... | Assert.cs:31:23:31:31 | ... == ... | 5 |
|
||||
| Assert.cs:30:24:30:27 | null | Assert.cs:30:24:30:27 | null | 1 |
|
||||
| Assert.cs:30:31:30:32 | "" | Assert.cs:30:31:30:32 | "" | 1 |
|
||||
| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | 1 |
|
||||
| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:32:9:32:35 | call to method WriteLine | 5 |
|
||||
| Assert.cs:35:10:35:11 | enter M5 | Assert.cs:37:20:37:20 | access to parameter b | 5 |
|
||||
| Assert.cs:35:10:35:11 | exit M5 | Assert.cs:35:10:35:11 | exit M5 | 1 |
|
||||
| Assert.cs:37:16:37:32 | String s = ... | Assert.cs:38:23:38:31 | ... != ... | 5 |
|
||||
| Assert.cs:37:24:37:27 | null | Assert.cs:37:24:37:27 | null | 1 |
|
||||
| Assert.cs:37:31:37:32 | "" | Assert.cs:37:31:37:32 | "" | 1 |
|
||||
| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | 1 |
|
||||
| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:39:9:39:35 | call to method WriteLine | 5 |
|
||||
| Assert.cs:42:10:42:11 | enter M6 | Assert.cs:44:20:44:20 | access to parameter b | 5 |
|
||||
| Assert.cs:42:10:42:11 | exit M6 | Assert.cs:42:10:42:11 | exit M6 | 1 |
|
||||
| Assert.cs:44:16:44:32 | String s = ... | Assert.cs:45:24:45:32 | ... != ... | 5 |
|
||||
| Assert.cs:44:24:44:27 | null | Assert.cs:44:24:44:27 | null | 1 |
|
||||
| Assert.cs:44:31:44:32 | "" | Assert.cs:44:31:44:32 | "" | 1 |
|
||||
| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | 1 |
|
||||
| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:46:9:46:35 | call to method WriteLine | 5 |
|
||||
| Assert.cs:49:10:49:11 | enter M7 | Assert.cs:51:20:51:20 | access to parameter b | 5 |
|
||||
| Assert.cs:49:10:49:11 | exit M7 | Assert.cs:49:10:49:11 | exit M7 | 1 |
|
||||
| Assert.cs:51:16:51:32 | String s = ... | Assert.cs:52:24:52:32 | ... == ... | 5 |
|
||||
| Assert.cs:51:24:51:27 | null | Assert.cs:51:24:51:27 | null | 1 |
|
||||
| Assert.cs:51:31:51:32 | "" | Assert.cs:51:31:51:32 | "" | 1 |
|
||||
| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | 1 |
|
||||
| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:53:9:53:35 | call to method WriteLine | 5 |
|
||||
| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:20:58:20 | access to parameter b | 5 |
|
||||
| Assert.cs:56:10:56:11 | exit M8 | Assert.cs:56:10:56:11 | exit M8 | 1 |
|
||||
| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | 7 |
|
||||
| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | 7 |
|
||||
| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | 1 |
|
||||
| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | 1 |
|
||||
| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:60:9:60:35 | call to method WriteLine | 6 |
|
||||
| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:20:65:20 | access to parameter b | 5 |
|
||||
| Assert.cs:63:10:63:11 | exit M9 | Assert.cs:63:10:63:11 | exit M9 | 1 |
|
||||
| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | 7 |
|
||||
| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | 7 |
|
||||
| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | 1 |
|
||||
| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:67:9:67:35 | call to method WriteLine | 6 |
|
||||
| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | 1 |
|
||||
| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:20:72:20 | access to parameter b | 5 |
|
||||
| Assert.cs:70:10:70:12 | exit M10 | Assert.cs:70:10:70:12 | exit M10 | 1 |
|
||||
| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | 7 |
|
||||
| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | 7 |
|
||||
| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | 1 |
|
||||
| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | 1 |
|
||||
| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:74:9:74:35 | call to method WriteLine | 6 |
|
||||
| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:20:79:20 | access to parameter b | 5 |
|
||||
| Assert.cs:77:10:77:12 | exit M11 | Assert.cs:77:10:77:12 | exit M11 | 1 |
|
||||
| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | 7 |
|
||||
| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | 7 |
|
||||
| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | 1 |
|
||||
| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:81:9:81:35 | call to method WriteLine | 6 |
|
||||
| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | 1 |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:20:86:20 | access to parameter b | 5 |
|
||||
| Assert.cs:84:10:84:12 | exit M12 | Assert.cs:84:10:84:12 | exit M12 | 1 |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | 6 |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | 6 |
|
||||
| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | 1 |
|
||||
| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | 1 |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | 12 |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | 12 |
|
||||
| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | 1 |
|
||||
| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | 1 |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | 12 |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | 12 |
|
||||
| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | 1 |
|
||||
| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | 1 |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | 14 |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | 14 |
|
||||
| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | 1 |
|
||||
| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | 1 |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | 14 |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | 14 |
|
||||
| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | 1 |
|
||||
| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | 1 |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | 14 |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | 14 |
|
||||
| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | 1 |
|
||||
| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | 1 |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | 14 |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | 14 |
|
||||
| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | 1 |
|
||||
| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | 1 |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | 15 |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | 15 |
|
||||
| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | 1 |
|
||||
| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | 1 |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | 1 |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | 16 |
|
||||
| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | 1 |
|
||||
| Assert.cs:119:37:119:38 | [b (line 84): true] !... | Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | 17 |
|
||||
| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | 1 |
|
||||
| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | 16 |
|
||||
| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | 1 |
|
||||
| Assert.cs:127:37:127:38 | [b (line 84): true] !... | Assert.cs:128:9:128:35 | call to method WriteLine | 7 |
|
||||
| Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | exit M | 33 |
|
||||
| Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | exit (...) => ... | 3 |
|
||||
| Assignments.cs:17:40:17:40 | enter + | Assignments.cs:17:40:17:40 | exit + | 5 |
|
||||
@@ -139,7 +258,7 @@
|
||||
| Conditions.cs:77:17:77:20 | ...; | Conditions.cs:77:17:77:19 | ...++ | 3 |
|
||||
| Conditions.cs:78:13:79:26 | if (...) ... | Conditions.cs:78:17:78:21 | ... > ... | 4 |
|
||||
| Conditions.cs:79:17:79:26 | ...; | Conditions.cs:79:17:79:25 | ... = ... | 3 |
|
||||
| Conditions.cs:81:9:82:16 | if (...) ... | Conditions.cs:81:12:81:12 | access to local variable b | 2 |
|
||||
| Conditions.cs:81:9:82:16 | if (...) ... | Conditions.cs:81:13:81:13 | access to local variable b | 2 |
|
||||
| Conditions.cs:82:13:82:16 | ...; | Conditions.cs:82:13:82:15 | ...++ | 3 |
|
||||
| Conditions.cs:83:16:83:16 | access to local variable x | Conditions.cs:70:9:70:10 | exit M6 | 3 |
|
||||
| Conditions.cs:86:9:86:10 | enter M7 | Conditions.cs:90:27:90:28 | access to parameter ss | 12 |
|
||||
@@ -157,10 +276,10 @@
|
||||
| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:109:17:109:23 | ... = ... | 8 |
|
||||
| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | 3 |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:102:12:102:13 | exit M8 | 3 |
|
||||
| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:116:17:116:21 | Int32 i = ... | 8 |
|
||||
| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:116:18:116:22 | Int32 i = ... | 8 |
|
||||
| Conditions.cs:113:10:113:11 | exit M9 | Conditions.cs:113:10:113:11 | exit M9 | 1 |
|
||||
| Conditions.cs:116:24:116:24 | access to local variable i | Conditions.cs:116:24:116:38 | ... < ... | 4 |
|
||||
| Conditions.cs:116:41:116:41 | access to local variable i | Conditions.cs:116:41:116:43 | ...++ | 2 |
|
||||
| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:25:116:39 | ... < ... | 4 |
|
||||
| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:116:42:116:44 | ...++ | 2 |
|
||||
| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:18:119:21 | access to local variable last | 12 |
|
||||
| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | 5 |
|
||||
| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:122:17:122:24 | ... = ... | 5 |
|
||||
@@ -169,6 +288,10 @@
|
||||
| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | 9 |
|
||||
| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | 4 |
|
||||
| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | 14 |
|
||||
| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:17:145:17 | access to parameter b | 5 |
|
||||
| Conditions.cs:143:10:143:12 | exit M11 | Conditions.cs:143:10:143:12 | exit M11 | 1 |
|
||||
| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:147:13:147:48 | call to method WriteLine | 9 |
|
||||
| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:149:13:149:48 | call to method WriteLine | 9 |
|
||||
| ExitMethods.cs:7:10:7:11 | enter M1 | ExitMethods.cs:7:10:7:11 | exit M1 | 7 |
|
||||
| ExitMethods.cs:13:10:13:11 | enter M2 | ExitMethods.cs:13:10:13:11 | exit M2 | 7 |
|
||||
| ExitMethods.cs:19:10:19:11 | enter M3 | ExitMethods.cs:19:10:19:11 | exit M3 | 6 |
|
||||
@@ -204,7 +327,10 @@
|
||||
| ExitMethods.cs:116:38:116:38 | 1 | ExitMethods.cs:116:38:116:38 | 1 | 1 |
|
||||
| ExitMethods.cs:119:17:119:32 | enter FailingAssertion | ExitMethods.cs:119:17:119:32 | exit FailingAssertion | 6 |
|
||||
| ExitMethods.cs:125:17:125:33 | enter FailingAssertion2 | ExitMethods.cs:125:17:125:33 | exit FailingAssertion2 | 6 |
|
||||
| ExitMethods.cs:131:10:131:20 | enter AssertFalse | ExitMethods.cs:131:10:131:20 | exit AssertFalse | 4 |
|
||||
| ExitMethods.cs:131:10:131:20 | enter AssertFalse | ExitMethods.cs:131:48:131:48 | access to parameter b | 2 |
|
||||
| ExitMethods.cs:131:10:131:20 | exit AssertFalse | ExitMethods.cs:131:10:131:20 | exit AssertFalse | 1 |
|
||||
| ExitMethods.cs:131:33:131:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:131:33:131:49 | [assertion failure] call to method IsFalse | 1 |
|
||||
| ExitMethods.cs:131:33:131:49 | [assertion success] call to method IsFalse | ExitMethods.cs:131:33:131:49 | [assertion success] call to method IsFalse | 1 |
|
||||
| ExitMethods.cs:133:17:133:33 | enter FailingAssertion3 | ExitMethods.cs:133:17:133:33 | exit FailingAssertion3 | 7 |
|
||||
| Extensions.cs:5:23:5:29 | enter ToInt32 | Extensions.cs:5:23:5:29 | exit ToInt32 | 6 |
|
||||
| Extensions.cs:10:24:10:29 | enter ToBool | Extensions.cs:10:24:10:29 | exit ToBool | 7 |
|
||||
@@ -409,7 +535,7 @@
|
||||
| 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 | 14 |
|
||||
| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | exit Initializers | 14 |
|
||||
| Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | exit M | 20 |
|
||||
| Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | exit M | 21 |
|
||||
| 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 | 8 |
|
||||
| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | exit Sub | 11 |
|
||||
@@ -421,7 +547,7 @@
|
||||
| LoopUnrolling.cs:10:13:10:19 | return ...; | LoopUnrolling.cs:10:13:10:19 | return ...; | 1 |
|
||||
| LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | 5 |
|
||||
| LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:9:12:35 | [unroll (line 11)] foreach (... ... in ...) ... | 2 |
|
||||
| LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | 11 |
|
||||
| LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | 12 |
|
||||
| LoopUnrolling.cs:15:10:15:11 | exit M2 | LoopUnrolling.cs:15:10:15:11 | exit M2 | 1 |
|
||||
| LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | 5 |
|
||||
| LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:24:29:24:32 | access to parameter args | 3 |
|
||||
@@ -430,14 +556,14 @@
|
||||
| LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:25:13:26:40 | [unroll (line 25)] foreach (... ... in ...) ... | 3 |
|
||||
| LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | 5 |
|
||||
| LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:29:10:29:11 | exit M4 | 9 |
|
||||
| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | 18 |
|
||||
| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | 20 |
|
||||
| LoopUnrolling.cs:36:10:36:11 | exit M5 | LoopUnrolling.cs:36:10:36:11 | exit M5 | 1 |
|
||||
| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | 1 |
|
||||
| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:41:13:42:41 | [unroll (line 41)] foreach (... ... in ...) ... | 3 |
|
||||
| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | 7 |
|
||||
| LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:49:9:52:9 | {...} | 13 |
|
||||
| LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:49:9:52:9 | {...} | 14 |
|
||||
| LoopUnrolling.cs:50:9:50:13 | Label: | LoopUnrolling.cs:51:13:51:23 | goto ...; | 5 |
|
||||
| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:60:17:60:17 | access to parameter b | 15 |
|
||||
| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:60:17:60:17 | access to parameter b | 16 |
|
||||
| LoopUnrolling.cs:55:10:55:11 | exit M7 | LoopUnrolling.cs:55:10:55:11 | exit M7 | 1 |
|
||||
| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | 4 |
|
||||
| LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | 4 |
|
||||
@@ -670,35 +796,35 @@
|
||||
| Switch.cs:55:10:55:11 | enter M5 | Switch.cs:55:10:55:11 | exit M5 | 12 |
|
||||
| Switch.cs:66:10:66:11 | enter M6 | Switch.cs:72:18:72:19 | "" | 9 |
|
||||
| Switch.cs:66:10:66:11 | exit M6 | Switch.cs:66:10:66:11 | exit M6 | 1 |
|
||||
| Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; | 1 |
|
||||
| Switch.cs:73:17:73:22 | break; | Switch.cs:73:17:73:22 | break; | 1 |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:81:18:81:18 | 1 | 6 |
|
||||
| Switch.cs:77:10:77:11 | exit M7 | Switch.cs:77:10:77:11 | exit M7 | 1 |
|
||||
| Switch.cs:82:22:82:25 | true | Switch.cs:82:15:82:26 | return ...; | 2 |
|
||||
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:18:83:18 | 2 | 2 |
|
||||
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:19:84:23 | ... > ... | 4 |
|
||||
| Switch.cs:85:17:85:22 | break; | Switch.cs:85:17:85:22 | break; | 1 |
|
||||
| Switch.cs:86:22:86:25 | true | Switch.cs:86:15:86:26 | return ...; | 2 |
|
||||
| Switch.cs:82:24:82:27 | true | Switch.cs:82:17:82:28 | return ...; | 2 |
|
||||
| Switch.cs:83:13:83:19 | case ...: | Switch.cs:83:18:83:18 | 2 | 2 |
|
||||
| Switch.cs:84:17:85:26 | if (...) ... | Switch.cs:84:21:84:25 | ... > ... | 4 |
|
||||
| Switch.cs:85:21:85:26 | break; | Switch.cs:85:21:85:26 | break; | 1 |
|
||||
| Switch.cs:86:24:86:27 | true | Switch.cs:86:17:86:28 | return ...; | 2 |
|
||||
| Switch.cs:88:16:88:20 | false | Switch.cs:88:9:88:21 | return ...; | 2 |
|
||||
| Switch.cs:91:10:91:11 | enter M8 | Switch.cs:95:18:95:20 | access to type Int32 | 6 |
|
||||
| Switch.cs:91:10:91:11 | exit M8 | Switch.cs:91:10:91:11 | exit M8 | 1 |
|
||||
| Switch.cs:96:22:96:25 | true | Switch.cs:96:15:96:26 | return ...; | 2 |
|
||||
| Switch.cs:96:24:96:27 | true | Switch.cs:96:17:96:28 | return ...; | 2 |
|
||||
| Switch.cs:98:16:98:20 | false | Switch.cs:98:9:98:21 | return ...; | 2 |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:103:17:103:17 | access to parameter s | 4 |
|
||||
| Switch.cs:101:9:101:10 | exit M9 | Switch.cs:101:9:101:10 | exit M9 | 1 |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:19:103:25 | access to property Length | 1 |
|
||||
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:18:105:18 | 0 | 2 |
|
||||
| Switch.cs:105:29:105:29 | 0 | Switch.cs:105:22:105:30 | return ...; | 2 |
|
||||
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:18:106:18 | 1 | 2 |
|
||||
| Switch.cs:106:29:106:29 | 1 | Switch.cs:106:22:106:30 | return ...; | 2 |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:105:18:105:18 | 0 | 2 |
|
||||
| Switch.cs:105:28:105:28 | 0 | Switch.cs:105:21:105:29 | return ...; | 2 |
|
||||
| Switch.cs:106:13:106:19 | case ...: | Switch.cs:106:18:106:18 | 1 | 2 |
|
||||
| Switch.cs:106:28:106:28 | 1 | Switch.cs:106:21:106:29 | return ...; | 2 |
|
||||
| Switch.cs:108:17:108:17 | 1 | Switch.cs:108:9:108:18 | return ...; | 3 |
|
||||
| Switch.cs:111:17:111:21 | enter Throw | Switch.cs:111:17:111:21 | exit Throw | 4 |
|
||||
| Switch.cs:113:9:113:11 | enter M10 | Switch.cs:117:18:117:18 | 3 | 7 |
|
||||
| Switch.cs:113:9:113:11 | exit M10 | Switch.cs:113:9:113:11 | exit M10 | 1 |
|
||||
| Switch.cs:117:25:117:25 | access to parameter s | Switch.cs:117:25:117:32 | ... == ... | 3 |
|
||||
| Switch.cs:117:43:117:43 | 1 | Switch.cs:117:36:117:44 | return ...; | 2 |
|
||||
| Switch.cs:118:13:118:33 | case ...: | Switch.cs:118:18:118:18 | 2 | 2 |
|
||||
| Switch.cs:118:25:118:25 | access to parameter s | Switch.cs:118:25:118:31 | ... == ... | 3 |
|
||||
| Switch.cs:118:42:118:42 | 2 | Switch.cs:118:35:118:43 | return ...; | 2 |
|
||||
| Switch.cs:117:25:117:25 | access to parameter s | Switch.cs:117:25:117:34 | ... == ... | 3 |
|
||||
| Switch.cs:117:44:117:44 | 1 | Switch.cs:117:37:117:45 | return ...; | 2 |
|
||||
| Switch.cs:118:13:118:34 | case ...: | Switch.cs:118:18:118:18 | 2 | 2 |
|
||||
| Switch.cs:118:25:118:25 | access to parameter s | Switch.cs:118:25:118:33 | ... == ... | 3 |
|
||||
| Switch.cs:118:43:118:43 | 2 | Switch.cs:118:36:118:44 | return ...; | 2 |
|
||||
| Switch.cs:120:17:120:17 | 1 | Switch.cs:120:9:120:18 | return ...; | 3 |
|
||||
| Switch.cs:123:10:123:12 | enter M11 | Switch.cs:125:24:125:29 | Boolean b | 7 |
|
||||
| Switch.cs:123:10:123:12 | exit M11 | Switch.cs:123:10:123:12 | exit M11 | 1 |
|
||||
@@ -722,6 +848,14 @@
|
||||
| Switch.cs:149:13:149:20 | default: | Switch.cs:149:22:149:31 | return ...; | 4 |
|
||||
| Switch.cs:150:13:150:19 | case ...: | Switch.cs:150:18:150:18 | 2 | 2 |
|
||||
| Switch.cs:150:28:150:28 | 2 | Switch.cs:150:21:150:29 | return ...; | 2 |
|
||||
| Switch.cs:154:10:154:12 | enter M15 | Switch.cs:156:28:156:31 | true | 7 |
|
||||
| Switch.cs:154:10:154:12 | exit M15 | Switch.cs:154:10:154:12 | exit M15 | 1 |
|
||||
| Switch.cs:156:13:156:54 | String s = ... | Switch.cs:157:13:157:13 | access to parameter b | 3 |
|
||||
| Switch.cs:156:36:156:38 | "a" | Switch.cs:156:36:156:38 | "a" | 1 |
|
||||
| Switch.cs:156:41:156:52 | ... => ... | Switch.cs:156:41:156:45 | false | 2 |
|
||||
| Switch.cs:156:50:156:52 | "b" | Switch.cs:156:50:156:52 | "b" | 1 |
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:48 | call to method WriteLine | 5 |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:48 | call to method WriteLine | 5 |
|
||||
| TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:7:13:7:22 | ... is ... | 14 |
|
||||
| TypeAccesses.cs:7:25:7:25 | ; | TypeAccesses.cs:7:25:7:25 | ; | 1 |
|
||||
| TypeAccesses.cs:8:9:8:28 | ... ...; | TypeAccesses.cs:3:10:3:10 | exit M | 4 |
|
||||
|
||||
@@ -1,4 +1,299 @@
|
||||
conditionBlock
|
||||
| Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:24:9:27 | null | true |
|
||||
| Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:31:9:32 | "" | false |
|
||||
| Assert.cs:9:16:9:32 | String s = ... | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | false |
|
||||
| Assert.cs:9:16:9:32 | String s = ... | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | true |
|
||||
| Assert.cs:14:10:14:11 | enter M2 | Assert.cs:16:24:16:27 | null | true |
|
||||
| Assert.cs:14:10:14:11 | enter M2 | Assert.cs:16:31:16:32 | "" | false |
|
||||
| Assert.cs:16:16:16:32 | String s = ... | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | false |
|
||||
| Assert.cs:16:16:16:32 | String s = ... | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | true |
|
||||
| Assert.cs:21:10:21:11 | enter M3 | Assert.cs:23:24:23:27 | null | true |
|
||||
| Assert.cs:21:10:21:11 | enter M3 | Assert.cs:23:31:23:32 | "" | false |
|
||||
| Assert.cs:23:16:23:32 | String s = ... | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | true |
|
||||
| Assert.cs:23:16:23:32 | String s = ... | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | false |
|
||||
| Assert.cs:28:10:28:11 | enter M4 | Assert.cs:30:24:30:27 | null | true |
|
||||
| Assert.cs:28:10:28:11 | enter M4 | Assert.cs:30:31:30:32 | "" | false |
|
||||
| Assert.cs:30:16:30:32 | String s = ... | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:30:16:30:32 | String s = ... | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | true |
|
||||
| Assert.cs:35:10:35:11 | enter M5 | Assert.cs:37:24:37:27 | null | true |
|
||||
| Assert.cs:35:10:35:11 | enter M5 | Assert.cs:37:31:37:32 | "" | false |
|
||||
| Assert.cs:37:16:37:32 | String s = ... | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:37:16:37:32 | String s = ... | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | true |
|
||||
| Assert.cs:42:10:42:11 | enter M6 | Assert.cs:44:24:44:27 | null | true |
|
||||
| Assert.cs:42:10:42:11 | enter M6 | Assert.cs:44:31:44:32 | "" | false |
|
||||
| Assert.cs:44:16:44:32 | String s = ... | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:44:16:44:32 | String s = ... | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | false |
|
||||
| Assert.cs:49:10:49:11 | enter M7 | Assert.cs:51:24:51:27 | null | true |
|
||||
| Assert.cs:49:10:49:11 | enter M7 | Assert.cs:51:31:51:32 | "" | false |
|
||||
| Assert.cs:51:16:51:32 | String s = ... | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:51:16:51:32 | String s = ... | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | false |
|
||||
| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:24:58:27 | [b (line 56): true] null | true |
|
||||
| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:31:58:32 | [b (line 56): false] "" | false |
|
||||
| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | false |
|
||||
| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | true |
|
||||
| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | true |
|
||||
| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | true |
|
||||
| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:24:65:27 | [b (line 63): true] null | true |
|
||||
| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:31:65:32 | [b (line 63): false] "" | false |
|
||||
| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | false |
|
||||
| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | true |
|
||||
| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | false |
|
||||
| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | false |
|
||||
| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:24:72:27 | [b (line 70): true] null | true |
|
||||
| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:31:72:32 | [b (line 70): false] "" | false |
|
||||
| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | false |
|
||||
| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | true |
|
||||
| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | true |
|
||||
| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | true |
|
||||
| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:24:79:27 | [b (line 77): true] null | true |
|
||||
| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:31:79:32 | [b (line 77): false] "" | false |
|
||||
| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | false |
|
||||
| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | true |
|
||||
| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | false |
|
||||
| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:24:86:27 | [b (line 84): true] null | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:31:86:32 | [b (line 84): false] "" | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:37:119:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:37:127:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | false |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | false |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | false |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | false |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:37:119:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:37:127:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | true |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:37:119:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:37:127:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:37:119:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:37:127:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:37:119:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:37:119:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:37:119:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:37:127:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:37:119:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:37:127:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:119:37:119:38 | [b (line 84): true] !... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:119:37:119:38 | [b (line 84): true] !... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:119:37:119:38 | [b (line 84): true] !... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:119:37:119:38 | [b (line 84): true] !... | Assert.cs:127:37:127:38 | [b (line 84): true] !... | true |
|
||||
| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [b (line 84): true] !... | false |
|
||||
| BreakInTry.cs:7:13:11:13 | foreach (... ... in ...) ... | BreakInTry.cs:7:26:7:28 | String arg | false |
|
||||
| BreakInTry.cs:7:13:11:13 | foreach (... ... in ...) ... | BreakInTry.cs:10:21:10:26 | break; | false |
|
||||
| BreakInTry.cs:7:26:7:28 | String arg | BreakInTry.cs:10:21:10:26 | break; | true |
|
||||
@@ -126,11 +421,11 @@ conditionBlock
|
||||
| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | true |
|
||||
| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | true |
|
||||
| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | true |
|
||||
| Conditions.cs:116:24:116:24 | access to local variable i | Conditions.cs:113:10:113:11 | exit M9 | false |
|
||||
| Conditions.cs:116:24:116:24 | access to local variable i | Conditions.cs:116:41:116:41 | access to local variable i | true |
|
||||
| Conditions.cs:116:24:116:24 | access to local variable i | Conditions.cs:117:9:123:9 | {...} | true |
|
||||
| Conditions.cs:116:24:116:24 | access to local variable i | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | true |
|
||||
| Conditions.cs:116:24:116:24 | access to local variable i | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | true |
|
||||
| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:113:10:113:11 | exit M9 | false |
|
||||
| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:42:116:42 | access to local variable i | true |
|
||||
| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:117:9:123:9 | {...} | true |
|
||||
| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | true |
|
||||
| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | true |
|
||||
| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | false |
|
||||
| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | true |
|
||||
| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | false |
|
||||
@@ -139,6 +434,8 @@ conditionBlock
|
||||
| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true |
|
||||
| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | false |
|
||||
| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true |
|
||||
| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | true |
|
||||
| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | false |
|
||||
| ExitMethods.cs:43:9:46:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:47:9:50:9 | [exception: Exception] catch (...) {...} | false |
|
||||
| ExitMethods.cs:65:17:65:26 | enter ErrorMaybe | ExitMethods.cs:68:19:68:33 | object creation of type Exception | true |
|
||||
| ExitMethods.cs:71:17:71:27 | enter ErrorAlways | ExitMethods.cs:74:19:74:33 | object creation of type Exception | true |
|
||||
@@ -147,6 +444,8 @@ conditionBlock
|
||||
| ExitMethods.cs:109:13:109:21 | enter ThrowExpr | ExitMethods.cs:111:69:111:75 | "input" | false |
|
||||
| ExitMethods.cs:114:16:114:34 | enter ExtensionMethodCall | ExitMethods.cs:116:34:116:34 | 0 | true |
|
||||
| ExitMethods.cs:114:16:114:34 | enter ExtensionMethodCall | ExitMethods.cs:116:38:116:38 | 1 | false |
|
||||
| ExitMethods.cs:131:10:131:20 | enter AssertFalse | ExitMethods.cs:131:33:131:49 | [assertion failure] call to method IsFalse | true |
|
||||
| ExitMethods.cs:131:10:131:20 | enter AssertFalse | ExitMethods.cs:131:33:131:49 | [assertion success] call to method IsFalse | false |
|
||||
| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | true |
|
||||
| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | false |
|
||||
| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | false |
|
||||
@@ -567,33 +866,33 @@ conditionBlock
|
||||
| Switch.cs:50:13:50:39 | case ...: | Switch.cs:50:30:50:30 | access to parameter o | true |
|
||||
| Switch.cs:50:13:50:39 | case ...: | Switch.cs:51:17:51:22 | break; | true |
|
||||
| Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:51:17:51:22 | break; | true |
|
||||
| Switch.cs:66:10:66:11 | enter M6 | Switch.cs:73:15:73:20 | break; | true |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:82:22:82:25 | true | true |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:83:13:83:20 | case ...: | false |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:84:15:85:22 | if (...) ... | false |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:85:17:85:22 | break; | false |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:86:22:86:25 | true | false |
|
||||
| Switch.cs:66:10:66:11 | enter M6 | Switch.cs:73:17:73:22 | break; | true |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:82:24:82:27 | true | true |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:83:13:83:19 | case ...: | false |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:84:17:85:26 | if (...) ... | false |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:85:21:85:26 | break; | false |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:86:24:86:27 | true | false |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:88:16:88:20 | false | false |
|
||||
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:84:15:85:22 | if (...) ... | true |
|
||||
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:85:17:85:22 | break; | true |
|
||||
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:86:22:86:25 | true | true |
|
||||
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:85:17:85:22 | break; | true |
|
||||
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:86:22:86:25 | true | false |
|
||||
| Switch.cs:91:10:91:11 | enter M8 | Switch.cs:96:22:96:25 | true | true |
|
||||
| Switch.cs:83:13:83:19 | case ...: | Switch.cs:84:17:85:26 | if (...) ... | true |
|
||||
| Switch.cs:83:13:83:19 | case ...: | Switch.cs:85:21:85:26 | break; | true |
|
||||
| Switch.cs:83:13:83:19 | case ...: | Switch.cs:86:24:86:27 | true | true |
|
||||
| Switch.cs:84:17:85:26 | if (...) ... | Switch.cs:85:21:85:26 | break; | true |
|
||||
| Switch.cs:84:17:85:26 | if (...) ... | Switch.cs:86:24:86:27 | true | false |
|
||||
| Switch.cs:91:10:91:11 | enter M8 | Switch.cs:96:24:96:27 | true | true |
|
||||
| Switch.cs:91:10:91:11 | enter M8 | Switch.cs:98:16:98:20 | false | false |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:103:19:103:25 | access to property Length | false |
|
||||
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:29:105:29 | 0 | true |
|
||||
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:106:13:106:20 | case ...: | false |
|
||||
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:106:29:106:29 | 1 | false |
|
||||
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:108:17:108:17 | 1 | false |
|
||||
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:29:106:29 | 1 | true |
|
||||
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:108:17:108:17 | 1 | false |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:105:28:105:28 | 0 | true |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:106:13:106:19 | case ...: | false |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:106:28:106:28 | 1 | false |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:108:17:108:17 | 1 | false |
|
||||
| Switch.cs:106:13:106:19 | case ...: | Switch.cs:106:28:106:28 | 1 | true |
|
||||
| Switch.cs:106:13:106:19 | case ...: | Switch.cs:108:17:108:17 | 1 | false |
|
||||
| Switch.cs:113:9:113:11 | enter M10 | Switch.cs:117:25:117:25 | access to parameter s | true |
|
||||
| Switch.cs:113:9:113:11 | enter M10 | Switch.cs:117:43:117:43 | 1 | true |
|
||||
| Switch.cs:117:25:117:25 | access to parameter s | Switch.cs:117:43:117:43 | 1 | true |
|
||||
| Switch.cs:118:13:118:33 | case ...: | Switch.cs:118:25:118:25 | access to parameter s | true |
|
||||
| Switch.cs:118:13:118:33 | case ...: | Switch.cs:118:42:118:42 | 2 | true |
|
||||
| Switch.cs:118:25:118:25 | access to parameter s | Switch.cs:118:42:118:42 | 2 | true |
|
||||
| Switch.cs:113:9:113:11 | enter M10 | Switch.cs:117:44:117:44 | 1 | true |
|
||||
| Switch.cs:117:25:117:25 | access to parameter s | Switch.cs:117:44:117:44 | 1 | true |
|
||||
| Switch.cs:118:13:118:34 | case ...: | Switch.cs:118:25:118:25 | access to parameter s | true |
|
||||
| Switch.cs:118:13:118:34 | case ...: | Switch.cs:118:43:118:43 | 2 | true |
|
||||
| Switch.cs:118:25:118:25 | access to parameter s | Switch.cs:118:43:118:43 | 2 | true |
|
||||
| Switch.cs:123:10:123:12 | enter M11 | Switch.cs:125:34:125:34 | access to local variable b | true |
|
||||
| Switch.cs:123:10:123:12 | enter M11 | Switch.cs:125:37:125:46 | ... => ... | false |
|
||||
| Switch.cs:123:10:123:12 | enter M11 | Switch.cs:126:13:126:19 | return ...; | true |
|
||||
@@ -614,6 +913,12 @@ conditionBlock
|
||||
| Switch.cs:144:9:144:11 | enter M14 | Switch.cs:150:28:150:28 | 2 | false |
|
||||
| Switch.cs:150:13:150:19 | case ...: | Switch.cs:149:13:149:20 | default: | false |
|
||||
| Switch.cs:150:13:150:19 | case ...: | Switch.cs:150:28:150:28 | 2 | true |
|
||||
| Switch.cs:154:10:154:12 | enter M15 | Switch.cs:156:36:156:38 | "a" | true |
|
||||
| Switch.cs:154:10:154:12 | enter M15 | Switch.cs:156:41:156:52 | ... => ... | false |
|
||||
| Switch.cs:154:10:154:12 | enter M15 | Switch.cs:156:50:156:52 | "b" | false |
|
||||
| Switch.cs:156:13:156:54 | String s = ... | Switch.cs:158:13:158:49 | ...; | true |
|
||||
| Switch.cs:156:13:156:54 | String s = ... | Switch.cs:160:13:160:49 | ...; | false |
|
||||
| Switch.cs:156:41:156:52 | ... => ... | Switch.cs:156:50:156:52 | "b" | true |
|
||||
| TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:7:25:7:25 | ; | true |
|
||||
| VarDecls.cs:19:7:19:8 | enter M3 | VarDecls.cs:25:24:25:24 | access to local variable x | true |
|
||||
| VarDecls.cs:19:7:19:8 | enter M3 | VarDecls.cs:25:28:25:28 | access to local variable y | false |
|
||||
@@ -792,6 +1097,116 @@ conditionBlock
|
||||
| cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:268:9:276:9 | try {...} ... | false |
|
||||
| cflow.cs:298:10:298:10 | enter M | cflow.cs:300:56:300:56 | access to parameter s | false |
|
||||
conditionFlow
|
||||
| Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:24:9:27 | null | true |
|
||||
| Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:31:9:32 | "" | false |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | false |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | true |
|
||||
| Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:24:16:27 | null | true |
|
||||
| Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:31:16:32 | "" | false |
|
||||
| Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:24:23:27 | null | true |
|
||||
| Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:31:23:32 | "" | false |
|
||||
| Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:24:30:27 | null | true |
|
||||
| Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:31:30:32 | "" | false |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | true |
|
||||
| Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:24:37:27 | null | true |
|
||||
| Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:31:37:32 | "" | false |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | true |
|
||||
| Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:24:44:27 | null | true |
|
||||
| Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:31:44:32 | "" | false |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | false |
|
||||
| Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:24:51:27 | null | true |
|
||||
| Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:31:51:32 | "" | false |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | false |
|
||||
| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:24:58:27 | [b (line 56): true] null | true |
|
||||
| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:31:58:32 | [b (line 56): false] "" | false |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | true |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | true |
|
||||
| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | true |
|
||||
| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:24:65:27 | [b (line 63): true] null | true |
|
||||
| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:31:65:32 | [b (line 63): false] "" | false |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | false |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | false |
|
||||
| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | false |
|
||||
| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:24:72:27 | [b (line 70): true] null | true |
|
||||
| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:31:72:32 | [b (line 70): false] "" | false |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | true |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | true |
|
||||
| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | false |
|
||||
| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | true |
|
||||
| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:24:79:27 | [b (line 77): true] null | true |
|
||||
| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:31:79:32 | [b (line 77): false] "" | false |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | false |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | false |
|
||||
| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | false |
|
||||
| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:24:86:27 | [b (line 84): true] null | true |
|
||||
| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:31:86:32 | [b (line 84): false] "" | false |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | false |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | true |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | false |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | true |
|
||||
| Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | Assert.cs:90:24:90:25 | [b (line 84): false] "" | false |
|
||||
| Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | Assert.cs:90:17:90:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | Assert.cs:94:24:94:25 | [b (line 84): false] "" | false |
|
||||
| Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | Assert.cs:94:17:94:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | Assert.cs:98:24:98:25 | [b (line 84): false] "" | false |
|
||||
| Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | Assert.cs:98:17:98:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | Assert.cs:102:24:102:25 | [b (line 84): false] "" | false |
|
||||
| Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | Assert.cs:102:17:102:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false |
|
||||
| Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | Assert.cs:106:17:106:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false |
|
||||
| Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | Assert.cs:110:17:110:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | false |
|
||||
| Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false |
|
||||
| Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | Assert.cs:114:17:114:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:37:119:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true |
|
||||
| Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false |
|
||||
| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true |
|
||||
| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true |
|
||||
| Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | true |
|
||||
| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true |
|
||||
| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:37:127:38 | [b (line 84): true] !... | false |
|
||||
| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true |
|
||||
| BreakInTry.cs:9:21:9:31 | ... == ... | BreakInTry.cs:7:13:11:13 | foreach (... ... in ...) ... | false |
|
||||
| BreakInTry.cs:9:21:9:31 | ... == ... | BreakInTry.cs:10:21:10:26 | break; | true |
|
||||
| BreakInTry.cs:15:17:15:28 | ... == ... | BreakInTry.cs:3:10:3:11 | exit M1 | false |
|
||||
@@ -869,8 +1284,8 @@ conditionFlow
|
||||
| Conditions.cs:76:17:76:17 | access to local variable b | Conditions.cs:78:13:79:26 | if (...) ... | false |
|
||||
| Conditions.cs:78:17:78:21 | ... > ... | Conditions.cs:74:9:80:9 | foreach (... ... in ...) ... | false |
|
||||
| Conditions.cs:78:17:78:21 | ... > ... | Conditions.cs:79:17:79:26 | ...; | true |
|
||||
| Conditions.cs:81:12:81:12 | access to local variable b | Conditions.cs:82:13:82:16 | ...; | true |
|
||||
| Conditions.cs:81:12:81:12 | access to local variable b | Conditions.cs:83:16:83:16 | access to local variable x | false |
|
||||
| Conditions.cs:81:13:81:13 | access to local variable b | Conditions.cs:82:13:82:16 | ...; | true |
|
||||
| Conditions.cs:81:13:81:13 | access to local variable b | Conditions.cs:83:16:83:16 | access to local variable x | false |
|
||||
| Conditions.cs:92:17:92:17 | access to local variable b | Conditions.cs:93:17:93:20 | ...; | true |
|
||||
| Conditions.cs:92:17:92:17 | access to local variable b | Conditions.cs:94:13:95:26 | if (...) ... | false |
|
||||
| Conditions.cs:94:17:94:21 | ... > ... | Conditions.cs:95:17:95:26 | ...; | true |
|
||||
@@ -885,11 +1300,11 @@ conditionFlow
|
||||
| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | Conditions.cs:110:16:110:16 | access to local variable x | false |
|
||||
| Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | Conditions.cs:109:17:109:24 | ...; | false |
|
||||
| Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | Conditions.cs:110:16:110:16 | access to local variable x | true |
|
||||
| Conditions.cs:116:24:116:38 | ... < ... | Conditions.cs:113:10:113:11 | exit M9 | false |
|
||||
| Conditions.cs:116:24:116:38 | ... < ... | Conditions.cs:117:9:123:9 | {...} | true |
|
||||
| Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:113:10:113:11 | exit M9 | false |
|
||||
| Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:117:9:123:9 | {...} | true |
|
||||
| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | false |
|
||||
| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | true |
|
||||
| Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | Conditions.cs:116:41:116:41 | access to local variable i | false |
|
||||
| Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | Conditions.cs:116:42:116:42 | access to local variable i | false |
|
||||
| Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | Conditions.cs:122:17:122:25 | ...; | true |
|
||||
| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | true |
|
||||
| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true |
|
||||
@@ -904,6 +1319,10 @@ conditionFlow
|
||||
| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true |
|
||||
| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | false |
|
||||
| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true |
|
||||
| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | true |
|
||||
| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | false |
|
||||
| Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | Conditions.cs:149:13:149:49 | ...; | false |
|
||||
| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | Conditions.cs:147:13:147:49 | ...; | true |
|
||||
| ExitMethods.cs:67:13:67:13 | access to parameter b | ExitMethods.cs:65:17:65:26 | exit ErrorMaybe | false |
|
||||
| ExitMethods.cs:67:13:67:13 | access to parameter b | ExitMethods.cs:68:19:68:33 | object creation of type Exception | true |
|
||||
| ExitMethods.cs:73:13:73:13 | access to parameter b | ExitMethods.cs:74:19:74:33 | object creation of type Exception | true |
|
||||
@@ -912,6 +1331,10 @@ conditionFlow
|
||||
| ExitMethods.cs:111:16:111:25 | ... != ... | ExitMethods.cs:111:69:111:75 | "input" | false |
|
||||
| ExitMethods.cs:116:16:116:30 | call to method Contains | ExitMethods.cs:116:34:116:34 | 0 | true |
|
||||
| ExitMethods.cs:116:16:116:30 | call to method Contains | ExitMethods.cs:116:38:116:38 | 1 | false |
|
||||
| ExitMethods.cs:121:23:121:27 | false | ExitMethods.cs:121:9:121:28 | [assertion failure] call to method IsTrue | false |
|
||||
| ExitMethods.cs:131:48:131:48 | access to parameter b | ExitMethods.cs:131:33:131:49 | [assertion failure] call to method IsFalse | true |
|
||||
| ExitMethods.cs:131:48:131:48 | access to parameter b | ExitMethods.cs:131:33:131:49 | [assertion success] call to method IsFalse | false |
|
||||
| ExitMethods.cs:135:21:135:24 | true | ExitMethods.cs:135:9:135:25 | [assertion failure] call to method AssertFalse | true |
|
||||
| Finally.cs:26:48:26:51 | [exception: Exception] true | Finally.cs:27:9:29:9 | {...} | true |
|
||||
| Finally.cs:34:21:34:24 | true | Finally.cs:34:27:34:32 | throw ...; | true |
|
||||
| Finally.cs:61:48:61:51 | [exception: Exception] true | Finally.cs:62:9:64:9 | {...} | true |
|
||||
@@ -1043,15 +1466,17 @@ conditionFlow
|
||||
| Switch.cs:24:48:24:55 | ... != ... | Switch.cs:27:13:27:39 | case ...: | false |
|
||||
| Switch.cs:50:30:50:38 | ... != ... | Switch.cs:44:10:44:11 | exit M4 | false |
|
||||
| Switch.cs:50:30:50:38 | ... != ... | Switch.cs:51:17:51:22 | break; | true |
|
||||
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:85:17:85:22 | break; | true |
|
||||
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:86:22:86:25 | true | false |
|
||||
| Switch.cs:117:25:117:32 | ... == ... | Switch.cs:117:43:117:43 | 1 | true |
|
||||
| Switch.cs:117:25:117:32 | ... == ... | Switch.cs:118:13:118:33 | case ...: | false |
|
||||
| Switch.cs:118:25:118:31 | ... == ... | Switch.cs:118:42:118:42 | 2 | true |
|
||||
| Switch.cs:118:25:118:31 | ... == ... | Switch.cs:120:17:120:17 | 1 | false |
|
||||
| Switch.cs:84:21:84:25 | ... > ... | Switch.cs:85:21:85:26 | break; | true |
|
||||
| Switch.cs:84:21:84:25 | ... > ... | Switch.cs:86:24:86:27 | true | false |
|
||||
| Switch.cs:117:25:117:34 | ... == ... | Switch.cs:117:44:117:44 | 1 | true |
|
||||
| Switch.cs:117:25:117:34 | ... == ... | Switch.cs:118:13:118:34 | case ...: | false |
|
||||
| Switch.cs:118:25:118:33 | ... == ... | Switch.cs:118:43:118:43 | 2 | true |
|
||||
| Switch.cs:118:25:118:33 | ... == ... | Switch.cs:120:17:120:17 | 1 | false |
|
||||
| Switch.cs:125:34:125:34 | access to local variable b | Switch.cs:123:10:123:12 | exit M11 | false |
|
||||
| Switch.cs:125:34:125:34 | access to local variable b | Switch.cs:126:13:126:19 | return ...; | true |
|
||||
| Switch.cs:125:42:125:46 | false | Switch.cs:123:10:123:12 | exit M11 | false |
|
||||
| Switch.cs:157:13:157:13 | access to parameter b | Switch.cs:158:13:158:49 | ...; | true |
|
||||
| Switch.cs:157:13:157:13 | access to parameter b | Switch.cs:160:13:160:49 | ...; | false |
|
||||
| TypeAccesses.cs:7:13:7:22 | ... is ... | TypeAccesses.cs:7:25:7:25 | ; | true |
|
||||
| TypeAccesses.cs:7:13:7:22 | ... is ... | TypeAccesses.cs:8:9:8:28 | ... ...; | false |
|
||||
| VarDecls.cs:25:20:25:20 | access to parameter b | VarDecls.cs:25:24:25:24 | access to local variable x | true |
|
||||
|
||||
@@ -78,7 +78,7 @@ class Conditions
|
||||
if (x > 0)
|
||||
b = false;
|
||||
}
|
||||
if(b)
|
||||
if (b)
|
||||
x++;
|
||||
return x;
|
||||
}
|
||||
@@ -113,7 +113,7 @@ class Conditions
|
||||
void M9(string[] args)
|
||||
{
|
||||
string s = null;
|
||||
for(var i = 0; i < args.Length; i++)
|
||||
for (var i = 0; i < args.Length; i++)
|
||||
{
|
||||
var last = i == args.Length - 1;
|
||||
if (!last)
|
||||
@@ -139,4 +139,13 @@ class Conditions
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void M11(bool b)
|
||||
{
|
||||
var s = b ? "a" : "b";
|
||||
if (b)
|
||||
System.Console.WriteLine($"a = {s}");
|
||||
else
|
||||
System.Console.WriteLine($"b = {s}");
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -293,13 +293,13 @@
|
||||
| ArrayCreation.cs:5:28:5:28 | 0 | ArrayCreation.cs:5:28:5:28 | 0 |
|
||||
| ArrayCreation.cs:5:31:5:31 | 1 | ArrayCreation.cs:5:31:5:31 | 1 |
|
||||
| ArrayCreation.cs:7:19:7:36 | 2 | ArrayCreation.cs:7:19:7:36 | 2 |
|
||||
| ArrayCreation.cs:7:19:7:36 | array creation of type Int32[] | ArrayCreation.cs:7:19:7:36 | array creation of type Int32[] |
|
||||
| ArrayCreation.cs:7:19:7:36 | array creation of type Int32[] | ArrayCreation.cs:7:19:7:36 | 2 |
|
||||
| ArrayCreation.cs:7:29:7:36 | { ..., ... } | ArrayCreation.cs:7:31:7:31 | 0 |
|
||||
| ArrayCreation.cs:7:31:7:31 | 0 | ArrayCreation.cs:7:31:7:31 | 0 |
|
||||
| ArrayCreation.cs:7:34:7:34 | 1 | ArrayCreation.cs:7:34:7:34 | 1 |
|
||||
| ArrayCreation.cs:9:20:9:52 | 2 | ArrayCreation.cs:9:20:9:52 | 2 |
|
||||
| ArrayCreation.cs:9:20:9:52 | 2 | ArrayCreation.cs:9:20:9:52 | 2 |
|
||||
| ArrayCreation.cs:9:20:9:52 | array creation of type Int32[,] | ArrayCreation.cs:9:20:9:52 | array creation of type Int32[,] |
|
||||
| ArrayCreation.cs:9:20:9:52 | array creation of type Int32[,] | ArrayCreation.cs:9:20:9:52 | 2 |
|
||||
| ArrayCreation.cs:9:31:9:52 | { ..., ... } | ArrayCreation.cs:9:35:9:35 | 0 |
|
||||
| ArrayCreation.cs:9:33:9:40 | { ..., ... } | ArrayCreation.cs:9:35:9:35 | 0 |
|
||||
| ArrayCreation.cs:9:35:9:35 | 0 | ArrayCreation.cs:9:35:9:35 | 0 |
|
||||
@@ -307,6 +307,358 @@
|
||||
| ArrayCreation.cs:9:43:9:50 | { ..., ... } | ArrayCreation.cs:9:45:9:45 | 2 |
|
||||
| ArrayCreation.cs:9:45:9:45 | 2 | ArrayCreation.cs:9:45:9:45 | 2 |
|
||||
| ArrayCreation.cs:9:48:9:48 | 3 | ArrayCreation.cs:9:48:9:48 | 3 |
|
||||
| Assert.cs:8:5:12:5 | {...} | Assert.cs:8:5:12:5 | {...} |
|
||||
| Assert.cs:9:9:9:33 | ... ...; | Assert.cs:9:9:9:33 | ... ...; |
|
||||
| Assert.cs:9:16:9:32 | String s = ... | Assert.cs:9:20:9:32 | ... ? ... : ... |
|
||||
| Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:20:9:20 | access to parameter b |
|
||||
| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:20:9:32 | ... ? ... : ... |
|
||||
| Assert.cs:9:24:9:27 | null | Assert.cs:9:24:9:27 | null |
|
||||
| Assert.cs:9:31:9:32 | "" | Assert.cs:9:31:9:32 | "" |
|
||||
| Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:10:22:10:22 | access to local variable s |
|
||||
| Assert.cs:10:9:10:32 | ...; | Assert.cs:10:9:10:32 | ...; |
|
||||
| Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:22 | access to local variable s |
|
||||
| Assert.cs:10:27:10:30 | null | Assert.cs:10:27:10:30 | null |
|
||||
| Assert.cs:11:9:11:35 | call to method WriteLine | Assert.cs:11:27:11:27 | access to local variable s |
|
||||
| Assert.cs:11:9:11:36 | ...; | Assert.cs:11:9:11:36 | ...; |
|
||||
| Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:11:27:11:27 | access to local variable s |
|
||||
| Assert.cs:11:27:11:34 | access to property Length | Assert.cs:11:27:11:27 | access to local variable s |
|
||||
| Assert.cs:15:5:19:5 | {...} | Assert.cs:15:5:19:5 | {...} |
|
||||
| Assert.cs:16:9:16:33 | ... ...; | Assert.cs:16:9:16:33 | ... ...; |
|
||||
| Assert.cs:16:16:16:32 | String s = ... | Assert.cs:16:20:16:32 | ... ? ... : ... |
|
||||
| Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:20:16:20 | access to parameter b |
|
||||
| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:20:16:32 | ... ? ... : ... |
|
||||
| Assert.cs:16:24:16:27 | null | Assert.cs:16:24:16:27 | null |
|
||||
| Assert.cs:16:31:16:32 | "" | Assert.cs:16:31:16:32 | "" |
|
||||
| Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:17:23:17:23 | access to local variable s |
|
||||
| Assert.cs:17:9:17:25 | ...; | Assert.cs:17:9:17:25 | ...; |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s |
|
||||
| Assert.cs:18:9:18:35 | call to method WriteLine | Assert.cs:18:27:18:27 | access to local variable s |
|
||||
| Assert.cs:18:9:18:36 | ...; | Assert.cs:18:9:18:36 | ...; |
|
||||
| Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:18:27:18:27 | access to local variable s |
|
||||
| Assert.cs:18:27:18:34 | access to property Length | Assert.cs:18:27:18:27 | access to local variable s |
|
||||
| Assert.cs:22:5:26:5 | {...} | Assert.cs:22:5:26:5 | {...} |
|
||||
| Assert.cs:23:9:23:33 | ... ...; | Assert.cs:23:9:23:33 | ... ...; |
|
||||
| Assert.cs:23:16:23:32 | String s = ... | Assert.cs:23:20:23:32 | ... ? ... : ... |
|
||||
| Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:20:23:20 | access to parameter b |
|
||||
| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:20:23:32 | ... ? ... : ... |
|
||||
| Assert.cs:23:24:23:27 | null | Assert.cs:23:24:23:27 | null |
|
||||
| Assert.cs:23:31:23:32 | "" | Assert.cs:23:31:23:32 | "" |
|
||||
| Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:24:26:24:26 | access to local variable s |
|
||||
| Assert.cs:24:9:24:28 | ...; | Assert.cs:24:9:24:28 | ...; |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s |
|
||||
| Assert.cs:25:9:25:35 | call to method WriteLine | Assert.cs:25:27:25:27 | access to local variable s |
|
||||
| Assert.cs:25:9:25:36 | ...; | Assert.cs:25:9:25:36 | ...; |
|
||||
| Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:25:27:25:27 | access to local variable s |
|
||||
| Assert.cs:25:27:25:34 | access to property Length | Assert.cs:25:27:25:27 | access to local variable s |
|
||||
| Assert.cs:29:5:33:5 | {...} | Assert.cs:29:5:33:5 | {...} |
|
||||
| Assert.cs:30:9:30:33 | ... ...; | Assert.cs:30:9:30:33 | ... ...; |
|
||||
| Assert.cs:30:16:30:32 | String s = ... | Assert.cs:30:20:30:32 | ... ? ... : ... |
|
||||
| Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:20:30:20 | access to parameter b |
|
||||
| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:20:30:32 | ... ? ... : ... |
|
||||
| Assert.cs:30:24:30:27 | null | Assert.cs:30:24:30:27 | null |
|
||||
| Assert.cs:30:31:30:32 | "" | Assert.cs:30:31:30:32 | "" |
|
||||
| Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:31:23:31:23 | access to local variable s |
|
||||
| Assert.cs:31:9:31:33 | ...; | Assert.cs:31:9:31:33 | ...; |
|
||||
| Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:23:31:23 | access to local variable s |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:23:31:23 | access to local variable s |
|
||||
| Assert.cs:31:28:31:31 | null | Assert.cs:31:28:31:31 | null |
|
||||
| Assert.cs:32:9:32:35 | call to method WriteLine | Assert.cs:32:27:32:27 | access to local variable s |
|
||||
| Assert.cs:32:9:32:36 | ...; | Assert.cs:32:9:32:36 | ...; |
|
||||
| Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:32:27:32:27 | access to local variable s |
|
||||
| Assert.cs:32:27:32:34 | access to property Length | Assert.cs:32:27:32:27 | access to local variable s |
|
||||
| Assert.cs:36:5:40:5 | {...} | Assert.cs:36:5:40:5 | {...} |
|
||||
| Assert.cs:37:9:37:33 | ... ...; | Assert.cs:37:9:37:33 | ... ...; |
|
||||
| Assert.cs:37:16:37:32 | String s = ... | Assert.cs:37:20:37:32 | ... ? ... : ... |
|
||||
| Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:20:37:20 | access to parameter b |
|
||||
| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:20:37:32 | ... ? ... : ... |
|
||||
| Assert.cs:37:24:37:27 | null | Assert.cs:37:24:37:27 | null |
|
||||
| Assert.cs:37:31:37:32 | "" | Assert.cs:37:31:37:32 | "" |
|
||||
| Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:38:23:38:23 | access to local variable s |
|
||||
| Assert.cs:38:9:38:33 | ...; | Assert.cs:38:9:38:33 | ...; |
|
||||
| Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:23 | access to local variable s |
|
||||
| Assert.cs:38:28:38:31 | null | Assert.cs:38:28:38:31 | null |
|
||||
| Assert.cs:39:9:39:35 | call to method WriteLine | Assert.cs:39:27:39:27 | access to local variable s |
|
||||
| Assert.cs:39:9:39:36 | ...; | Assert.cs:39:9:39:36 | ...; |
|
||||
| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:39:27:39:27 | access to local variable s |
|
||||
| Assert.cs:39:27:39:34 | access to property Length | Assert.cs:39:27:39:27 | access to local variable s |
|
||||
| Assert.cs:43:5:47:5 | {...} | Assert.cs:43:5:47:5 | {...} |
|
||||
| Assert.cs:44:9:44:33 | ... ...; | Assert.cs:44:9:44:33 | ... ...; |
|
||||
| Assert.cs:44:16:44:32 | String s = ... | Assert.cs:44:20:44:32 | ... ? ... : ... |
|
||||
| Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:20:44:20 | access to parameter b |
|
||||
| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:20:44:32 | ... ? ... : ... |
|
||||
| Assert.cs:44:24:44:27 | null | Assert.cs:44:24:44:27 | null |
|
||||
| Assert.cs:44:31:44:32 | "" | Assert.cs:44:31:44:32 | "" |
|
||||
| Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:45:24:45:24 | access to local variable s |
|
||||
| Assert.cs:45:9:45:34 | ...; | Assert.cs:45:9:45:34 | ...; |
|
||||
| Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:24:45:24 | access to local variable s |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:24 | access to local variable s |
|
||||
| Assert.cs:45:29:45:32 | null | Assert.cs:45:29:45:32 | null |
|
||||
| Assert.cs:46:9:46:35 | call to method WriteLine | Assert.cs:46:27:46:27 | access to local variable s |
|
||||
| Assert.cs:46:9:46:36 | ...; | Assert.cs:46:9:46:36 | ...; |
|
||||
| Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:46:27:46:27 | access to local variable s |
|
||||
| Assert.cs:46:27:46:34 | access to property Length | Assert.cs:46:27:46:27 | access to local variable s |
|
||||
| Assert.cs:50:5:54:5 | {...} | Assert.cs:50:5:54:5 | {...} |
|
||||
| Assert.cs:51:9:51:33 | ... ...; | Assert.cs:51:9:51:33 | ... ...; |
|
||||
| Assert.cs:51:16:51:32 | String s = ... | Assert.cs:51:20:51:32 | ... ? ... : ... |
|
||||
| Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:20:51:20 | access to parameter b |
|
||||
| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:20:51:32 | ... ? ... : ... |
|
||||
| Assert.cs:51:24:51:27 | null | Assert.cs:51:24:51:27 | null |
|
||||
| Assert.cs:51:31:51:32 | "" | Assert.cs:51:31:51:32 | "" |
|
||||
| Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:52:24:52:24 | access to local variable s |
|
||||
| Assert.cs:52:9:52:34 | ...; | Assert.cs:52:9:52:34 | ...; |
|
||||
| Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:24 | access to local variable s |
|
||||
| Assert.cs:52:29:52:32 | null | Assert.cs:52:29:52:32 | null |
|
||||
| Assert.cs:53:9:53:35 | call to method WriteLine | Assert.cs:53:27:53:27 | access to local variable s |
|
||||
| Assert.cs:53:9:53:36 | ...; | Assert.cs:53:9:53:36 | ...; |
|
||||
| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:53:27:53:27 | access to local variable s |
|
||||
| Assert.cs:53:27:53:34 | access to property Length | Assert.cs:53:27:53:27 | access to local variable s |
|
||||
| Assert.cs:57:5:61:5 | {...} | Assert.cs:57:5:61:5 | {...} |
|
||||
| Assert.cs:58:9:58:33 | ... ...; | Assert.cs:58:9:58:33 | ... ...; |
|
||||
| Assert.cs:58:16:58:32 | String s = ... | Assert.cs:58:20:58:32 | ... ? ... : ... |
|
||||
| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b |
|
||||
| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:32 | ... ? ... : ... |
|
||||
| Assert.cs:58:24:58:27 | null | Assert.cs:58:24:58:27 | null |
|
||||
| Assert.cs:58:31:58:32 | "" | Assert.cs:58:31:58:32 | "" |
|
||||
| Assert.cs:59:9:59:37 | call to method IsTrue | Assert.cs:59:23:59:36 | ... && ... |
|
||||
| Assert.cs:59:9:59:38 | ...; | Assert.cs:59:9:59:38 | ...; |
|
||||
| Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s |
|
||||
| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:23 | access to local variable s |
|
||||
| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:36 | ... && ... |
|
||||
| Assert.cs:59:28:59:31 | null | Assert.cs:59:28:59:31 | null |
|
||||
| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:36:59:36 | access to parameter b |
|
||||
| Assert.cs:60:9:60:35 | call to method WriteLine | Assert.cs:60:27:60:27 | access to local variable s |
|
||||
| Assert.cs:60:9:60:36 | ...; | Assert.cs:60:9:60:36 | ...; |
|
||||
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:60:27:60:27 | access to local variable s |
|
||||
| Assert.cs:60:27:60:34 | access to property Length | Assert.cs:60:27:60:27 | access to local variable s |
|
||||
| Assert.cs:64:5:68:5 | {...} | Assert.cs:64:5:68:5 | {...} |
|
||||
| Assert.cs:65:9:65:33 | ... ...; | Assert.cs:65:9:65:33 | ... ...; |
|
||||
| Assert.cs:65:16:65:32 | String s = ... | Assert.cs:65:20:65:32 | ... ? ... : ... |
|
||||
| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b |
|
||||
| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:32 | ... ? ... : ... |
|
||||
| Assert.cs:65:24:65:27 | null | Assert.cs:65:24:65:27 | null |
|
||||
| Assert.cs:65:31:65:32 | "" | Assert.cs:65:31:65:32 | "" |
|
||||
| Assert.cs:66:9:66:38 | call to method IsFalse | Assert.cs:66:24:66:37 | ... \|\| ... |
|
||||
| Assert.cs:66:9:66:39 | ...; | Assert.cs:66:9:66:39 | ...; |
|
||||
| Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s |
|
||||
| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:24 | access to local variable s |
|
||||
| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:37 | ... \|\| ... |
|
||||
| Assert.cs:66:29:66:32 | null | Assert.cs:66:29:66:32 | null |
|
||||
| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:37:66:37 | access to parameter b |
|
||||
| Assert.cs:67:9:67:35 | call to method WriteLine | Assert.cs:67:27:67:27 | access to local variable s |
|
||||
| Assert.cs:67:9:67:36 | ...; | Assert.cs:67:9:67:36 | ...; |
|
||||
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:67:27:67:27 | access to local variable s |
|
||||
| Assert.cs:67:27:67:34 | access to property Length | Assert.cs:67:27:67:27 | access to local variable s |
|
||||
| Assert.cs:71:5:75:5 | {...} | Assert.cs:71:5:75:5 | {...} |
|
||||
| Assert.cs:72:9:72:33 | ... ...; | Assert.cs:72:9:72:33 | ... ...; |
|
||||
| Assert.cs:72:16:72:32 | String s = ... | Assert.cs:72:20:72:32 | ... ? ... : ... |
|
||||
| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b |
|
||||
| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:32 | ... ? ... : ... |
|
||||
| Assert.cs:72:24:72:27 | null | Assert.cs:72:24:72:27 | null |
|
||||
| Assert.cs:72:31:72:32 | "" | Assert.cs:72:31:72:32 | "" |
|
||||
| Assert.cs:73:9:73:37 | call to method IsTrue | Assert.cs:73:23:73:36 | ... && ... |
|
||||
| Assert.cs:73:9:73:38 | ...; | Assert.cs:73:9:73:38 | ...; |
|
||||
| Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s |
|
||||
| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:23 | access to local variable s |
|
||||
| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:36 | ... && ... |
|
||||
| Assert.cs:73:28:73:31 | null | Assert.cs:73:28:73:31 | null |
|
||||
| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:36:73:36 | access to parameter b |
|
||||
| Assert.cs:74:9:74:35 | call to method WriteLine | Assert.cs:74:27:74:27 | access to local variable s |
|
||||
| Assert.cs:74:9:74:36 | ...; | Assert.cs:74:9:74:36 | ...; |
|
||||
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:74:27:74:27 | access to local variable s |
|
||||
| Assert.cs:74:27:74:34 | access to property Length | Assert.cs:74:27:74:27 | access to local variable s |
|
||||
| Assert.cs:78:5:82:5 | {...} | Assert.cs:78:5:82:5 | {...} |
|
||||
| Assert.cs:79:9:79:33 | ... ...; | Assert.cs:79:9:79:33 | ... ...; |
|
||||
| Assert.cs:79:16:79:32 | String s = ... | Assert.cs:79:20:79:32 | ... ? ... : ... |
|
||||
| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b |
|
||||
| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:32 | ... ? ... : ... |
|
||||
| Assert.cs:79:24:79:27 | null | Assert.cs:79:24:79:27 | null |
|
||||
| Assert.cs:79:31:79:32 | "" | Assert.cs:79:31:79:32 | "" |
|
||||
| Assert.cs:80:9:80:38 | call to method IsFalse | Assert.cs:80:24:80:37 | ... \|\| ... |
|
||||
| Assert.cs:80:9:80:39 | ...; | Assert.cs:80:9:80:39 | ...; |
|
||||
| Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s |
|
||||
| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:24 | access to local variable s |
|
||||
| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:37 | ... \|\| ... |
|
||||
| Assert.cs:80:29:80:32 | null | Assert.cs:80:29:80:32 | null |
|
||||
| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:37:80:37 | access to parameter b |
|
||||
| Assert.cs:81:9:81:35 | call to method WriteLine | Assert.cs:81:27:81:27 | access to local variable s |
|
||||
| Assert.cs:81:9:81:36 | ...; | Assert.cs:81:9:81:36 | ...; |
|
||||
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:81:27:81:27 | access to local variable s |
|
||||
| Assert.cs:81:27:81:34 | access to property Length | Assert.cs:81:27:81:27 | access to local variable s |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:85:5:129:5 | {...} |
|
||||
| Assert.cs:86:9:86:33 | ... ...; | Assert.cs:86:9:86:33 | ... ...; |
|
||||
| Assert.cs:86:16:86:32 | String s = ... | Assert.cs:86:20:86:32 | ... ? ... : ... |
|
||||
| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:20:86:20 | access to parameter b |
|
||||
| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... |
|
||||
| Assert.cs:86:24:86:27 | null | Assert.cs:86:24:86:27 | null |
|
||||
| Assert.cs:86:31:86:32 | "" | Assert.cs:86:31:86:32 | "" |
|
||||
| Assert.cs:87:9:87:31 | call to method Assert | Assert.cs:87:22:87:22 | access to local variable s |
|
||||
| Assert.cs:87:9:87:32 | ...; | Assert.cs:87:9:87:32 | ...; |
|
||||
| Assert.cs:87:22:87:22 | access to local variable s | Assert.cs:87:22:87:22 | access to local variable s |
|
||||
| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:87:22:87:22 | access to local variable s |
|
||||
| Assert.cs:87:27:87:30 | null | Assert.cs:87:27:87:30 | null |
|
||||
| Assert.cs:88:9:88:35 | call to method WriteLine | Assert.cs:88:27:88:27 | access to local variable s |
|
||||
| Assert.cs:88:9:88:36 | ...; | Assert.cs:88:9:88:36 | ...; |
|
||||
| Assert.cs:88:27:88:27 | access to local variable s | Assert.cs:88:27:88:27 | access to local variable s |
|
||||
| Assert.cs:88:27:88:34 | access to property Length | Assert.cs:88:27:88:27 | access to local variable s |
|
||||
| Assert.cs:90:9:90:25 | ... = ... | Assert.cs:90:13:90:25 | ... ? ... : ... |
|
||||
| Assert.cs:90:9:90:26 | ...; | Assert.cs:90:9:90:26 | ...; |
|
||||
| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:13:90:13 | access to parameter b |
|
||||
| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... |
|
||||
| Assert.cs:90:17:90:20 | null | Assert.cs:90:17:90:20 | null |
|
||||
| Assert.cs:90:24:90:25 | "" | Assert.cs:90:24:90:25 | "" |
|
||||
| Assert.cs:91:9:91:24 | call to method IsNull | Assert.cs:91:23:91:23 | access to local variable s |
|
||||
| Assert.cs:91:9:91:25 | ...; | Assert.cs:91:9:91:25 | ...; |
|
||||
| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:91:23:91:23 | access to local variable s |
|
||||
| Assert.cs:92:9:92:35 | call to method WriteLine | Assert.cs:92:27:92:27 | access to local variable s |
|
||||
| Assert.cs:92:9:92:36 | ...; | Assert.cs:92:9:92:36 | ...; |
|
||||
| Assert.cs:92:27:92:27 | access to local variable s | Assert.cs:92:27:92:27 | access to local variable s |
|
||||
| Assert.cs:92:27:92:34 | access to property Length | Assert.cs:92:27:92:27 | access to local variable s |
|
||||
| Assert.cs:94:9:94:25 | ... = ... | Assert.cs:94:13:94:25 | ... ? ... : ... |
|
||||
| Assert.cs:94:9:94:26 | ...; | Assert.cs:94:9:94:26 | ...; |
|
||||
| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:13:94:13 | access to parameter b |
|
||||
| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... |
|
||||
| Assert.cs:94:17:94:20 | null | Assert.cs:94:17:94:20 | null |
|
||||
| Assert.cs:94:24:94:25 | "" | Assert.cs:94:24:94:25 | "" |
|
||||
| Assert.cs:95:9:95:27 | call to method IsNotNull | Assert.cs:95:26:95:26 | access to local variable s |
|
||||
| Assert.cs:95:9:95:28 | ...; | Assert.cs:95:9:95:28 | ...; |
|
||||
| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:95:26:95:26 | access to local variable s |
|
||||
| Assert.cs:96:9:96:35 | call to method WriteLine | Assert.cs:96:27:96:27 | access to local variable s |
|
||||
| Assert.cs:96:9:96:36 | ...; | Assert.cs:96:9:96:36 | ...; |
|
||||
| Assert.cs:96:27:96:27 | access to local variable s | Assert.cs:96:27:96:27 | access to local variable s |
|
||||
| Assert.cs:96:27:96:34 | access to property Length | Assert.cs:96:27:96:27 | access to local variable s |
|
||||
| Assert.cs:98:9:98:25 | ... = ... | Assert.cs:98:13:98:25 | ... ? ... : ... |
|
||||
| Assert.cs:98:9:98:26 | ...; | Assert.cs:98:9:98:26 | ...; |
|
||||
| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:13:98:13 | access to parameter b |
|
||||
| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... |
|
||||
| Assert.cs:98:17:98:20 | null | Assert.cs:98:17:98:20 | null |
|
||||
| Assert.cs:98:24:98:25 | "" | Assert.cs:98:24:98:25 | "" |
|
||||
| Assert.cs:99:9:99:32 | call to method IsTrue | Assert.cs:99:23:99:23 | access to local variable s |
|
||||
| Assert.cs:99:9:99:33 | ...; | Assert.cs:99:9:99:33 | ...; |
|
||||
| Assert.cs:99:23:99:23 | access to local variable s | Assert.cs:99:23:99:23 | access to local variable s |
|
||||
| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:99:23:99:23 | access to local variable s |
|
||||
| Assert.cs:99:28:99:31 | null | Assert.cs:99:28:99:31 | null |
|
||||
| Assert.cs:100:9:100:35 | call to method WriteLine | Assert.cs:100:27:100:27 | access to local variable s |
|
||||
| Assert.cs:100:9:100:36 | ...; | Assert.cs:100:9:100:36 | ...; |
|
||||
| Assert.cs:100:27:100:27 | access to local variable s | Assert.cs:100:27:100:27 | access to local variable s |
|
||||
| Assert.cs:100:27:100:34 | access to property Length | Assert.cs:100:27:100:27 | access to local variable s |
|
||||
| Assert.cs:102:9:102:25 | ... = ... | Assert.cs:102:13:102:25 | ... ? ... : ... |
|
||||
| Assert.cs:102:9:102:26 | ...; | Assert.cs:102:9:102:26 | ...; |
|
||||
| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:13:102:13 | access to parameter b |
|
||||
| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... |
|
||||
| Assert.cs:102:17:102:20 | null | Assert.cs:102:17:102:20 | null |
|
||||
| Assert.cs:102:24:102:25 | "" | Assert.cs:102:24:102:25 | "" |
|
||||
| Assert.cs:103:9:103:32 | call to method IsTrue | Assert.cs:103:23:103:23 | access to local variable s |
|
||||
| Assert.cs:103:9:103:33 | ...; | Assert.cs:103:9:103:33 | ...; |
|
||||
| Assert.cs:103:23:103:23 | access to local variable s | Assert.cs:103:23:103:23 | access to local variable s |
|
||||
| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:103:23:103:23 | access to local variable s |
|
||||
| Assert.cs:103:28:103:31 | null | Assert.cs:103:28:103:31 | null |
|
||||
| Assert.cs:104:9:104:35 | call to method WriteLine | Assert.cs:104:27:104:27 | access to local variable s |
|
||||
| Assert.cs:104:9:104:36 | ...; | Assert.cs:104:9:104:36 | ...; |
|
||||
| Assert.cs:104:27:104:27 | access to local variable s | Assert.cs:104:27:104:27 | access to local variable s |
|
||||
| Assert.cs:104:27:104:34 | access to property Length | Assert.cs:104:27:104:27 | access to local variable s |
|
||||
| Assert.cs:106:9:106:25 | ... = ... | Assert.cs:106:13:106:25 | ... ? ... : ... |
|
||||
| Assert.cs:106:9:106:26 | ...; | Assert.cs:106:9:106:26 | ...; |
|
||||
| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:13:106:13 | access to parameter b |
|
||||
| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... |
|
||||
| Assert.cs:106:17:106:20 | null | Assert.cs:106:17:106:20 | null |
|
||||
| Assert.cs:106:24:106:25 | "" | Assert.cs:106:24:106:25 | "" |
|
||||
| Assert.cs:107:9:107:33 | call to method IsFalse | Assert.cs:107:24:107:24 | access to local variable s |
|
||||
| Assert.cs:107:9:107:34 | ...; | Assert.cs:107:9:107:34 | ...; |
|
||||
| Assert.cs:107:24:107:24 | access to local variable s | Assert.cs:107:24:107:24 | access to local variable s |
|
||||
| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:107:24:107:24 | access to local variable s |
|
||||
| Assert.cs:107:29:107:32 | null | Assert.cs:107:29:107:32 | null |
|
||||
| Assert.cs:108:9:108:35 | call to method WriteLine | Assert.cs:108:27:108:27 | access to local variable s |
|
||||
| Assert.cs:108:9:108:36 | ...; | Assert.cs:108:9:108:36 | ...; |
|
||||
| Assert.cs:108:27:108:27 | access to local variable s | Assert.cs:108:27:108:27 | access to local variable s |
|
||||
| Assert.cs:108:27:108:34 | access to property Length | Assert.cs:108:27:108:27 | access to local variable s |
|
||||
| Assert.cs:110:9:110:25 | ... = ... | Assert.cs:110:13:110:25 | ... ? ... : ... |
|
||||
| Assert.cs:110:9:110:26 | ...; | Assert.cs:110:9:110:26 | ...; |
|
||||
| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:13:110:13 | access to parameter b |
|
||||
| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... |
|
||||
| Assert.cs:110:17:110:20 | null | Assert.cs:110:17:110:20 | null |
|
||||
| Assert.cs:110:24:110:25 | "" | Assert.cs:110:24:110:25 | "" |
|
||||
| Assert.cs:111:9:111:33 | call to method IsFalse | Assert.cs:111:24:111:24 | access to local variable s |
|
||||
| Assert.cs:111:9:111:34 | ...; | Assert.cs:111:9:111:34 | ...; |
|
||||
| Assert.cs:111:24:111:24 | access to local variable s | Assert.cs:111:24:111:24 | access to local variable s |
|
||||
| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:111:24:111:24 | access to local variable s |
|
||||
| Assert.cs:111:29:111:32 | null | Assert.cs:111:29:111:32 | null |
|
||||
| Assert.cs:112:9:112:35 | call to method WriteLine | Assert.cs:112:27:112:27 | access to local variable s |
|
||||
| Assert.cs:112:9:112:36 | ...; | Assert.cs:112:9:112:36 | ...; |
|
||||
| Assert.cs:112:27:112:27 | access to local variable s | Assert.cs:112:27:112:27 | access to local variable s |
|
||||
| Assert.cs:112:27:112:34 | access to property Length | Assert.cs:112:27:112:27 | access to local variable s |
|
||||
| Assert.cs:114:9:114:25 | ... = ... | Assert.cs:114:13:114:25 | ... ? ... : ... |
|
||||
| Assert.cs:114:9:114:26 | ...; | Assert.cs:114:9:114:26 | ...; |
|
||||
| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:13:114:13 | access to parameter b |
|
||||
| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... |
|
||||
| Assert.cs:114:17:114:20 | null | Assert.cs:114:17:114:20 | null |
|
||||
| Assert.cs:114:24:114:25 | "" | Assert.cs:114:24:114:25 | "" |
|
||||
| Assert.cs:115:9:115:37 | call to method IsTrue | Assert.cs:115:23:115:36 | ... && ... |
|
||||
| Assert.cs:115:9:115:38 | ...; | Assert.cs:115:9:115:38 | ...; |
|
||||
| Assert.cs:115:23:115:23 | access to local variable s | Assert.cs:115:23:115:23 | access to local variable s |
|
||||
| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:23:115:23 | access to local variable s |
|
||||
| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:23:115:36 | ... && ... |
|
||||
| Assert.cs:115:28:115:31 | null | Assert.cs:115:28:115:31 | null |
|
||||
| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:36:115:36 | access to parameter b |
|
||||
| Assert.cs:116:9:116:35 | call to method WriteLine | Assert.cs:116:27:116:27 | access to local variable s |
|
||||
| Assert.cs:116:9:116:36 | ...; | Assert.cs:116:9:116:36 | ...; |
|
||||
| Assert.cs:116:27:116:27 | access to local variable s | Assert.cs:116:27:116:27 | access to local variable s |
|
||||
| Assert.cs:116:27:116:34 | access to property Length | Assert.cs:116:27:116:27 | access to local variable s |
|
||||
| Assert.cs:118:9:118:25 | ... = ... | Assert.cs:118:13:118:25 | ... ? ... : ... |
|
||||
| Assert.cs:118:9:118:26 | ...; | Assert.cs:118:9:118:26 | ...; |
|
||||
| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:13:118:13 | access to parameter b |
|
||||
| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... |
|
||||
| Assert.cs:118:17:118:20 | null | Assert.cs:118:17:118:20 | null |
|
||||
| Assert.cs:118:24:118:25 | "" | Assert.cs:118:24:118:25 | "" |
|
||||
| Assert.cs:119:9:119:39 | call to method IsFalse | Assert.cs:119:24:119:38 | ... \|\| ... |
|
||||
| Assert.cs:119:9:119:40 | ...; | Assert.cs:119:9:119:40 | ...; |
|
||||
| Assert.cs:119:24:119:24 | access to local variable s | Assert.cs:119:24:119:24 | access to local variable s |
|
||||
| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:24:119:24 | access to local variable s |
|
||||
| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:24:119:38 | ... \|\| ... |
|
||||
| Assert.cs:119:29:119:32 | null | Assert.cs:119:29:119:32 | null |
|
||||
| Assert.cs:119:37:119:38 | !... | Assert.cs:119:37:119:38 | !... |
|
||||
| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:38:119:38 | access to parameter b |
|
||||
| Assert.cs:120:9:120:35 | call to method WriteLine | Assert.cs:120:27:120:27 | access to local variable s |
|
||||
| Assert.cs:120:9:120:36 | ...; | Assert.cs:120:9:120:36 | ...; |
|
||||
| Assert.cs:120:27:120:27 | access to local variable s | Assert.cs:120:27:120:27 | access to local variable s |
|
||||
| Assert.cs:120:27:120:34 | access to property Length | Assert.cs:120:27:120:27 | access to local variable s |
|
||||
| Assert.cs:122:9:122:25 | ... = ... | Assert.cs:122:13:122:25 | ... ? ... : ... |
|
||||
| Assert.cs:122:9:122:26 | ...; | Assert.cs:122:9:122:26 | ...; |
|
||||
| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:13:122:13 | access to parameter b |
|
||||
| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... |
|
||||
| Assert.cs:122:17:122:20 | null | Assert.cs:122:17:122:20 | null |
|
||||
| Assert.cs:122:24:122:25 | "" | Assert.cs:122:24:122:25 | "" |
|
||||
| Assert.cs:123:9:123:37 | call to method IsTrue | Assert.cs:123:23:123:36 | ... && ... |
|
||||
| Assert.cs:123:9:123:38 | ...; | Assert.cs:123:9:123:38 | ...; |
|
||||
| Assert.cs:123:23:123:23 | access to local variable s | Assert.cs:123:23:123:23 | access to local variable s |
|
||||
| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:23:123:23 | access to local variable s |
|
||||
| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:23:123:36 | ... && ... |
|
||||
| Assert.cs:123:28:123:31 | null | Assert.cs:123:28:123:31 | null |
|
||||
| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:36:123:36 | access to parameter b |
|
||||
| Assert.cs:124:9:124:35 | call to method WriteLine | Assert.cs:124:27:124:27 | access to local variable s |
|
||||
| Assert.cs:124:9:124:36 | ...; | Assert.cs:124:9:124:36 | ...; |
|
||||
| Assert.cs:124:27:124:27 | access to local variable s | Assert.cs:124:27:124:27 | access to local variable s |
|
||||
| Assert.cs:124:27:124:34 | access to property Length | Assert.cs:124:27:124:27 | access to local variable s |
|
||||
| Assert.cs:126:9:126:25 | ... = ... | Assert.cs:126:13:126:25 | ... ? ... : ... |
|
||||
| Assert.cs:126:9:126:26 | ...; | Assert.cs:126:9:126:26 | ...; |
|
||||
| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:13:126:13 | access to parameter b |
|
||||
| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... |
|
||||
| Assert.cs:126:17:126:20 | null | Assert.cs:126:17:126:20 | null |
|
||||
| Assert.cs:126:24:126:25 | "" | Assert.cs:126:24:126:25 | "" |
|
||||
| Assert.cs:127:9:127:39 | call to method IsFalse | Assert.cs:127:24:127:38 | ... \|\| ... |
|
||||
| Assert.cs:127:9:127:40 | ...; | Assert.cs:127:9:127:40 | ...; |
|
||||
| Assert.cs:127:24:127:24 | access to local variable s | Assert.cs:127:24:127:24 | access to local variable s |
|
||||
| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:24:127:24 | access to local variable s |
|
||||
| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:24:127:38 | ... \|\| ... |
|
||||
| Assert.cs:127:29:127:32 | null | Assert.cs:127:29:127:32 | null |
|
||||
| Assert.cs:127:37:127:38 | !... | Assert.cs:127:37:127:38 | !... |
|
||||
| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:38:127:38 | access to parameter b |
|
||||
| Assert.cs:128:9:128:35 | call to method WriteLine | Assert.cs:128:27:128:27 | access to local variable s |
|
||||
| Assert.cs:128:9:128:36 | ...; | Assert.cs:128:9:128:36 | ...; |
|
||||
| Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:27:128:27 | access to local variable s |
|
||||
| Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:27:128:27 | access to local variable s |
|
||||
| Assignments.cs:4:5:15:5 | {...} | Assignments.cs:4:5:15:5 | {...} |
|
||||
| Assignments.cs:5:9:5:18 | ... ...; | Assignments.cs:5:9:5:18 | ... ...; |
|
||||
| Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:5:17:5:17 | 0 |
|
||||
@@ -649,7 +1001,7 @@
|
||||
| Conditions.cs:79:17:79:26 | ...; | Conditions.cs:79:17:79:26 | ...; |
|
||||
| Conditions.cs:79:21:79:25 | false | Conditions.cs:79:21:79:25 | false |
|
||||
| Conditions.cs:81:9:82:16 | if (...) ... | Conditions.cs:81:9:82:16 | if (...) ... |
|
||||
| Conditions.cs:81:12:81:12 | access to local variable b | Conditions.cs:81:12:81:12 | access to local variable b |
|
||||
| Conditions.cs:81:13:81:13 | access to local variable b | Conditions.cs:81:13:81:13 | access to local variable b |
|
||||
| Conditions.cs:82:13:82:13 | access to local variable x | Conditions.cs:82:13:82:13 | access to local variable x |
|
||||
| Conditions.cs:82:13:82:15 | ...++ | Conditions.cs:82:13:82:13 | access to local variable x |
|
||||
| Conditions.cs:82:13:82:16 | ...; | Conditions.cs:82:13:82:16 | ...; |
|
||||
@@ -722,14 +1074,14 @@
|
||||
| Conditions.cs:115:16:115:23 | String s = ... | Conditions.cs:115:20:115:23 | null |
|
||||
| Conditions.cs:115:20:115:23 | null | Conditions.cs:115:20:115:23 | null |
|
||||
| Conditions.cs:116:9:123:9 | for (...;...;...) ... | Conditions.cs:116:9:123:9 | for (...;...;...) ... |
|
||||
| Conditions.cs:116:17:116:21 | Int32 i = ... | Conditions.cs:116:21:116:21 | 0 |
|
||||
| Conditions.cs:116:21:116:21 | 0 | Conditions.cs:116:21:116:21 | 0 |
|
||||
| Conditions.cs:116:24:116:24 | access to local variable i | Conditions.cs:116:24:116:24 | access to local variable i |
|
||||
| Conditions.cs:116:24:116:38 | ... < ... | Conditions.cs:116:24:116:24 | access to local variable i |
|
||||
| Conditions.cs:116:28:116:31 | access to parameter args | Conditions.cs:116:28:116:31 | access to parameter args |
|
||||
| Conditions.cs:116:28:116:38 | access to property Length | Conditions.cs:116:28:116:31 | access to parameter args |
|
||||
| Conditions.cs:116:41:116:41 | access to local variable i | Conditions.cs:116:41:116:41 | access to local variable i |
|
||||
| Conditions.cs:116:41:116:43 | ...++ | Conditions.cs:116:41:116:41 | access to local variable i |
|
||||
| Conditions.cs:116:18:116:22 | Int32 i = ... | Conditions.cs:116:22:116:22 | 0 |
|
||||
| Conditions.cs:116:22:116:22 | 0 | Conditions.cs:116:22:116:22 | 0 |
|
||||
| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:25:116:25 | access to local variable i |
|
||||
| Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:116:25:116:25 | access to local variable i |
|
||||
| Conditions.cs:116:29:116:32 | access to parameter args | Conditions.cs:116:29:116:32 | access to parameter args |
|
||||
| Conditions.cs:116:29:116:39 | access to property Length | Conditions.cs:116:29:116:32 | access to parameter args |
|
||||
| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:116:42:116:42 | access to local variable i |
|
||||
| Conditions.cs:116:42:116:44 | ...++ | Conditions.cs:116:42:116:42 | access to local variable i |
|
||||
| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:117:9:123:9 | {...} |
|
||||
| Conditions.cs:118:13:118:44 | ... ...; | Conditions.cs:118:13:118:44 | ... ...; |
|
||||
| Conditions.cs:118:17:118:43 | Boolean last = ... | Conditions.cs:118:24:118:24 | access to local variable i |
|
||||
@@ -766,6 +1118,25 @@
|
||||
| Conditions.cs:137:21:137:26 | this access | Conditions.cs:137:21:137:26 | this access |
|
||||
| Conditions.cs:137:21:137:37 | call to method ToString | Conditions.cs:137:21:137:26 | this access |
|
||||
| Conditions.cs:137:21:137:38 | ...; | Conditions.cs:137:21:137:38 | ...; |
|
||||
| Conditions.cs:144:5:150:5 | {...} | Conditions.cs:144:5:150:5 | {...} |
|
||||
| Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:145:9:145:30 | ... ...; |
|
||||
| Conditions.cs:145:13:145:29 | String s = ... | Conditions.cs:145:17:145:29 | ... ? ... : ... |
|
||||
| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:17:145:17 | access to parameter b |
|
||||
| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:17:145:29 | ... ? ... : ... |
|
||||
| Conditions.cs:145:21:145:23 | "a" | Conditions.cs:145:21:145:23 | "a" |
|
||||
| Conditions.cs:145:27:145:29 | "b" | Conditions.cs:145:27:145:29 | "b" |
|
||||
| Conditions.cs:146:9:149:49 | if (...) ... | Conditions.cs:146:9:149:49 | if (...) ... |
|
||||
| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:146:13:146:13 | access to parameter b |
|
||||
| Conditions.cs:147:13:147:48 | call to method WriteLine | Conditions.cs:147:40:147:43 | "a = " |
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:49 | ...; |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:40:147:43 | "a = " |
|
||||
| Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:40:147:43 | "a = " |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:45:147:45 | access to local variable s |
|
||||
| Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:149:40:149:43 | "b = " |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:49 | ...; |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:40:149:43 | "b = " |
|
||||
| Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:40:149:43 | "b = " |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:45:149:45 | access to local variable s |
|
||||
| ExitMethods.cs:8:5:11:5 | {...} | ExitMethods.cs:8:5:11:5 | {...} |
|
||||
| ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | ExitMethods.cs:9:20:9:23 | true |
|
||||
| ExitMethods.cs:9:9:9:25 | ...; | ExitMethods.cs:9:9:9:25 | ...; |
|
||||
@@ -1261,9 +1632,9 @@
|
||||
| Initializers.cs:14:47:14:51 | ... = ... | Initializers.cs:14:51:14:51 | 1 |
|
||||
| Initializers.cs:14:51:14:51 | 1 | Initializers.cs:14:51:14:51 | 1 |
|
||||
| Initializers.cs:15:9:15:64 | ... ...; | Initializers.cs:15:9:15:64 | ... ...; |
|
||||
| Initializers.cs:15:13:15:63 | Initializers[] iz = ... | Initializers.cs:15:18:15:63 | array creation of type Initializers[] |
|
||||
| Initializers.cs:15:13:15:63 | Initializers[] iz = ... | Initializers.cs:15:18:15:63 | 2 |
|
||||
| Initializers.cs:15:18:15:63 | 2 | Initializers.cs:15:18:15:63 | 2 |
|
||||
| Initializers.cs:15:18:15:63 | array creation of type Initializers[] | Initializers.cs:15:18:15:63 | array creation of type Initializers[] |
|
||||
| Initializers.cs:15:18:15:63 | array creation of type Initializers[] | Initializers.cs:15:18:15:63 | 2 |
|
||||
| Initializers.cs:15:37:15:63 | { ..., ... } | Initializers.cs:15:39:15:39 | access to local variable i |
|
||||
| Initializers.cs:15:39:15:39 | access to local variable i | Initializers.cs:15:39:15:39 | access to local variable i |
|
||||
| Initializers.cs:15:42:15:61 | object creation of type Initializers | Initializers.cs:15:59:15:60 | "" |
|
||||
@@ -1426,9 +1797,9 @@
|
||||
| LoopUnrolling.cs:12:31:12:33 | access to local variable arg | LoopUnrolling.cs:12:31:12:33 | access to local variable arg |
|
||||
| LoopUnrolling.cs:16:5:20:5 | {...} | LoopUnrolling.cs:16:5:20:5 | {...} |
|
||||
| LoopUnrolling.cs:17:9:17:48 | ... ...; | LoopUnrolling.cs:17:9:17:48 | ... ...; |
|
||||
| LoopUnrolling.cs:17:13:17:47 | String[] xs = ... | LoopUnrolling.cs:17:18:17:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:17:13:17:47 | String[] xs = ... | LoopUnrolling.cs:17:18:17:47 | 3 |
|
||||
| LoopUnrolling.cs:17:18:17:47 | 3 | LoopUnrolling.cs:17:18:17:47 | 3 |
|
||||
| LoopUnrolling.cs:17:18:17:47 | array creation of type String[] | LoopUnrolling.cs:17:18:17:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:17:18:17:47 | array creation of type String[] | LoopUnrolling.cs:17:18:17:47 | 3 |
|
||||
| LoopUnrolling.cs:17:31:17:47 | { ..., ... } | LoopUnrolling.cs:17:33:17:35 | "a" |
|
||||
| LoopUnrolling.cs:17:33:17:35 | "a" | LoopUnrolling.cs:17:33:17:35 | "a" |
|
||||
| LoopUnrolling.cs:17:38:17:40 | "b" | LoopUnrolling.cs:17:38:17:40 | "b" |
|
||||
@@ -1462,17 +1833,17 @@
|
||||
| LoopUnrolling.cs:33:31:33:31 | access to local variable x | LoopUnrolling.cs:33:31:33:31 | access to local variable x |
|
||||
| LoopUnrolling.cs:37:5:43:5 | {...} | LoopUnrolling.cs:37:5:43:5 | {...} |
|
||||
| LoopUnrolling.cs:38:9:38:48 | ... ...; | LoopUnrolling.cs:38:9:38:48 | ... ...; |
|
||||
| LoopUnrolling.cs:38:13:38:47 | String[] xs = ... | LoopUnrolling.cs:38:18:38:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:38:13:38:47 | String[] xs = ... | LoopUnrolling.cs:38:18:38:47 | 3 |
|
||||
| LoopUnrolling.cs:38:18:38:47 | 3 | LoopUnrolling.cs:38:18:38:47 | 3 |
|
||||
| LoopUnrolling.cs:38:18:38:47 | array creation of type String[] | LoopUnrolling.cs:38:18:38:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:38:18:38:47 | array creation of type String[] | LoopUnrolling.cs:38:18:38:47 | 3 |
|
||||
| LoopUnrolling.cs:38:31:38:47 | { ..., ... } | LoopUnrolling.cs:38:33:38:35 | "a" |
|
||||
| LoopUnrolling.cs:38:33:38:35 | "a" | LoopUnrolling.cs:38:33:38:35 | "a" |
|
||||
| LoopUnrolling.cs:38:38:38:40 | "b" | LoopUnrolling.cs:38:38:38:40 | "b" |
|
||||
| LoopUnrolling.cs:38:43:38:45 | "c" | LoopUnrolling.cs:38:43:38:45 | "c" |
|
||||
| LoopUnrolling.cs:39:9:39:48 | ... ...; | LoopUnrolling.cs:39:9:39:48 | ... ...; |
|
||||
| LoopUnrolling.cs:39:13:39:47 | String[] ys = ... | LoopUnrolling.cs:39:18:39:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:39:13:39:47 | String[] ys = ... | LoopUnrolling.cs:39:18:39:47 | 3 |
|
||||
| LoopUnrolling.cs:39:18:39:47 | 3 | LoopUnrolling.cs:39:18:39:47 | 3 |
|
||||
| LoopUnrolling.cs:39:18:39:47 | array creation of type String[] | LoopUnrolling.cs:39:18:39:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:39:18:39:47 | array creation of type String[] | LoopUnrolling.cs:39:18:39:47 | 3 |
|
||||
| LoopUnrolling.cs:39:31:39:47 | { ..., ... } | LoopUnrolling.cs:39:33:39:35 | "0" |
|
||||
| LoopUnrolling.cs:39:33:39:35 | "0" | LoopUnrolling.cs:39:33:39:35 | "0" |
|
||||
| LoopUnrolling.cs:39:38:39:40 | "1" | LoopUnrolling.cs:39:38:39:40 | "1" |
|
||||
@@ -1490,9 +1861,9 @@
|
||||
| LoopUnrolling.cs:42:39:42:39 | access to local variable y | LoopUnrolling.cs:42:39:42:39 | access to local variable y |
|
||||
| LoopUnrolling.cs:46:5:53:5 | {...} | LoopUnrolling.cs:46:5:53:5 | {...} |
|
||||
| LoopUnrolling.cs:47:9:47:48 | ... ...; | LoopUnrolling.cs:47:9:47:48 | ... ...; |
|
||||
| LoopUnrolling.cs:47:13:47:47 | String[] xs = ... | LoopUnrolling.cs:47:18:47:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:47:13:47:47 | String[] xs = ... | LoopUnrolling.cs:47:18:47:47 | 3 |
|
||||
| LoopUnrolling.cs:47:18:47:47 | 3 | LoopUnrolling.cs:47:18:47:47 | 3 |
|
||||
| LoopUnrolling.cs:47:18:47:47 | array creation of type String[] | LoopUnrolling.cs:47:18:47:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:47:18:47:47 | array creation of type String[] | LoopUnrolling.cs:47:18:47:47 | 3 |
|
||||
| LoopUnrolling.cs:47:31:47:47 | { ..., ... } | LoopUnrolling.cs:47:33:47:35 | "a" |
|
||||
| LoopUnrolling.cs:47:33:47:35 | "a" | LoopUnrolling.cs:47:33:47:35 | "a" |
|
||||
| LoopUnrolling.cs:47:38:47:40 | "b" | LoopUnrolling.cs:47:38:47:40 | "b" |
|
||||
@@ -1508,9 +1879,9 @@
|
||||
| LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:51:13:51:23 | goto ...; |
|
||||
| LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:56:5:65:5 | {...} |
|
||||
| LoopUnrolling.cs:57:9:57:48 | ... ...; | LoopUnrolling.cs:57:9:57:48 | ... ...; |
|
||||
| LoopUnrolling.cs:57:13:57:47 | String[] xs = ... | LoopUnrolling.cs:57:18:57:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:57:13:57:47 | String[] xs = ... | LoopUnrolling.cs:57:18:57:47 | 3 |
|
||||
| LoopUnrolling.cs:57:18:57:47 | 3 | LoopUnrolling.cs:57:18:57:47 | 3 |
|
||||
| LoopUnrolling.cs:57:18:57:47 | array creation of type String[] | LoopUnrolling.cs:57:18:57:47 | array creation of type String[] |
|
||||
| LoopUnrolling.cs:57:18:57:47 | array creation of type String[] | LoopUnrolling.cs:57:18:57:47 | 3 |
|
||||
| LoopUnrolling.cs:57:31:57:47 | { ..., ... } | LoopUnrolling.cs:57:33:57:35 | "a" |
|
||||
| LoopUnrolling.cs:57:33:57:35 | "a" | LoopUnrolling.cs:57:33:57:35 | "a" |
|
||||
| LoopUnrolling.cs:57:38:57:40 | "b" | LoopUnrolling.cs:57:38:57:40 | "b" |
|
||||
@@ -1884,7 +2255,7 @@
|
||||
| Switch.cs:27:13:27:39 | case ...: | Switch.cs:27:13:27:39 | case ...: |
|
||||
| Switch.cs:27:18:27:25 | Double d | Switch.cs:27:18:27:25 | Double d |
|
||||
| Switch.cs:27:32:27:38 | call to method Throw | Switch.cs:27:32:27:38 | call to method Throw |
|
||||
| Switch.cs:28:17:28:21 | Label: | Switch.cs:28:17:28:21 | Label: |
|
||||
| Switch.cs:28:13:28:17 | Label: | Switch.cs:28:13:28:17 | Label: |
|
||||
| Switch.cs:29:17:29:23 | return ...; | Switch.cs:29:17:29:23 | return ...; |
|
||||
| Switch.cs:30:13:30:20 | default: | Switch.cs:30:13:30:20 | default: |
|
||||
| Switch.cs:31:17:31:27 | goto ...; | Switch.cs:31:17:31:27 | goto ...; |
|
||||
@@ -1910,61 +2281,61 @@
|
||||
| Switch.cs:57:17:57:17 | 1 | Switch.cs:57:17:57:17 | 1 |
|
||||
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:57:17:57:17 | 1 |
|
||||
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:21:57:21 | 2 |
|
||||
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:13:59:20 | case ...: |
|
||||
| Switch.cs:59:13:59:19 | case ...: | Switch.cs:59:13:59:19 | case ...: |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:59:18:59:18 | 2 |
|
||||
| Switch.cs:60:15:60:20 | break; | Switch.cs:60:15:60:20 | break; |
|
||||
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:13:61:20 | case ...: |
|
||||
| Switch.cs:60:17:60:22 | break; | Switch.cs:60:17:60:22 | break; |
|
||||
| Switch.cs:61:13:61:19 | case ...: | Switch.cs:61:13:61:19 | case ...: |
|
||||
| Switch.cs:61:18:61:18 | 3 | Switch.cs:61:18:61:18 | 3 |
|
||||
| Switch.cs:62:15:62:20 | break; | Switch.cs:62:15:62:20 | break; |
|
||||
| Switch.cs:62:17:62:22 | break; | Switch.cs:62:17:62:22 | break; |
|
||||
| Switch.cs:67:5:75:5 | {...} | Switch.cs:67:5:75:5 | {...} |
|
||||
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:68:9:74:9 | switch (...) {...} |
|
||||
| Switch.cs:68:17:68:25 | (...) ... | Switch.cs:68:25:68:25 | access to parameter s |
|
||||
| Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:25:68:25 | access to parameter s |
|
||||
| Switch.cs:70:13:70:24 | case ...: | Switch.cs:70:13:70:24 | case ...: |
|
||||
| Switch.cs:70:13:70:23 | case ...: | Switch.cs:70:13:70:23 | case ...: |
|
||||
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:70:18:70:20 | access to type Int32 |
|
||||
| Switch.cs:71:15:71:20 | break; | Switch.cs:71:15:71:20 | break; |
|
||||
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:13:72:21 | case ...: |
|
||||
| Switch.cs:71:17:71:22 | break; | Switch.cs:71:17:71:22 | break; |
|
||||
| Switch.cs:72:13:72:20 | case ...: | Switch.cs:72:13:72:20 | case ...: |
|
||||
| Switch.cs:72:18:72:19 | "" | Switch.cs:72:18:72:19 | "" |
|
||||
| Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; |
|
||||
| Switch.cs:73:17:73:22 | break; | Switch.cs:73:17:73:22 | break; |
|
||||
| Switch.cs:78:5:89:5 | {...} | Switch.cs:78:5:89:5 | {...} |
|
||||
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:79:9:87:9 | switch (...) {...} |
|
||||
| Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:79:17:79:17 | access to parameter i |
|
||||
| Switch.cs:81:13:81:20 | case ...: | Switch.cs:81:13:81:20 | case ...: |
|
||||
| Switch.cs:81:13:81:19 | case ...: | Switch.cs:81:13:81:19 | case ...: |
|
||||
| Switch.cs:81:18:81:18 | 1 | Switch.cs:81:18:81:18 | 1 |
|
||||
| Switch.cs:82:15:82:26 | return ...; | Switch.cs:82:22:82:25 | true |
|
||||
| Switch.cs:82:22:82:25 | true | Switch.cs:82:22:82:25 | true |
|
||||
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:13:83:20 | case ...: |
|
||||
| Switch.cs:82:17:82:28 | return ...; | Switch.cs:82:24:82:27 | true |
|
||||
| Switch.cs:82:24:82:27 | true | Switch.cs:82:24:82:27 | true |
|
||||
| Switch.cs:83:13:83:19 | case ...: | Switch.cs:83:13:83:19 | case ...: |
|
||||
| Switch.cs:83:18:83:18 | 2 | Switch.cs:83:18:83:18 | 2 |
|
||||
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:15:85:22 | if (...) ... |
|
||||
| Switch.cs:84:19:84:19 | access to parameter j | Switch.cs:84:19:84:19 | access to parameter j |
|
||||
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:84:19:84:19 | access to parameter j |
|
||||
| Switch.cs:84:23:84:23 | 2 | Switch.cs:84:23:84:23 | 2 |
|
||||
| Switch.cs:85:17:85:22 | break; | Switch.cs:85:17:85:22 | break; |
|
||||
| Switch.cs:86:15:86:26 | return ...; | Switch.cs:86:22:86:25 | true |
|
||||
| Switch.cs:86:22:86:25 | true | Switch.cs:86:22:86:25 | true |
|
||||
| Switch.cs:84:17:85:26 | if (...) ... | Switch.cs:84:17:85:26 | if (...) ... |
|
||||
| Switch.cs:84:21:84:21 | access to parameter j | Switch.cs:84:21:84:21 | access to parameter j |
|
||||
| Switch.cs:84:21:84:25 | ... > ... | Switch.cs:84:21:84:21 | access to parameter j |
|
||||
| Switch.cs:84:25:84:25 | 2 | Switch.cs:84:25:84:25 | 2 |
|
||||
| Switch.cs:85:21:85:26 | break; | Switch.cs:85:21:85:26 | break; |
|
||||
| Switch.cs:86:17:86:28 | return ...; | Switch.cs:86:24:86:27 | true |
|
||||
| Switch.cs:86:24:86:27 | true | Switch.cs:86:24:86:27 | true |
|
||||
| Switch.cs:88:9:88:21 | return ...; | Switch.cs:88:16:88:20 | false |
|
||||
| Switch.cs:88:16:88:20 | false | Switch.cs:88:16:88:20 | false |
|
||||
| Switch.cs:92:5:99:5 | {...} | Switch.cs:92:5:99:5 | {...} |
|
||||
| Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:93:9:97:9 | switch (...) {...} |
|
||||
| Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:93:17:93:17 | access to parameter o |
|
||||
| Switch.cs:95:13:95:24 | case ...: | Switch.cs:95:13:95:24 | case ...: |
|
||||
| Switch.cs:95:13:95:23 | case ...: | Switch.cs:95:13:95:23 | case ...: |
|
||||
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:95:18:95:20 | access to type Int32 |
|
||||
| Switch.cs:96:15:96:26 | return ...; | Switch.cs:96:22:96:25 | true |
|
||||
| Switch.cs:96:22:96:25 | true | Switch.cs:96:22:96:25 | true |
|
||||
| Switch.cs:96:17:96:28 | return ...; | Switch.cs:96:24:96:27 | true |
|
||||
| Switch.cs:96:24:96:27 | true | Switch.cs:96:24:96:27 | true |
|
||||
| Switch.cs:98:9:98:21 | return ...; | Switch.cs:98:16:98:20 | false |
|
||||
| Switch.cs:98:16:98:20 | false | Switch.cs:98:16:98:20 | false |
|
||||
| Switch.cs:102:5:109:5 | {...} | Switch.cs:102:5:109:5 | {...} |
|
||||
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:103:9:107:9 | switch (...) {...} |
|
||||
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:17:103:17 | access to parameter s |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:17:103:17 | access to parameter s |
|
||||
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:13:105:20 | case ...: |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:105:13:105:19 | case ...: |
|
||||
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:18:105:18 | 0 |
|
||||
| Switch.cs:105:22:105:30 | return ...; | Switch.cs:105:29:105:29 | 0 |
|
||||
| Switch.cs:105:29:105:29 | 0 | Switch.cs:105:29:105:29 | 0 |
|
||||
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:13:106:20 | case ...: |
|
||||
| Switch.cs:105:21:105:29 | return ...; | Switch.cs:105:28:105:28 | 0 |
|
||||
| Switch.cs:105:28:105:28 | 0 | Switch.cs:105:28:105:28 | 0 |
|
||||
| Switch.cs:106:13:106:19 | case ...: | Switch.cs:106:13:106:19 | case ...: |
|
||||
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:18:106:18 | 1 |
|
||||
| Switch.cs:106:22:106:30 | return ...; | Switch.cs:106:29:106:29 | 1 |
|
||||
| Switch.cs:106:29:106:29 | 1 | Switch.cs:106:29:106:29 | 1 |
|
||||
| Switch.cs:106:21:106:29 | return ...; | Switch.cs:106:28:106:28 | 1 |
|
||||
| Switch.cs:106:28:106:28 | 1 | Switch.cs:106:28:106:28 | 1 |
|
||||
| Switch.cs:108:9:108:18 | return ...; | Switch.cs:108:17:108:17 | 1 |
|
||||
| Switch.cs:108:16:108:17 | -... | Switch.cs:108:17:108:17 | 1 |
|
||||
| Switch.cs:108:17:108:17 | 1 | Switch.cs:108:17:108:17 | 1 |
|
||||
@@ -1974,20 +2345,20 @@
|
||||
| Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:115:9:119:9 | switch (...) {...} |
|
||||
| Switch.cs:115:17:115:17 | access to parameter s | Switch.cs:115:17:115:17 | access to parameter s |
|
||||
| Switch.cs:115:17:115:24 | access to property Length | Switch.cs:115:17:115:17 | access to parameter s |
|
||||
| Switch.cs:117:13:117:34 | case ...: | Switch.cs:117:13:117:34 | case ...: |
|
||||
| Switch.cs:117:13:117:35 | case ...: | Switch.cs:117:13:117:35 | case ...: |
|
||||
| Switch.cs:117:18:117:18 | 3 | Switch.cs:117:18:117:18 | 3 |
|
||||
| Switch.cs:117:25:117:25 | access to parameter s | Switch.cs:117:25:117:25 | access to parameter s |
|
||||
| Switch.cs:117:25:117:32 | ... == ... | Switch.cs:117:25:117:25 | access to parameter s |
|
||||
| Switch.cs:117:28:117:32 | "foo" | Switch.cs:117:28:117:32 | "foo" |
|
||||
| Switch.cs:117:36:117:44 | return ...; | Switch.cs:117:43:117:43 | 1 |
|
||||
| Switch.cs:117:43:117:43 | 1 | Switch.cs:117:43:117:43 | 1 |
|
||||
| Switch.cs:118:13:118:33 | case ...: | Switch.cs:118:13:118:33 | case ...: |
|
||||
| Switch.cs:117:25:117:34 | ... == ... | Switch.cs:117:25:117:25 | access to parameter s |
|
||||
| Switch.cs:117:30:117:34 | "foo" | Switch.cs:117:30:117:34 | "foo" |
|
||||
| Switch.cs:117:37:117:45 | return ...; | Switch.cs:117:44:117:44 | 1 |
|
||||
| Switch.cs:117:44:117:44 | 1 | Switch.cs:117:44:117:44 | 1 |
|
||||
| Switch.cs:118:13:118:34 | case ...: | Switch.cs:118:13:118:34 | case ...: |
|
||||
| Switch.cs:118:18:118:18 | 2 | Switch.cs:118:18:118:18 | 2 |
|
||||
| Switch.cs:118:25:118:25 | access to parameter s | Switch.cs:118:25:118:25 | access to parameter s |
|
||||
| Switch.cs:118:25:118:31 | ... == ... | Switch.cs:118:25:118:25 | access to parameter s |
|
||||
| Switch.cs:118:28:118:31 | "fu" | Switch.cs:118:28:118:31 | "fu" |
|
||||
| Switch.cs:118:35:118:43 | return ...; | Switch.cs:118:42:118:42 | 2 |
|
||||
| Switch.cs:118:42:118:42 | 2 | Switch.cs:118:42:118:42 | 2 |
|
||||
| Switch.cs:118:25:118:33 | ... == ... | Switch.cs:118:25:118:25 | access to parameter s |
|
||||
| Switch.cs:118:30:118:33 | "fu" | Switch.cs:118:30:118:33 | "fu" |
|
||||
| Switch.cs:118:36:118:44 | return ...; | Switch.cs:118:43:118:43 | 2 |
|
||||
| Switch.cs:118:43:118:43 | 2 | Switch.cs:118:43:118:43 | 2 |
|
||||
| Switch.cs:120:9:120:18 | return ...; | Switch.cs:120:17:120:17 | 1 |
|
||||
| Switch.cs:120:16:120:17 | -... | Switch.cs:120:17:120:17 | 1 |
|
||||
| Switch.cs:120:17:120:17 | 1 | Switch.cs:120:17:120:17 | 1 |
|
||||
@@ -2043,6 +2414,29 @@
|
||||
| Switch.cs:150:18:150:18 | 2 | Switch.cs:150:18:150:18 | 2 |
|
||||
| Switch.cs:150:21:150:29 | return ...; | Switch.cs:150:28:150:28 | 2 |
|
||||
| Switch.cs:150:28:150:28 | 2 | Switch.cs:150:28:150:28 | 2 |
|
||||
| Switch.cs:155:5:161:5 | {...} | Switch.cs:155:5:161:5 | {...} |
|
||||
| Switch.cs:156:9:156:55 | ... ...; | Switch.cs:156:9:156:55 | ... ...; |
|
||||
| Switch.cs:156:13:156:54 | String s = ... | Switch.cs:156:17:156:54 | ... switch { ... } |
|
||||
| Switch.cs:156:17:156:17 | access to parameter b | Switch.cs:156:17:156:17 | access to parameter b |
|
||||
| Switch.cs:156:17:156:54 | ... switch { ... } | Switch.cs:156:17:156:54 | ... switch { ... } |
|
||||
| Switch.cs:156:28:156:31 | true | Switch.cs:156:28:156:31 | true |
|
||||
| Switch.cs:156:28:156:38 | ... => ... | Switch.cs:156:28:156:38 | ... => ... |
|
||||
| Switch.cs:156:36:156:38 | "a" | Switch.cs:156:36:156:38 | "a" |
|
||||
| Switch.cs:156:41:156:45 | false | Switch.cs:156:41:156:45 | false |
|
||||
| Switch.cs:156:41:156:52 | ... => ... | Switch.cs:156:41:156:52 | ... => ... |
|
||||
| Switch.cs:156:50:156:52 | "b" | Switch.cs:156:50:156:52 | "b" |
|
||||
| Switch.cs:157:9:160:49 | if (...) ... | Switch.cs:157:9:160:49 | if (...) ... |
|
||||
| Switch.cs:157:13:157:13 | access to parameter b | Switch.cs:157:13:157:13 | access to parameter b |
|
||||
| Switch.cs:158:13:158:48 | call to method WriteLine | Switch.cs:158:40:158:43 | "a = " |
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:49 | ...; |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:40:158:43 | "a = " |
|
||||
| Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:40:158:43 | "a = " |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:45:158:45 | access to local variable s |
|
||||
| Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:160:40:160:43 | "b = " |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:49 | ...; |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:40:160:43 | "b = " |
|
||||
| Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:40:160:43 | "b = " |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:45:160:45 | access to local variable s |
|
||||
| TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:4:5:9:5 | {...} |
|
||||
| TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:9:5:26 | ... ...; |
|
||||
| TypeAccesses.cs:5:13:5:25 | String s = ... | TypeAccesses.cs:5:25:5:25 | access to parameter o |
|
||||
|
||||
@@ -307,6 +307,516 @@
|
||||
| ArrayCreation.cs:9:43:9:50 | { ..., ... } | ArrayCreation.cs:9:43:9:50 | { ..., ... } | normal |
|
||||
| ArrayCreation.cs:9:45:9:45 | 2 | ArrayCreation.cs:9:45:9:45 | 2 | normal |
|
||||
| ArrayCreation.cs:9:48:9:48 | 3 | ArrayCreation.cs:9:48:9:48 | 3 | normal |
|
||||
| Assert.cs:8:5:12:5 | {...} | Assert.cs:10:9:10:31 | call to method Assert | exit |
|
||||
| Assert.cs:8:5:12:5 | {...} | Assert.cs:11:9:11:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:9:9:9:33 | ... ...; | Assert.cs:9:16:9:32 | String s = ... | normal |
|
||||
| Assert.cs:9:16:9:32 | String s = ... | Assert.cs:9:16:9:32 | String s = ... | normal |
|
||||
| Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:20:9:20 | access to parameter b | false |
|
||||
| Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:20:9:20 | access to parameter b | true |
|
||||
| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:24:9:27 | null | normal |
|
||||
| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:31:9:32 | "" | normal |
|
||||
| Assert.cs:9:24:9:27 | null | Assert.cs:9:24:9:27 | null | normal |
|
||||
| Assert.cs:9:31:9:32 | "" | Assert.cs:9:31:9:32 | "" | normal |
|
||||
| Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:10:9:10:31 | call to method Assert | exit |
|
||||
| Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:10:9:10:31 | call to method Assert | normal |
|
||||
| Assert.cs:10:9:10:32 | ...; | Assert.cs:10:9:10:31 | call to method Assert | exit |
|
||||
| Assert.cs:10:9:10:32 | ...; | Assert.cs:10:9:10:31 | call to method Assert | normal |
|
||||
| Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | normal |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:30 | ... != ... | false |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:30 | ... != ... | true |
|
||||
| Assert.cs:10:27:10:30 | null | Assert.cs:10:27:10:30 | null | normal |
|
||||
| Assert.cs:11:9:11:35 | call to method WriteLine | Assert.cs:11:9:11:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:11:9:11:36 | ...; | Assert.cs:11:9:11:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:11:27:11:27 | access to local variable s | normal |
|
||||
| Assert.cs:11:27:11:34 | access to property Length | Assert.cs:11:27:11:34 | access to property Length | normal |
|
||||
| Assert.cs:15:5:19:5 | {...} | Assert.cs:17:9:17:24 | call to method IsNull | throw(AssertFailedException) |
|
||||
| Assert.cs:15:5:19:5 | {...} | Assert.cs:18:9:18:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:16:9:16:33 | ... ...; | Assert.cs:16:16:16:32 | String s = ... | normal |
|
||||
| Assert.cs:16:16:16:32 | String s = ... | Assert.cs:16:16:16:32 | String s = ... | normal |
|
||||
| Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:20:16:20 | access to parameter b | false |
|
||||
| Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:20:16:20 | access to parameter b | true |
|
||||
| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:24:16:27 | null | normal |
|
||||
| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:31:16:32 | "" | normal |
|
||||
| Assert.cs:16:24:16:27 | null | Assert.cs:16:24:16:27 | null | normal |
|
||||
| Assert.cs:16:31:16:32 | "" | Assert.cs:16:31:16:32 | "" | normal |
|
||||
| Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:17:9:17:24 | call to method IsNull | normal |
|
||||
| Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:17:9:17:24 | call to method IsNull | throw(AssertFailedException) |
|
||||
| Assert.cs:17:9:17:25 | ...; | Assert.cs:17:9:17:24 | call to method IsNull | normal |
|
||||
| Assert.cs:17:9:17:25 | ...; | Assert.cs:17:9:17:24 | call to method IsNull | throw(AssertFailedException) |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s | non-null |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s | null |
|
||||
| Assert.cs:18:9:18:35 | call to method WriteLine | Assert.cs:18:9:18:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:18:9:18:36 | ...; | Assert.cs:18:9:18:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:18:27:18:27 | access to local variable s | normal |
|
||||
| Assert.cs:18:27:18:34 | access to property Length | Assert.cs:18:27:18:34 | access to property Length | normal |
|
||||
| Assert.cs:22:5:26:5 | {...} | Assert.cs:24:9:24:27 | call to method IsNotNull | throw(AssertFailedException) |
|
||||
| Assert.cs:22:5:26:5 | {...} | Assert.cs:25:9:25:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:23:9:23:33 | ... ...; | Assert.cs:23:16:23:32 | String s = ... | normal |
|
||||
| Assert.cs:23:16:23:32 | String s = ... | Assert.cs:23:16:23:32 | String s = ... | normal |
|
||||
| Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:20:23:20 | access to parameter b | false |
|
||||
| Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:20:23:20 | access to parameter b | true |
|
||||
| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:24:23:27 | null | normal |
|
||||
| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:31:23:32 | "" | normal |
|
||||
| Assert.cs:23:24:23:27 | null | Assert.cs:23:24:23:27 | null | normal |
|
||||
| Assert.cs:23:31:23:32 | "" | Assert.cs:23:31:23:32 | "" | normal |
|
||||
| Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:24:9:24:27 | call to method IsNotNull | normal |
|
||||
| Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:24:9:24:27 | call to method IsNotNull | throw(AssertFailedException) |
|
||||
| Assert.cs:24:9:24:28 | ...; | Assert.cs:24:9:24:27 | call to method IsNotNull | normal |
|
||||
| Assert.cs:24:9:24:28 | ...; | Assert.cs:24:9:24:27 | call to method IsNotNull | throw(AssertFailedException) |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | non-null |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | null |
|
||||
| Assert.cs:25:9:25:35 | call to method WriteLine | Assert.cs:25:9:25:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:25:9:25:36 | ...; | Assert.cs:25:9:25:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:25:27:25:27 | access to local variable s | normal |
|
||||
| Assert.cs:25:27:25:34 | access to property Length | Assert.cs:25:27:25:34 | access to property Length | normal |
|
||||
| Assert.cs:29:5:33:5 | {...} | Assert.cs:31:9:31:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:29:5:33:5 | {...} | Assert.cs:32:9:32:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:30:9:30:33 | ... ...; | Assert.cs:30:16:30:32 | String s = ... | normal |
|
||||
| Assert.cs:30:16:30:32 | String s = ... | Assert.cs:30:16:30:32 | String s = ... | normal |
|
||||
| Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:20:30:20 | access to parameter b | false |
|
||||
| Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:20:30:20 | access to parameter b | true |
|
||||
| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:24:30:27 | null | normal |
|
||||
| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:31:30:32 | "" | normal |
|
||||
| Assert.cs:30:24:30:27 | null | Assert.cs:30:24:30:27 | null | normal |
|
||||
| Assert.cs:30:31:30:32 | "" | Assert.cs:30:31:30:32 | "" | normal |
|
||||
| Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:31:9:31:32 | call to method IsTrue | normal |
|
||||
| Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:31:9:31:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:31:9:31:33 | ...; | Assert.cs:31:9:31:32 | call to method IsTrue | normal |
|
||||
| Assert.cs:31:9:31:33 | ...; | Assert.cs:31:9:31:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:23:31:23 | access to local variable s | normal |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:23:31:31 | ... == ... | false |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:23:31:31 | ... == ... | true |
|
||||
| Assert.cs:31:28:31:31 | null | Assert.cs:31:28:31:31 | null | normal |
|
||||
| Assert.cs:32:9:32:35 | call to method WriteLine | Assert.cs:32:9:32:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:32:9:32:36 | ...; | Assert.cs:32:9:32:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:32:27:32:27 | access to local variable s | normal |
|
||||
| Assert.cs:32:27:32:34 | access to property Length | Assert.cs:32:27:32:34 | access to property Length | normal |
|
||||
| Assert.cs:36:5:40:5 | {...} | Assert.cs:38:9:38:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:36:5:40:5 | {...} | Assert.cs:39:9:39:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:37:9:37:33 | ... ...; | Assert.cs:37:16:37:32 | String s = ... | normal |
|
||||
| Assert.cs:37:16:37:32 | String s = ... | Assert.cs:37:16:37:32 | String s = ... | normal |
|
||||
| Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:20:37:20 | access to parameter b | false |
|
||||
| Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:20:37:20 | access to parameter b | true |
|
||||
| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:24:37:27 | null | normal |
|
||||
| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:31:37:32 | "" | normal |
|
||||
| Assert.cs:37:24:37:27 | null | Assert.cs:37:24:37:27 | null | normal |
|
||||
| Assert.cs:37:31:37:32 | "" | Assert.cs:37:31:37:32 | "" | normal |
|
||||
| Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:38:9:38:32 | call to method IsTrue | normal |
|
||||
| Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:38:9:38:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:38:9:38:33 | ...; | Assert.cs:38:9:38:32 | call to method IsTrue | normal |
|
||||
| Assert.cs:38:9:38:33 | ...; | Assert.cs:38:9:38:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | normal |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:31 | ... != ... | false |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:31 | ... != ... | true |
|
||||
| Assert.cs:38:28:38:31 | null | Assert.cs:38:28:38:31 | null | normal |
|
||||
| Assert.cs:39:9:39:35 | call to method WriteLine | Assert.cs:39:9:39:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:39:9:39:36 | ...; | Assert.cs:39:9:39:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:39:27:39:27 | access to local variable s | normal |
|
||||
| Assert.cs:39:27:39:34 | access to property Length | Assert.cs:39:27:39:34 | access to property Length | normal |
|
||||
| Assert.cs:43:5:47:5 | {...} | Assert.cs:45:9:45:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:43:5:47:5 | {...} | Assert.cs:46:9:46:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:44:9:44:33 | ... ...; | Assert.cs:44:16:44:32 | String s = ... | normal |
|
||||
| Assert.cs:44:16:44:32 | String s = ... | Assert.cs:44:16:44:32 | String s = ... | normal |
|
||||
| Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:20:44:20 | access to parameter b | false |
|
||||
| Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:20:44:20 | access to parameter b | true |
|
||||
| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:24:44:27 | null | normal |
|
||||
| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:31:44:32 | "" | normal |
|
||||
| Assert.cs:44:24:44:27 | null | Assert.cs:44:24:44:27 | null | normal |
|
||||
| Assert.cs:44:31:44:32 | "" | Assert.cs:44:31:44:32 | "" | normal |
|
||||
| Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:45:9:45:33 | call to method IsFalse | normal |
|
||||
| Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:45:9:45:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:45:9:45:34 | ...; | Assert.cs:45:9:45:33 | call to method IsFalse | normal |
|
||||
| Assert.cs:45:9:45:34 | ...; | Assert.cs:45:9:45:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:24:45:24 | access to local variable s | normal |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:32 | ... != ... | false |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:32 | ... != ... | true |
|
||||
| Assert.cs:45:29:45:32 | null | Assert.cs:45:29:45:32 | null | normal |
|
||||
| Assert.cs:46:9:46:35 | call to method WriteLine | Assert.cs:46:9:46:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:46:9:46:36 | ...; | Assert.cs:46:9:46:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:46:27:46:27 | access to local variable s | normal |
|
||||
| Assert.cs:46:27:46:34 | access to property Length | Assert.cs:46:27:46:34 | access to property Length | normal |
|
||||
| Assert.cs:50:5:54:5 | {...} | Assert.cs:52:9:52:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:50:5:54:5 | {...} | Assert.cs:53:9:53:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:51:9:51:33 | ... ...; | Assert.cs:51:16:51:32 | String s = ... | normal |
|
||||
| Assert.cs:51:16:51:32 | String s = ... | Assert.cs:51:16:51:32 | String s = ... | normal |
|
||||
| Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:20:51:20 | access to parameter b | false |
|
||||
| Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:20:51:20 | access to parameter b | true |
|
||||
| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:24:51:27 | null | normal |
|
||||
| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:31:51:32 | "" | normal |
|
||||
| Assert.cs:51:24:51:27 | null | Assert.cs:51:24:51:27 | null | normal |
|
||||
| Assert.cs:51:31:51:32 | "" | Assert.cs:51:31:51:32 | "" | normal |
|
||||
| Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:52:9:52:33 | call to method IsFalse | normal |
|
||||
| Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:52:9:52:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:52:9:52:34 | ...; | Assert.cs:52:9:52:33 | call to method IsFalse | normal |
|
||||
| Assert.cs:52:9:52:34 | ...; | Assert.cs:52:9:52:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | normal |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:32 | ... == ... | false |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:32 | ... == ... | true |
|
||||
| Assert.cs:52:29:52:32 | null | Assert.cs:52:29:52:32 | null | normal |
|
||||
| Assert.cs:53:9:53:35 | call to method WriteLine | Assert.cs:53:9:53:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:53:9:53:36 | ...; | Assert.cs:53:9:53:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:53:27:53:27 | access to local variable s | normal |
|
||||
| Assert.cs:53:27:53:34 | access to property Length | Assert.cs:53:27:53:34 | access to property Length | normal |
|
||||
| Assert.cs:57:5:61:5 | {...} | Assert.cs:59:9:59:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:57:5:61:5 | {...} | Assert.cs:60:9:60:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:58:9:58:33 | ... ...; | Assert.cs:58:16:58:32 | String s = ... | normal |
|
||||
| Assert.cs:58:16:58:32 | String s = ... | Assert.cs:58:16:58:32 | String s = ... | normal |
|
||||
| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | false |
|
||||
| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | true |
|
||||
| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:24:58:27 | null | normal |
|
||||
| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:31:58:32 | "" | normal |
|
||||
| Assert.cs:58:24:58:27 | null | Assert.cs:58:24:58:27 | null | normal |
|
||||
| Assert.cs:58:31:58:32 | "" | Assert.cs:58:31:58:32 | "" | normal |
|
||||
| Assert.cs:59:9:59:37 | call to method IsTrue | Assert.cs:59:9:59:37 | call to method IsTrue | normal |
|
||||
| Assert.cs:59:9:59:37 | call to method IsTrue | Assert.cs:59:9:59:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:59:9:59:38 | ...; | Assert.cs:59:9:59:37 | call to method IsTrue | normal |
|
||||
| Assert.cs:59:9:59:38 | ...; | Assert.cs:59:9:59:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | normal |
|
||||
| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:31 | ... != ... | false |
|
||||
| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:31 | ... != ... | true |
|
||||
| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:31 | ... != ... | false |
|
||||
| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:36:59:36 | access to parameter b | false |
|
||||
| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:36:59:36 | access to parameter b | true |
|
||||
| Assert.cs:59:28:59:31 | null | Assert.cs:59:28:59:31 | null | normal |
|
||||
| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:36:59:36 | access to parameter b | false |
|
||||
| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:36:59:36 | access to parameter b | true |
|
||||
| Assert.cs:60:9:60:35 | call to method WriteLine | Assert.cs:60:9:60:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:60:9:60:36 | ...; | Assert.cs:60:9:60:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:60:27:60:27 | access to local variable s | normal |
|
||||
| Assert.cs:60:27:60:34 | access to property Length | Assert.cs:60:27:60:34 | access to property Length | normal |
|
||||
| Assert.cs:64:5:68:5 | {...} | Assert.cs:66:9:66:38 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:64:5:68:5 | {...} | Assert.cs:67:9:67:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:65:9:65:33 | ... ...; | Assert.cs:65:16:65:32 | String s = ... | normal |
|
||||
| Assert.cs:65:16:65:32 | String s = ... | Assert.cs:65:16:65:32 | String s = ... | normal |
|
||||
| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false |
|
||||
| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | true |
|
||||
| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:24:65:27 | null | normal |
|
||||
| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:31:65:32 | "" | normal |
|
||||
| Assert.cs:65:24:65:27 | null | Assert.cs:65:24:65:27 | null | normal |
|
||||
| Assert.cs:65:31:65:32 | "" | Assert.cs:65:31:65:32 | "" | normal |
|
||||
| Assert.cs:66:9:66:38 | call to method IsFalse | Assert.cs:66:9:66:38 | call to method IsFalse | normal |
|
||||
| Assert.cs:66:9:66:38 | call to method IsFalse | Assert.cs:66:9:66:38 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:66:9:66:39 | ...; | Assert.cs:66:9:66:38 | call to method IsFalse | normal |
|
||||
| Assert.cs:66:9:66:39 | ...; | Assert.cs:66:9:66:38 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | normal |
|
||||
| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:32 | ... == ... | false |
|
||||
| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:32 | ... == ... | true |
|
||||
| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:32 | ... == ... | true |
|
||||
| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:37:66:37 | access to parameter b | false |
|
||||
| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:37:66:37 | access to parameter b | true |
|
||||
| Assert.cs:66:29:66:32 | null | Assert.cs:66:29:66:32 | null | normal |
|
||||
| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:37:66:37 | access to parameter b | false |
|
||||
| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:37:66:37 | access to parameter b | true |
|
||||
| Assert.cs:67:9:67:35 | call to method WriteLine | Assert.cs:67:9:67:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:67:9:67:36 | ...; | Assert.cs:67:9:67:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:67:27:67:27 | access to local variable s | normal |
|
||||
| Assert.cs:67:27:67:34 | access to property Length | Assert.cs:67:27:67:34 | access to property Length | normal |
|
||||
| Assert.cs:71:5:75:5 | {...} | Assert.cs:73:9:73:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:71:5:75:5 | {...} | Assert.cs:74:9:74:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:72:9:72:33 | ... ...; | Assert.cs:72:16:72:32 | String s = ... | normal |
|
||||
| Assert.cs:72:16:72:32 | String s = ... | Assert.cs:72:16:72:32 | String s = ... | normal |
|
||||
| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | false |
|
||||
| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true |
|
||||
| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:24:72:27 | null | normal |
|
||||
| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:31:72:32 | "" | normal |
|
||||
| Assert.cs:72:24:72:27 | null | Assert.cs:72:24:72:27 | null | normal |
|
||||
| Assert.cs:72:31:72:32 | "" | Assert.cs:72:31:72:32 | "" | normal |
|
||||
| Assert.cs:73:9:73:37 | call to method IsTrue | Assert.cs:73:9:73:37 | call to method IsTrue | normal |
|
||||
| Assert.cs:73:9:73:37 | call to method IsTrue | Assert.cs:73:9:73:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:73:9:73:38 | ...; | Assert.cs:73:9:73:37 | call to method IsTrue | normal |
|
||||
| Assert.cs:73:9:73:38 | ...; | Assert.cs:73:9:73:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | normal |
|
||||
| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:31 | ... == ... | false |
|
||||
| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:31 | ... == ... | true |
|
||||
| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:31 | ... == ... | false |
|
||||
| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:36:73:36 | access to parameter b | false |
|
||||
| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:36:73:36 | access to parameter b | true |
|
||||
| Assert.cs:73:28:73:31 | null | Assert.cs:73:28:73:31 | null | normal |
|
||||
| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:36:73:36 | access to parameter b | false |
|
||||
| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:36:73:36 | access to parameter b | true |
|
||||
| Assert.cs:74:9:74:35 | call to method WriteLine | Assert.cs:74:9:74:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:74:9:74:36 | ...; | Assert.cs:74:9:74:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:74:27:74:27 | access to local variable s | normal |
|
||||
| Assert.cs:74:27:74:34 | access to property Length | Assert.cs:74:27:74:34 | access to property Length | normal |
|
||||
| Assert.cs:78:5:82:5 | {...} | Assert.cs:80:9:80:38 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:78:5:82:5 | {...} | Assert.cs:81:9:81:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:79:9:79:33 | ... ...; | Assert.cs:79:16:79:32 | String s = ... | normal |
|
||||
| Assert.cs:79:16:79:32 | String s = ... | Assert.cs:79:16:79:32 | String s = ... | normal |
|
||||
| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | false |
|
||||
| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | true |
|
||||
| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:24:79:27 | null | normal |
|
||||
| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:31:79:32 | "" | normal |
|
||||
| Assert.cs:79:24:79:27 | null | Assert.cs:79:24:79:27 | null | normal |
|
||||
| Assert.cs:79:31:79:32 | "" | Assert.cs:79:31:79:32 | "" | normal |
|
||||
| Assert.cs:80:9:80:38 | call to method IsFalse | Assert.cs:80:9:80:38 | call to method IsFalse | normal |
|
||||
| Assert.cs:80:9:80:38 | call to method IsFalse | Assert.cs:80:9:80:38 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:80:9:80:39 | ...; | Assert.cs:80:9:80:38 | call to method IsFalse | normal |
|
||||
| Assert.cs:80:9:80:39 | ...; | Assert.cs:80:9:80:38 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | normal |
|
||||
| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:32 | ... != ... | false |
|
||||
| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:32 | ... != ... | true |
|
||||
| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:32 | ... != ... | true |
|
||||
| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:37:80:37 | access to parameter b | false |
|
||||
| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:37:80:37 | access to parameter b | true |
|
||||
| Assert.cs:80:29:80:32 | null | Assert.cs:80:29:80:32 | null | normal |
|
||||
| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:37:80:37 | access to parameter b | false |
|
||||
| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:37:80:37 | access to parameter b | true |
|
||||
| Assert.cs:81:9:81:35 | call to method WriteLine | Assert.cs:81:9:81:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:81:9:81:36 | ...; | Assert.cs:81:9:81:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:81:27:81:27 | access to local variable s | normal |
|
||||
| Assert.cs:81:27:81:34 | access to property Length | Assert.cs:81:27:81:34 | access to property Length | normal |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:87:9:87:31 | call to method Assert | exit |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:91:9:91:24 | call to method IsNull | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:95:9:95:27 | call to method IsNotNull | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:99:9:99:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:103:9:103:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:107:9:107:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:111:9:111:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:115:9:115:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:119:9:119:39 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:123:9:123:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:127:9:127:39 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:128:9:128:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:86:9:86:33 | ... ...; | Assert.cs:86:16:86:32 | String s = ... | normal |
|
||||
| Assert.cs:86:16:86:32 | String s = ... | Assert.cs:86:16:86:32 | String s = ... | normal |
|
||||
| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:20:86:20 | access to parameter b | false |
|
||||
| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:20:86:20 | access to parameter b | true |
|
||||
| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | normal |
|
||||
| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | normal |
|
||||
| Assert.cs:86:24:86:27 | null | Assert.cs:86:24:86:27 | null | normal |
|
||||
| Assert.cs:86:31:86:32 | "" | Assert.cs:86:31:86:32 | "" | normal |
|
||||
| Assert.cs:87:9:87:31 | call to method Assert | Assert.cs:87:9:87:31 | call to method Assert | exit |
|
||||
| Assert.cs:87:9:87:31 | call to method Assert | Assert.cs:87:9:87:31 | call to method Assert | normal |
|
||||
| Assert.cs:87:9:87:32 | ...; | Assert.cs:87:9:87:31 | call to method Assert | exit |
|
||||
| Assert.cs:87:9:87:32 | ...; | Assert.cs:87:9:87:31 | call to method Assert | normal |
|
||||
| Assert.cs:87:22:87:22 | access to local variable s | Assert.cs:87:22:87:22 | access to local variable s | normal |
|
||||
| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:87:22:87:30 | ... != ... | false |
|
||||
| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:87:22:87:30 | ... != ... | true |
|
||||
| Assert.cs:87:27:87:30 | null | Assert.cs:87:27:87:30 | null | normal |
|
||||
| Assert.cs:88:9:88:35 | call to method WriteLine | Assert.cs:88:9:88:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:88:9:88:36 | ...; | Assert.cs:88:9:88:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:88:27:88:27 | access to local variable s | Assert.cs:88:27:88:27 | access to local variable s | normal |
|
||||
| Assert.cs:88:27:88:34 | access to property Length | Assert.cs:88:27:88:34 | access to property Length | normal |
|
||||
| Assert.cs:90:9:90:25 | ... = ... | Assert.cs:90:9:90:25 | ... = ... | normal |
|
||||
| Assert.cs:90:9:90:26 | ...; | Assert.cs:90:9:90:25 | ... = ... | normal |
|
||||
| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:13:90:13 | access to parameter b | false |
|
||||
| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:13:90:13 | access to parameter b | true |
|
||||
| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | normal |
|
||||
| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | normal |
|
||||
| Assert.cs:90:17:90:20 | null | Assert.cs:90:17:90:20 | null | normal |
|
||||
| Assert.cs:90:24:90:25 | "" | Assert.cs:90:24:90:25 | "" | normal |
|
||||
| Assert.cs:91:9:91:24 | call to method IsNull | Assert.cs:91:9:91:24 | call to method IsNull | normal |
|
||||
| Assert.cs:91:9:91:24 | call to method IsNull | Assert.cs:91:9:91:24 | call to method IsNull | throw(AssertFailedException) |
|
||||
| Assert.cs:91:9:91:25 | ...; | Assert.cs:91:9:91:24 | call to method IsNull | normal |
|
||||
| Assert.cs:91:9:91:25 | ...; | Assert.cs:91:9:91:24 | call to method IsNull | throw(AssertFailedException) |
|
||||
| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:91:23:91:23 | access to local variable s | non-null |
|
||||
| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:91:23:91:23 | access to local variable s | null |
|
||||
| Assert.cs:92:9:92:35 | call to method WriteLine | Assert.cs:92:9:92:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:92:9:92:36 | ...; | Assert.cs:92:9:92:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:92:27:92:27 | access to local variable s | Assert.cs:92:27:92:27 | access to local variable s | normal |
|
||||
| Assert.cs:92:27:92:34 | access to property Length | Assert.cs:92:27:92:34 | access to property Length | normal |
|
||||
| Assert.cs:94:9:94:25 | ... = ... | Assert.cs:94:9:94:25 | ... = ... | normal |
|
||||
| Assert.cs:94:9:94:26 | ...; | Assert.cs:94:9:94:25 | ... = ... | normal |
|
||||
| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:13:94:13 | access to parameter b | false |
|
||||
| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:13:94:13 | access to parameter b | true |
|
||||
| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | normal |
|
||||
| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | normal |
|
||||
| Assert.cs:94:17:94:20 | null | Assert.cs:94:17:94:20 | null | normal |
|
||||
| Assert.cs:94:24:94:25 | "" | Assert.cs:94:24:94:25 | "" | normal |
|
||||
| Assert.cs:95:9:95:27 | call to method IsNotNull | Assert.cs:95:9:95:27 | call to method IsNotNull | normal |
|
||||
| Assert.cs:95:9:95:27 | call to method IsNotNull | Assert.cs:95:9:95:27 | call to method IsNotNull | throw(AssertFailedException) |
|
||||
| Assert.cs:95:9:95:28 | ...; | Assert.cs:95:9:95:27 | call to method IsNotNull | normal |
|
||||
| Assert.cs:95:9:95:28 | ...; | Assert.cs:95:9:95:27 | call to method IsNotNull | throw(AssertFailedException) |
|
||||
| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:95:26:95:26 | access to local variable s | non-null |
|
||||
| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:95:26:95:26 | access to local variable s | null |
|
||||
| Assert.cs:96:9:96:35 | call to method WriteLine | Assert.cs:96:9:96:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:96:9:96:36 | ...; | Assert.cs:96:9:96:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:96:27:96:27 | access to local variable s | Assert.cs:96:27:96:27 | access to local variable s | normal |
|
||||
| Assert.cs:96:27:96:34 | access to property Length | Assert.cs:96:27:96:34 | access to property Length | normal |
|
||||
| Assert.cs:98:9:98:25 | ... = ... | Assert.cs:98:9:98:25 | ... = ... | normal |
|
||||
| Assert.cs:98:9:98:26 | ...; | Assert.cs:98:9:98:25 | ... = ... | normal |
|
||||
| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:13:98:13 | access to parameter b | false |
|
||||
| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:13:98:13 | access to parameter b | true |
|
||||
| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | normal |
|
||||
| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | normal |
|
||||
| Assert.cs:98:17:98:20 | null | Assert.cs:98:17:98:20 | null | normal |
|
||||
| Assert.cs:98:24:98:25 | "" | Assert.cs:98:24:98:25 | "" | normal |
|
||||
| Assert.cs:99:9:99:32 | call to method IsTrue | Assert.cs:99:9:99:32 | call to method IsTrue | normal |
|
||||
| Assert.cs:99:9:99:32 | call to method IsTrue | Assert.cs:99:9:99:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:99:9:99:33 | ...; | Assert.cs:99:9:99:32 | call to method IsTrue | normal |
|
||||
| Assert.cs:99:9:99:33 | ...; | Assert.cs:99:9:99:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:99:23:99:23 | access to local variable s | Assert.cs:99:23:99:23 | access to local variable s | normal |
|
||||
| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:99:23:99:31 | ... == ... | false |
|
||||
| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:99:23:99:31 | ... == ... | true |
|
||||
| Assert.cs:99:28:99:31 | null | Assert.cs:99:28:99:31 | null | normal |
|
||||
| Assert.cs:100:9:100:35 | call to method WriteLine | Assert.cs:100:9:100:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:100:9:100:36 | ...; | Assert.cs:100:9:100:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:100:27:100:27 | access to local variable s | Assert.cs:100:27:100:27 | access to local variable s | normal |
|
||||
| Assert.cs:100:27:100:34 | access to property Length | Assert.cs:100:27:100:34 | access to property Length | normal |
|
||||
| Assert.cs:102:9:102:25 | ... = ... | Assert.cs:102:9:102:25 | ... = ... | normal |
|
||||
| Assert.cs:102:9:102:26 | ...; | Assert.cs:102:9:102:25 | ... = ... | normal |
|
||||
| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:13:102:13 | access to parameter b | false |
|
||||
| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:13:102:13 | access to parameter b | true |
|
||||
| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | normal |
|
||||
| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | normal |
|
||||
| Assert.cs:102:17:102:20 | null | Assert.cs:102:17:102:20 | null | normal |
|
||||
| Assert.cs:102:24:102:25 | "" | Assert.cs:102:24:102:25 | "" | normal |
|
||||
| Assert.cs:103:9:103:32 | call to method IsTrue | Assert.cs:103:9:103:32 | call to method IsTrue | normal |
|
||||
| Assert.cs:103:9:103:32 | call to method IsTrue | Assert.cs:103:9:103:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:103:9:103:33 | ...; | Assert.cs:103:9:103:32 | call to method IsTrue | normal |
|
||||
| Assert.cs:103:9:103:33 | ...; | Assert.cs:103:9:103:32 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:103:23:103:23 | access to local variable s | Assert.cs:103:23:103:23 | access to local variable s | normal |
|
||||
| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:103:23:103:31 | ... != ... | false |
|
||||
| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:103:23:103:31 | ... != ... | true |
|
||||
| Assert.cs:103:28:103:31 | null | Assert.cs:103:28:103:31 | null | normal |
|
||||
| Assert.cs:104:9:104:35 | call to method WriteLine | Assert.cs:104:9:104:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:104:9:104:36 | ...; | Assert.cs:104:9:104:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:104:27:104:27 | access to local variable s | Assert.cs:104:27:104:27 | access to local variable s | normal |
|
||||
| Assert.cs:104:27:104:34 | access to property Length | Assert.cs:104:27:104:34 | access to property Length | normal |
|
||||
| Assert.cs:106:9:106:25 | ... = ... | Assert.cs:106:9:106:25 | ... = ... | normal |
|
||||
| Assert.cs:106:9:106:26 | ...; | Assert.cs:106:9:106:25 | ... = ... | normal |
|
||||
| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:13:106:13 | access to parameter b | false |
|
||||
| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:13:106:13 | access to parameter b | true |
|
||||
| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | normal |
|
||||
| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | normal |
|
||||
| Assert.cs:106:17:106:20 | null | Assert.cs:106:17:106:20 | null | normal |
|
||||
| Assert.cs:106:24:106:25 | "" | Assert.cs:106:24:106:25 | "" | normal |
|
||||
| Assert.cs:107:9:107:33 | call to method IsFalse | Assert.cs:107:9:107:33 | call to method IsFalse | normal |
|
||||
| Assert.cs:107:9:107:33 | call to method IsFalse | Assert.cs:107:9:107:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:107:9:107:34 | ...; | Assert.cs:107:9:107:33 | call to method IsFalse | normal |
|
||||
| Assert.cs:107:9:107:34 | ...; | Assert.cs:107:9:107:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:107:24:107:24 | access to local variable s | Assert.cs:107:24:107:24 | access to local variable s | normal |
|
||||
| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:107:24:107:32 | ... != ... | false |
|
||||
| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:107:24:107:32 | ... != ... | true |
|
||||
| Assert.cs:107:29:107:32 | null | Assert.cs:107:29:107:32 | null | normal |
|
||||
| Assert.cs:108:9:108:35 | call to method WriteLine | Assert.cs:108:9:108:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:108:9:108:36 | ...; | Assert.cs:108:9:108:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:108:27:108:27 | access to local variable s | Assert.cs:108:27:108:27 | access to local variable s | normal |
|
||||
| Assert.cs:108:27:108:34 | access to property Length | Assert.cs:108:27:108:34 | access to property Length | normal |
|
||||
| Assert.cs:110:9:110:25 | ... = ... | Assert.cs:110:9:110:25 | ... = ... | normal |
|
||||
| Assert.cs:110:9:110:26 | ...; | Assert.cs:110:9:110:25 | ... = ... | normal |
|
||||
| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:13:110:13 | access to parameter b | false |
|
||||
| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:13:110:13 | access to parameter b | true |
|
||||
| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | normal |
|
||||
| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | normal |
|
||||
| Assert.cs:110:17:110:20 | null | Assert.cs:110:17:110:20 | null | normal |
|
||||
| Assert.cs:110:24:110:25 | "" | Assert.cs:110:24:110:25 | "" | normal |
|
||||
| Assert.cs:111:9:111:33 | call to method IsFalse | Assert.cs:111:9:111:33 | call to method IsFalse | normal |
|
||||
| Assert.cs:111:9:111:33 | call to method IsFalse | Assert.cs:111:9:111:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:111:9:111:34 | ...; | Assert.cs:111:9:111:33 | call to method IsFalse | normal |
|
||||
| Assert.cs:111:9:111:34 | ...; | Assert.cs:111:9:111:33 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:111:24:111:24 | access to local variable s | Assert.cs:111:24:111:24 | access to local variable s | normal |
|
||||
| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:111:24:111:32 | ... == ... | false |
|
||||
| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:111:24:111:32 | ... == ... | true |
|
||||
| Assert.cs:111:29:111:32 | null | Assert.cs:111:29:111:32 | null | normal |
|
||||
| Assert.cs:112:9:112:35 | call to method WriteLine | Assert.cs:112:9:112:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:112:9:112:36 | ...; | Assert.cs:112:9:112:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:112:27:112:27 | access to local variable s | Assert.cs:112:27:112:27 | access to local variable s | normal |
|
||||
| Assert.cs:112:27:112:34 | access to property Length | Assert.cs:112:27:112:34 | access to property Length | normal |
|
||||
| Assert.cs:114:9:114:25 | ... = ... | Assert.cs:114:9:114:25 | ... = ... | normal |
|
||||
| Assert.cs:114:9:114:26 | ...; | Assert.cs:114:9:114:25 | ... = ... | normal |
|
||||
| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:13:114:13 | access to parameter b | false |
|
||||
| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:13:114:13 | access to parameter b | true |
|
||||
| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | normal |
|
||||
| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | normal |
|
||||
| Assert.cs:114:17:114:20 | null | Assert.cs:114:17:114:20 | null | normal |
|
||||
| Assert.cs:114:24:114:25 | "" | Assert.cs:114:24:114:25 | "" | normal |
|
||||
| Assert.cs:115:9:115:37 | call to method IsTrue | Assert.cs:115:9:115:37 | call to method IsTrue | normal |
|
||||
| Assert.cs:115:9:115:37 | call to method IsTrue | Assert.cs:115:9:115:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:115:9:115:38 | ...; | Assert.cs:115:9:115:37 | call to method IsTrue | normal |
|
||||
| Assert.cs:115:9:115:38 | ...; | Assert.cs:115:9:115:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:115:23:115:23 | access to local variable s | Assert.cs:115:23:115:23 | access to local variable s | normal |
|
||||
| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:23:115:31 | ... != ... | false |
|
||||
| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:23:115:31 | ... != ... | true |
|
||||
| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:23:115:31 | ... != ... | false |
|
||||
| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:36:115:36 | access to parameter b | false |
|
||||
| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:36:115:36 | access to parameter b | true |
|
||||
| Assert.cs:115:28:115:31 | null | Assert.cs:115:28:115:31 | null | normal |
|
||||
| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:36:115:36 | access to parameter b | false |
|
||||
| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:36:115:36 | access to parameter b | true |
|
||||
| Assert.cs:116:9:116:35 | call to method WriteLine | Assert.cs:116:9:116:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:116:9:116:36 | ...; | Assert.cs:116:9:116:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:116:27:116:27 | access to local variable s | Assert.cs:116:27:116:27 | access to local variable s | normal |
|
||||
| Assert.cs:116:27:116:34 | access to property Length | Assert.cs:116:27:116:34 | access to property Length | normal |
|
||||
| Assert.cs:118:9:118:25 | ... = ... | Assert.cs:118:9:118:25 | ... = ... | normal |
|
||||
| Assert.cs:118:9:118:26 | ...; | Assert.cs:118:9:118:25 | ... = ... | normal |
|
||||
| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:13:118:13 | access to parameter b | false |
|
||||
| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:13:118:13 | access to parameter b | true |
|
||||
| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | normal |
|
||||
| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | normal |
|
||||
| Assert.cs:118:17:118:20 | null | Assert.cs:118:17:118:20 | null | normal |
|
||||
| Assert.cs:118:24:118:25 | "" | Assert.cs:118:24:118:25 | "" | normal |
|
||||
| Assert.cs:119:9:119:39 | call to method IsFalse | Assert.cs:119:9:119:39 | call to method IsFalse | normal |
|
||||
| Assert.cs:119:9:119:39 | call to method IsFalse | Assert.cs:119:9:119:39 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:119:9:119:40 | ...; | Assert.cs:119:9:119:39 | call to method IsFalse | normal |
|
||||
| Assert.cs:119:9:119:40 | ...; | Assert.cs:119:9:119:39 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:119:24:119:24 | access to local variable s | Assert.cs:119:24:119:24 | access to local variable s | normal |
|
||||
| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:24:119:32 | ... == ... | false |
|
||||
| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:24:119:32 | ... == ... | true |
|
||||
| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:24:119:32 | ... == ... | true |
|
||||
| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:38:119:38 | access to parameter b | false [true] |
|
||||
| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:38:119:38 | access to parameter b | true [false] |
|
||||
| Assert.cs:119:29:119:32 | null | Assert.cs:119:29:119:32 | null | normal |
|
||||
| Assert.cs:119:37:119:38 | !... | Assert.cs:119:38:119:38 | access to parameter b | false [true] |
|
||||
| Assert.cs:119:37:119:38 | !... | Assert.cs:119:38:119:38 | access to parameter b | true [false] |
|
||||
| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:38:119:38 | access to parameter b | false |
|
||||
| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:38:119:38 | access to parameter b | true |
|
||||
| Assert.cs:120:9:120:35 | call to method WriteLine | Assert.cs:120:9:120:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:120:9:120:36 | ...; | Assert.cs:120:9:120:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:120:27:120:27 | access to local variable s | Assert.cs:120:27:120:27 | access to local variable s | normal |
|
||||
| Assert.cs:120:27:120:34 | access to property Length | Assert.cs:120:27:120:34 | access to property Length | normal |
|
||||
| Assert.cs:122:9:122:25 | ... = ... | Assert.cs:122:9:122:25 | ... = ... | normal |
|
||||
| Assert.cs:122:9:122:26 | ...; | Assert.cs:122:9:122:25 | ... = ... | normal |
|
||||
| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:13:122:13 | access to parameter b | false |
|
||||
| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:13:122:13 | access to parameter b | true |
|
||||
| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | normal |
|
||||
| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | normal |
|
||||
| Assert.cs:122:17:122:20 | null | Assert.cs:122:17:122:20 | null | normal |
|
||||
| Assert.cs:122:24:122:25 | "" | Assert.cs:122:24:122:25 | "" | normal |
|
||||
| Assert.cs:123:9:123:37 | call to method IsTrue | Assert.cs:123:9:123:37 | call to method IsTrue | normal |
|
||||
| Assert.cs:123:9:123:37 | call to method IsTrue | Assert.cs:123:9:123:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:123:9:123:38 | ...; | Assert.cs:123:9:123:37 | call to method IsTrue | normal |
|
||||
| Assert.cs:123:9:123:38 | ...; | Assert.cs:123:9:123:37 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| Assert.cs:123:23:123:23 | access to local variable s | Assert.cs:123:23:123:23 | access to local variable s | normal |
|
||||
| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:23:123:31 | ... == ... | false |
|
||||
| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:23:123:31 | ... == ... | true |
|
||||
| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:23:123:31 | ... == ... | false |
|
||||
| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:36:123:36 | access to parameter b | false |
|
||||
| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:36:123:36 | access to parameter b | true |
|
||||
| Assert.cs:123:28:123:31 | null | Assert.cs:123:28:123:31 | null | normal |
|
||||
| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:36:123:36 | access to parameter b | false |
|
||||
| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:36:123:36 | access to parameter b | true |
|
||||
| Assert.cs:124:9:124:35 | call to method WriteLine | Assert.cs:124:9:124:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:124:9:124:36 | ...; | Assert.cs:124:9:124:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:124:27:124:27 | access to local variable s | Assert.cs:124:27:124:27 | access to local variable s | normal |
|
||||
| Assert.cs:124:27:124:34 | access to property Length | Assert.cs:124:27:124:34 | access to property Length | normal |
|
||||
| Assert.cs:126:9:126:25 | ... = ... | Assert.cs:126:9:126:25 | ... = ... | normal |
|
||||
| Assert.cs:126:9:126:26 | ...; | Assert.cs:126:9:126:25 | ... = ... | normal |
|
||||
| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:13:126:13 | access to parameter b | false |
|
||||
| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:13:126:13 | access to parameter b | true |
|
||||
| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | normal |
|
||||
| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | normal |
|
||||
| Assert.cs:126:17:126:20 | null | Assert.cs:126:17:126:20 | null | normal |
|
||||
| Assert.cs:126:24:126:25 | "" | Assert.cs:126:24:126:25 | "" | normal |
|
||||
| Assert.cs:127:9:127:39 | call to method IsFalse | Assert.cs:127:9:127:39 | call to method IsFalse | normal |
|
||||
| Assert.cs:127:9:127:39 | call to method IsFalse | Assert.cs:127:9:127:39 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:127:9:127:40 | ...; | Assert.cs:127:9:127:39 | call to method IsFalse | normal |
|
||||
| Assert.cs:127:9:127:40 | ...; | Assert.cs:127:9:127:39 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| Assert.cs:127:24:127:24 | access to local variable s | Assert.cs:127:24:127:24 | access to local variable s | normal |
|
||||
| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:24:127:32 | ... != ... | false |
|
||||
| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:24:127:32 | ... != ... | true |
|
||||
| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:24:127:32 | ... != ... | true |
|
||||
| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:38:127:38 | access to parameter b | false [true] |
|
||||
| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:38:127:38 | access to parameter b | true [false] |
|
||||
| Assert.cs:127:29:127:32 | null | Assert.cs:127:29:127:32 | null | normal |
|
||||
| Assert.cs:127:37:127:38 | !... | Assert.cs:127:38:127:38 | access to parameter b | false [true] |
|
||||
| Assert.cs:127:37:127:38 | !... | Assert.cs:127:38:127:38 | access to parameter b | true [false] |
|
||||
| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:38:127:38 | access to parameter b | false |
|
||||
| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:38:127:38 | access to parameter b | true |
|
||||
| Assert.cs:128:9:128:35 | call to method WriteLine | Assert.cs:128:9:128:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:128:9:128:36 | ...; | Assert.cs:128:9:128:35 | call to method WriteLine | normal |
|
||||
| Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:27:128:27 | access to local variable s | normal |
|
||||
| Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:27:128:34 | access to property Length | normal |
|
||||
| Assignments.cs:4:5:15:5 | {...} | Assignments.cs:14:9:14:35 | ... += ... | normal |
|
||||
| Assignments.cs:5:9:5:18 | ... ...; | Assignments.cs:5:13:5:17 | Int32 x = ... | normal |
|
||||
| Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:5:13:5:17 | Int32 x = ... | normal |
|
||||
@@ -783,10 +1293,10 @@
|
||||
| Conditions.cs:79:17:79:25 | ... = ... | Conditions.cs:79:17:79:25 | ... = ... | normal |
|
||||
| Conditions.cs:79:17:79:26 | ...; | Conditions.cs:79:17:79:25 | ... = ... | normal |
|
||||
| Conditions.cs:79:21:79:25 | false | Conditions.cs:79:21:79:25 | false | normal |
|
||||
| Conditions.cs:81:9:82:16 | if (...) ... | Conditions.cs:81:12:81:12 | access to local variable b | false |
|
||||
| Conditions.cs:81:9:82:16 | if (...) ... | Conditions.cs:81:13:81:13 | access to local variable b | false |
|
||||
| Conditions.cs:81:9:82:16 | if (...) ... | Conditions.cs:82:13:82:15 | ...++ | normal |
|
||||
| Conditions.cs:81:12:81:12 | access to local variable b | Conditions.cs:81:12:81:12 | access to local variable b | false |
|
||||
| Conditions.cs:81:12:81:12 | access to local variable b | Conditions.cs:81:12:81:12 | access to local variable b | true |
|
||||
| Conditions.cs:81:13:81:13 | access to local variable b | Conditions.cs:81:13:81:13 | access to local variable b | false |
|
||||
| Conditions.cs:81:13:81:13 | access to local variable b | Conditions.cs:81:13:81:13 | access to local variable b | true |
|
||||
| Conditions.cs:82:13:82:13 | access to local variable x | Conditions.cs:82:13:82:13 | access to local variable x | normal |
|
||||
| Conditions.cs:82:13:82:15 | ...++ | Conditions.cs:82:13:82:15 | ...++ | normal |
|
||||
| Conditions.cs:82:13:82:16 | ...; | Conditions.cs:82:13:82:15 | ...++ | normal |
|
||||
@@ -869,20 +1379,20 @@
|
||||
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:22:109:23 | "" | normal |
|
||||
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:9:110:17 | return ...; | return |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:16:110:16 | access to local variable x | normal |
|
||||
| Conditions.cs:114:5:124:5 | {...} | Conditions.cs:116:24:116:38 | ... < ... | false |
|
||||
| Conditions.cs:114:5:124:5 | {...} | Conditions.cs:116:25:116:39 | ... < ... | false |
|
||||
| Conditions.cs:115:9:115:24 | ... ...; | Conditions.cs:115:16:115:23 | String s = ... | normal |
|
||||
| Conditions.cs:115:16:115:23 | String s = ... | Conditions.cs:115:16:115:23 | String s = ... | normal |
|
||||
| Conditions.cs:115:20:115:23 | null | Conditions.cs:115:20:115:23 | null | normal |
|
||||
| Conditions.cs:116:9:123:9 | for (...;...;...) ... | Conditions.cs:116:24:116:38 | ... < ... | false |
|
||||
| Conditions.cs:116:17:116:21 | Int32 i = ... | Conditions.cs:116:17:116:21 | Int32 i = ... | normal |
|
||||
| Conditions.cs:116:21:116:21 | 0 | Conditions.cs:116:21:116:21 | 0 | normal |
|
||||
| Conditions.cs:116:24:116:24 | access to local variable i | Conditions.cs:116:24:116:24 | access to local variable i | normal |
|
||||
| Conditions.cs:116:24:116:38 | ... < ... | Conditions.cs:116:24:116:38 | ... < ... | false |
|
||||
| Conditions.cs:116:24:116:38 | ... < ... | Conditions.cs:116:24:116:38 | ... < ... | true |
|
||||
| Conditions.cs:116:28:116:31 | access to parameter args | Conditions.cs:116:28:116:31 | access to parameter args | normal |
|
||||
| Conditions.cs:116:28:116:38 | access to property Length | Conditions.cs:116:28:116:38 | access to property Length | normal |
|
||||
| Conditions.cs:116:41:116:41 | access to local variable i | Conditions.cs:116:41:116:41 | access to local variable i | normal |
|
||||
| Conditions.cs:116:41:116:43 | ...++ | Conditions.cs:116:41:116:43 | ...++ | normal |
|
||||
| Conditions.cs:116:9:123:9 | for (...;...;...) ... | Conditions.cs:116:25:116:39 | ... < ... | false |
|
||||
| Conditions.cs:116:18:116:22 | Int32 i = ... | Conditions.cs:116:18:116:22 | Int32 i = ... | normal |
|
||||
| Conditions.cs:116:22:116:22 | 0 | Conditions.cs:116:22:116:22 | 0 | normal |
|
||||
| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:25:116:25 | access to local variable i | normal |
|
||||
| Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:116:25:116:39 | ... < ... | false |
|
||||
| Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:116:25:116:39 | ... < ... | true |
|
||||
| Conditions.cs:116:29:116:32 | access to parameter args | Conditions.cs:116:29:116:32 | access to parameter args | normal |
|
||||
| Conditions.cs:116:29:116:39 | access to property Length | Conditions.cs:116:29:116:39 | access to property Length | normal |
|
||||
| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:116:42:116:42 | access to local variable i | normal |
|
||||
| Conditions.cs:116:42:116:44 | ...++ | Conditions.cs:116:42:116:44 | ...++ | normal |
|
||||
| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:121:17:121:20 | access to local variable last | false |
|
||||
| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:122:17:122:24 | ... = ... | normal |
|
||||
| Conditions.cs:118:13:118:44 | ... ...; | Conditions.cs:118:17:118:43 | Boolean last = ... | normal |
|
||||
@@ -931,6 +1441,30 @@
|
||||
| Conditions.cs:137:21:137:26 | this access | Conditions.cs:137:21:137:26 | this access | normal |
|
||||
| Conditions.cs:137:21:137:37 | call to method ToString | Conditions.cs:137:21:137:37 | call to method ToString | normal |
|
||||
| Conditions.cs:137:21:137:38 | ...; | Conditions.cs:137:21:137:37 | call to method ToString | normal |
|
||||
| Conditions.cs:144:5:150:5 | {...} | Conditions.cs:147:13:147:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:144:5:150:5 | {...} | Conditions.cs:149:13:149:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:145:13:145:29 | String s = ... | normal |
|
||||
| Conditions.cs:145:13:145:29 | String s = ... | Conditions.cs:145:13:145:29 | String s = ... | normal |
|
||||
| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:17:145:17 | access to parameter b | false |
|
||||
| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:17:145:17 | access to parameter b | true |
|
||||
| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:21:145:23 | "a" | normal |
|
||||
| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:27:145:29 | "b" | normal |
|
||||
| Conditions.cs:145:21:145:23 | "a" | Conditions.cs:145:21:145:23 | "a" | normal |
|
||||
| Conditions.cs:145:27:145:29 | "b" | Conditions.cs:145:27:145:29 | "b" | normal |
|
||||
| Conditions.cs:146:9:149:49 | if (...) ... | Conditions.cs:147:13:147:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:146:9:149:49 | if (...) ... | Conditions.cs:149:13:149:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:146:13:146:13 | access to parameter b | false |
|
||||
| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:146:13:146:13 | access to parameter b | true |
|
||||
| Conditions.cs:147:13:147:48 | call to method WriteLine | Conditions.cs:147:13:147:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:38:147:47 | $"..." | normal |
|
||||
| Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:40:147:43 | "a = " | normal |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:45:147:45 | access to local variable s | normal |
|
||||
| Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:149:13:149:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:38:149:47 | $"..." | normal |
|
||||
| Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:40:149:43 | "b = " | normal |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:45:149:45 | access to local variable s | normal |
|
||||
| ExitMethods.cs:8:5:11:5 | {...} | ExitMethods.cs:10:9:10:15 | return ...; | return |
|
||||
| ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | normal |
|
||||
| ExitMethods.cs:9:9:9:25 | ...; | ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | normal |
|
||||
@@ -1065,7 +1599,7 @@
|
||||
| ExitMethods.cs:120:5:123:5 | {...} | ExitMethods.cs:122:13:122:17 | Int32 x = ... | normal |
|
||||
| ExitMethods.cs:121:9:121:28 | call to method IsTrue | ExitMethods.cs:121:9:121:28 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| ExitMethods.cs:121:9:121:29 | ...; | ExitMethods.cs:121:9:121:28 | call to method IsTrue | throw(AssertFailedException) |
|
||||
| ExitMethods.cs:121:23:121:27 | false | ExitMethods.cs:121:23:121:27 | false | normal |
|
||||
| ExitMethods.cs:121:23:121:27 | false | ExitMethods.cs:121:23:121:27 | false | false |
|
||||
| ExitMethods.cs:122:9:122:18 | ... ...; | ExitMethods.cs:122:13:122:17 | Int32 x = ... | normal |
|
||||
| ExitMethods.cs:122:13:122:17 | Int32 x = ... | ExitMethods.cs:122:13:122:17 | Int32 x = ... | normal |
|
||||
| ExitMethods.cs:122:17:122:17 | 0 | ExitMethods.cs:122:17:122:17 | 0 | normal |
|
||||
@@ -1078,13 +1612,15 @@
|
||||
| ExitMethods.cs:128:13:128:17 | Int32 x = ... | ExitMethods.cs:128:13:128:17 | Int32 x = ... | normal |
|
||||
| ExitMethods.cs:128:17:128:17 | 0 | ExitMethods.cs:128:17:128:17 | 0 | normal |
|
||||
| ExitMethods.cs:131:33:131:49 | call to method IsFalse | ExitMethods.cs:131:33:131:49 | call to method IsFalse | normal |
|
||||
| ExitMethods.cs:131:48:131:48 | access to parameter b | ExitMethods.cs:131:48:131:48 | access to parameter b | normal |
|
||||
| ExitMethods.cs:131:33:131:49 | call to method IsFalse | ExitMethods.cs:131:33:131:49 | call to method IsFalse | throw(AssertFailedException) |
|
||||
| ExitMethods.cs:131:48:131:48 | access to parameter b | ExitMethods.cs:131:48:131:48 | access to parameter b | false |
|
||||
| ExitMethods.cs:131:48:131:48 | access to parameter b | ExitMethods.cs:131:48:131:48 | access to parameter b | true |
|
||||
| ExitMethods.cs:134:5:137:5 | {...} | ExitMethods.cs:135:9:135:25 | call to method AssertFalse | throw(AssertFailedException) |
|
||||
| ExitMethods.cs:134:5:137:5 | {...} | ExitMethods.cs:136:13:136:17 | Int32 x = ... | normal |
|
||||
| ExitMethods.cs:135:9:135:25 | call to method AssertFalse | ExitMethods.cs:135:9:135:25 | call to method AssertFalse | throw(AssertFailedException) |
|
||||
| ExitMethods.cs:135:9:135:25 | this access | ExitMethods.cs:135:9:135:25 | this access | normal |
|
||||
| ExitMethods.cs:135:9:135:26 | ...; | ExitMethods.cs:135:9:135:25 | call to method AssertFalse | throw(AssertFailedException) |
|
||||
| ExitMethods.cs:135:21:135:24 | true | ExitMethods.cs:135:21:135:24 | true | normal |
|
||||
| ExitMethods.cs:135:21:135:24 | true | ExitMethods.cs:135:21:135:24 | true | true |
|
||||
| ExitMethods.cs:136:9:136:18 | ... ...; | ExitMethods.cs:136:13:136:17 | Int32 x = ... | normal |
|
||||
| ExitMethods.cs:136:13:136:17 | Int32 x = ... | ExitMethods.cs:136:13:136:17 | Int32 x = ... | normal |
|
||||
| ExitMethods.cs:136:17:136:17 | 0 | ExitMethods.cs:136:17:136:17 | 0 | normal |
|
||||
@@ -2487,11 +3023,11 @@
|
||||
| Switch.cs:26:17:26:23 | return ...; | Switch.cs:26:17:26:23 | return ...; | return |
|
||||
| Switch.cs:27:13:27:39 | case ...: | Switch.cs:27:18:27:25 | Double d | no-match |
|
||||
| Switch.cs:27:13:27:39 | case ...: | Switch.cs:27:32:27:38 | call to method Throw | throw(Exception) |
|
||||
| Switch.cs:27:13:27:39 | case ...: | Switch.cs:28:17:28:21 | Label: | normal |
|
||||
| Switch.cs:27:13:27:39 | case ...: | Switch.cs:28:13:28:17 | Label: | normal |
|
||||
| Switch.cs:27:18:27:25 | Double d | Switch.cs:27:18:27:25 | Double d | match |
|
||||
| Switch.cs:27:18:27:25 | Double d | Switch.cs:27:18:27:25 | Double d | no-match |
|
||||
| Switch.cs:27:32:27:38 | call to method Throw | Switch.cs:27:32:27:38 | call to method Throw | throw(Exception) |
|
||||
| Switch.cs:28:17:28:21 | Label: | Switch.cs:28:17:28:21 | Label: | normal |
|
||||
| Switch.cs:28:13:28:17 | Label: | Switch.cs:28:13:28:17 | Label: | normal |
|
||||
| Switch.cs:29:17:29:23 | return ...; | Switch.cs:29:17:29:23 | return ...; | return |
|
||||
| Switch.cs:30:13:30:20 | default: | Switch.cs:31:17:31:27 | goto ...; | goto(Label) |
|
||||
| Switch.cs:31:17:31:27 | goto ...; | Switch.cs:31:17:31:27 | goto ...; | goto(Label) |
|
||||
@@ -2526,138 +3062,138 @@
|
||||
| Switch.cs:50:30:50:38 | ... != ... | Switch.cs:50:30:50:38 | ... != ... | true |
|
||||
| Switch.cs:50:35:50:38 | null | Switch.cs:50:35:50:38 | null | normal |
|
||||
| Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; | break |
|
||||
| Switch.cs:56:5:64:5 | {...} | Switch.cs:60:15:60:20 | break; | normal (break) |
|
||||
| Switch.cs:56:5:64:5 | {...} | Switch.cs:62:15:62:20 | break; | normal (break) |
|
||||
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:60:15:60:20 | break; | normal (break) |
|
||||
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:62:15:62:20 | break; | normal (break) |
|
||||
| Switch.cs:56:5:64:5 | {...} | Switch.cs:60:17:60:22 | break; | normal (break) |
|
||||
| Switch.cs:56:5:64:5 | {...} | Switch.cs:62:17:62:22 | break; | normal (break) |
|
||||
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:60:17:60:22 | break; | normal (break) |
|
||||
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:62:17:62:22 | break; | normal (break) |
|
||||
| Switch.cs:57:17:57:17 | 1 | Switch.cs:57:17:57:17 | 1 | normal |
|
||||
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:57:17:57:21 | ... + ... | normal |
|
||||
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:21:57:21 | 2 | normal |
|
||||
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 | no-match |
|
||||
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:60:15:60:20 | break; | break |
|
||||
| Switch.cs:59:13:59:19 | case ...: | Switch.cs:59:18:59:18 | 2 | no-match |
|
||||
| Switch.cs:59:13:59:19 | case ...: | Switch.cs:60:17:60:22 | break; | break |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:59:18:59:18 | 2 | no-match |
|
||||
| Switch.cs:60:15:60:20 | break; | Switch.cs:60:15:60:20 | break; | break |
|
||||
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:62:15:62:20 | break; | break |
|
||||
| Switch.cs:60:17:60:22 | break; | Switch.cs:60:17:60:22 | break; | break |
|
||||
| Switch.cs:61:13:61:19 | case ...: | Switch.cs:62:17:62:22 | break; | break |
|
||||
| Switch.cs:61:18:61:18 | 3 | Switch.cs:61:18:61:18 | 3 | match |
|
||||
| Switch.cs:62:15:62:20 | break; | Switch.cs:62:15:62:20 | break; | break |
|
||||
| Switch.cs:67:5:75:5 | {...} | Switch.cs:71:15:71:20 | break; | normal (break) |
|
||||
| Switch.cs:62:17:62:22 | break; | Switch.cs:62:17:62:22 | break; | break |
|
||||
| Switch.cs:67:5:75:5 | {...} | Switch.cs:71:17:71:22 | break; | normal (break) |
|
||||
| Switch.cs:67:5:75:5 | {...} | Switch.cs:72:18:72:19 | "" | no-match |
|
||||
| Switch.cs:67:5:75:5 | {...} | Switch.cs:73:15:73:20 | break; | normal (break) |
|
||||
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:71:15:71:20 | break; | normal (break) |
|
||||
| Switch.cs:67:5:75:5 | {...} | Switch.cs:73:17:73:22 | break; | normal (break) |
|
||||
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:71:17:71:22 | break; | normal (break) |
|
||||
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:72:18:72:19 | "" | no-match |
|
||||
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:73:15:73:20 | break; | normal (break) |
|
||||
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:73:17:73:22 | break; | normal (break) |
|
||||
| Switch.cs:68:17:68:25 | (...) ... | Switch.cs:68:17:68:25 | (...) ... | normal |
|
||||
| Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:25:68:25 | access to parameter s | normal |
|
||||
| Switch.cs:70:13:70:24 | case ...: | Switch.cs:70:18:70:20 | access to type Int32 | no-match |
|
||||
| Switch.cs:70:13:70:24 | case ...: | Switch.cs:71:15:71:20 | break; | break |
|
||||
| Switch.cs:70:13:70:23 | case ...: | Switch.cs:70:18:70:20 | access to type Int32 | no-match |
|
||||
| Switch.cs:70:13:70:23 | case ...: | Switch.cs:71:17:71:22 | break; | break |
|
||||
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:70:18:70:20 | access to type Int32 | no-match |
|
||||
| Switch.cs:71:15:71:20 | break; | Switch.cs:71:15:71:20 | break; | break |
|
||||
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" | no-match |
|
||||
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:73:15:73:20 | break; | break |
|
||||
| Switch.cs:71:17:71:22 | break; | Switch.cs:71:17:71:22 | break; | break |
|
||||
| Switch.cs:72:13:72:20 | case ...: | Switch.cs:72:18:72:19 | "" | no-match |
|
||||
| Switch.cs:72:13:72:20 | case ...: | Switch.cs:73:17:73:22 | break; | break |
|
||||
| Switch.cs:72:18:72:19 | "" | Switch.cs:72:18:72:19 | "" | match |
|
||||
| Switch.cs:72:18:72:19 | "" | Switch.cs:72:18:72:19 | "" | no-match |
|
||||
| Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; | break |
|
||||
| Switch.cs:78:5:89:5 | {...} | Switch.cs:82:15:82:26 | return ...; | return |
|
||||
| Switch.cs:78:5:89:5 | {...} | Switch.cs:86:15:86:26 | return ...; | return |
|
||||
| Switch.cs:73:17:73:22 | break; | Switch.cs:73:17:73:22 | break; | break |
|
||||
| Switch.cs:78:5:89:5 | {...} | Switch.cs:82:17:82:28 | return ...; | return |
|
||||
| Switch.cs:78:5:89:5 | {...} | Switch.cs:86:17:86:28 | return ...; | return |
|
||||
| Switch.cs:78:5:89:5 | {...} | Switch.cs:88:9:88:21 | return ...; | return |
|
||||
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:82:15:82:26 | return ...; | return |
|
||||
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:82:17:82:28 | return ...; | return |
|
||||
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:83:18:83:18 | 2 | no-match |
|
||||
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:85:17:85:22 | break; | normal (break) |
|
||||
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:86:15:86:26 | return ...; | return |
|
||||
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:85:21:85:26 | break; | normal (break) |
|
||||
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:86:17:86:28 | return ...; | return |
|
||||
| Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:79:17:79:17 | access to parameter i | normal |
|
||||
| Switch.cs:81:13:81:20 | case ...: | Switch.cs:81:18:81:18 | 1 | no-match |
|
||||
| Switch.cs:81:13:81:20 | case ...: | Switch.cs:82:15:82:26 | return ...; | return |
|
||||
| Switch.cs:81:13:81:19 | case ...: | Switch.cs:81:18:81:18 | 1 | no-match |
|
||||
| Switch.cs:81:13:81:19 | case ...: | Switch.cs:82:17:82:28 | return ...; | return |
|
||||
| Switch.cs:81:18:81:18 | 1 | Switch.cs:81:18:81:18 | 1 | match |
|
||||
| Switch.cs:81:18:81:18 | 1 | Switch.cs:81:18:81:18 | 1 | no-match |
|
||||
| Switch.cs:82:15:82:26 | return ...; | Switch.cs:82:15:82:26 | return ...; | return |
|
||||
| Switch.cs:82:22:82:25 | true | Switch.cs:82:22:82:25 | true | normal |
|
||||
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:18:83:18 | 2 | no-match |
|
||||
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:84:19:84:23 | ... > ... | false |
|
||||
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:85:17:85:22 | break; | break |
|
||||
| Switch.cs:82:17:82:28 | return ...; | Switch.cs:82:17:82:28 | return ...; | return |
|
||||
| Switch.cs:82:24:82:27 | true | Switch.cs:82:24:82:27 | true | normal |
|
||||
| Switch.cs:83:13:83:19 | case ...: | Switch.cs:83:18:83:18 | 2 | no-match |
|
||||
| Switch.cs:83:13:83:19 | case ...: | Switch.cs:84:21:84:25 | ... > ... | false |
|
||||
| Switch.cs:83:13:83:19 | case ...: | Switch.cs:85:21:85:26 | break; | break |
|
||||
| Switch.cs:83:18:83:18 | 2 | Switch.cs:83:18:83:18 | 2 | match |
|
||||
| Switch.cs:83:18:83:18 | 2 | Switch.cs:83:18:83:18 | 2 | no-match |
|
||||
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:19:84:23 | ... > ... | false |
|
||||
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:85:17:85:22 | break; | break |
|
||||
| Switch.cs:84:19:84:19 | access to parameter j | Switch.cs:84:19:84:19 | access to parameter j | normal |
|
||||
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:84:19:84:23 | ... > ... | false |
|
||||
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:84:19:84:23 | ... > ... | true |
|
||||
| Switch.cs:84:23:84:23 | 2 | Switch.cs:84:23:84:23 | 2 | normal |
|
||||
| Switch.cs:85:17:85:22 | break; | Switch.cs:85:17:85:22 | break; | break |
|
||||
| Switch.cs:86:15:86:26 | return ...; | Switch.cs:86:15:86:26 | return ...; | return |
|
||||
| Switch.cs:86:22:86:25 | true | Switch.cs:86:22:86:25 | true | normal |
|
||||
| Switch.cs:84:17:85:26 | if (...) ... | Switch.cs:84:21:84:25 | ... > ... | false |
|
||||
| Switch.cs:84:17:85:26 | if (...) ... | Switch.cs:85:21:85:26 | break; | break |
|
||||
| Switch.cs:84:21:84:21 | access to parameter j | Switch.cs:84:21:84:21 | access to parameter j | normal |
|
||||
| Switch.cs:84:21:84:25 | ... > ... | Switch.cs:84:21:84:25 | ... > ... | false |
|
||||
| Switch.cs:84:21:84:25 | ... > ... | Switch.cs:84:21:84:25 | ... > ... | true |
|
||||
| Switch.cs:84:25:84:25 | 2 | Switch.cs:84:25:84:25 | 2 | normal |
|
||||
| Switch.cs:85:21:85:26 | break; | Switch.cs:85:21:85:26 | break; | break |
|
||||
| Switch.cs:86:17:86:28 | return ...; | Switch.cs:86:17:86:28 | return ...; | return |
|
||||
| Switch.cs:86:24:86:27 | true | Switch.cs:86:24:86:27 | true | normal |
|
||||
| Switch.cs:88:9:88:21 | return ...; | Switch.cs:88:9:88:21 | return ...; | return |
|
||||
| Switch.cs:88:16:88:20 | false | Switch.cs:88:16:88:20 | false | normal |
|
||||
| Switch.cs:92:5:99:5 | {...} | Switch.cs:96:15:96:26 | return ...; | return |
|
||||
| Switch.cs:92:5:99:5 | {...} | Switch.cs:96:17:96:28 | return ...; | return |
|
||||
| Switch.cs:92:5:99:5 | {...} | Switch.cs:98:9:98:21 | return ...; | return |
|
||||
| Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:95:18:95:20 | access to type Int32 | no-match |
|
||||
| Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:96:15:96:26 | return ...; | return |
|
||||
| Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:96:17:96:28 | return ...; | return |
|
||||
| Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:93:17:93:17 | access to parameter o | normal |
|
||||
| Switch.cs:95:13:95:24 | case ...: | Switch.cs:95:18:95:20 | access to type Int32 | no-match |
|
||||
| Switch.cs:95:13:95:24 | case ...: | Switch.cs:96:15:96:26 | return ...; | return |
|
||||
| Switch.cs:95:13:95:23 | case ...: | Switch.cs:95:18:95:20 | access to type Int32 | no-match |
|
||||
| Switch.cs:95:13:95:23 | case ...: | Switch.cs:96:17:96:28 | return ...; | return |
|
||||
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:95:18:95:20 | access to type Int32 | match |
|
||||
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:95:18:95:20 | access to type Int32 | no-match |
|
||||
| Switch.cs:96:15:96:26 | return ...; | Switch.cs:96:15:96:26 | return ...; | return |
|
||||
| Switch.cs:96:22:96:25 | true | Switch.cs:96:22:96:25 | true | normal |
|
||||
| Switch.cs:96:17:96:28 | return ...; | Switch.cs:96:17:96:28 | return ...; | return |
|
||||
| Switch.cs:96:24:96:27 | true | Switch.cs:96:24:96:27 | true | normal |
|
||||
| Switch.cs:98:9:98:21 | return ...; | Switch.cs:98:9:98:21 | return ...; | return |
|
||||
| Switch.cs:98:16:98:20 | false | Switch.cs:98:16:98:20 | false | normal |
|
||||
| Switch.cs:102:5:109:5 | {...} | Switch.cs:105:22:105:30 | return ...; | return |
|
||||
| Switch.cs:102:5:109:5 | {...} | Switch.cs:106:22:106:30 | return ...; | return |
|
||||
| Switch.cs:102:5:109:5 | {...} | Switch.cs:105:21:105:29 | return ...; | return |
|
||||
| Switch.cs:102:5:109:5 | {...} | Switch.cs:106:21:106:29 | return ...; | return |
|
||||
| Switch.cs:102:5:109:5 | {...} | Switch.cs:108:9:108:18 | return ...; | return |
|
||||
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:105:22:105:30 | return ...; | return |
|
||||
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:105:21:105:29 | return ...; | return |
|
||||
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:106:18:106:18 | 1 | no-match |
|
||||
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:106:22:106:30 | return ...; | return |
|
||||
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:106:21:106:29 | return ...; | return |
|
||||
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:17:103:17 | access to parameter s | non-null |
|
||||
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:17:103:17 | access to parameter s | null |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:17:103:17 | access to parameter s | null |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:19:103:25 | access to property Length | normal |
|
||||
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:18:105:18 | 0 | no-match |
|
||||
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:22:105:30 | return ...; | return |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:105:18:105:18 | 0 | no-match |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:105:21:105:29 | return ...; | return |
|
||||
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:18:105:18 | 0 | match |
|
||||
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:18:105:18 | 0 | no-match |
|
||||
| Switch.cs:105:22:105:30 | return ...; | Switch.cs:105:22:105:30 | return ...; | return |
|
||||
| Switch.cs:105:29:105:29 | 0 | Switch.cs:105:29:105:29 | 0 | normal |
|
||||
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:18:106:18 | 1 | no-match |
|
||||
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:22:106:30 | return ...; | return |
|
||||
| Switch.cs:105:21:105:29 | return ...; | Switch.cs:105:21:105:29 | return ...; | return |
|
||||
| Switch.cs:105:28:105:28 | 0 | Switch.cs:105:28:105:28 | 0 | normal |
|
||||
| Switch.cs:106:13:106:19 | case ...: | Switch.cs:106:18:106:18 | 1 | no-match |
|
||||
| Switch.cs:106:13:106:19 | case ...: | Switch.cs:106:21:106:29 | return ...; | return |
|
||||
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:18:106:18 | 1 | match |
|
||||
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:18:106:18 | 1 | no-match |
|
||||
| Switch.cs:106:22:106:30 | return ...; | Switch.cs:106:22:106:30 | return ...; | return |
|
||||
| Switch.cs:106:29:106:29 | 1 | Switch.cs:106:29:106:29 | 1 | normal |
|
||||
| Switch.cs:106:21:106:29 | return ...; | Switch.cs:106:21:106:29 | return ...; | return |
|
||||
| Switch.cs:106:28:106:28 | 1 | Switch.cs:106:28:106:28 | 1 | normal |
|
||||
| Switch.cs:108:9:108:18 | return ...; | Switch.cs:108:9:108:18 | return ...; | return |
|
||||
| Switch.cs:108:16:108:17 | -... | Switch.cs:108:16:108:17 | -... | normal |
|
||||
| Switch.cs:108:17:108:17 | 1 | Switch.cs:108:17:108:17 | 1 | normal |
|
||||
| Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:28:111:48 | throw ... | throw(Exception) |
|
||||
| Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:34:111:48 | object creation of type Exception | normal |
|
||||
| Switch.cs:114:5:121:5 | {...} | Switch.cs:117:36:117:44 | return ...; | return |
|
||||
| Switch.cs:114:5:121:5 | {...} | Switch.cs:118:35:118:43 | return ...; | return |
|
||||
| Switch.cs:114:5:121:5 | {...} | Switch.cs:117:37:117:45 | return ...; | return |
|
||||
| Switch.cs:114:5:121:5 | {...} | Switch.cs:118:36:118:44 | return ...; | return |
|
||||
| Switch.cs:114:5:121:5 | {...} | Switch.cs:120:9:120:18 | return ...; | return |
|
||||
| Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:117:36:117:44 | return ...; | return |
|
||||
| Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:117:37:117:45 | return ...; | return |
|
||||
| Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:118:18:118:18 | 2 | no-match |
|
||||
| Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:118:25:118:31 | ... == ... | false |
|
||||
| Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:118:35:118:43 | return ...; | return |
|
||||
| Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:118:25:118:33 | ... == ... | false |
|
||||
| Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:118:36:118:44 | return ...; | return |
|
||||
| Switch.cs:115:17:115:17 | access to parameter s | Switch.cs:115:17:115:17 | access to parameter s | normal |
|
||||
| Switch.cs:115:17:115:24 | access to property Length | Switch.cs:115:17:115:24 | access to property Length | normal |
|
||||
| Switch.cs:117:13:117:34 | case ...: | Switch.cs:117:18:117:18 | 3 | no-match |
|
||||
| Switch.cs:117:13:117:34 | case ...: | Switch.cs:117:25:117:32 | ... == ... | false |
|
||||
| Switch.cs:117:13:117:34 | case ...: | Switch.cs:117:36:117:44 | return ...; | return |
|
||||
| Switch.cs:117:13:117:35 | case ...: | Switch.cs:117:18:117:18 | 3 | no-match |
|
||||
| Switch.cs:117:13:117:35 | case ...: | Switch.cs:117:25:117:34 | ... == ... | false |
|
||||
| Switch.cs:117:13:117:35 | case ...: | Switch.cs:117:37:117:45 | return ...; | return |
|
||||
| Switch.cs:117:18:117:18 | 3 | Switch.cs:117:18:117:18 | 3 | match |
|
||||
| Switch.cs:117:18:117:18 | 3 | Switch.cs:117:18:117:18 | 3 | no-match |
|
||||
| Switch.cs:117:25:117:25 | access to parameter s | Switch.cs:117:25:117:25 | access to parameter s | normal |
|
||||
| Switch.cs:117:25:117:32 | ... == ... | Switch.cs:117:25:117:32 | ... == ... | false |
|
||||
| Switch.cs:117:25:117:32 | ... == ... | Switch.cs:117:25:117:32 | ... == ... | true |
|
||||
| Switch.cs:117:28:117:32 | "foo" | Switch.cs:117:28:117:32 | "foo" | normal |
|
||||
| Switch.cs:117:36:117:44 | return ...; | Switch.cs:117:36:117:44 | return ...; | return |
|
||||
| Switch.cs:117:43:117:43 | 1 | Switch.cs:117:43:117:43 | 1 | normal |
|
||||
| Switch.cs:118:13:118:33 | case ...: | Switch.cs:118:18:118:18 | 2 | no-match |
|
||||
| Switch.cs:118:13:118:33 | case ...: | Switch.cs:118:25:118:31 | ... == ... | false |
|
||||
| Switch.cs:118:13:118:33 | case ...: | Switch.cs:118:35:118:43 | return ...; | return |
|
||||
| Switch.cs:117:25:117:34 | ... == ... | Switch.cs:117:25:117:34 | ... == ... | false |
|
||||
| Switch.cs:117:25:117:34 | ... == ... | Switch.cs:117:25:117:34 | ... == ... | true |
|
||||
| Switch.cs:117:30:117:34 | "foo" | Switch.cs:117:30:117:34 | "foo" | normal |
|
||||
| Switch.cs:117:37:117:45 | return ...; | Switch.cs:117:37:117:45 | return ...; | return |
|
||||
| Switch.cs:117:44:117:44 | 1 | Switch.cs:117:44:117:44 | 1 | normal |
|
||||
| Switch.cs:118:13:118:34 | case ...: | Switch.cs:118:18:118:18 | 2 | no-match |
|
||||
| Switch.cs:118:13:118:34 | case ...: | Switch.cs:118:25:118:33 | ... == ... | false |
|
||||
| Switch.cs:118:13:118:34 | case ...: | Switch.cs:118:36:118:44 | return ...; | return |
|
||||
| Switch.cs:118:18:118:18 | 2 | Switch.cs:118:18:118:18 | 2 | match |
|
||||
| Switch.cs:118:18:118:18 | 2 | Switch.cs:118:18:118:18 | 2 | no-match |
|
||||
| Switch.cs:118:25:118:25 | access to parameter s | Switch.cs:118:25:118:25 | access to parameter s | normal |
|
||||
| Switch.cs:118:25:118:31 | ... == ... | Switch.cs:118:25:118:31 | ... == ... | false |
|
||||
| Switch.cs:118:25:118:31 | ... == ... | Switch.cs:118:25:118:31 | ... == ... | true |
|
||||
| Switch.cs:118:28:118:31 | "fu" | Switch.cs:118:28:118:31 | "fu" | normal |
|
||||
| Switch.cs:118:35:118:43 | return ...; | Switch.cs:118:35:118:43 | return ...; | return |
|
||||
| Switch.cs:118:42:118:42 | 2 | Switch.cs:118:42:118:42 | 2 | normal |
|
||||
| Switch.cs:118:25:118:33 | ... == ... | Switch.cs:118:25:118:33 | ... == ... | false |
|
||||
| Switch.cs:118:25:118:33 | ... == ... | Switch.cs:118:25:118:33 | ... == ... | true |
|
||||
| Switch.cs:118:30:118:33 | "fu" | Switch.cs:118:30:118:33 | "fu" | normal |
|
||||
| Switch.cs:118:36:118:44 | return ...; | Switch.cs:118:36:118:44 | return ...; | return |
|
||||
| Switch.cs:118:43:118:43 | 2 | Switch.cs:118:43:118:43 | 2 | normal |
|
||||
| Switch.cs:120:9:120:18 | return ...; | Switch.cs:120:9:120:18 | return ...; | return |
|
||||
| Switch.cs:120:16:120:17 | -... | Switch.cs:120:16:120:17 | -... | normal |
|
||||
| Switch.cs:120:17:120:17 | 1 | Switch.cs:120:17:120:17 | 1 | normal |
|
||||
@@ -2747,6 +3283,41 @@
|
||||
| Switch.cs:150:18:150:18 | 2 | Switch.cs:150:18:150:18 | 2 | no-match |
|
||||
| Switch.cs:150:21:150:29 | return ...; | Switch.cs:150:21:150:29 | return ...; | return |
|
||||
| Switch.cs:150:28:150:28 | 2 | Switch.cs:150:28:150:28 | 2 | normal |
|
||||
| Switch.cs:155:5:161:5 | {...} | Switch.cs:156:41:156:45 | false | throw(InvalidOperationException) [no-match] |
|
||||
| Switch.cs:155:5:161:5 | {...} | Switch.cs:158:13:158:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:155:5:161:5 | {...} | Switch.cs:160:13:160:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:156:9:156:55 | ... ...; | Switch.cs:156:13:156:54 | String s = ... | normal |
|
||||
| Switch.cs:156:9:156:55 | ... ...; | Switch.cs:156:41:156:45 | false | throw(InvalidOperationException) [no-match] |
|
||||
| Switch.cs:156:13:156:54 | String s = ... | Switch.cs:156:13:156:54 | String s = ... | normal |
|
||||
| Switch.cs:156:13:156:54 | String s = ... | Switch.cs:156:41:156:45 | false | throw(InvalidOperationException) [no-match] |
|
||||
| Switch.cs:156:17:156:17 | access to parameter b | Switch.cs:156:17:156:17 | access to parameter b | normal |
|
||||
| Switch.cs:156:17:156:54 | ... switch { ... } | Switch.cs:156:36:156:38 | "a" | normal |
|
||||
| Switch.cs:156:17:156:54 | ... switch { ... } | Switch.cs:156:41:156:45 | false | throw(InvalidOperationException) [no-match] |
|
||||
| Switch.cs:156:17:156:54 | ... switch { ... } | Switch.cs:156:50:156:52 | "b" | normal |
|
||||
| Switch.cs:156:28:156:31 | true | Switch.cs:156:28:156:31 | true | match |
|
||||
| Switch.cs:156:28:156:31 | true | Switch.cs:156:28:156:31 | true | no-match |
|
||||
| Switch.cs:156:28:156:38 | ... => ... | Switch.cs:156:28:156:31 | true | no-match |
|
||||
| Switch.cs:156:28:156:38 | ... => ... | Switch.cs:156:36:156:38 | "a" | normal |
|
||||
| Switch.cs:156:36:156:38 | "a" | Switch.cs:156:36:156:38 | "a" | normal |
|
||||
| Switch.cs:156:41:156:45 | false | Switch.cs:156:41:156:45 | false | match |
|
||||
| Switch.cs:156:41:156:45 | false | Switch.cs:156:41:156:45 | false | no-match |
|
||||
| Switch.cs:156:41:156:52 | ... => ... | Switch.cs:156:41:156:45 | false | no-match |
|
||||
| Switch.cs:156:41:156:52 | ... => ... | Switch.cs:156:50:156:52 | "b" | normal |
|
||||
| Switch.cs:156:50:156:52 | "b" | Switch.cs:156:50:156:52 | "b" | normal |
|
||||
| Switch.cs:157:9:160:49 | if (...) ... | Switch.cs:158:13:158:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:157:9:160:49 | if (...) ... | Switch.cs:160:13:160:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:157:13:157:13 | access to parameter b | Switch.cs:157:13:157:13 | access to parameter b | false |
|
||||
| Switch.cs:157:13:157:13 | access to parameter b | Switch.cs:157:13:157:13 | access to parameter b | true |
|
||||
| Switch.cs:158:13:158:48 | call to method WriteLine | Switch.cs:158:13:158:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:38:158:47 | $"..." | normal |
|
||||
| Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:40:158:43 | "a = " | normal |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:45:158:45 | access to local variable s | normal |
|
||||
| Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:160:13:160:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:38:160:47 | $"..." | normal |
|
||||
| Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:40:160:43 | "b = " | normal |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:45:160:45 | access to local variable s | normal |
|
||||
| TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:8:13:8:27 | Type t = ... | normal |
|
||||
| TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:13:5:25 | String s = ... | normal |
|
||||
| TypeAccesses.cs:5:13:5:25 | String s = ... | TypeAccesses.cs:5:13:5:25 | String s = ... | normal |
|
||||
|
||||
@@ -293,12 +293,15 @@
|
||||
| ArrayCreation.cs:5:20:5:32 | array creation of type Int32[,] | ArrayCreation.cs:5:12:5:13 | exit M2 | semmle.label | successor |
|
||||
| ArrayCreation.cs:5:28:5:28 | 0 | ArrayCreation.cs:5:31:5:31 | 1 | semmle.label | successor |
|
||||
| ArrayCreation.cs:5:31:5:31 | 1 | ArrayCreation.cs:5:20:5:32 | array creation of type Int32[,] | semmle.label | successor |
|
||||
| ArrayCreation.cs:7:11:7:12 | enter M3 | ArrayCreation.cs:7:19:7:36 | array creation of type Int32[] | semmle.label | successor |
|
||||
| ArrayCreation.cs:7:11:7:12 | enter M3 | ArrayCreation.cs:7:19:7:36 | 2 | semmle.label | successor |
|
||||
| ArrayCreation.cs:7:19:7:36 | 2 | ArrayCreation.cs:7:19:7:36 | array creation of type Int32[] | semmle.label | successor |
|
||||
| ArrayCreation.cs:7:19:7:36 | array creation of type Int32[] | ArrayCreation.cs:7:31:7:31 | 0 | semmle.label | successor |
|
||||
| ArrayCreation.cs:7:29:7:36 | { ..., ... } | ArrayCreation.cs:7:11:7:12 | exit M3 | semmle.label | successor |
|
||||
| ArrayCreation.cs:7:31:7:31 | 0 | ArrayCreation.cs:7:34:7:34 | 1 | semmle.label | successor |
|
||||
| ArrayCreation.cs:7:34:7:34 | 1 | ArrayCreation.cs:7:29:7:36 | { ..., ... } | semmle.label | successor |
|
||||
| ArrayCreation.cs:9:12:9:13 | enter M4 | ArrayCreation.cs:9:20:9:52 | array creation of type Int32[,] | semmle.label | successor |
|
||||
| ArrayCreation.cs:9:12:9:13 | enter M4 | ArrayCreation.cs:9:20:9:52 | 2 | semmle.label | successor |
|
||||
| ArrayCreation.cs:9:20:9:52 | 2 | ArrayCreation.cs:9:20:9:52 | 2 | semmle.label | successor |
|
||||
| ArrayCreation.cs:9:20:9:52 | 2 | ArrayCreation.cs:9:20:9:52 | array creation of type Int32[,] | semmle.label | successor |
|
||||
| ArrayCreation.cs:9:20:9:52 | array creation of type Int32[,] | ArrayCreation.cs:9:35:9:35 | 0 | semmle.label | successor |
|
||||
| ArrayCreation.cs:9:31:9:52 | { ..., ... } | ArrayCreation.cs:9:12:9:13 | exit M4 | semmle.label | successor |
|
||||
| ArrayCreation.cs:9:33:9:40 | { ..., ... } | ArrayCreation.cs:9:45:9:45 | 2 | semmle.label | successor |
|
||||
@@ -307,6 +310,565 @@
|
||||
| ArrayCreation.cs:9:43:9:50 | { ..., ... } | ArrayCreation.cs:9:31:9:52 | { ..., ... } | semmle.label | successor |
|
||||
| ArrayCreation.cs:9:45:9:45 | 2 | ArrayCreation.cs:9:48:9:48 | 3 | semmle.label | successor |
|
||||
| ArrayCreation.cs:9:48:9:48 | 3 | ArrayCreation.cs:9:43:9:50 | { ..., ... } | semmle.label | successor |
|
||||
| Assert.cs:7:10:7:11 | enter M1 | Assert.cs:8:5:12:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:8:5:12:5 | {...} | Assert.cs:9:9:9:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:9:9:9:33 | ... ...; | Assert.cs:9:20:9:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:9:16:9:32 | String s = ... | Assert.cs:10:9:10:32 | ...; | semmle.label | successor |
|
||||
| Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:24:9:27 | null | semmle.label | true |
|
||||
| Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:31:9:32 | "" | semmle.label | false |
|
||||
| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:20:9:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:9:24:9:27 | null | Assert.cs:9:16:9:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:9:31:9:32 | "" | Assert.cs:9:16:9:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | Assert.cs:7:10:7:11 | exit M1 | semmle.label | exit |
|
||||
| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:11:9:11:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:10:9:10:32 | ...; | Assert.cs:10:22:10:22 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:27:10:30 | null | semmle.label | successor |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | semmle.label | false |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | semmle.label | true |
|
||||
| Assert.cs:10:27:10:30 | null | Assert.cs:10:22:10:30 | ... != ... | semmle.label | successor |
|
||||
| Assert.cs:11:9:11:35 | call to method WriteLine | Assert.cs:7:10:7:11 | exit M1 | semmle.label | successor |
|
||||
| Assert.cs:11:9:11:36 | ...; | Assert.cs:11:27:11:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:11:27:11:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:11:27:11:34 | access to property Length | Assert.cs:11:9:11:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:14:10:14:11 | enter M2 | Assert.cs:15:5:19:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:15:5:19:5 | {...} | Assert.cs:16:9:16:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:16:9:16:33 | ... ...; | Assert.cs:16:20:16:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:16:16:16:32 | String s = ... | Assert.cs:17:9:17:25 | ...; | semmle.label | successor |
|
||||
| Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:24:16:27 | null | semmle.label | true |
|
||||
| Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:31:16:32 | "" | semmle.label | false |
|
||||
| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:20:16:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:16:24:16:27 | null | Assert.cs:16:16:16:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:16:31:16:32 | "" | Assert.cs:16:16:16:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:14:10:14:11 | exit M2 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:18:9:18:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:17:9:17:25 | ...; | Assert.cs:17:23:17:23 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | semmle.label | non-null |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | semmle.label | null |
|
||||
| Assert.cs:18:9:18:35 | call to method WriteLine | Assert.cs:14:10:14:11 | exit M2 | semmle.label | successor |
|
||||
| Assert.cs:18:9:18:36 | ...; | Assert.cs:18:27:18:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:18:27:18:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:18:27:18:34 | access to property Length | Assert.cs:18:9:18:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:21:10:21:11 | enter M3 | Assert.cs:22:5:26:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:22:5:26:5 | {...} | Assert.cs:23:9:23:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:23:9:23:33 | ... ...; | Assert.cs:23:20:23:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:23:16:23:32 | String s = ... | Assert.cs:24:9:24:28 | ...; | semmle.label | successor |
|
||||
| Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:24:23:27 | null | semmle.label | true |
|
||||
| Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:31:23:32 | "" | semmle.label | false |
|
||||
| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:20:23:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:23:24:23:27 | null | Assert.cs:23:16:23:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:23:31:23:32 | "" | Assert.cs:23:16:23:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:21:10:21:11 | exit M3 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:25:9:25:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:24:9:24:28 | ...; | Assert.cs:24:26:24:26 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | semmle.label | null |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | semmle.label | non-null |
|
||||
| Assert.cs:25:9:25:35 | call to method WriteLine | Assert.cs:21:10:21:11 | exit M3 | semmle.label | successor |
|
||||
| Assert.cs:25:9:25:36 | ...; | Assert.cs:25:27:25:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:25:27:25:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:25:27:25:34 | access to property Length | Assert.cs:25:9:25:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:28:10:28:11 | enter M4 | Assert.cs:29:5:33:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:29:5:33:5 | {...} | Assert.cs:30:9:30:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:30:9:30:33 | ... ...; | Assert.cs:30:20:30:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:30:16:30:32 | String s = ... | Assert.cs:31:9:31:33 | ...; | semmle.label | successor |
|
||||
| Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:24:30:27 | null | semmle.label | true |
|
||||
| Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:31:30:32 | "" | semmle.label | false |
|
||||
| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:20:30:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:30:24:30:27 | null | Assert.cs:30:16:30:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:30:31:30:32 | "" | Assert.cs:30:16:30:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:28:10:28:11 | exit M4 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:32:9:32:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:31:9:31:33 | ...; | Assert.cs:31:23:31:23 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:28:31:31 | null | semmle.label | successor |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:31:28:31:31 | null | Assert.cs:31:23:31:31 | ... == ... | semmle.label | successor |
|
||||
| Assert.cs:32:9:32:35 | call to method WriteLine | Assert.cs:28:10:28:11 | exit M4 | semmle.label | successor |
|
||||
| Assert.cs:32:9:32:36 | ...; | Assert.cs:32:27:32:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:32:27:32:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:32:27:32:34 | access to property Length | Assert.cs:32:9:32:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:35:10:35:11 | enter M5 | Assert.cs:36:5:40:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:36:5:40:5 | {...} | Assert.cs:37:9:37:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:37:9:37:33 | ... ...; | Assert.cs:37:20:37:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:37:16:37:32 | String s = ... | Assert.cs:38:9:38:33 | ...; | semmle.label | successor |
|
||||
| Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:24:37:27 | null | semmle.label | true |
|
||||
| Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:31:37:32 | "" | semmle.label | false |
|
||||
| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:20:37:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:37:24:37:27 | null | Assert.cs:37:16:37:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:37:31:37:32 | "" | Assert.cs:37:16:37:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:35:10:35:11 | exit M5 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:39:9:39:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:38:9:38:33 | ...; | Assert.cs:38:23:38:23 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:28:38:31 | null | semmle.label | successor |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:38:28:38:31 | null | Assert.cs:38:23:38:31 | ... != ... | semmle.label | successor |
|
||||
| Assert.cs:39:9:39:35 | call to method WriteLine | Assert.cs:35:10:35:11 | exit M5 | semmle.label | successor |
|
||||
| Assert.cs:39:9:39:36 | ...; | Assert.cs:39:27:39:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:39:27:39:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:39:27:39:34 | access to property Length | Assert.cs:39:9:39:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:42:10:42:11 | enter M6 | Assert.cs:43:5:47:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:43:5:47:5 | {...} | Assert.cs:44:9:44:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:44:9:44:33 | ... ...; | Assert.cs:44:20:44:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:44:16:44:32 | String s = ... | Assert.cs:45:9:45:34 | ...; | semmle.label | successor |
|
||||
| Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:24:44:27 | null | semmle.label | true |
|
||||
| Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:31:44:32 | "" | semmle.label | false |
|
||||
| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:20:44:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:44:24:44:27 | null | Assert.cs:44:16:44:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:44:31:44:32 | "" | Assert.cs:44:16:44:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:42:10:42:11 | exit M6 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:46:9:46:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:45:9:45:34 | ...; | Assert.cs:45:24:45:24 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:29:45:32 | null | semmle.label | successor |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | semmle.label | false |
|
||||
| Assert.cs:45:29:45:32 | null | Assert.cs:45:24:45:32 | ... != ... | semmle.label | successor |
|
||||
| Assert.cs:46:9:46:35 | call to method WriteLine | Assert.cs:42:10:42:11 | exit M6 | semmle.label | successor |
|
||||
| Assert.cs:46:9:46:36 | ...; | Assert.cs:46:27:46:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:46:27:46:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:46:27:46:34 | access to property Length | Assert.cs:46:9:46:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:49:10:49:11 | enter M7 | Assert.cs:50:5:54:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:50:5:54:5 | {...} | Assert.cs:51:9:51:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:51:9:51:33 | ... ...; | Assert.cs:51:20:51:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:51:16:51:32 | String s = ... | Assert.cs:52:9:52:34 | ...; | semmle.label | successor |
|
||||
| Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:24:51:27 | null | semmle.label | true |
|
||||
| Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:31:51:32 | "" | semmle.label | false |
|
||||
| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:20:51:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:51:24:51:27 | null | Assert.cs:51:16:51:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:51:31:51:32 | "" | Assert.cs:51:16:51:32 | String s = ... | semmle.label | successor |
|
||||
| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:49:10:49:11 | exit M7 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:53:9:53:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:52:9:52:34 | ...; | Assert.cs:52:24:52:24 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:29:52:32 | null | semmle.label | successor |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | semmle.label | false |
|
||||
| Assert.cs:52:29:52:32 | null | Assert.cs:52:24:52:32 | ... == ... | semmle.label | successor |
|
||||
| Assert.cs:53:9:53:35 | call to method WriteLine | Assert.cs:49:10:49:11 | exit M7 | semmle.label | successor |
|
||||
| Assert.cs:53:9:53:36 | ...; | Assert.cs:53:27:53:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:53:27:53:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:53:27:53:34 | access to property Length | Assert.cs:53:9:53:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:57:5:61:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:57:5:61:5 | {...} | Assert.cs:58:9:58:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:58:9:58:33 | ... ...; | Assert.cs:58:20:58:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | Assert.cs:59:9:59:38 | [b (line 56): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | Assert.cs:59:9:59:38 | [b (line 56): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:24:58:27 | [b (line 56): true] null | semmle.label | true |
|
||||
| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:31:58:32 | [b (line 56): false] "" | semmle.label | false |
|
||||
| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:56:10:56:11 | exit M8 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:60:9:60:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:59:9:59:38 | [b (line 56): false] ...; | Assert.cs:59:23:59:36 | [b (line 56): false] ... && ... | semmle.label | successor |
|
||||
| Assert.cs:59:9:59:38 | [b (line 56): true] ...; | Assert.cs:59:23:59:36 | [b (line 56): true] ... && ... | semmle.label | successor |
|
||||
| Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | Assert.cs:59:28:59:31 | [b (line 56): false] null | semmle.label | successor |
|
||||
| Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | Assert.cs:59:28:59:31 | [b (line 56): true] null | semmle.label | successor |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | semmle.label | true |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | semmle.label | true |
|
||||
| Assert.cs:59:23:59:36 | [b (line 56): false] ... && ... | Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:59:23:59:36 | [b (line 56): true] ... && ... | Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:59:28:59:31 | [b (line 56): false] null | Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:59:28:59:31 | [b (line 56): true] null | Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:60:9:60:35 | call to method WriteLine | Assert.cs:56:10:56:11 | exit M8 | semmle.label | successor |
|
||||
| Assert.cs:60:9:60:36 | ...; | Assert.cs:60:27:60:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:60:27:60:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:60:27:60:34 | access to property Length | Assert.cs:60:9:60:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:64:5:68:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:64:5:68:5 | {...} | Assert.cs:65:9:65:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:65:9:65:33 | ... ...; | Assert.cs:65:20:65:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | Assert.cs:66:9:66:39 | [b (line 63): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | Assert.cs:66:9:66:39 | [b (line 63): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:24:65:27 | [b (line 63): true] null | semmle.label | true |
|
||||
| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:31:65:32 | [b (line 63): false] "" | semmle.label | false |
|
||||
| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:63:10:63:11 | exit M9 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:67:9:67:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:66:9:66:39 | [b (line 63): false] ...; | Assert.cs:66:24:66:37 | [b (line 63): false] ... \|\| ... | semmle.label | successor |
|
||||
| Assert.cs:66:9:66:39 | [b (line 63): true] ...; | Assert.cs:66:24:66:37 | [b (line 63): true] ... \|\| ... | semmle.label | successor |
|
||||
| Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | Assert.cs:66:29:66:32 | [b (line 63): false] null | semmle.label | successor |
|
||||
| Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | Assert.cs:66:29:66:32 | [b (line 63): true] null | semmle.label | successor |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | semmle.label | false |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | semmle.label | false |
|
||||
| Assert.cs:66:24:66:37 | [b (line 63): false] ... \|\| ... | Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:66:24:66:37 | [b (line 63): true] ... \|\| ... | Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:66:29:66:32 | [b (line 63): false] null | Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:66:29:66:32 | [b (line 63): true] null | Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | semmle.label | false |
|
||||
| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:67:9:67:35 | call to method WriteLine | Assert.cs:63:10:63:11 | exit M9 | semmle.label | successor |
|
||||
| Assert.cs:67:9:67:36 | ...; | Assert.cs:67:27:67:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:67:27:67:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:67:27:67:34 | access to property Length | Assert.cs:67:9:67:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:71:5:75:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:71:5:75:5 | {...} | Assert.cs:72:9:72:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:72:9:72:33 | ... ...; | Assert.cs:72:20:72:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | Assert.cs:73:9:73:38 | [b (line 70): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | Assert.cs:73:9:73:38 | [b (line 70): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:24:72:27 | [b (line 70): true] null | semmle.label | true |
|
||||
| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:31:72:32 | [b (line 70): false] "" | semmle.label | false |
|
||||
| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:70:10:70:12 | exit M10 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:74:9:74:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:73:9:73:38 | [b (line 70): false] ...; | Assert.cs:73:23:73:36 | [b (line 70): false] ... && ... | semmle.label | successor |
|
||||
| Assert.cs:73:9:73:38 | [b (line 70): true] ...; | Assert.cs:73:23:73:36 | [b (line 70): true] ... && ... | semmle.label | successor |
|
||||
| Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | Assert.cs:73:28:73:31 | [b (line 70): false] null | semmle.label | successor |
|
||||
| Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | Assert.cs:73:28:73:31 | [b (line 70): true] null | semmle.label | successor |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | semmle.label | true |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | semmle.label | true |
|
||||
| Assert.cs:73:23:73:36 | [b (line 70): false] ... && ... | Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:73:23:73:36 | [b (line 70): true] ... && ... | Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:73:28:73:31 | [b (line 70): false] null | Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:73:28:73:31 | [b (line 70): true] null | Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:74:9:74:35 | call to method WriteLine | Assert.cs:70:10:70:12 | exit M10 | semmle.label | successor |
|
||||
| Assert.cs:74:9:74:36 | ...; | Assert.cs:74:27:74:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:74:27:74:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:74:27:74:34 | access to property Length | Assert.cs:74:9:74:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:78:5:82:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:78:5:82:5 | {...} | Assert.cs:79:9:79:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:79:9:79:33 | ... ...; | Assert.cs:79:20:79:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | Assert.cs:80:9:80:39 | [b (line 77): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | Assert.cs:80:9:80:39 | [b (line 77): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:24:79:27 | [b (line 77): true] null | semmle.label | true |
|
||||
| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:31:79:32 | [b (line 77): false] "" | semmle.label | false |
|
||||
| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:77:10:77:12 | exit M11 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:81:9:81:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:80:9:80:39 | [b (line 77): false] ...; | Assert.cs:80:24:80:37 | [b (line 77): false] ... \|\| ... | semmle.label | successor |
|
||||
| Assert.cs:80:9:80:39 | [b (line 77): true] ...; | Assert.cs:80:24:80:37 | [b (line 77): true] ... \|\| ... | semmle.label | successor |
|
||||
| Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | Assert.cs:80:29:80:32 | [b (line 77): false] null | semmle.label | successor |
|
||||
| Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | Assert.cs:80:29:80:32 | [b (line 77): true] null | semmle.label | successor |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | semmle.label | false |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | semmle.label | false |
|
||||
| Assert.cs:80:24:80:37 | [b (line 77): false] ... \|\| ... | Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:80:24:80:37 | [b (line 77): true] ... \|\| ... | Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:80:29:80:32 | [b (line 77): false] null | Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:80:29:80:32 | [b (line 77): true] null | Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | semmle.label | false |
|
||||
| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:81:9:81:35 | call to method WriteLine | Assert.cs:77:10:77:12 | exit M11 | semmle.label | successor |
|
||||
| Assert.cs:81:9:81:36 | ...; | Assert.cs:81:27:81:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:81:27:81:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:81:27:81:34 | access to property Length | Assert.cs:81:9:81:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:85:5:129:5 | {...} | semmle.label | successor |
|
||||
| Assert.cs:85:5:129:5 | {...} | Assert.cs:86:9:86:33 | ... ...; | semmle.label | successor |
|
||||
| Assert.cs:86:9:86:33 | ... ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | Assert.cs:87:9:87:32 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | Assert.cs:87:9:87:32 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:24:86:27 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:31:86:32 | [b (line 84): false] "" | semmle.label | false |
|
||||
| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:20:86:20 | access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | semmle.label | successor |
|
||||
| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exit |
|
||||
| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exit |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:88:9:88:36 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:88:9:88:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:87:9:87:32 | [b (line 84): false] ...; | Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:87:9:87:32 | [b (line 84): true] ...; | Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | Assert.cs:87:27:87:30 | [b (line 84): false] null | semmle.label | successor |
|
||||
| Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | Assert.cs:87:27:87:30 | [b (line 84): true] null | semmle.label | successor |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | semmle.label | false |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | semmle.label | true |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | semmle.label | false |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | semmle.label | true |
|
||||
| Assert.cs:87:27:87:30 | [b (line 84): false] null | Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:87:27:87:30 | [b (line 84): true] null | Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | Assert.cs:90:9:90:26 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | Assert.cs:90:9:90:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:88:9:88:36 | [b (line 84): false] ...; | Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:88:9:88:36 | [b (line 84): true] ...; | Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | Assert.cs:91:9:91:25 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | Assert.cs:91:9:91:25 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:90:9:90:26 | [b (line 84): false] ...; | Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:90:9:90:26 | [b (line 84): true] ...; | Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | Assert.cs:90:24:90:25 | [b (line 84): false] "" | semmle.label | false |
|
||||
| Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | Assert.cs:90:17:90:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:92:9:92:36 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:92:9:92:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:91:9:91:25 | [b (line 84): false] ...; | Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:91:9:91:25 | [b (line 84): true] ...; | Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | semmle.label | non-null |
|
||||
| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | semmle.label | null |
|
||||
| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | semmle.label | non-null |
|
||||
| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | semmle.label | null |
|
||||
| Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | Assert.cs:94:9:94:26 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | Assert.cs:94:9:94:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:92:9:92:36 | [b (line 84): false] ...; | Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:92:9:92:36 | [b (line 84): true] ...; | Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | Assert.cs:95:9:95:28 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | Assert.cs:95:9:95:28 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:94:9:94:26 | [b (line 84): false] ...; | Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:94:9:94:26 | [b (line 84): true] ...; | Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | Assert.cs:94:24:94:25 | [b (line 84): false] "" | semmle.label | false |
|
||||
| Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | Assert.cs:94:17:94:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:96:9:96:36 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:96:9:96:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:95:9:95:28 | [b (line 84): false] ...; | Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:95:9:95:28 | [b (line 84): true] ...; | Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | semmle.label | null |
|
||||
| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | semmle.label | non-null |
|
||||
| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | semmle.label | null |
|
||||
| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | semmle.label | non-null |
|
||||
| Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | Assert.cs:98:9:98:26 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | Assert.cs:98:9:98:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:96:9:96:36 | [b (line 84): false] ...; | Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:96:9:96:36 | [b (line 84): true] ...; | Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | Assert.cs:99:9:99:33 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | Assert.cs:99:9:99:33 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:98:9:98:26 | [b (line 84): false] ...; | Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:98:9:98:26 | [b (line 84): true] ...; | Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | Assert.cs:98:24:98:25 | [b (line 84): false] "" | semmle.label | false |
|
||||
| Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | Assert.cs:98:17:98:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:100:9:100:36 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:100:9:100:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:99:9:99:33 | [b (line 84): false] ...; | Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:99:9:99:33 | [b (line 84): true] ...; | Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | Assert.cs:99:28:99:31 | [b (line 84): false] null | semmle.label | successor |
|
||||
| Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | Assert.cs:99:28:99:31 | [b (line 84): true] null | semmle.label | successor |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:99:28:99:31 | [b (line 84): false] null | Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:99:28:99:31 | [b (line 84): true] null | Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | Assert.cs:102:9:102:26 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | Assert.cs:102:9:102:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:100:9:100:36 | [b (line 84): false] ...; | Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:100:9:100:36 | [b (line 84): true] ...; | Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | Assert.cs:103:9:103:33 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | Assert.cs:103:9:103:33 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:102:9:102:26 | [b (line 84): false] ...; | Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:102:9:102:26 | [b (line 84): true] ...; | Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | Assert.cs:102:24:102:25 | [b (line 84): false] "" | semmle.label | false |
|
||||
| Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | Assert.cs:102:17:102:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:104:9:104:36 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:104:9:104:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:103:9:103:33 | [b (line 84): false] ...; | Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:103:9:103:33 | [b (line 84): true] ...; | Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | Assert.cs:103:28:103:31 | [b (line 84): false] null | semmle.label | successor |
|
||||
| Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | Assert.cs:103:28:103:31 | [b (line 84): true] null | semmle.label | successor |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:103:28:103:31 | [b (line 84): false] null | Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:103:28:103:31 | [b (line 84): true] null | Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | Assert.cs:106:9:106:26 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | Assert.cs:106:9:106:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:104:9:104:36 | [b (line 84): false] ...; | Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:104:9:104:36 | [b (line 84): true] ...; | Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | Assert.cs:107:9:107:34 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | Assert.cs:107:9:107:34 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:106:9:106:26 | [b (line 84): false] ...; | Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:106:9:106:26 | [b (line 84): true] ...; | Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | Assert.cs:106:24:106:25 | [b (line 84): false] "" | semmle.label | false |
|
||||
| Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | Assert.cs:106:17:106:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:108:9:108:36 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:108:9:108:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:107:9:107:34 | [b (line 84): false] ...; | Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:107:9:107:34 | [b (line 84): true] ...; | Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | Assert.cs:107:29:107:32 | [b (line 84): false] null | semmle.label | successor |
|
||||
| Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | Assert.cs:107:29:107:32 | [b (line 84): true] null | semmle.label | successor |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | semmle.label | false |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | semmle.label | false |
|
||||
| Assert.cs:107:29:107:32 | [b (line 84): false] null | Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:107:29:107:32 | [b (line 84): true] null | Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | Assert.cs:110:9:110:26 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | Assert.cs:110:9:110:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:108:9:108:36 | [b (line 84): false] ...; | Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:108:9:108:36 | [b (line 84): true] ...; | Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | Assert.cs:111:9:111:34 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | Assert.cs:111:9:111:34 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:110:9:110:26 | [b (line 84): false] ...; | Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:110:9:110:26 | [b (line 84): true] ...; | Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | Assert.cs:110:24:110:25 | [b (line 84): false] "" | semmle.label | false |
|
||||
| Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | Assert.cs:110:17:110:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:112:9:112:36 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:112:9:112:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:111:9:111:34 | [b (line 84): false] ...; | Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:111:9:111:34 | [b (line 84): true] ...; | Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | Assert.cs:111:29:111:32 | [b (line 84): false] null | semmle.label | successor |
|
||||
| Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | Assert.cs:111:29:111:32 | [b (line 84): true] null | semmle.label | successor |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | semmle.label | false |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | semmle.label | false |
|
||||
| Assert.cs:111:29:111:32 | [b (line 84): false] null | Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:111:29:111:32 | [b (line 84): true] null | Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | Assert.cs:114:9:114:26 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | Assert.cs:114:9:114:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:112:9:112:36 | [b (line 84): false] ...; | Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:112:9:112:36 | [b (line 84): true] ...; | Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | Assert.cs:115:9:115:38 | [b (line 84): false] ...; | semmle.label | successor |
|
||||
| Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | Assert.cs:115:9:115:38 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:114:9:114:26 | [b (line 84): false] ...; | Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:114:9:114:26 | [b (line 84): true] ...; | Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | Assert.cs:114:24:114:25 | [b (line 84): false] "" | semmle.label | false |
|
||||
| Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | Assert.cs:114:17:114:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:116:9:116:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:115:9:115:38 | [b (line 84): false] ...; | Assert.cs:115:23:115:36 | [b (line 84): false] ... && ... | semmle.label | successor |
|
||||
| Assert.cs:115:9:115:38 | [b (line 84): true] ...; | Assert.cs:115:23:115:36 | [b (line 84): true] ... && ... | semmle.label | successor |
|
||||
| Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | Assert.cs:115:28:115:31 | [b (line 84): false] null | semmle.label | successor |
|
||||
| Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | Assert.cs:115:28:115:31 | [b (line 84): true] null | semmle.label | successor |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | semmle.label | true |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | semmle.label | true |
|
||||
| Assert.cs:115:23:115:36 | [b (line 84): false] ... && ... | Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:115:23:115:36 | [b (line 84): true] ... && ... | Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:115:28:115:31 | [b (line 84): false] null | Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:115:28:115:31 | [b (line 84): true] null | Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | Assert.cs:118:9:118:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:116:9:116:36 | [b (line 84): true] ...; | Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | Assert.cs:119:9:119:40 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:118:9:118:26 | [b (line 84): true] ...; | Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:120:9:120:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:119:9:119:40 | [b (line 84): true] ...; | Assert.cs:119:24:119:38 | [b (line 84): true] ... \|\| ... | semmle.label | successor |
|
||||
| Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | Assert.cs:119:29:119:32 | [b (line 84): true] null | semmle.label | successor |
|
||||
| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:37:119:38 | [b (line 84): true] !... | semmle.label | false |
|
||||
| Assert.cs:119:24:119:38 | [b (line 84): true] ... \|\| ... | Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:119:29:119:32 | [b (line 84): true] null | Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:119:37:119:38 | [b (line 84): true] !... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | Assert.cs:122:9:122:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:120:9:120:36 | [b (line 84): true] ...; | Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | Assert.cs:123:9:123:38 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:122:9:122:26 | [b (line 84): true] ...; | Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:124:9:124:36 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:123:9:123:38 | [b (line 84): true] ...; | Assert.cs:123:23:123:36 | [b (line 84): true] ... && ... | semmle.label | successor |
|
||||
| Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | Assert.cs:123:28:123:31 | [b (line 84): true] null | semmle.label | successor |
|
||||
| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | semmle.label | false |
|
||||
| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | semmle.label | true |
|
||||
| Assert.cs:123:23:123:36 | [b (line 84): true] ... && ... | Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:123:28:123:31 | [b (line 84): true] null | Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | semmle.label | successor |
|
||||
| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | semmle.label | true |
|
||||
| Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | Assert.cs:126:9:126:26 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:124:9:124:36 | [b (line 84): true] ...; | Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | semmle.label | successor |
|
||||
| Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | semmle.label | successor |
|
||||
| Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | Assert.cs:127:9:127:40 | [b (line 84): true] ...; | semmle.label | successor |
|
||||
| Assert.cs:126:9:126:26 | [b (line 84): true] ...; | Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | semmle.label | successor |
|
||||
| Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | semmle.label | true |
|
||||
| Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | semmle.label | successor |
|
||||
| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 | semmle.label | exception(AssertFailedException) |
|
||||
| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:128:9:128:36 | ...; | semmle.label | successor |
|
||||
| Assert.cs:127:9:127:40 | [b (line 84): true] ...; | Assert.cs:127:24:127:38 | [b (line 84): true] ... \|\| ... | semmle.label | successor |
|
||||
| Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | Assert.cs:127:29:127:32 | [b (line 84): true] null | semmle.label | successor |
|
||||
| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:37:127:38 | [b (line 84): true] !... | semmle.label | false |
|
||||
| Assert.cs:127:24:127:38 | [b (line 84): true] ... \|\| ... | Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:127:29:127:32 | [b (line 84): true] null | Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | semmle.label | successor |
|
||||
| Assert.cs:127:37:127:38 | [b (line 84): true] !... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | semmle.label | successor |
|
||||
| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | semmle.label | true |
|
||||
| Assert.cs:128:9:128:35 | call to method WriteLine | Assert.cs:84:10:84:12 | exit M12 | semmle.label | successor |
|
||||
| Assert.cs:128:9:128:36 | ...; | Assert.cs:128:27:128:27 | access to local variable s | semmle.label | successor |
|
||||
| Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:27:128:34 | access to property Length | semmle.label | successor |
|
||||
| Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:9:128:35 | call to method WriteLine | semmle.label | successor |
|
||||
| Assignments.cs:3:10:3:10 | enter M | Assignments.cs:4:5:15:5 | {...} | semmle.label | successor |
|
||||
| Assignments.cs:4:5:15:5 | {...} | Assignments.cs:5:9:5:18 | ... ...; | semmle.label | successor |
|
||||
| Assignments.cs:5:9:5:18 | ... ...; | Assignments.cs:5:17:5:17 | 0 | semmle.label | successor |
|
||||
@@ -793,9 +1355,9 @@
|
||||
| Conditions.cs:79:17:79:25 | ... = ... | Conditions.cs:74:9:80:9 | foreach (... ... in ...) ... | semmle.label | successor |
|
||||
| Conditions.cs:79:17:79:26 | ...; | Conditions.cs:79:21:79:25 | false | semmle.label | successor |
|
||||
| Conditions.cs:79:21:79:25 | false | Conditions.cs:79:17:79:25 | ... = ... | semmle.label | successor |
|
||||
| Conditions.cs:81:9:82:16 | if (...) ... | Conditions.cs:81:12:81:12 | access to local variable b | semmle.label | successor |
|
||||
| Conditions.cs:81:12:81:12 | access to local variable b | Conditions.cs:82:13:82:16 | ...; | semmle.label | true |
|
||||
| Conditions.cs:81:12:81:12 | access to local variable b | Conditions.cs:83:16:83:16 | access to local variable x | semmle.label | false |
|
||||
| Conditions.cs:81:9:82:16 | if (...) ... | Conditions.cs:81:13:81:13 | access to local variable b | semmle.label | successor |
|
||||
| Conditions.cs:81:13:81:13 | access to local variable b | Conditions.cs:82:13:82:16 | ...; | semmle.label | true |
|
||||
| Conditions.cs:81:13:81:13 | access to local variable b | Conditions.cs:83:16:83:16 | access to local variable x | semmle.label | false |
|
||||
| Conditions.cs:82:13:82:13 | access to local variable x | Conditions.cs:82:13:82:15 | ...++ | semmle.label | successor |
|
||||
| Conditions.cs:82:13:82:15 | ...++ | Conditions.cs:83:16:83:16 | access to local variable x | semmle.label | successor |
|
||||
| Conditions.cs:82:13:82:16 | ...; | Conditions.cs:82:13:82:13 | access to local variable x | semmle.label | successor |
|
||||
@@ -883,16 +1445,16 @@
|
||||
| Conditions.cs:115:9:115:24 | ... ...; | Conditions.cs:115:20:115:23 | null | semmle.label | successor |
|
||||
| Conditions.cs:115:16:115:23 | String s = ... | Conditions.cs:116:9:123:9 | for (...;...;...) ... | semmle.label | successor |
|
||||
| Conditions.cs:115:20:115:23 | null | Conditions.cs:115:16:115:23 | String s = ... | semmle.label | successor |
|
||||
| Conditions.cs:116:9:123:9 | for (...;...;...) ... | Conditions.cs:116:21:116:21 | 0 | semmle.label | successor |
|
||||
| Conditions.cs:116:17:116:21 | Int32 i = ... | Conditions.cs:116:24:116:24 | access to local variable i | semmle.label | successor |
|
||||
| Conditions.cs:116:21:116:21 | 0 | Conditions.cs:116:17:116:21 | Int32 i = ... | semmle.label | successor |
|
||||
| Conditions.cs:116:24:116:24 | access to local variable i | Conditions.cs:116:28:116:31 | access to parameter args | semmle.label | successor |
|
||||
| Conditions.cs:116:24:116:38 | ... < ... | Conditions.cs:113:10:113:11 | exit M9 | semmle.label | false |
|
||||
| Conditions.cs:116:24:116:38 | ... < ... | Conditions.cs:117:9:123:9 | {...} | semmle.label | true |
|
||||
| Conditions.cs:116:28:116:31 | access to parameter args | Conditions.cs:116:28:116:38 | access to property Length | semmle.label | successor |
|
||||
| Conditions.cs:116:28:116:38 | access to property Length | Conditions.cs:116:24:116:38 | ... < ... | semmle.label | successor |
|
||||
| Conditions.cs:116:41:116:41 | access to local variable i | Conditions.cs:116:41:116:43 | ...++ | semmle.label | successor |
|
||||
| Conditions.cs:116:41:116:43 | ...++ | Conditions.cs:116:24:116:24 | access to local variable i | semmle.label | successor |
|
||||
| Conditions.cs:116:9:123:9 | for (...;...;...) ... | Conditions.cs:116:22:116:22 | 0 | semmle.label | successor |
|
||||
| Conditions.cs:116:18:116:22 | Int32 i = ... | Conditions.cs:116:25:116:25 | access to local variable i | semmle.label | successor |
|
||||
| Conditions.cs:116:22:116:22 | 0 | Conditions.cs:116:18:116:22 | Int32 i = ... | semmle.label | successor |
|
||||
| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:29:116:32 | access to parameter args | semmle.label | successor |
|
||||
| Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:113:10:113:11 | exit M9 | semmle.label | false |
|
||||
| Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:117:9:123:9 | {...} | semmle.label | true |
|
||||
| Conditions.cs:116:29:116:32 | access to parameter args | Conditions.cs:116:29:116:39 | access to property Length | semmle.label | successor |
|
||||
| Conditions.cs:116:29:116:39 | access to property Length | Conditions.cs:116:25:116:39 | ... < ... | semmle.label | successor |
|
||||
| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:116:42:116:44 | ...++ | semmle.label | successor |
|
||||
| Conditions.cs:116:42:116:44 | ...++ | Conditions.cs:116:25:116:25 | access to local variable i | semmle.label | successor |
|
||||
| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:118:13:118:44 | ... ...; | semmle.label | successor |
|
||||
| Conditions.cs:118:13:118:44 | ... ...; | Conditions.cs:118:24:118:24 | access to local variable i | semmle.label | successor |
|
||||
| Conditions.cs:118:17:118:43 | Boolean last = ... | Conditions.cs:119:13:120:23 | if (...) ... | semmle.label | successor |
|
||||
@@ -911,9 +1473,9 @@
|
||||
| Conditions.cs:120:21:120:22 | [last (line 118): false] "" | Conditions.cs:120:17:120:22 | [last (line 118): false] ... = ... | semmle.label | successor |
|
||||
| Conditions.cs:121:13:122:25 | [last (line 118): false] if (...) ... | Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | semmle.label | successor |
|
||||
| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | semmle.label | successor |
|
||||
| Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | Conditions.cs:116:41:116:41 | access to local variable i | semmle.label | false |
|
||||
| Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | Conditions.cs:116:42:116:42 | access to local variable i | semmle.label | false |
|
||||
| Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | Conditions.cs:122:17:122:25 | ...; | semmle.label | true |
|
||||
| Conditions.cs:122:17:122:24 | ... = ... | Conditions.cs:116:41:116:41 | access to local variable i | semmle.label | successor |
|
||||
| Conditions.cs:122:17:122:24 | ... = ... | Conditions.cs:116:42:116:42 | access to local variable i | semmle.label | successor |
|
||||
| Conditions.cs:122:17:122:25 | ...; | Conditions.cs:122:21:122:24 | null | semmle.label | successor |
|
||||
| Conditions.cs:122:21:122:24 | null | Conditions.cs:122:17:122:24 | ... = ... | semmle.label | successor |
|
||||
| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:130:5:141:5 | {...} | semmle.label | successor |
|
||||
@@ -958,6 +1520,30 @@
|
||||
| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | semmle.label | successor |
|
||||
| Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | semmle.label | successor |
|
||||
| Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | semmle.label | successor |
|
||||
| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:144:5:150:5 | {...} | semmle.label | successor |
|
||||
| Conditions.cs:144:5:150:5 | {...} | Conditions.cs:145:9:145:30 | ... ...; | semmle.label | successor |
|
||||
| Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:145:17:145:29 | ... ? ... : ... | semmle.label | successor |
|
||||
| Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | semmle.label | successor |
|
||||
| Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | semmle.label | successor |
|
||||
| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | semmle.label | true |
|
||||
| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | semmle.label | false |
|
||||
| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:17:145:17 | access to parameter b | semmle.label | successor |
|
||||
| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | semmle.label | successor |
|
||||
| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | semmle.label | successor |
|
||||
| Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | semmle.label | successor |
|
||||
| Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | semmle.label | successor |
|
||||
| Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | Conditions.cs:149:13:149:49 | ...; | semmle.label | false |
|
||||
| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | Conditions.cs:147:13:147:49 | ...; | semmle.label | true |
|
||||
| Conditions.cs:147:13:147:48 | call to method WriteLine | Conditions.cs:143:10:143:12 | exit M11 | semmle.label | successor |
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:40:147:43 | "a = " | semmle.label | successor |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:13:147:48 | call to method WriteLine | semmle.label | successor |
|
||||
| Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:45:147:45 | access to local variable s | semmle.label | successor |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:38:147:47 | $"..." | semmle.label | successor |
|
||||
| Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:143:10:143:12 | exit M11 | semmle.label | successor |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:40:149:43 | "b = " | semmle.label | successor |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:13:149:48 | call to method WriteLine | semmle.label | successor |
|
||||
| Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:45:149:45 | access to local variable s | semmle.label | successor |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:38:149:47 | $"..." | semmle.label | successor |
|
||||
| ExitMethods.cs:7:10:7:11 | enter M1 | ExitMethods.cs:8:5:11:5 | {...} | semmle.label | successor |
|
||||
| ExitMethods.cs:8:5:11:5 | {...} | ExitMethods.cs:9:9:9:25 | ...; | semmle.label | successor |
|
||||
| ExitMethods.cs:9:9:9:24 | call to method ErrorMaybe | ExitMethods.cs:10:9:10:15 | return ...; | semmle.label | successor |
|
||||
@@ -1078,23 +1664,25 @@
|
||||
| ExitMethods.cs:116:38:116:38 | 1 | ExitMethods.cs:116:9:116:39 | return ...; | semmle.label | successor |
|
||||
| ExitMethods.cs:119:17:119:32 | enter FailingAssertion | ExitMethods.cs:120:5:123:5 | {...} | semmle.label | successor |
|
||||
| ExitMethods.cs:120:5:123:5 | {...} | ExitMethods.cs:121:9:121:29 | ...; | semmle.label | successor |
|
||||
| ExitMethods.cs:121:9:121:28 | call to method IsTrue | ExitMethods.cs:119:17:119:32 | exit FailingAssertion | semmle.label | exception(AssertFailedException) |
|
||||
| ExitMethods.cs:121:9:121:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:119:17:119:32 | exit FailingAssertion | semmle.label | exception(AssertFailedException) |
|
||||
| ExitMethods.cs:121:9:121:29 | ...; | ExitMethods.cs:121:23:121:27 | false | semmle.label | successor |
|
||||
| ExitMethods.cs:121:23:121:27 | false | ExitMethods.cs:121:9:121:28 | call to method IsTrue | semmle.label | successor |
|
||||
| ExitMethods.cs:121:23:121:27 | false | ExitMethods.cs:121:9:121:28 | [assertion failure] call to method IsTrue | semmle.label | false |
|
||||
| ExitMethods.cs:125:17:125:33 | enter FailingAssertion2 | ExitMethods.cs:126:5:129:5 | {...} | semmle.label | successor |
|
||||
| ExitMethods.cs:126:5:129:5 | {...} | ExitMethods.cs:127:9:127:27 | ...; | semmle.label | successor |
|
||||
| ExitMethods.cs:127:9:127:26 | call to method FailingAssertion | ExitMethods.cs:125:17:125:33 | exit FailingAssertion2 | semmle.label | exception(AssertFailedException) |
|
||||
| ExitMethods.cs:127:9:127:26 | this access | ExitMethods.cs:127:9:127:26 | call to method FailingAssertion | semmle.label | successor |
|
||||
| ExitMethods.cs:127:9:127:27 | ...; | ExitMethods.cs:127:9:127:26 | this access | semmle.label | successor |
|
||||
| ExitMethods.cs:131:10:131:20 | enter AssertFalse | ExitMethods.cs:131:48:131:48 | access to parameter b | semmle.label | successor |
|
||||
| ExitMethods.cs:131:33:131:49 | call to method IsFalse | ExitMethods.cs:131:10:131:20 | exit AssertFalse | semmle.label | successor |
|
||||
| ExitMethods.cs:131:48:131:48 | access to parameter b | ExitMethods.cs:131:33:131:49 | call to method IsFalse | semmle.label | successor |
|
||||
| ExitMethods.cs:131:33:131:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:131:10:131:20 | exit AssertFalse | semmle.label | exception(AssertFailedException) |
|
||||
| ExitMethods.cs:131:33:131:49 | [assertion success] call to method IsFalse | ExitMethods.cs:131:10:131:20 | exit AssertFalse | semmle.label | successor |
|
||||
| ExitMethods.cs:131:48:131:48 | access to parameter b | ExitMethods.cs:131:33:131:49 | [assertion failure] call to method IsFalse | semmle.label | true |
|
||||
| ExitMethods.cs:131:48:131:48 | access to parameter b | ExitMethods.cs:131:33:131:49 | [assertion success] call to method IsFalse | semmle.label | false |
|
||||
| ExitMethods.cs:133:17:133:33 | enter FailingAssertion3 | ExitMethods.cs:134:5:137:5 | {...} | semmle.label | successor |
|
||||
| ExitMethods.cs:134:5:137:5 | {...} | ExitMethods.cs:135:9:135:26 | ...; | semmle.label | successor |
|
||||
| ExitMethods.cs:135:9:135:25 | call to method AssertFalse | ExitMethods.cs:133:17:133:33 | exit FailingAssertion3 | semmle.label | exception(AssertFailedException) |
|
||||
| ExitMethods.cs:135:9:135:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:133:17:133:33 | exit FailingAssertion3 | semmle.label | exception(AssertFailedException) |
|
||||
| ExitMethods.cs:135:9:135:25 | this access | ExitMethods.cs:135:21:135:24 | true | semmle.label | successor |
|
||||
| ExitMethods.cs:135:9:135:26 | ...; | ExitMethods.cs:135:9:135:25 | this access | semmle.label | successor |
|
||||
| ExitMethods.cs:135:21:135:24 | true | ExitMethods.cs:135:9:135:25 | call to method AssertFalse | semmle.label | successor |
|
||||
| ExitMethods.cs:135:21:135:24 | true | ExitMethods.cs:135:9:135:25 | [assertion failure] call to method AssertFalse | semmle.label | true |
|
||||
| Extensions.cs:5:23:5:29 | enter ToInt32 | Extensions.cs:6:5:8:5 | {...} | semmle.label | successor |
|
||||
| Extensions.cs:6:5:8:5 | {...} | Extensions.cs:7:28:7:28 | access to parameter s | semmle.label | successor |
|
||||
| Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:5:23:5:29 | exit ToInt32 | semmle.label | return |
|
||||
@@ -1947,8 +2535,9 @@
|
||||
| Initializers.cs:14:47:14:47 | access to property G | Initializers.cs:14:47:14:51 | ... = ... | semmle.label | successor |
|
||||
| Initializers.cs:14:47:14:51 | ... = ... | Initializers.cs:14:38:14:53 | { ..., ... } | semmle.label | successor |
|
||||
| Initializers.cs:14:51:14:51 | 1 | Initializers.cs:14:47:14:47 | access to property G | semmle.label | successor |
|
||||
| Initializers.cs:15:9:15:64 | ... ...; | Initializers.cs:15:18:15:63 | array creation of type Initializers[] | semmle.label | successor |
|
||||
| Initializers.cs:15:9:15:64 | ... ...; | Initializers.cs:15:18:15:63 | 2 | semmle.label | successor |
|
||||
| Initializers.cs:15:13:15:63 | Initializers[] iz = ... | Initializers.cs:12:10:12:10 | exit M | semmle.label | successor |
|
||||
| Initializers.cs:15:18:15:63 | 2 | Initializers.cs:15:18:15:63 | array creation of type Initializers[] | semmle.label | successor |
|
||||
| Initializers.cs:15:18:15:63 | array creation of type Initializers[] | Initializers.cs:15:39:15:39 | access to local variable i | semmle.label | successor |
|
||||
| Initializers.cs:15:37:15:63 | { ..., ... } | Initializers.cs:15:13:15:63 | Initializers[] iz = ... | semmle.label | successor |
|
||||
| Initializers.cs:15:39:15:39 | access to local variable i | Initializers.cs:15:59:15:60 | "" | semmle.label | successor |
|
||||
@@ -2118,8 +2707,9 @@
|
||||
| LoopUnrolling.cs:12:31:12:33 | access to local variable arg | LoopUnrolling.cs:12:13:12:34 | call to method WriteLine | semmle.label | successor |
|
||||
| LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:16:5:20:5 | {...} | semmle.label | successor |
|
||||
| LoopUnrolling.cs:16:5:20:5 | {...} | LoopUnrolling.cs:17:9:17:48 | ... ...; | semmle.label | successor |
|
||||
| LoopUnrolling.cs:17:9:17:48 | ... ...; | LoopUnrolling.cs:17:18:17:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:17:9:17:48 | ... ...; | LoopUnrolling.cs:17:18:17:47 | 3 | semmle.label | successor |
|
||||
| LoopUnrolling.cs:17:13:17:47 | String[] xs = ... | LoopUnrolling.cs:18:27:18:28 | access to local variable xs | semmle.label | successor |
|
||||
| LoopUnrolling.cs:17:18:17:47 | 3 | LoopUnrolling.cs:17:18:17:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:17:18:17:47 | array creation of type String[] | LoopUnrolling.cs:17:33:17:35 | "a" | semmle.label | successor |
|
||||
| LoopUnrolling.cs:17:31:17:47 | { ..., ... } | LoopUnrolling.cs:17:13:17:47 | String[] xs = ... | semmle.label | successor |
|
||||
| LoopUnrolling.cs:17:33:17:35 | "a" | LoopUnrolling.cs:17:38:17:40 | "b" | semmle.label | successor |
|
||||
@@ -2157,15 +2747,17 @@
|
||||
| LoopUnrolling.cs:32:27:32:28 | access to local variable xs | LoopUnrolling.cs:32:9:33:33 | [skip (line 32)] foreach (... ... in ...) ... | semmle.label | successor |
|
||||
| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:37:5:43:5 | {...} | semmle.label | successor |
|
||||
| LoopUnrolling.cs:37:5:43:5 | {...} | LoopUnrolling.cs:38:9:38:48 | ... ...; | semmle.label | successor |
|
||||
| LoopUnrolling.cs:38:9:38:48 | ... ...; | LoopUnrolling.cs:38:18:38:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:38:9:38:48 | ... ...; | LoopUnrolling.cs:38:18:38:47 | 3 | semmle.label | successor |
|
||||
| LoopUnrolling.cs:38:13:38:47 | String[] xs = ... | LoopUnrolling.cs:39:9:39:48 | ... ...; | semmle.label | successor |
|
||||
| LoopUnrolling.cs:38:18:38:47 | 3 | LoopUnrolling.cs:38:18:38:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:38:18:38:47 | array creation of type String[] | LoopUnrolling.cs:38:33:38:35 | "a" | semmle.label | successor |
|
||||
| LoopUnrolling.cs:38:31:38:47 | { ..., ... } | LoopUnrolling.cs:38:13:38:47 | String[] xs = ... | semmle.label | successor |
|
||||
| LoopUnrolling.cs:38:33:38:35 | "a" | LoopUnrolling.cs:38:38:38:40 | "b" | semmle.label | successor |
|
||||
| LoopUnrolling.cs:38:38:38:40 | "b" | LoopUnrolling.cs:38:43:38:45 | "c" | semmle.label | successor |
|
||||
| LoopUnrolling.cs:38:43:38:45 | "c" | LoopUnrolling.cs:38:31:38:47 | { ..., ... } | semmle.label | successor |
|
||||
| LoopUnrolling.cs:39:9:39:48 | ... ...; | LoopUnrolling.cs:39:18:39:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:39:9:39:48 | ... ...; | LoopUnrolling.cs:39:18:39:47 | 3 | semmle.label | successor |
|
||||
| LoopUnrolling.cs:39:13:39:47 | String[] ys = ... | LoopUnrolling.cs:40:27:40:28 | access to local variable xs | semmle.label | successor |
|
||||
| LoopUnrolling.cs:39:18:39:47 | 3 | LoopUnrolling.cs:39:18:39:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:39:18:39:47 | array creation of type String[] | LoopUnrolling.cs:39:33:39:35 | "0" | semmle.label | successor |
|
||||
| LoopUnrolling.cs:39:31:39:47 | { ..., ... } | LoopUnrolling.cs:39:13:39:47 | String[] ys = ... | semmle.label | successor |
|
||||
| LoopUnrolling.cs:39:33:39:35 | "0" | LoopUnrolling.cs:39:38:39:40 | "1" | semmle.label | successor |
|
||||
@@ -2188,8 +2780,9 @@
|
||||
| LoopUnrolling.cs:42:39:42:39 | access to local variable y | LoopUnrolling.cs:42:35:42:39 | ... + ... | semmle.label | successor |
|
||||
| LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:46:5:53:5 | {...} | semmle.label | successor |
|
||||
| LoopUnrolling.cs:46:5:53:5 | {...} | LoopUnrolling.cs:47:9:47:48 | ... ...; | semmle.label | successor |
|
||||
| LoopUnrolling.cs:47:9:47:48 | ... ...; | LoopUnrolling.cs:47:18:47:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:47:9:47:48 | ... ...; | LoopUnrolling.cs:47:18:47:47 | 3 | semmle.label | successor |
|
||||
| LoopUnrolling.cs:47:13:47:47 | String[] xs = ... | LoopUnrolling.cs:48:27:48:28 | access to local variable xs | semmle.label | successor |
|
||||
| LoopUnrolling.cs:47:18:47:47 | 3 | LoopUnrolling.cs:47:18:47:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:47:18:47:47 | array creation of type String[] | LoopUnrolling.cs:47:33:47:35 | "a" | semmle.label | successor |
|
||||
| LoopUnrolling.cs:47:31:47:47 | { ..., ... } | LoopUnrolling.cs:47:13:47:47 | String[] xs = ... | semmle.label | successor |
|
||||
| LoopUnrolling.cs:47:33:47:35 | "a" | LoopUnrolling.cs:47:38:47:40 | "b" | semmle.label | successor |
|
||||
@@ -2206,8 +2799,9 @@
|
||||
| LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:50:9:50:13 | Label: | semmle.label | goto(Label) |
|
||||
| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:56:5:65:5 | {...} | semmle.label | successor |
|
||||
| LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:57:9:57:48 | ... ...; | semmle.label | successor |
|
||||
| LoopUnrolling.cs:57:9:57:48 | ... ...; | LoopUnrolling.cs:57:18:57:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:57:9:57:48 | ... ...; | LoopUnrolling.cs:57:18:57:47 | 3 | semmle.label | successor |
|
||||
| LoopUnrolling.cs:57:13:57:47 | String[] xs = ... | LoopUnrolling.cs:58:27:58:28 | access to local variable xs | semmle.label | successor |
|
||||
| LoopUnrolling.cs:57:18:57:47 | 3 | LoopUnrolling.cs:57:18:57:47 | array creation of type String[] | semmle.label | successor |
|
||||
| LoopUnrolling.cs:57:18:57:47 | array creation of type String[] | LoopUnrolling.cs:57:33:57:35 | "a" | semmle.label | successor |
|
||||
| LoopUnrolling.cs:57:31:57:47 | { ..., ... } | LoopUnrolling.cs:57:13:57:47 | String[] xs = ... | semmle.label | successor |
|
||||
| LoopUnrolling.cs:57:33:57:35 | "a" | LoopUnrolling.cs:57:38:57:40 | "b" | semmle.label | successor |
|
||||
@@ -2722,10 +3316,10 @@
|
||||
| Switch.cs:27:18:27:25 | Double d | Switch.cs:27:32:27:38 | call to method Throw | semmle.label | match |
|
||||
| Switch.cs:27:18:27:25 | Double d | Switch.cs:30:13:30:20 | default: | semmle.label | no-match |
|
||||
| Switch.cs:27:32:27:38 | call to method Throw | Switch.cs:10:10:10:11 | exit M2 | semmle.label | exception(Exception) |
|
||||
| Switch.cs:28:17:28:21 | Label: | Switch.cs:29:17:29:23 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:28:13:28:17 | Label: | Switch.cs:29:17:29:23 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:29:17:29:23 | return ...; | Switch.cs:10:10:10:11 | exit M2 | semmle.label | return |
|
||||
| Switch.cs:30:13:30:20 | default: | Switch.cs:31:17:31:27 | goto ...; | semmle.label | successor |
|
||||
| Switch.cs:31:17:31:27 | goto ...; | Switch.cs:28:17:28:21 | Label: | semmle.label | goto(Label) |
|
||||
| Switch.cs:31:17:31:27 | goto ...; | Switch.cs:28:13:28:17 | Label: | semmle.label | goto(Label) |
|
||||
| Switch.cs:35:10:35:11 | enter M3 | Switch.cs:36:5:42:5 | {...} | semmle.label | successor |
|
||||
| Switch.cs:36:5:42:5 | {...} | Switch.cs:37:9:41:9 | switch (...) {...} | semmle.label | successor |
|
||||
| Switch.cs:37:9:41:9 | switch (...) {...} | Switch.cs:37:17:37:23 | call to method Throw | semmle.label | successor |
|
||||
@@ -2750,73 +3344,73 @@
|
||||
| Switch.cs:56:5:64:5 | {...} | Switch.cs:57:9:63:9 | switch (...) {...} | semmle.label | successor |
|
||||
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:57:17:57:17 | 1 | semmle.label | successor |
|
||||
| Switch.cs:57:17:57:17 | 1 | Switch.cs:57:21:57:21 | 2 | semmle.label | successor |
|
||||
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:59:13:59:20 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:59:13:59:19 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:17:57:21 | ... + ... | semmle.label | successor |
|
||||
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 | semmle.label | successor |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:61:13:61:20 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:18:61:18 | 3 | semmle.label | successor |
|
||||
| Switch.cs:61:18:61:18 | 3 | Switch.cs:62:15:62:20 | break; | semmle.label | match |
|
||||
| Switch.cs:62:15:62:20 | break; | Switch.cs:55:10:55:11 | exit M5 | semmle.label | break |
|
||||
| Switch.cs:59:13:59:19 | case ...: | Switch.cs:59:18:59:18 | 2 | semmle.label | successor |
|
||||
| Switch.cs:59:18:59:18 | 2 | Switch.cs:61:13:61:19 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:61:13:61:19 | case ...: | Switch.cs:61:18:61:18 | 3 | semmle.label | successor |
|
||||
| Switch.cs:61:18:61:18 | 3 | Switch.cs:62:17:62:22 | break; | semmle.label | match |
|
||||
| Switch.cs:62:17:62:22 | break; | Switch.cs:55:10:55:11 | exit M5 | semmle.label | break |
|
||||
| Switch.cs:66:10:66:11 | enter M6 | Switch.cs:67:5:75:5 | {...} | semmle.label | successor |
|
||||
| Switch.cs:67:5:75:5 | {...} | Switch.cs:68:9:74:9 | switch (...) {...} | semmle.label | successor |
|
||||
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:68:25:68:25 | access to parameter s | semmle.label | successor |
|
||||
| Switch.cs:68:17:68:25 | (...) ... | Switch.cs:70:13:70:24 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:68:17:68:25 | (...) ... | Switch.cs:70:13:70:23 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:17:68:25 | (...) ... | semmle.label | successor |
|
||||
| Switch.cs:70:13:70:24 | case ...: | Switch.cs:70:18:70:20 | access to type Int32 | semmle.label | successor |
|
||||
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:72:13:72:21 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" | semmle.label | successor |
|
||||
| Switch.cs:70:13:70:23 | case ...: | Switch.cs:70:18:70:20 | access to type Int32 | semmle.label | successor |
|
||||
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:72:13:72:20 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:72:13:72:20 | case ...: | Switch.cs:72:18:72:19 | "" | semmle.label | successor |
|
||||
| Switch.cs:72:18:72:19 | "" | Switch.cs:66:10:66:11 | exit M6 | semmle.label | no-match |
|
||||
| Switch.cs:72:18:72:19 | "" | Switch.cs:73:15:73:20 | break; | semmle.label | match |
|
||||
| Switch.cs:73:15:73:20 | break; | Switch.cs:66:10:66:11 | exit M6 | semmle.label | break |
|
||||
| Switch.cs:72:18:72:19 | "" | Switch.cs:73:17:73:22 | break; | semmle.label | match |
|
||||
| Switch.cs:73:17:73:22 | break; | Switch.cs:66:10:66:11 | exit M6 | semmle.label | break |
|
||||
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:78:5:89:5 | {...} | semmle.label | successor |
|
||||
| Switch.cs:78:5:89:5 | {...} | Switch.cs:79:9:87:9 | switch (...) {...} | semmle.label | successor |
|
||||
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:79:17:79:17 | access to parameter i | semmle.label | successor |
|
||||
| Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:81:13:81:20 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:81:13:81:20 | case ...: | Switch.cs:81:18:81:18 | 1 | semmle.label | successor |
|
||||
| Switch.cs:81:18:81:18 | 1 | Switch.cs:82:22:82:25 | true | semmle.label | match |
|
||||
| Switch.cs:81:18:81:18 | 1 | Switch.cs:83:13:83:20 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:82:15:82:26 | return ...; | Switch.cs:77:10:77:11 | exit M7 | semmle.label | return |
|
||||
| Switch.cs:82:22:82:25 | true | Switch.cs:82:15:82:26 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:18:83:18 | 2 | semmle.label | successor |
|
||||
| Switch.cs:83:18:83:18 | 2 | Switch.cs:84:15:85:22 | if (...) ... | semmle.label | match |
|
||||
| Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:81:13:81:19 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:81:13:81:19 | case ...: | Switch.cs:81:18:81:18 | 1 | semmle.label | successor |
|
||||
| Switch.cs:81:18:81:18 | 1 | Switch.cs:82:24:82:27 | true | semmle.label | match |
|
||||
| Switch.cs:81:18:81:18 | 1 | Switch.cs:83:13:83:19 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:82:17:82:28 | return ...; | Switch.cs:77:10:77:11 | exit M7 | semmle.label | return |
|
||||
| Switch.cs:82:24:82:27 | true | Switch.cs:82:17:82:28 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:83:13:83:19 | case ...: | Switch.cs:83:18:83:18 | 2 | semmle.label | successor |
|
||||
| Switch.cs:83:18:83:18 | 2 | Switch.cs:84:17:85:26 | if (...) ... | semmle.label | match |
|
||||
| Switch.cs:83:18:83:18 | 2 | Switch.cs:88:16:88:20 | false | semmle.label | no-match |
|
||||
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:19:84:19 | access to parameter j | semmle.label | successor |
|
||||
| Switch.cs:84:19:84:19 | access to parameter j | Switch.cs:84:23:84:23 | 2 | semmle.label | successor |
|
||||
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:85:17:85:22 | break; | semmle.label | true |
|
||||
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:86:22:86:25 | true | semmle.label | false |
|
||||
| Switch.cs:84:23:84:23 | 2 | Switch.cs:84:19:84:23 | ... > ... | semmle.label | successor |
|
||||
| Switch.cs:85:17:85:22 | break; | Switch.cs:88:16:88:20 | false | semmle.label | break |
|
||||
| Switch.cs:86:15:86:26 | return ...; | Switch.cs:77:10:77:11 | exit M7 | semmle.label | return |
|
||||
| Switch.cs:86:22:86:25 | true | Switch.cs:86:15:86:26 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:84:17:85:26 | if (...) ... | Switch.cs:84:21:84:21 | access to parameter j | semmle.label | successor |
|
||||
| Switch.cs:84:21:84:21 | access to parameter j | Switch.cs:84:25:84:25 | 2 | semmle.label | successor |
|
||||
| Switch.cs:84:21:84:25 | ... > ... | Switch.cs:85:21:85:26 | break; | semmle.label | true |
|
||||
| Switch.cs:84:21:84:25 | ... > ... | Switch.cs:86:24:86:27 | true | semmle.label | false |
|
||||
| Switch.cs:84:25:84:25 | 2 | Switch.cs:84:21:84:25 | ... > ... | semmle.label | successor |
|
||||
| Switch.cs:85:21:85:26 | break; | Switch.cs:88:16:88:20 | false | semmle.label | break |
|
||||
| Switch.cs:86:17:86:28 | return ...; | Switch.cs:77:10:77:11 | exit M7 | semmle.label | return |
|
||||
| Switch.cs:86:24:86:27 | true | Switch.cs:86:17:86:28 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:88:9:88:21 | return ...; | Switch.cs:77:10:77:11 | exit M7 | semmle.label | return |
|
||||
| Switch.cs:88:16:88:20 | false | Switch.cs:88:9:88:21 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:91:10:91:11 | enter M8 | Switch.cs:92:5:99:5 | {...} | semmle.label | successor |
|
||||
| Switch.cs:92:5:99:5 | {...} | Switch.cs:93:9:97:9 | switch (...) {...} | semmle.label | successor |
|
||||
| Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:93:17:93:17 | access to parameter o | semmle.label | successor |
|
||||
| Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:95:13:95:24 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:95:13:95:24 | case ...: | Switch.cs:95:18:95:20 | access to type Int32 | semmle.label | successor |
|
||||
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:96:22:96:25 | true | semmle.label | match |
|
||||
| Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:95:13:95:23 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:95:13:95:23 | case ...: | Switch.cs:95:18:95:20 | access to type Int32 | semmle.label | successor |
|
||||
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:96:24:96:27 | true | semmle.label | match |
|
||||
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:98:16:98:20 | false | semmle.label | no-match |
|
||||
| Switch.cs:96:15:96:26 | return ...; | Switch.cs:91:10:91:11 | exit M8 | semmle.label | return |
|
||||
| Switch.cs:96:22:96:25 | true | Switch.cs:96:15:96:26 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:96:17:96:28 | return ...; | Switch.cs:91:10:91:11 | exit M8 | semmle.label | return |
|
||||
| Switch.cs:96:24:96:27 | true | Switch.cs:96:17:96:28 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:98:9:98:21 | return ...; | Switch.cs:91:10:91:11 | exit M8 | semmle.label | return |
|
||||
| Switch.cs:98:16:98:20 | false | Switch.cs:98:9:98:21 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:102:5:109:5 | {...} | semmle.label | successor |
|
||||
| Switch.cs:102:5:109:5 | {...} | Switch.cs:103:9:107:9 | switch (...) {...} | semmle.label | successor |
|
||||
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:103:17:103:17 | access to parameter s | semmle.label | successor |
|
||||
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:19:103:25 | access to property Length | semmle.label | non-null |
|
||||
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:105:13:105:20 | case ...: | semmle.label | null |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:105:13:105:20 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:18:105:18 | 0 | semmle.label | successor |
|
||||
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:29:105:29 | 0 | semmle.label | match |
|
||||
| Switch.cs:105:18:105:18 | 0 | Switch.cs:106:13:106:20 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:105:22:105:30 | return ...; | Switch.cs:101:9:101:10 | exit M9 | semmle.label | return |
|
||||
| Switch.cs:105:29:105:29 | 0 | Switch.cs:105:22:105:30 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:18:106:18 | 1 | semmle.label | successor |
|
||||
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:29:106:29 | 1 | semmle.label | match |
|
||||
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:105:13:105:19 | case ...: | semmle.label | null |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:105:13:105:19 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:105:18:105:18 | 0 | semmle.label | successor |
|
||||
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:28:105:28 | 0 | semmle.label | match |
|
||||
| Switch.cs:105:18:105:18 | 0 | Switch.cs:106:13:106:19 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:105:21:105:29 | return ...; | Switch.cs:101:9:101:10 | exit M9 | semmle.label | return |
|
||||
| Switch.cs:105:28:105:28 | 0 | Switch.cs:105:21:105:29 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:106:13:106:19 | case ...: | Switch.cs:106:18:106:18 | 1 | semmle.label | successor |
|
||||
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:28:106:28 | 1 | semmle.label | match |
|
||||
| Switch.cs:106:18:106:18 | 1 | Switch.cs:108:17:108:17 | 1 | semmle.label | no-match |
|
||||
| Switch.cs:106:22:106:30 | return ...; | Switch.cs:101:9:101:10 | exit M9 | semmle.label | return |
|
||||
| Switch.cs:106:29:106:29 | 1 | Switch.cs:106:22:106:30 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:106:21:106:29 | return ...; | Switch.cs:101:9:101:10 | exit M9 | semmle.label | return |
|
||||
| Switch.cs:106:28:106:28 | 1 | Switch.cs:106:21:106:29 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:108:9:108:18 | return ...; | Switch.cs:101:9:101:10 | exit M9 | semmle.label | return |
|
||||
| Switch.cs:108:16:108:17 | -... | Switch.cs:108:9:108:18 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:108:17:108:17 | 1 | Switch.cs:108:16:108:17 | -... | semmle.label | successor |
|
||||
@@ -2827,25 +3421,25 @@
|
||||
| Switch.cs:114:5:121:5 | {...} | Switch.cs:115:9:119:9 | switch (...) {...} | semmle.label | successor |
|
||||
| Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:115:17:115:17 | access to parameter s | semmle.label | successor |
|
||||
| Switch.cs:115:17:115:17 | access to parameter s | Switch.cs:115:17:115:24 | access to property Length | semmle.label | successor |
|
||||
| Switch.cs:115:17:115:24 | access to property Length | Switch.cs:117:13:117:34 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:117:13:117:34 | case ...: | Switch.cs:117:18:117:18 | 3 | semmle.label | successor |
|
||||
| Switch.cs:115:17:115:24 | access to property Length | Switch.cs:117:13:117:35 | case ...: | semmle.label | successor |
|
||||
| Switch.cs:117:13:117:35 | case ...: | Switch.cs:117:18:117:18 | 3 | semmle.label | successor |
|
||||
| Switch.cs:117:18:117:18 | 3 | Switch.cs:117:25:117:25 | access to parameter s | semmle.label | match |
|
||||
| Switch.cs:117:18:117:18 | 3 | Switch.cs:118:13:118:33 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:117:25:117:25 | access to parameter s | Switch.cs:117:28:117:32 | "foo" | semmle.label | successor |
|
||||
| Switch.cs:117:25:117:32 | ... == ... | Switch.cs:117:43:117:43 | 1 | semmle.label | true |
|
||||
| Switch.cs:117:25:117:32 | ... == ... | Switch.cs:118:13:118:33 | case ...: | semmle.label | false |
|
||||
| Switch.cs:117:28:117:32 | "foo" | Switch.cs:117:25:117:32 | ... == ... | semmle.label | successor |
|
||||
| Switch.cs:117:36:117:44 | return ...; | Switch.cs:113:9:113:11 | exit M10 | semmle.label | return |
|
||||
| Switch.cs:117:43:117:43 | 1 | Switch.cs:117:36:117:44 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:118:13:118:33 | case ...: | Switch.cs:118:18:118:18 | 2 | semmle.label | successor |
|
||||
| Switch.cs:117:18:117:18 | 3 | Switch.cs:118:13:118:34 | case ...: | semmle.label | no-match |
|
||||
| Switch.cs:117:25:117:25 | access to parameter s | Switch.cs:117:30:117:34 | "foo" | semmle.label | successor |
|
||||
| Switch.cs:117:25:117:34 | ... == ... | Switch.cs:117:44:117:44 | 1 | semmle.label | true |
|
||||
| Switch.cs:117:25:117:34 | ... == ... | Switch.cs:118:13:118:34 | case ...: | semmle.label | false |
|
||||
| Switch.cs:117:30:117:34 | "foo" | Switch.cs:117:25:117:34 | ... == ... | semmle.label | successor |
|
||||
| Switch.cs:117:37:117:45 | return ...; | Switch.cs:113:9:113:11 | exit M10 | semmle.label | return |
|
||||
| Switch.cs:117:44:117:44 | 1 | Switch.cs:117:37:117:45 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:118:13:118:34 | case ...: | Switch.cs:118:18:118:18 | 2 | semmle.label | successor |
|
||||
| Switch.cs:118:18:118:18 | 2 | Switch.cs:118:25:118:25 | access to parameter s | semmle.label | match |
|
||||
| Switch.cs:118:18:118:18 | 2 | Switch.cs:120:17:120:17 | 1 | semmle.label | no-match |
|
||||
| Switch.cs:118:25:118:25 | access to parameter s | Switch.cs:118:28:118:31 | "fu" | semmle.label | successor |
|
||||
| Switch.cs:118:25:118:31 | ... == ... | Switch.cs:118:42:118:42 | 2 | semmle.label | true |
|
||||
| Switch.cs:118:25:118:31 | ... == ... | Switch.cs:120:17:120:17 | 1 | semmle.label | false |
|
||||
| Switch.cs:118:28:118:31 | "fu" | Switch.cs:118:25:118:31 | ... == ... | semmle.label | successor |
|
||||
| Switch.cs:118:35:118:43 | return ...; | Switch.cs:113:9:113:11 | exit M10 | semmle.label | return |
|
||||
| Switch.cs:118:42:118:42 | 2 | Switch.cs:118:35:118:43 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:118:25:118:25 | access to parameter s | Switch.cs:118:30:118:33 | "fu" | semmle.label | successor |
|
||||
| Switch.cs:118:25:118:33 | ... == ... | Switch.cs:118:43:118:43 | 2 | semmle.label | true |
|
||||
| Switch.cs:118:25:118:33 | ... == ... | Switch.cs:120:17:120:17 | 1 | semmle.label | false |
|
||||
| Switch.cs:118:30:118:33 | "fu" | Switch.cs:118:25:118:33 | ... == ... | semmle.label | successor |
|
||||
| Switch.cs:118:36:118:44 | return ...; | Switch.cs:113:9:113:11 | exit M10 | semmle.label | return |
|
||||
| Switch.cs:118:43:118:43 | 2 | Switch.cs:118:36:118:44 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:120:9:120:18 | return ...; | Switch.cs:113:9:113:11 | exit M10 | semmle.label | return |
|
||||
| Switch.cs:120:16:120:17 | -... | Switch.cs:120:9:120:18 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:120:17:120:17 | 1 | Switch.cs:120:16:120:17 | -... | semmle.label | successor |
|
||||
@@ -2913,6 +3507,33 @@
|
||||
| Switch.cs:150:18:150:18 | 2 | Switch.cs:150:28:150:28 | 2 | semmle.label | match |
|
||||
| Switch.cs:150:21:150:29 | return ...; | Switch.cs:144:9:144:11 | exit M14 | semmle.label | return |
|
||||
| Switch.cs:150:28:150:28 | 2 | Switch.cs:150:21:150:29 | return ...; | semmle.label | successor |
|
||||
| Switch.cs:154:10:154:12 | enter M15 | Switch.cs:155:5:161:5 | {...} | semmle.label | successor |
|
||||
| Switch.cs:155:5:161:5 | {...} | Switch.cs:156:9:156:55 | ... ...; | semmle.label | successor |
|
||||
| Switch.cs:156:9:156:55 | ... ...; | Switch.cs:156:17:156:54 | ... switch { ... } | semmle.label | successor |
|
||||
| Switch.cs:156:13:156:54 | String s = ... | Switch.cs:157:9:160:49 | if (...) ... | semmle.label | successor |
|
||||
| Switch.cs:156:17:156:17 | access to parameter b | Switch.cs:156:28:156:38 | ... => ... | semmle.label | successor |
|
||||
| Switch.cs:156:17:156:54 | ... switch { ... } | Switch.cs:156:17:156:17 | access to parameter b | semmle.label | successor |
|
||||
| Switch.cs:156:28:156:31 | true | Switch.cs:156:36:156:38 | "a" | semmle.label | match |
|
||||
| Switch.cs:156:28:156:31 | true | Switch.cs:156:41:156:52 | ... => ... | semmle.label | no-match |
|
||||
| Switch.cs:156:28:156:38 | ... => ... | Switch.cs:156:28:156:31 | true | semmle.label | successor |
|
||||
| Switch.cs:156:36:156:38 | "a" | Switch.cs:156:13:156:54 | String s = ... | semmle.label | successor |
|
||||
| Switch.cs:156:41:156:45 | false | Switch.cs:154:10:154:12 | exit M15 | semmle.label | exception(InvalidOperationException) |
|
||||
| Switch.cs:156:41:156:45 | false | Switch.cs:156:50:156:52 | "b" | semmle.label | match |
|
||||
| Switch.cs:156:41:156:52 | ... => ... | Switch.cs:156:41:156:45 | false | semmle.label | successor |
|
||||
| Switch.cs:156:50:156:52 | "b" | Switch.cs:156:13:156:54 | String s = ... | semmle.label | successor |
|
||||
| Switch.cs:157:9:160:49 | if (...) ... | Switch.cs:157:13:157:13 | access to parameter b | semmle.label | successor |
|
||||
| Switch.cs:157:13:157:13 | access to parameter b | Switch.cs:158:13:158:49 | ...; | semmle.label | true |
|
||||
| Switch.cs:157:13:157:13 | access to parameter b | Switch.cs:160:13:160:49 | ...; | semmle.label | false |
|
||||
| Switch.cs:158:13:158:48 | call to method WriteLine | Switch.cs:154:10:154:12 | exit M15 | semmle.label | successor |
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:40:158:43 | "a = " | semmle.label | successor |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:13:158:48 | call to method WriteLine | semmle.label | successor |
|
||||
| Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:45:158:45 | access to local variable s | semmle.label | successor |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:38:158:47 | $"..." | semmle.label | successor |
|
||||
| Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:154:10:154:12 | exit M15 | semmle.label | successor |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:40:160:43 | "b = " | semmle.label | successor |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:13:160:48 | call to method WriteLine | semmle.label | successor |
|
||||
| Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:45:160:45 | access to local variable s | semmle.label | successor |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:38:160:47 | $"..." | semmle.label | successor |
|
||||
| TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:4:5:9:5 | {...} | semmle.label | successor |
|
||||
| TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:5:9:5:26 | ... ...; | semmle.label | successor |
|
||||
| TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:25:5:25 | access to parameter o | semmle.label | successor |
|
||||
|
||||
@@ -1,4 +1,340 @@
|
||||
booleanNode
|
||||
| Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | b (line 56): false |
|
||||
| Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | b (line 56): true |
|
||||
| Assert.cs:58:24:58:27 | [b (line 56): true] null | b (line 56): true |
|
||||
| Assert.cs:58:31:58:32 | [b (line 56): false] "" | b (line 56): false |
|
||||
| Assert.cs:59:9:59:38 | [b (line 56): false] ...; | b (line 56): false |
|
||||
| Assert.cs:59:9:59:38 | [b (line 56): true] ...; | b (line 56): true |
|
||||
| Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | b (line 56): false |
|
||||
| Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | b (line 56): true |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | b (line 56): false |
|
||||
| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | b (line 56): true |
|
||||
| Assert.cs:59:23:59:36 | [b (line 56): false] ... && ... | b (line 56): false |
|
||||
| Assert.cs:59:23:59:36 | [b (line 56): true] ... && ... | b (line 56): true |
|
||||
| Assert.cs:59:28:59:31 | [b (line 56): false] null | b (line 56): false |
|
||||
| Assert.cs:59:28:59:31 | [b (line 56): true] null | b (line 56): true |
|
||||
| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | b (line 56): false |
|
||||
| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | b (line 56): true |
|
||||
| Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | b (line 63): false |
|
||||
| Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | b (line 63): true |
|
||||
| Assert.cs:65:24:65:27 | [b (line 63): true] null | b (line 63): true |
|
||||
| Assert.cs:65:31:65:32 | [b (line 63): false] "" | b (line 63): false |
|
||||
| Assert.cs:66:9:66:39 | [b (line 63): false] ...; | b (line 63): false |
|
||||
| Assert.cs:66:9:66:39 | [b (line 63): true] ...; | b (line 63): true |
|
||||
| Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | b (line 63): false |
|
||||
| Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | b (line 63): true |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | b (line 63): false |
|
||||
| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | b (line 63): true |
|
||||
| Assert.cs:66:24:66:37 | [b (line 63): false] ... \|\| ... | b (line 63): false |
|
||||
| Assert.cs:66:24:66:37 | [b (line 63): true] ... \|\| ... | b (line 63): true |
|
||||
| Assert.cs:66:29:66:32 | [b (line 63): false] null | b (line 63): false |
|
||||
| Assert.cs:66:29:66:32 | [b (line 63): true] null | b (line 63): true |
|
||||
| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | b (line 63): false |
|
||||
| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | b (line 63): true |
|
||||
| Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | b (line 70): false |
|
||||
| Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | b (line 70): true |
|
||||
| Assert.cs:72:24:72:27 | [b (line 70): true] null | b (line 70): true |
|
||||
| Assert.cs:72:31:72:32 | [b (line 70): false] "" | b (line 70): false |
|
||||
| Assert.cs:73:9:73:38 | [b (line 70): false] ...; | b (line 70): false |
|
||||
| Assert.cs:73:9:73:38 | [b (line 70): true] ...; | b (line 70): true |
|
||||
| Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | b (line 70): false |
|
||||
| Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | b (line 70): true |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | b (line 70): false |
|
||||
| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | b (line 70): true |
|
||||
| Assert.cs:73:23:73:36 | [b (line 70): false] ... && ... | b (line 70): false |
|
||||
| Assert.cs:73:23:73:36 | [b (line 70): true] ... && ... | b (line 70): true |
|
||||
| Assert.cs:73:28:73:31 | [b (line 70): false] null | b (line 70): false |
|
||||
| Assert.cs:73:28:73:31 | [b (line 70): true] null | b (line 70): true |
|
||||
| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | b (line 70): false |
|
||||
| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | b (line 70): true |
|
||||
| Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | b (line 77): false |
|
||||
| Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | b (line 77): true |
|
||||
| Assert.cs:79:24:79:27 | [b (line 77): true] null | b (line 77): true |
|
||||
| Assert.cs:79:31:79:32 | [b (line 77): false] "" | b (line 77): false |
|
||||
| Assert.cs:80:9:80:39 | [b (line 77): false] ...; | b (line 77): false |
|
||||
| Assert.cs:80:9:80:39 | [b (line 77): true] ...; | b (line 77): true |
|
||||
| Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | b (line 77): false |
|
||||
| Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | b (line 77): true |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | b (line 77): false |
|
||||
| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | b (line 77): true |
|
||||
| Assert.cs:80:24:80:37 | [b (line 77): false] ... \|\| ... | b (line 77): false |
|
||||
| Assert.cs:80:24:80:37 | [b (line 77): true] ... \|\| ... | b (line 77): true |
|
||||
| Assert.cs:80:29:80:32 | [b (line 77): false] null | b (line 77): false |
|
||||
| Assert.cs:80:29:80:32 | [b (line 77): true] null | b (line 77): true |
|
||||
| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | b (line 77): false |
|
||||
| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | b (line 77): true |
|
||||
| Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | b (line 84): false |
|
||||
| Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | b (line 84): true |
|
||||
| Assert.cs:86:24:86:27 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:86:31:86:32 | [b (line 84): false] "" | b (line 84): false |
|
||||
| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | b (line 84): false |
|
||||
| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | b (line 84): true |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | b (line 84): false |
|
||||
| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | b (line 84): true |
|
||||
| Assert.cs:87:9:87:32 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:87:9:87:32 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | b (line 84): false |
|
||||
| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | b (line 84): true |
|
||||
| Assert.cs:87:27:87:30 | [b (line 84): false] null | b (line 84): false |
|
||||
| Assert.cs:87:27:87:30 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | b (line 84): false |
|
||||
| Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:88:9:88:36 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:88:9:88:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | b (line 84): false |
|
||||
| Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | b (line 84): false |
|
||||
| Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:90:9:90:26 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:90:9:90:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | b (line 84): false |
|
||||
| Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false |
|
||||
| Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:90:17:90:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:90:24:90:25 | [b (line 84): false] "" | b (line 84): false |
|
||||
| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | b (line 84): false |
|
||||
| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | b (line 84): true |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | b (line 84): false |
|
||||
| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | b (line 84): true |
|
||||
| Assert.cs:91:9:91:25 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:91:9:91:25 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | b (line 84): false |
|
||||
| Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:92:9:92:36 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:92:9:92:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | b (line 84): false |
|
||||
| Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | b (line 84): false |
|
||||
| Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:94:9:94:26 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:94:9:94:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | b (line 84): false |
|
||||
| Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false |
|
||||
| Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:94:17:94:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:94:24:94:25 | [b (line 84): false] "" | b (line 84): false |
|
||||
| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | b (line 84): false |
|
||||
| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | b (line 84): true |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | b (line 84): false |
|
||||
| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | b (line 84): true |
|
||||
| Assert.cs:95:9:95:28 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:95:9:95:28 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | b (line 84): false |
|
||||
| Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:96:9:96:36 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:96:9:96:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | b (line 84): false |
|
||||
| Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | b (line 84): false |
|
||||
| Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:98:9:98:26 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:98:9:98:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | b (line 84): false |
|
||||
| Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false |
|
||||
| Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:98:17:98:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:98:24:98:25 | [b (line 84): false] "" | b (line 84): false |
|
||||
| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | b (line 84): false |
|
||||
| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | b (line 84): true |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | b (line 84): false |
|
||||
| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | b (line 84): true |
|
||||
| Assert.cs:99:9:99:33 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:99:9:99:33 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | b (line 84): false |
|
||||
| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | b (line 84): true |
|
||||
| Assert.cs:99:28:99:31 | [b (line 84): false] null | b (line 84): false |
|
||||
| Assert.cs:99:28:99:31 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | b (line 84): false |
|
||||
| Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:100:9:100:36 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:100:9:100:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | b (line 84): false |
|
||||
| Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | b (line 84): false |
|
||||
| Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:102:9:102:26 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:102:9:102:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | b (line 84): false |
|
||||
| Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false |
|
||||
| Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:102:17:102:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:102:24:102:25 | [b (line 84): false] "" | b (line 84): false |
|
||||
| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | b (line 84): false |
|
||||
| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | b (line 84): true |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | b (line 84): false |
|
||||
| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | b (line 84): true |
|
||||
| Assert.cs:103:9:103:33 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:103:9:103:33 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | b (line 84): false |
|
||||
| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | b (line 84): true |
|
||||
| Assert.cs:103:28:103:31 | [b (line 84): false] null | b (line 84): false |
|
||||
| Assert.cs:103:28:103:31 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | b (line 84): false |
|
||||
| Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:104:9:104:36 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:104:9:104:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | b (line 84): false |
|
||||
| Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | b (line 84): false |
|
||||
| Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:106:9:106:26 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:106:9:106:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | b (line 84): false |
|
||||
| Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false |
|
||||
| Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:106:17:106:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:106:24:106:25 | [b (line 84): false] "" | b (line 84): false |
|
||||
| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | b (line 84): false |
|
||||
| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | b (line 84): true |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | b (line 84): false |
|
||||
| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | b (line 84): true |
|
||||
| Assert.cs:107:9:107:34 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:107:9:107:34 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | b (line 84): false |
|
||||
| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | b (line 84): true |
|
||||
| Assert.cs:107:29:107:32 | [b (line 84): false] null | b (line 84): false |
|
||||
| Assert.cs:107:29:107:32 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | b (line 84): false |
|
||||
| Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:108:9:108:36 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:108:9:108:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | b (line 84): false |
|
||||
| Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | b (line 84): false |
|
||||
| Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:110:9:110:26 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:110:9:110:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | b (line 84): false |
|
||||
| Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false |
|
||||
| Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:110:17:110:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:110:24:110:25 | [b (line 84): false] "" | b (line 84): false |
|
||||
| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | b (line 84): false |
|
||||
| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | b (line 84): true |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | b (line 84): false |
|
||||
| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | b (line 84): true |
|
||||
| Assert.cs:111:9:111:34 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:111:9:111:34 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | b (line 84): false |
|
||||
| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | b (line 84): true |
|
||||
| Assert.cs:111:29:111:32 | [b (line 84): false] null | b (line 84): false |
|
||||
| Assert.cs:111:29:111:32 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | b (line 84): false |
|
||||
| Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:112:9:112:36 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:112:9:112:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | b (line 84): false |
|
||||
| Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | b (line 84): false |
|
||||
| Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:114:9:114:26 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:114:9:114:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | b (line 84): false |
|
||||
| Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false |
|
||||
| Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:114:17:114:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:114:24:114:25 | [b (line 84): false] "" | b (line 84): false |
|
||||
| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | b (line 84): false |
|
||||
| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | b (line 84): true |
|
||||
| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | b (line 84): true |
|
||||
| Assert.cs:115:9:115:38 | [b (line 84): false] ...; | b (line 84): false |
|
||||
| Assert.cs:115:9:115:38 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | b (line 84): false |
|
||||
| Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | b (line 84): false |
|
||||
| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | b (line 84): true |
|
||||
| Assert.cs:115:23:115:36 | [b (line 84): false] ... && ... | b (line 84): false |
|
||||
| Assert.cs:115:23:115:36 | [b (line 84): true] ... && ... | b (line 84): true |
|
||||
| Assert.cs:115:28:115:31 | [b (line 84): false] null | b (line 84): false |
|
||||
| Assert.cs:115:28:115:31 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | b (line 84): false |
|
||||
| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:116:9:116:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:118:9:118:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:118:17:118:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | b (line 84): true |
|
||||
| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | b (line 84): true |
|
||||
| Assert.cs:119:9:119:40 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | b (line 84): true |
|
||||
| Assert.cs:119:24:119:38 | [b (line 84): true] ... \|\| ... | b (line 84): true |
|
||||
| Assert.cs:119:29:119:32 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:119:37:119:38 | [b (line 84): true] !... | b (line 84): true |
|
||||
| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:120:9:120:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:122:9:122:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:122:17:122:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | b (line 84): true |
|
||||
| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | b (line 84): true |
|
||||
| Assert.cs:123:9:123:38 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | b (line 84): true |
|
||||
| Assert.cs:123:23:123:36 | [b (line 84): true] ... && ... | b (line 84): true |
|
||||
| Assert.cs:123:28:123:31 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | b (line 84): true |
|
||||
| Assert.cs:124:9:124:36 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | b (line 84): true |
|
||||
| Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | b (line 84): true |
|
||||
| Assert.cs:126:9:126:26 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true |
|
||||
| Assert.cs:126:17:126:20 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:127:9:127:40 | [b (line 84): true] ...; | b (line 84): true |
|
||||
| Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | b (line 84): true |
|
||||
| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | b (line 84): true |
|
||||
| Assert.cs:127:24:127:38 | [b (line 84): true] ... \|\| ... | b (line 84): true |
|
||||
| Assert.cs:127:29:127:32 | [b (line 84): true] null | b (line 84): true |
|
||||
| Assert.cs:127:37:127:38 | [b (line 84): true] !... | b (line 84): true |
|
||||
| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | b (line 84): true |
|
||||
| Conditions.cs:6:13:6:13 | [inc (line 3): true] access to parameter x | inc (line 3): true |
|
||||
| Conditions.cs:6:13:6:15 | [inc (line 3): true] ...++ | inc (line 3): true |
|
||||
| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | inc (line 3): true |
|
||||
@@ -160,6 +496,14 @@ booleanNode
|
||||
| Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | Field2 (line 129): true |
|
||||
| Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | Field1 (line 129): true |
|
||||
| Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | Field2 (line 129): true |
|
||||
| Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | b (line 143): false |
|
||||
| Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | b (line 143): true |
|
||||
| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | b (line 143): true |
|
||||
| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | b (line 143): false |
|
||||
| Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | b (line 143): false |
|
||||
| Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | b (line 143): true |
|
||||
| Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | b (line 143): false |
|
||||
| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | b (line 143): true |
|
||||
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | b1 (line 176): true |
|
||||
| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | b1 (line 176): true |
|
||||
| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | b1 (line 176): false |
|
||||
@@ -642,8 +986,20 @@ entryPoint
|
||||
| AccessorCalls.cs:66:10:66:11 | M9 | AccessorCalls.cs:67:5:74:5 | {...} |
|
||||
| ArrayCreation.cs:3:11:3:12 | M1 | ArrayCreation.cs:3:27:3:27 | 0 |
|
||||
| ArrayCreation.cs:5:12:5:13 | M2 | ArrayCreation.cs:5:28:5:28 | 0 |
|
||||
| ArrayCreation.cs:7:11:7:12 | M3 | ArrayCreation.cs:7:19:7:36 | array creation of type Int32[] |
|
||||
| ArrayCreation.cs:9:12:9:13 | M4 | ArrayCreation.cs:9:20:9:52 | array creation of type Int32[,] |
|
||||
| ArrayCreation.cs:7:11:7:12 | M3 | ArrayCreation.cs:7:19:7:36 | 2 |
|
||||
| ArrayCreation.cs:9:12:9:13 | M4 | ArrayCreation.cs:9:20:9:52 | 2 |
|
||||
| Assert.cs:7:10:7:11 | M1 | Assert.cs:8:5:12:5 | {...} |
|
||||
| Assert.cs:14:10:14:11 | M2 | Assert.cs:15:5:19:5 | {...} |
|
||||
| Assert.cs:21:10:21:11 | M3 | Assert.cs:22:5:26:5 | {...} |
|
||||
| Assert.cs:28:10:28:11 | M4 | Assert.cs:29:5:33:5 | {...} |
|
||||
| Assert.cs:35:10:35:11 | M5 | Assert.cs:36:5:40:5 | {...} |
|
||||
| Assert.cs:42:10:42:11 | M6 | Assert.cs:43:5:47:5 | {...} |
|
||||
| Assert.cs:49:10:49:11 | M7 | Assert.cs:50:5:54:5 | {...} |
|
||||
| Assert.cs:56:10:56:11 | M8 | Assert.cs:57:5:61:5 | {...} |
|
||||
| Assert.cs:63:10:63:11 | M9 | Assert.cs:64:5:68:5 | {...} |
|
||||
| Assert.cs:70:10:70:12 | M10 | Assert.cs:71:5:75:5 | {...} |
|
||||
| Assert.cs:77:10:77:12 | M11 | Assert.cs:78:5:82:5 | {...} |
|
||||
| Assert.cs:84:10:84:12 | M12 | Assert.cs:85:5:129:5 | {...} |
|
||||
| Assignments.cs:3:10:3:10 | M | Assignments.cs:4:5:15:5 | {...} |
|
||||
| Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:33:14:35 | {...} |
|
||||
| Assignments.cs:17:40:17:40 | + | Assignments.cs:18:5:20:5 | {...} |
|
||||
@@ -678,6 +1034,7 @@ entryPoint
|
||||
| Conditions.cs:102:12:102:13 | M8 | Conditions.cs:103:5:111:5 | {...} |
|
||||
| Conditions.cs:113:10:113:11 | M9 | Conditions.cs:114:5:124:5 | {...} |
|
||||
| Conditions.cs:129:10:129:12 | M10 | Conditions.cs:130:5:141:5 | {...} |
|
||||
| Conditions.cs:143:10:143:12 | M11 | Conditions.cs:144:5:150:5 | {...} |
|
||||
| ExitMethods.cs:7:10:7:11 | M1 | ExitMethods.cs:8:5:11:5 | {...} |
|
||||
| ExitMethods.cs:13:10:13:11 | M2 | ExitMethods.cs:14:5:17:5 | {...} |
|
||||
| ExitMethods.cs:19:10:19:11 | M3 | ExitMethods.cs:20:5:23:5 | {...} |
|
||||
@@ -821,6 +1178,7 @@ entryPoint
|
||||
| Switch.cs:129:12:129:14 | M12 | Switch.cs:130:5:132:5 | {...} |
|
||||
| Switch.cs:134:9:134:11 | M13 | Switch.cs:135:5:142:5 | {...} |
|
||||
| Switch.cs:144:9:144:11 | M14 | Switch.cs:145:5:152:5 | {...} |
|
||||
| Switch.cs:154:10:154:12 | M15 | Switch.cs:155:5:161:5 | {...} |
|
||||
| TypeAccesses.cs:3:10:3:10 | M | TypeAccesses.cs:4:5:9:5 | {...} |
|
||||
| VarDecls.cs:5:18:5:19 | M1 | VarDecls.cs:6:5:11:5 | {...} |
|
||||
| VarDecls.cs:13:12:13:13 | M2 | VarDecls.cs:14:5:17:5 | {...} |
|
||||
|
||||
@@ -25,7 +25,7 @@ class Switch
|
||||
Console.WriteLine(s);
|
||||
return;
|
||||
case double d when Throw():
|
||||
Label:
|
||||
Label:
|
||||
return;
|
||||
default:
|
||||
goto Label;
|
||||
@@ -56,10 +56,10 @@ class Switch
|
||||
{
|
||||
switch (1 + 2)
|
||||
{
|
||||
case 2 :
|
||||
break;
|
||||
case 3 :
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,10 +67,10 @@ class Switch
|
||||
{
|
||||
switch ((object)s)
|
||||
{
|
||||
case int _ :
|
||||
break;
|
||||
case "" :
|
||||
break;
|
||||
case int _:
|
||||
break;
|
||||
case "":
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,12 +78,12 @@ class Switch
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 1 :
|
||||
return true;
|
||||
case 2 :
|
||||
if (j > 2)
|
||||
break;
|
||||
return true;
|
||||
case 1:
|
||||
return true;
|
||||
case 2:
|
||||
if (j > 2)
|
||||
break;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -92,8 +92,8 @@ class Switch
|
||||
{
|
||||
switch (o)
|
||||
{
|
||||
case int _ :
|
||||
return true;
|
||||
case int _:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -102,8 +102,8 @@ class Switch
|
||||
{
|
||||
switch (s?.Length)
|
||||
{
|
||||
case 0 : return 0;
|
||||
case 1 : return 1;
|
||||
case 0: return 0;
|
||||
case 1: return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@@ -114,8 +114,8 @@ class Switch
|
||||
{
|
||||
switch (s.Length)
|
||||
{
|
||||
case 3 when s=="foo" : return 1;
|
||||
case 2 when s=="fu" : return 2;
|
||||
case 3 when s == "foo": return 1;
|
||||
case 2 when s == "fu": return 2;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@@ -150,4 +150,13 @@ class Switch
|
||||
case 2: return 2;
|
||||
}
|
||||
}
|
||||
|
||||
void M15(bool b)
|
||||
{
|
||||
var s = b switch { true => "a", false => "b" };
|
||||
if (b)
|
||||
System.Console.WriteLine($"a = {s}");
|
||||
else
|
||||
System.Console.WriteLine($"b = {s}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ abstractValue
|
||||
| 0 | Guards.cs:322:18:322:18 | 0 |
|
||||
| 0 | Guards.cs:329:17:329:19 | access to constant A |
|
||||
| 0 | Guards.cs:334:20:334:20 | 0 |
|
||||
| 0 | Splitting.cs:136:20:136:20 | 0 |
|
||||
| 0 | Splitting.cs:137:20:137:20 | 0 |
|
||||
| 1 | Collections.cs:13:28:13:28 | 1 |
|
||||
| 1 | Collections.cs:15:28:15:28 | 1 |
|
||||
| 1 | Collections.cs:18:28:18:28 | 1 |
|
||||
@@ -365,6 +365,9 @@ abstractValue
|
||||
| non-null | Guards.cs:281:17:281:17 | access to local variable a |
|
||||
| non-null | Guards.cs:283:17:283:17 | access to parameter o |
|
||||
| non-null | Guards.cs:287:17:287:17 | access to parameter o |
|
||||
| non-null | Guards.cs:341:31:341:32 | "" |
|
||||
| non-null | Guards.cs:343:13:343:19 | access to type Console |
|
||||
| non-null | Guards.cs:343:31:343:31 | access to local variable s |
|
||||
| non-null | Splitting.cs:13:17:13:17 | access to parameter o |
|
||||
| non-null | Splitting.cs:23:24:23:24 | access to parameter o |
|
||||
| non-null | Splitting.cs:33:24:33:25 | "" |
|
||||
@@ -384,12 +387,13 @@ abstractValue
|
||||
| non-null | Splitting.cs:117:9:117:9 | access to parameter o |
|
||||
| non-null | Splitting.cs:119:13:119:13 | access to parameter o |
|
||||
| non-null | Splitting.cs:120:16:120:16 | access to parameter o |
|
||||
| non-null | Splitting.cs:132:17:132:17 | access to local variable o |
|
||||
| non-null | Splitting.cs:132:17:132:29 | ... = ... |
|
||||
| non-null | Splitting.cs:132:21:132:29 | call to method M11 |
|
||||
| non-null | Splitting.cs:132:21:132:29 | this access |
|
||||
| non-null | Splitting.cs:132:28:132:28 | access to local variable o |
|
||||
| non-null | Splitting.cs:129:17:129:17 | access to local variable o |
|
||||
| non-null | Splitting.cs:133:17:133:17 | access to local variable o |
|
||||
| non-null | Splitting.cs:133:17:133:29 | ... = ... |
|
||||
| non-null | Splitting.cs:133:21:133:29 | call to method M11 |
|
||||
| non-null | Splitting.cs:133:21:133:29 | this access |
|
||||
| non-null | Splitting.cs:133:28:133:28 | access to local variable o |
|
||||
| non-null | Splitting.cs:134:17:134:17 | access to local variable o |
|
||||
| null | Assert.cs:9:24:9:27 | null |
|
||||
| null | Assert.cs:10:27:10:30 | null |
|
||||
| null | Assert.cs:16:24:16:27 | null |
|
||||
@@ -438,6 +442,8 @@ abstractValue
|
||||
| null | Guards.cs:181:39:181:42 | null |
|
||||
| null | Guards.cs:185:43:185:46 | null |
|
||||
| null | Guards.cs:203:18:203:21 | null |
|
||||
| null | Guards.cs:341:24:341:27 | null |
|
||||
| null | Guards.cs:342:18:342:21 | null |
|
||||
| null | Splitting.cs:12:22:12:25 | null |
|
||||
| null | Splitting.cs:22:22:22:25 | null |
|
||||
| null | Splitting.cs:32:22:32:25 | null |
|
||||
@@ -450,7 +456,7 @@ abstractValue
|
||||
| null | Splitting.cs:105:27:105:30 | null |
|
||||
| null | Splitting.cs:116:27:116:30 | null |
|
||||
| null | Splitting.cs:125:21:125:24 | null |
|
||||
| null | Splitting.cs:128:22:128:25 | null |
|
||||
| null | Splitting.cs:129:22:129:25 | null |
|
||||
| true | Guards.cs:177:20:177:23 | true |
|
||||
| true | Guards.cs:181:46:181:49 | true |
|
||||
| true | Guards.cs:185:50:185:53 | true |
|
||||
|
||||
@@ -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 |
|
||||
| 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 |
|
||||
| Collections.cs:53:9:53:12 | access to parameter args | Collections.cs:50:13:50:27 | ... == ... | Collections.cs:50:13:50:16 | access to parameter args | false |
|
||||
| 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 |
|
||||
@@ -75,6 +71,8 @@
|
||||
| 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 |
|
||||
| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:41 | call to operator == | Guards.cs:268:13:268:14 | access to parameter o1 | true |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| Splitting.cs:25:13:25:13 | access to parameter o | Splitting.cs:22:17:22:25 | ... != ... | Splitting.cs:22:17:22:17 | access to parameter o | false |
|
||||
@@ -93,4 +91,4 @@
|
||||
| Splitting.cs:117:9:117:9 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true |
|
||||
| Splitting.cs:119:13:119:13 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true |
|
||||
| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true |
|
||||
| Splitting.cs:132:25:132:25 | access to parameter b | Splitting.cs:130:21:130:21 | access to parameter b | Splitting.cs:130:21:130:21 | access to parameter b | false |
|
||||
| Splitting.cs:133:25:133:25 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | false |
|
||||
|
||||
@@ -10,26 +10,34 @@
|
||||
| Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:24 | access to local variable s | false |
|
||||
| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | non-null |
|
||||
| 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: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:59:36:59:36 | [b (line 56): false] 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:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | non-null |
|
||||
| Assert.cs:59:36:59:36 | [b (line 56): true] 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:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | true |
|
||||
| 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 | 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: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 |
|
||||
| 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 | true |
|
||||
| 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 | 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: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 |
|
||||
| Assert.cs:73:36:73:36 | [b (line 70): true] 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): 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 | 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: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 |
|
||||
| Assert.cs:80:37:80:37 | [b (line 77): true] 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): 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 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| Collections.cs:53:9:53:12 | access to parameter args | Collections.cs:50:13:50:27 | ... == ... | Collections.cs:50:13:50:16 | access to parameter args | false |
|
||||
@@ -192,6 +200,13 @@
|
||||
| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match access to type Action<Object> |
|
||||
| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match null |
|
||||
| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-null |
|
||||
| Guards.cs:342:27:342:27 | [b (line 339): false] 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:342:27:342:27 | [b (line 339): false] access to parameter b | Guards.cs:341:20:341:32 | ... ? ... : ... | Guards.cs:341:20:341:20 | access to parameter b | non-null |
|
||||
| Guards.cs:342:27:342:27 | [b (line 339): true] 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:342:27:342:27 | [b (line 339): true] access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | true |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| Splitting.cs:13:17:13:17 | [b (line 9): true] access to parameter o | Splitting.cs:12:17:12:25 | ... != ... | Splitting.cs:12:17:12:17 | access to parameter o | true |
|
||||
| Splitting.cs:14:13:14:13 | [b (line 9): false] access to parameter b | Splitting.cs:11:13:11:13 | access to parameter b | Splitting.cs:11:13:11:13 | access to parameter b | false |
|
||||
@@ -256,5 +271,5 @@
|
||||
| Splitting.cs:119:13:119:13 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true |
|
||||
| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | non-null |
|
||||
| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true |
|
||||
| Splitting.cs:130:21:130:21 | [b (line 123): false] access to parameter b | Splitting.cs:130:21:130:21 | access to parameter b | Splitting.cs:130:21:130:21 | access to parameter b | false |
|
||||
| Splitting.cs:132:25:132:25 | [b (line 123): false] access to parameter b | Splitting.cs:130:21:130:21 | access to parameter b | Splitting.cs:130:21:130:21 | access to parameter b | false |
|
||||
| Splitting.cs:131:21:131:21 | [b (line 123): false] access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | false |
|
||||
| Splitting.cs:133:25:133:25 | [b (line 123): false] access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | false |
|
||||
|
||||
@@ -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 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| Collections.cs:53:9:53:12 | access to parameter args | Collections.cs:50:13:50:27 | ... == ... | Collections.cs:50:13:50:16 | access to parameter args | false |
|
||||
@@ -192,6 +188,10 @@
|
||||
| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match access to type Action<Object> |
|
||||
| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match null |
|
||||
| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-null |
|
||||
| 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: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 |
|
||||
| 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 |
|
||||
| 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:17 | access to parameter o | Splitting.cs:22:17:22:17 | access to parameter o | non-null |
|
||||
@@ -228,4 +228,4 @@
|
||||
| Splitting.cs:119:13:119:13 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true |
|
||||
| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | non-null |
|
||||
| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true |
|
||||
| Splitting.cs:132:25:132:25 | access to parameter b | Splitting.cs:130:21:130:21 | access to parameter b | Splitting.cs:130:21:130:21 | access to parameter b | false |
|
||||
| Splitting.cs:133:25:133:25 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | false |
|
||||
|
||||
@@ -335,5 +335,12 @@ public class Guards
|
||||
_ => 1
|
||||
};
|
||||
}
|
||||
|
||||
void M28(bool b)
|
||||
{
|
||||
string s = b ? null : "";
|
||||
if (s != null && !b)
|
||||
Console.WriteLine(s.Length); // null guarded
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,9 @@
|
||||
| Assert.cs:16:20:16:32 | ... ? ... : ... | null | Assert.cs:16:24:16:27 | null | null |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | empty | Assert.cs:16:20:16:32 | ... ? ... : ... | empty |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | non-empty | Assert.cs:16:20:16:32 | ... ? ... : ... | non-empty |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | non-null | Assert.cs:16:20:16:20 | access to parameter b | false |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | non-null | Assert.cs:16:20:16:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | null | Assert.cs:16:20:16:20 | access to parameter b | true |
|
||||
| Assert.cs:17:23:17:23 | access to local variable s | null | Assert.cs:16:20:16:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:18:27:18:27 | access to local variable s | non-null | Assert.cs:16:20:16:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:18:27:18:27 | access to local variable s | null | Assert.cs:16:20:16:32 | ... ? ... : ... | null |
|
||||
@@ -28,7 +30,9 @@
|
||||
| Assert.cs:23:20:23:32 | ... ? ... : ... | null | Assert.cs:23:24:23:27 | null | null |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | empty | Assert.cs:23:20:23:32 | ... ? ... : ... | empty |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | non-empty | Assert.cs:23:20:23:32 | ... ? ... : ... | non-empty |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | non-null | Assert.cs:23:20:23:20 | access to parameter b | false |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | non-null | Assert.cs:23:20:23:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | null | Assert.cs:23:20:23:20 | access to parameter b | true |
|
||||
| Assert.cs:24:26:24:26 | access to local variable s | null | Assert.cs:23:20:23:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:25:27:25:27 | access to local variable s | non-null | Assert.cs:23:20:23:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:25:27:25:27 | access to local variable s | null | Assert.cs:23:20:23:32 | ... ? ... : ... | null |
|
||||
@@ -416,6 +420,24 @@
|
||||
| Guards.cs:332:16:332:16 | access to local variable e | match access to constant B | Guards.cs:330:13:330:13 | access to parameter b | true |
|
||||
| Guards.cs:332:16:332:16 | access to local variable e | match access to constant B | Guards.cs:332:16:332:16 | access to local variable e | 1 |
|
||||
| Guards.cs:332:16:332:16 | access to local variable e | non-match access to constant B | Guards.cs:330:13:330:13 | access to parameter b | false |
|
||||
| Guards.cs:341:20:341:32 | ... ? ... : ... | non-null | Guards.cs:341:20:341:20 | access to parameter b | false |
|
||||
| Guards.cs:341:20:341:32 | ... ? ... : ... | non-null | Guards.cs:341:31:341:32 | "" | non-null |
|
||||
| Guards.cs:341:20:341:32 | ... ? ... : ... | null | Guards.cs:341:20:341:20 | access to parameter b | true |
|
||||
| Guards.cs:341:20:341:32 | ... ? ... : ... | null | Guards.cs:341:24:341:27 | null | null |
|
||||
| Guards.cs:342:13:342:13 | access to local variable s | empty | Guards.cs:341:20:341:32 | ... ? ... : ... | empty |
|
||||
| Guards.cs:342:13:342:13 | access to local variable s | non-empty | Guards.cs:341:20:341:32 | ... ? ... : ... | non-empty |
|
||||
| Guards.cs:342:13:342:13 | access to local variable s | non-null | Guards.cs:341:20:341:32 | ... ? ... : ... | non-null |
|
||||
| Guards.cs:342:13:342:13 | access to local variable s | null | Guards.cs:341:20:341:32 | ... ? ... : ... | null |
|
||||
| Guards.cs:342:13:342:21 | ... != ... | false | Guards.cs:341:20:341:20 | access to parameter b | true |
|
||||
| Guards.cs:342:13:342:21 | ... != ... | false | Guards.cs:342:13:342:13 | access to local variable s | null |
|
||||
| Guards.cs:342:13:342:21 | ... != ... | true | Guards.cs:341:20:341:20 | access to parameter b | false |
|
||||
| Guards.cs:342:13:342:21 | ... != ... | true | Guards.cs:342:13:342:13 | access to local variable s | non-null |
|
||||
| Guards.cs:342:13:342:27 | ... && ... | true | Guards.cs:342:13:342:21 | ... != ... | true |
|
||||
| Guards.cs:342:13:342:27 | ... && ... | true | Guards.cs:342:26:342:27 | !... | true |
|
||||
| Guards.cs:342:26:342:27 | !... | false | Guards.cs:342:27:342:27 | access to parameter b | true |
|
||||
| Guards.cs:342:26:342:27 | !... | true | Guards.cs:342:27:342:27 | access to parameter b | false |
|
||||
| Guards.cs:343:31:343:31 | access to local variable s | non-null | Guards.cs:341:20:341:32 | ... ? ... : ... | non-null |
|
||||
| Guards.cs:343:31:343:31 | access to local variable s | null | Guards.cs:341:20:341:32 | ... ? ... : ... | null |
|
||||
| Splitting.cs:12:17:12:25 | ... != ... | false | Splitting.cs:12:17:12:17 | access to parameter o | null |
|
||||
| Splitting.cs:12:17:12:25 | ... != ... | true | Splitting.cs:12:17:12:17 | access to parameter o | non-null |
|
||||
| Splitting.cs:22:17:22:25 | ... != ... | false | Splitting.cs:22:17:22:17 | access to parameter o | null |
|
||||
@@ -438,7 +460,8 @@
|
||||
| Splitting.cs:105:22:105:30 | ... != ... | true | Splitting.cs:105:22:105:22 | access to parameter o | non-null |
|
||||
| Splitting.cs:116:22:116:30 | ... != ... | false | Splitting.cs:116:22:116:22 | access to parameter o | null |
|
||||
| Splitting.cs:116:22:116:30 | ... != ... | true | Splitting.cs:116:22:116:22 | access to parameter o | non-null |
|
||||
| Splitting.cs:128:17:128:25 | ... != ... | false | Splitting.cs:128:17:128:17 | access to local variable o | null |
|
||||
| Splitting.cs:128:17:128:25 | ... != ... | true | Splitting.cs:128:17:128:17 | access to local variable o | non-null |
|
||||
| Splitting.cs:133:17:133:17 | access to local variable o | non-null | Splitting.cs:132:21:132:29 | call to method M11 | non-null |
|
||||
| Splitting.cs:133:17:133:17 | access to local variable o | null | Splitting.cs:132:21:132:29 | call to method M11 | null |
|
||||
| Splitting.cs:129:17:129:25 | ... != ... | false | Splitting.cs:129:17:129:17 | access to local variable o | null |
|
||||
| Splitting.cs:129:17:129:25 | ... != ... | false | Splitting.cs:129:22:129:25 | null | non-null |
|
||||
| Splitting.cs:129:17:129:25 | ... != ... | true | Splitting.cs:129:17:129:17 | access to local variable o | non-null |
|
||||
| Splitting.cs:134:17:134:17 | access to local variable o | non-null | Splitting.cs:133:21:133:29 | call to method M11 | non-null |
|
||||
| Splitting.cs:134:17:134:17 | access to local variable o | null | Splitting.cs:133:21:133:29 | call to method M11 | null |
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
| Guards.cs:279:17:279:17 | access to parameter o |
|
||||
| Guards.cs:283:17:283:17 | access to parameter o |
|
||||
| Guards.cs:287:17:287:17 | access to parameter o |
|
||||
| Guards.cs:343:31:343:31 | access to local variable s |
|
||||
| Splitting.cs:13:17:13:17 | access to parameter o |
|
||||
| Splitting.cs:23:24:23:24 | access to parameter o |
|
||||
| Splitting.cs:35:13:35:13 | access to parameter o |
|
||||
|
||||
@@ -125,6 +125,7 @@ public class Splitting
|
||||
object? o = null;
|
||||
do
|
||||
{
|
||||
o.GetHashCode(); // not null guarded
|
||||
if (o != null)
|
||||
{
|
||||
if (b)
|
||||
|
||||
@@ -58,3 +58,7 @@
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x |
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x |
|
||||
| Splitting.cs:34:19:34:19 | access to local variable x |
|
||||
| Splitting.cs:41:19:41:19 | access to local variable s |
|
||||
| Splitting.cs:43:19:43:19 | access to local variable s |
|
||||
| Splitting.cs:50:19:50:19 | access to local variable s |
|
||||
| Splitting.cs:52:19:52:19 | access to local variable s |
|
||||
|
||||
@@ -240,6 +240,10 @@ edges
|
||||
| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x |
|
||||
| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String |
|
||||
| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String |
|
||||
| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s |
|
||||
| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:43:19:43:19 | access to local variable s |
|
||||
| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s |
|
||||
| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s |
|
||||
nodes
|
||||
| Capture.cs:7:20:7:26 | tainted : String | semmle.label | tainted : String |
|
||||
| Capture.cs:12:19:12:24 | access to local variable sink27 | semmle.label | access to local variable sink27 |
|
||||
@@ -443,12 +447,22 @@ nodes
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | semmle.label | [b (line 24): false] access to local variable x |
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | semmle.label | [b (line 24): true] access to local variable x |
|
||||
| Splitting.cs:34:19:34:19 | access to local variable x | semmle.label | access to local variable x |
|
||||
| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | semmle.label | [b (line 37): true] "taint source" : String |
|
||||
| Splitting.cs:41:19:41:19 | access to local variable s | semmle.label | access to local variable s |
|
||||
| Splitting.cs:43:19:43:19 | access to local variable s | semmle.label | access to local variable s |
|
||||
| Splitting.cs:48:36:48:49 | "taint source" : String | semmle.label | "taint source" : String |
|
||||
| Splitting.cs:50:19:50:19 | access to local variable s | semmle.label | access to local variable s |
|
||||
| Splitting.cs:52:19:52:19 | access to local variable s | semmle.label | access to local variable s |
|
||||
#select
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | [b (line 24): false] access to local variable x |
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | [b (line 24): true] access to local variable x |
|
||||
| Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | [b (line 3): false] access to local variable x |
|
||||
| Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | [b (line 3): true] access to local variable x |
|
||||
| GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | access to field SinkField0 |
|
||||
| Splitting.cs:41:19:41:19 | access to local variable s | Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | access to local variable s |
|
||||
| Splitting.cs:43:19:43:19 | access to local variable s | Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:43:19:43:19 | access to local variable s | access to local variable s |
|
||||
| Splitting.cs:50:19:50:19 | access to local variable s | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | access to local variable s |
|
||||
| Splitting.cs:52:19:52:19 | access to local variable s | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | access to local variable s |
|
||||
| GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | access to local variable sink0 |
|
||||
| GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | access to local variable sink1 |
|
||||
| GlobalDataFlow.cs:191:15:191:20 | access to local variable sink10 | GlobalDataFlow.cs:338:16:338:29 | "taint source" : String | GlobalDataFlow.cs:191:15:191:20 | access to local variable sink10 | access to local variable sink10 |
|
||||
|
||||
@@ -33,4 +33,22 @@ class Splitting
|
||||
if (b)
|
||||
Check(x);
|
||||
}
|
||||
|
||||
void M3(bool b)
|
||||
{
|
||||
var s = b ? "taint source" : "not tainted";
|
||||
if (b)
|
||||
Check(s); // flow
|
||||
else
|
||||
Check(s); // no flow [FALSE POSITIVE]
|
||||
}
|
||||
|
||||
void M4(bool b)
|
||||
{
|
||||
var s = b switch { true => "taint source", false => "not tainted" };
|
||||
if (b)
|
||||
Check(s); // flow
|
||||
else
|
||||
Check(s); // no flow [FALSE POSITIVE]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,3 +62,7 @@
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x |
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x |
|
||||
| Splitting.cs:34:19:34:19 | access to local variable x |
|
||||
| Splitting.cs:41:19:41:19 | access to local variable s |
|
||||
| Splitting.cs:43:19:43:19 | access to local variable s |
|
||||
| Splitting.cs:50:19:50:19 | access to local variable s |
|
||||
| Splitting.cs:52:19:52:19 | access to local variable s |
|
||||
|
||||
@@ -247,6 +247,10 @@ edges
|
||||
| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x |
|
||||
| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String |
|
||||
| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String |
|
||||
| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s |
|
||||
| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:43:19:43:19 | access to local variable s |
|
||||
| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s |
|
||||
| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s |
|
||||
nodes
|
||||
| Capture.cs:7:20:7:26 | tainted : String | semmle.label | tainted : String |
|
||||
| Capture.cs:12:19:12:24 | access to local variable sink27 | semmle.label | access to local variable sink27 |
|
||||
@@ -457,6 +461,12 @@ nodes
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | semmle.label | [b (line 24): false] access to local variable x |
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | semmle.label | [b (line 24): true] access to local variable x |
|
||||
| Splitting.cs:34:19:34:19 | access to local variable x | semmle.label | access to local variable x |
|
||||
| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | semmle.label | [b (line 37): true] "taint source" : String |
|
||||
| Splitting.cs:41:19:41:19 | access to local variable s | semmle.label | access to local variable s |
|
||||
| Splitting.cs:43:19:43:19 | access to local variable s | semmle.label | access to local variable s |
|
||||
| Splitting.cs:48:36:48:49 | "taint source" : String | semmle.label | "taint source" : String |
|
||||
| Splitting.cs:50:19:50:19 | access to local variable s | semmle.label | access to local variable s |
|
||||
| Splitting.cs:52:19:52:19 | access to local variable s | semmle.label | access to local variable s |
|
||||
#select
|
||||
| Capture.cs:12:19:12:24 | access to local variable sink27 | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | access to local variable sink27 |
|
||||
| Capture.cs:21:23:21:28 | access to local variable sink28 | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | access to local variable sink28 |
|
||||
@@ -522,3 +532,7 @@ nodes
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | [b (line 24): false] access to local variable x |
|
||||
| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | [b (line 24): true] access to local variable x |
|
||||
| Splitting.cs:34:19:34:19 | access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:34:19:34:19 | access to local variable x | access to local variable x |
|
||||
| Splitting.cs:41:19:41:19 | access to local variable s | Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | access to local variable s |
|
||||
| Splitting.cs:43:19:43:19 | access to local variable s | Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:43:19:43:19 | access to local variable s | access to local variable s |
|
||||
| Splitting.cs:50:19:50:19 | access to local variable s | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | access to local variable s |
|
||||
| Splitting.cs:52:19:52:19 | access to local variable s | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | access to local variable s |
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user