mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
Merge branch 'main' into redsun82/kotlin
This commit is contained in:
@@ -32,6 +32,8 @@ pip.parse(
|
||||
use_repo(pip, "codegen_deps")
|
||||
|
||||
swift_deps = use_extension("//swift/third_party:load.bzl", "swift_deps")
|
||||
|
||||
# following list can be kept in sync with `bazel mod tidy`
|
||||
use_repo(
|
||||
swift_deps,
|
||||
"binlog",
|
||||
|
||||
@@ -506,8 +506,7 @@ private module IRDeclarationEntries {
|
||||
* An entity that represents a declaration entry in the database.
|
||||
*
|
||||
* This class exists to work around the fact that `DeclStmt`s in some cases
|
||||
* do not have `DeclarationEntry`s. Currently, this is the case for:
|
||||
* - `DeclStmt`s in template instantiations.
|
||||
* do not have `DeclarationEntry`s in older databases.
|
||||
*
|
||||
* So instead, the IR works with `IRDeclarationEntry`s that synthesize missing
|
||||
* `DeclarationEntry`s when there is no result for `DeclStmt::getDeclarationEntry`.
|
||||
|
||||
@@ -123,7 +123,7 @@ class IteratorCrementNonMemberOperator extends Operator {
|
||||
}
|
||||
|
||||
private class IteratorCrementNonMemberOperatorModel extends IteratorCrementNonMemberOperator,
|
||||
DataFlowFunction
|
||||
DataFlowFunction, SideEffectFunction, AliasFunction
|
||||
{
|
||||
override predicate hasDataFlow(FunctionInput input, FunctionOutput output) {
|
||||
input = getIteratorArgumentInput(this, 0) and
|
||||
@@ -131,6 +131,24 @@ private class IteratorCrementNonMemberOperatorModel extends IteratorCrementNonMe
|
||||
or
|
||||
input.isParameterDeref(0) and output.isReturnValueDeref()
|
||||
}
|
||||
|
||||
override predicate hasOnlySpecificReadSideEffects() { any() }
|
||||
|
||||
override predicate hasOnlySpecificWriteSideEffects() { any() }
|
||||
|
||||
override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) {
|
||||
i = 0 and buffer = false
|
||||
}
|
||||
|
||||
override predicate hasSpecificWriteSideEffect(ParameterIndex i, boolean buffer, boolean mustWrite) {
|
||||
// See the comment on `IteratorCrementMemberOperatorModel::hasSpecificWriteSideEffect`
|
||||
// for an explanation of these values.
|
||||
i = 0 and buffer = false and mustWrite = false
|
||||
}
|
||||
|
||||
override predicate parameterNeverEscapes(int index) { none() }
|
||||
|
||||
override predicate parameterEscapesOnlyViaReturn(int index) { index = 0 }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,7 +164,7 @@ class IteratorCrementMemberOperator extends MemberFunction {
|
||||
}
|
||||
|
||||
private class IteratorCrementMemberOperatorModel extends IteratorCrementMemberOperator,
|
||||
DataFlowFunction, TaintFunction
|
||||
DataFlowFunction, TaintFunction, SideEffectFunction, AliasFunction
|
||||
{
|
||||
override predicate hasDataFlow(FunctionInput input, FunctionOutput output) {
|
||||
input.isQualifierAddress() and
|
||||
@@ -163,6 +181,28 @@ private class IteratorCrementMemberOperatorModel extends IteratorCrementMemberOp
|
||||
input.isQualifierObject() and
|
||||
output.isReturnValueDeref()
|
||||
}
|
||||
|
||||
override predicate hasOnlySpecificReadSideEffects() { any() }
|
||||
|
||||
override predicate hasOnlySpecificWriteSideEffects() { any() }
|
||||
|
||||
override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) {
|
||||
i = -1 and buffer = false
|
||||
}
|
||||
|
||||
override predicate hasSpecificWriteSideEffect(ParameterIndex i, boolean buffer, boolean mustWrite) {
|
||||
// We have two choices here: either `buffer` must be `true` or `mustWrite`
|
||||
// must be `false` to ensure that the IR alias analysis doesn't think that
|
||||
// `it++` completely override the value of the iterator.
|
||||
// We choose `mustWrite` must be `false`. In that case, the value of
|
||||
// `buffer` isn't super important (it just decides which kind of read side
|
||||
// effect will be emitted).
|
||||
i = -1 and buffer = false and mustWrite = false
|
||||
}
|
||||
|
||||
override predicate parameterNeverEscapes(int index) { index = -1 }
|
||||
|
||||
override predicate parameterEscapesOnlyViaReturn(int index) { none() }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -332,7 +372,7 @@ class IteratorAssignArithmeticOperator extends Function {
|
||||
* non-member and member versions, use `IteratorPointerDereferenceOperator`.
|
||||
*/
|
||||
class IteratorPointerDereferenceMemberOperator extends MemberFunction, TaintFunction,
|
||||
IteratorReferenceFunction
|
||||
IteratorReferenceFunction, AliasFunction, SideEffectFunction
|
||||
{
|
||||
IteratorPointerDereferenceMemberOperator() {
|
||||
this.getClassAndName("operator*") instanceof Iterator
|
||||
@@ -345,6 +385,18 @@ class IteratorPointerDereferenceMemberOperator extends MemberFunction, TaintFunc
|
||||
input.isReturnValueDeref() and
|
||||
output.isQualifierObject()
|
||||
}
|
||||
|
||||
override predicate parameterNeverEscapes(int index) { index = -1 }
|
||||
|
||||
override predicate parameterEscapesOnlyViaReturn(int index) { none() }
|
||||
|
||||
override predicate hasOnlySpecificReadSideEffects() { any() }
|
||||
|
||||
override predicate hasOnlySpecificWriteSideEffects() { any() }
|
||||
|
||||
override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) {
|
||||
i = -1 and buffer = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -361,7 +413,7 @@ class IteratorPointerDereferenceNonMemberOperator extends Operator, IteratorRefe
|
||||
}
|
||||
|
||||
private class IteratorPointerDereferenceNonMemberOperatorModel extends IteratorPointerDereferenceNonMemberOperator,
|
||||
TaintFunction
|
||||
TaintFunction, AliasFunction, SideEffectFunction
|
||||
{
|
||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||
input = getIteratorArgumentInput(this, 0) and
|
||||
@@ -370,6 +422,18 @@ private class IteratorPointerDereferenceNonMemberOperatorModel extends IteratorP
|
||||
input.isReturnValueDeref() and
|
||||
output.isParameterDeref(0)
|
||||
}
|
||||
|
||||
override predicate parameterNeverEscapes(int index) { index = 0 }
|
||||
|
||||
override predicate parameterEscapesOnlyViaReturn(int index) { none() }
|
||||
|
||||
override predicate hasOnlySpecificReadSideEffects() { any() }
|
||||
|
||||
override predicate hasOnlySpecificWriteSideEffects() { any() }
|
||||
|
||||
override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) {
|
||||
i = 0 and buffer = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -420,6 +484,71 @@ class IteratorAssignmentMemberOperator extends MemberFunction {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A member `operator==` or `operator!=` function for an iterator type.
|
||||
*
|
||||
* Note that this class _only_ matches member functions. To find both
|
||||
* non-member and member versions, use `IteratorLogicalOperator`.
|
||||
*/
|
||||
class IteratorLogicalMemberOperator extends MemberFunction {
|
||||
IteratorLogicalMemberOperator() {
|
||||
this.getClassAndName(["operator!=", "operator=="]) instanceof Iterator
|
||||
}
|
||||
}
|
||||
|
||||
private class IteratorLogicalMemberOperatorModel extends IteratorLogicalMemberOperator,
|
||||
AliasFunction, SideEffectFunction
|
||||
{
|
||||
override predicate parameterNeverEscapes(int index) { index = [-1, 0] }
|
||||
|
||||
override predicate parameterEscapesOnlyViaReturn(int index) { none() }
|
||||
|
||||
override predicate hasOnlySpecificReadSideEffects() { any() }
|
||||
|
||||
override predicate hasOnlySpecificWriteSideEffects() { any() }
|
||||
|
||||
override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) {
|
||||
i = -1 and buffer = false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A member `operator==` or `operator!=` function for an iterator type.
|
||||
*
|
||||
* Note that this class _only_ matches non-member functions. To find both
|
||||
* non-member and member versions, use `IteratorLogicalOperator`.
|
||||
*/
|
||||
class IteratorLogicalNonMemberOperator extends Function {
|
||||
IteratorLogicalNonMemberOperator() {
|
||||
this.hasName(["operator!=", "operator=="]) and
|
||||
exists(getIteratorArgumentInput(this, 0)) and
|
||||
exists(getIteratorArgumentInput(this, 1))
|
||||
}
|
||||
}
|
||||
|
||||
private class IteratorLogicalNonMemberOperatorModel extends IteratorLogicalNonMemberOperator,
|
||||
AliasFunction, SideEffectFunction
|
||||
{
|
||||
override predicate parameterNeverEscapes(int index) { index = [0, 1] }
|
||||
|
||||
override predicate parameterEscapesOnlyViaReturn(int index) { none() }
|
||||
|
||||
override predicate hasOnlySpecificReadSideEffects() { any() }
|
||||
|
||||
override predicate hasOnlySpecificWriteSideEffects() { any() }
|
||||
}
|
||||
|
||||
/**
|
||||
* A (member or non-member) `operator==` or `operator!=` function for an iterator type.
|
||||
*/
|
||||
class IteratorLogicalOperator extends Function {
|
||||
IteratorLogicalOperator() {
|
||||
this instanceof IteratorLogicalNonMemberOperator
|
||||
or
|
||||
this instanceof IteratorLogicalMemberOperator
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An `operator=` member function of an iterator class that is not a copy or move assignment
|
||||
* operator.
|
||||
@@ -428,12 +557,26 @@ class IteratorAssignmentMemberOperator extends MemberFunction {
|
||||
* `operator*` and use their own `operator=` to assign to the container.
|
||||
*/
|
||||
private class IteratorAssignmentMemberOperatorModel extends IteratorAssignmentMemberOperator,
|
||||
TaintFunction
|
||||
TaintFunction, SideEffectFunction, AliasFunction
|
||||
{
|
||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
||||
input.isParameterDeref(0) and
|
||||
output.isQualifierObject()
|
||||
}
|
||||
|
||||
override predicate hasOnlySpecificReadSideEffects() { any() }
|
||||
|
||||
override predicate hasOnlySpecificWriteSideEffects() { any() }
|
||||
|
||||
override predicate hasSpecificWriteSideEffect(ParameterIndex i, boolean buffer, boolean mustWrite) {
|
||||
// See the comment on `IteratorCrementMemberOperatorModel::hasSpecificWriteSideEffect`
|
||||
// for an explanation of these values.
|
||||
i = -1 and buffer = false and mustWrite = false
|
||||
}
|
||||
|
||||
override predicate parameterNeverEscapes(int index) { index = 0 }
|
||||
|
||||
override predicate parameterEscapesOnlyViaReturn(int index) { index = -1 }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
| CPP-205.cpp:2:15:5:1 | { ... } | isFromUninstantiatedTemplate(fn) |
|
||||
| CPP-205.cpp:3:3:3:33 | declaration | isFromTemplateInstantiation(fn) |
|
||||
| CPP-205.cpp:3:3:3:33 | declaration | isFromUninstantiatedTemplate(fn) |
|
||||
| CPP-205.cpp:3:15:3:15 | declaration of y | isFromTemplateInstantiation(fn) |
|
||||
| CPP-205.cpp:3:15:3:15 | declaration of y | isFromUninstantiatedTemplate(fn) |
|
||||
| CPP-205.cpp:3:15:3:15 | y | isFromTemplateInstantiation(fn) |
|
||||
| CPP-205.cpp:3:15:3:15 | y | isFromUninstantiatedTemplate(fn) |
|
||||
| CPP-205.cpp:3:17:3:31 | 5 | isFromTemplateInstantiation(fn) |
|
||||
| CPP-205.cpp:4:3:4:11 | return ... | isFromTemplateInstantiation(fn) |
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -738,6 +738,91 @@ complex.c:
|
||||
# 58| v58_6(void) = AliasedUse : m58_3
|
||||
# 58| v58_7(void) = ExitFunction :
|
||||
|
||||
coroutines.cpp:
|
||||
# 87| co_returnable_void co_return_void()
|
||||
# 87| Block 0
|
||||
# 87| v87_1(void) = EnterFunction :
|
||||
# 87| m87_2(unknown) = AliasedDefinition :
|
||||
# 87| m87_3(unknown) = InitializeNonLocal :
|
||||
# 87| m87_4(unknown) = Chi : total:m87_2, partial:m87_3
|
||||
# 87| r87_5(glval<promise_type>) = VariableAddress[(unnamed local variable)] :
|
||||
# 87| m87_6(promise_type) = Uninitialized[(unnamed local variable)] : &:r87_5
|
||||
|
||||
# 91| co_returnable_value co_return_int(int)
|
||||
# 91| Block 0
|
||||
# 91| v91_1(void) = EnterFunction :
|
||||
# 91| m91_2(unknown) = AliasedDefinition :
|
||||
# 91| m91_3(unknown) = InitializeNonLocal :
|
||||
# 91| m91_4(unknown) = Chi : total:m91_2, partial:m91_3
|
||||
# 91| r91_5(glval<int>) = VariableAddress[i] :
|
||||
# 91| m91_6(int) = InitializeParameter[i] : &:r91_5
|
||||
#-----| r0_1(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_2(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_3(int) = Load[i] : &:r0_2, m91_6
|
||||
#-----| m0_4(int) = Store[i] : &:r0_1, r0_3
|
||||
# 91| r91_7(glval<promise_type>) = VariableAddress[(unnamed local variable)] :
|
||||
# 91| m91_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r91_7
|
||||
|
||||
# 95| co_returnable_void co_yield_value_void(int)
|
||||
# 95| Block 0
|
||||
# 95| v95_1(void) = EnterFunction :
|
||||
# 95| m95_2(unknown) = AliasedDefinition :
|
||||
# 95| m95_3(unknown) = InitializeNonLocal :
|
||||
# 95| m95_4(unknown) = Chi : total:m95_2, partial:m95_3
|
||||
# 95| r95_5(glval<int>) = VariableAddress[i] :
|
||||
# 95| m95_6(int) = InitializeParameter[i] : &:r95_5
|
||||
#-----| r0_1(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_2(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_3(int) = Load[i] : &:r0_2, m95_6
|
||||
#-----| m0_4(int) = Store[i] : &:r0_1, r0_3
|
||||
# 95| r95_7(glval<promise_type>) = VariableAddress[(unnamed local variable)] :
|
||||
# 95| m95_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r95_7
|
||||
|
||||
# 99| co_returnable_value co_yield_value_value(int)
|
||||
# 99| Block 0
|
||||
# 99| v99_1(void) = EnterFunction :
|
||||
# 99| m99_2(unknown) = AliasedDefinition :
|
||||
# 99| m99_3(unknown) = InitializeNonLocal :
|
||||
# 99| m99_4(unknown) = Chi : total:m99_2, partial:m99_3
|
||||
# 99| r99_5(glval<int>) = VariableAddress[i] :
|
||||
# 99| m99_6(int) = InitializeParameter[i] : &:r99_5
|
||||
#-----| r0_1(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_2(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_3(int) = Load[i] : &:r0_2, m99_6
|
||||
#-----| m0_4(int) = Store[i] : &:r0_1, r0_3
|
||||
# 99| r99_7(glval<promise_type>) = VariableAddress[(unnamed local variable)] :
|
||||
# 99| m99_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r99_7
|
||||
|
||||
# 103| co_returnable_void co_yield_and_return_void(int)
|
||||
# 103| Block 0
|
||||
# 103| v103_1(void) = EnterFunction :
|
||||
# 103| m103_2(unknown) = AliasedDefinition :
|
||||
# 103| m103_3(unknown) = InitializeNonLocal :
|
||||
# 103| m103_4(unknown) = Chi : total:m103_2, partial:m103_3
|
||||
# 103| r103_5(glval<int>) = VariableAddress[i] :
|
||||
# 103| m103_6(int) = InitializeParameter[i] : &:r103_5
|
||||
#-----| r0_1(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_2(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_3(int) = Load[i] : &:r0_2, m103_6
|
||||
#-----| m0_4(int) = Store[i] : &:r0_1, r0_3
|
||||
# 103| r103_7(glval<promise_type>) = VariableAddress[(unnamed local variable)] :
|
||||
# 103| m103_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r103_7
|
||||
|
||||
# 108| co_returnable_value co_yield_and_return_value(int)
|
||||
# 108| Block 0
|
||||
# 108| v108_1(void) = EnterFunction :
|
||||
# 108| m108_2(unknown) = AliasedDefinition :
|
||||
# 108| m108_3(unknown) = InitializeNonLocal :
|
||||
# 108| m108_4(unknown) = Chi : total:m108_2, partial:m108_3
|
||||
# 108| r108_5(glval<int>) = VariableAddress[i] :
|
||||
# 108| m108_6(int) = InitializeParameter[i] : &:r108_5
|
||||
#-----| r0_1(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_2(glval<int>) = VariableAddress[i] :
|
||||
#-----| r0_3(int) = Load[i] : &:r0_2, m108_6
|
||||
#-----| m0_4(int) = Store[i] : &:r0_1, r0_3
|
||||
# 108| r108_7(glval<promise_type>) = VariableAddress[(unnamed local variable)] :
|
||||
# 108| m108_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r108_7
|
||||
|
||||
destructors_for_temps.cpp:
|
||||
# 9| void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor&&)
|
||||
# 9| Block 0
|
||||
@@ -7351,8 +7436,8 @@ ir.cpp:
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 1127| Block 1
|
||||
# 1127| m1127_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 0:m1127_12, from 4:m1127_50
|
||||
# 1127| m1127_20(unknown) = Phi : from 0:~m1126_4, from 4:~m1127_47
|
||||
# 1127| m1127_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 0:m1127_12, from 4:m1127_44
|
||||
# 1127| m1127_20(unknown) = Phi : from 0:~m1126_4, from 4:~m1127_27
|
||||
# 1127| r1127_21(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_5(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_21
|
||||
# 1127| r1127_22(glval<unknown>) = FunctionAddress[operator!=] :
|
||||
@@ -7370,26 +7455,22 @@ ir.cpp:
|
||||
# 1127| m1127_29(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_7, partial:m1127_28
|
||||
#-----| r0_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_6, m1127_29
|
||||
# 1127| r1127_30(bool) = Call[operator!=] : func:r1127_22, this:r0_5, 0:r0_11
|
||||
# 1127| m1127_31(unknown) = ^CallSideEffect : ~m1127_27
|
||||
# 1127| m1127_32(unknown) = Chi : total:m1127_27, partial:m1127_31
|
||||
#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1127_19
|
||||
# 1127| v1127_33(void) = ConditionalBranch : r1127_30
|
||||
# 1127| v1127_31(void) = ConditionalBranch : r1127_30
|
||||
#-----| False -> Block 5
|
||||
#-----| True -> Block 2
|
||||
|
||||
# 1127| Block 2
|
||||
# 1127| r1127_34(glval<int>) = VariableAddress[e] :
|
||||
# 1127| r1127_35(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_35
|
||||
# 1127| r1127_36(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 1127| r1127_37(int &) = Call[operator*] : func:r1127_36, this:r0_13
|
||||
# 1127| m1127_38(unknown) = ^CallSideEffect : ~m1127_32
|
||||
# 1127| m1127_39(unknown) = Chi : total:m1127_32, partial:m1127_38
|
||||
# 1127| r1127_32(glval<int>) = VariableAddress[e] :
|
||||
# 1127| r1127_33(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_33
|
||||
# 1127| r1127_34(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 1127| r1127_35(int &) = Call[operator*] : func:r1127_34, this:r0_13
|
||||
#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1127_19
|
||||
# 1127| r1127_40(int) = Load[?] : &:r1127_37, ~m1127_39
|
||||
# 1127| m1127_41(int) = Store[e] : &:r1127_34, r1127_40
|
||||
# 1127| r1127_36(int) = Load[?] : &:r1127_35, ~m1127_27
|
||||
# 1127| m1127_37(int) = Store[e] : &:r1127_32, r1127_36
|
||||
# 1128| r1128_1(glval<int>) = VariableAddress[e] :
|
||||
# 1128| r1128_2(int) = Load[e] : &:r1128_1, m1127_41
|
||||
# 1128| r1128_2(int) = Load[e] : &:r1128_1, m1127_37
|
||||
# 1128| r1128_3(int) = Constant[0] :
|
||||
# 1128| r1128_4(bool) = CompareGT : r1128_2, r1128_3
|
||||
# 1128| v1128_5(void) = ConditionalBranch : r1128_4
|
||||
@@ -7401,16 +7482,14 @@ ir.cpp:
|
||||
#-----| Goto -> Block 4
|
||||
|
||||
# 1127| Block 4
|
||||
# 1127| v1127_42(void) = NoOp :
|
||||
# 1127| r1127_43(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
# 1127| r1127_44(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 1127| r1127_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1127_44, this:r1127_43
|
||||
# 1127| m1127_46(unknown) = ^CallSideEffect : ~m1127_39
|
||||
# 1127| m1127_47(unknown) = Chi : total:m1127_39, partial:m1127_46
|
||||
# 1127| v1127_48(void) = ^IndirectReadSideEffect[-1] : &:r1127_43, m1127_19
|
||||
# 1127| m1127_49(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1127_43
|
||||
# 1127| m1127_50(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1127_19, partial:m1127_49
|
||||
# 1127| r1127_51(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1127_45
|
||||
# 1127| v1127_38(void) = NoOp :
|
||||
# 1127| r1127_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
# 1127| r1127_40(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 1127| r1127_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1127_40, this:r1127_39
|
||||
# 1127| v1127_42(void) = ^IndirectReadSideEffect[-1] : &:r1127_39, m1127_19
|
||||
# 1127| m1127_43(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1127_39
|
||||
# 1127| m1127_44(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1127_19, partial:m1127_43
|
||||
# 1127| r1127_45(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1127_41
|
||||
#-----| Goto (back edge) -> Block 1
|
||||
|
||||
# 1133| Block 5
|
||||
@@ -7439,8 +7518,8 @@ ir.cpp:
|
||||
#-----| Goto -> Block 6
|
||||
|
||||
# 1133| Block 6
|
||||
# 1133| m1133_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 5:m1133_12, from 7:m1133_41
|
||||
# 1133| m1133_20(unknown) = Phi : from 5:~m1127_32, from 7:~m1133_38
|
||||
# 1133| m1133_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 5:m1133_12, from 7:m1133_37
|
||||
# 1133| m1133_20(unknown) = Phi : from 5:~m1127_27, from 7:~m1133_27
|
||||
# 1133| r1133_21(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_21
|
||||
# 1133| r1133_22(glval<unknown>) = FunctionAddress[operator!=] :
|
||||
@@ -7458,41 +7537,35 @@ ir.cpp:
|
||||
# 1133| m1133_29(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_21, partial:m1133_28
|
||||
#-----| r0_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_20, m1133_29
|
||||
# 1133| r1133_30(bool) = Call[operator!=] : func:r1133_22, this:r0_19, 0:r0_25
|
||||
# 1133| m1133_31(unknown) = ^CallSideEffect : ~m1133_27
|
||||
# 1133| m1133_32(unknown) = Chi : total:m1133_27, partial:m1133_31
|
||||
#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_19, m1133_19
|
||||
# 1133| v1133_33(void) = ConditionalBranch : r1133_30
|
||||
# 1133| v1133_31(void) = ConditionalBranch : r1133_30
|
||||
#-----| False -> Block 10
|
||||
#-----| True -> Block 8
|
||||
|
||||
# 1133| Block 7
|
||||
# 1133| r1133_34(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
# 1133| r1133_35(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 1133| r1133_36(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1133_35, this:r1133_34
|
||||
# 1133| m1133_37(unknown) = ^CallSideEffect : ~m1133_48
|
||||
# 1133| m1133_38(unknown) = Chi : total:m1133_48, partial:m1133_37
|
||||
# 1133| v1133_39(void) = ^IndirectReadSideEffect[-1] : &:r1133_34, m1133_19
|
||||
# 1133| m1133_40(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1133_34
|
||||
# 1133| m1133_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1133_19, partial:m1133_40
|
||||
# 1133| r1133_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1133_36
|
||||
# 1133| r1133_32(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
# 1133| r1133_33(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 1133| r1133_34(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1133_33, this:r1133_32
|
||||
# 1133| v1133_35(void) = ^IndirectReadSideEffect[-1] : &:r1133_32, m1133_19
|
||||
# 1133| m1133_36(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1133_32
|
||||
# 1133| m1133_37(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1133_19, partial:m1133_36
|
||||
# 1133| r1133_38(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1133_34
|
||||
#-----| Goto (back edge) -> Block 6
|
||||
|
||||
# 1133| Block 8
|
||||
# 1133| r1133_43(glval<int &>) = VariableAddress[e] :
|
||||
# 1133| r1133_44(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_27(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_44
|
||||
# 1133| r1133_45(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 1133| r1133_46(int &) = Call[operator*] : func:r1133_45, this:r0_27
|
||||
# 1133| m1133_47(unknown) = ^CallSideEffect : ~m1133_32
|
||||
# 1133| m1133_48(unknown) = Chi : total:m1133_32, partial:m1133_47
|
||||
# 1133| r1133_39(glval<int &>) = VariableAddress[e] :
|
||||
# 1133| r1133_40(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_27(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_40
|
||||
# 1133| r1133_41(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 1133| r1133_42(int &) = Call[operator*] : func:r1133_41, this:r0_27
|
||||
#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, m1133_19
|
||||
# 1133| r1133_49(glval<int>) = CopyValue : r1133_46
|
||||
# 1133| r1133_50(glval<int>) = Convert : r1133_49
|
||||
# 1133| r1133_51(int &) = CopyValue : r1133_50
|
||||
# 1133| m1133_52(int &) = Store[e] : &:r1133_43, r1133_51
|
||||
# 1133| r1133_43(glval<int>) = CopyValue : r1133_42
|
||||
# 1133| r1133_44(glval<int>) = Convert : r1133_43
|
||||
# 1133| r1133_45(int &) = CopyValue : r1133_44
|
||||
# 1133| m1133_46(int &) = Store[e] : &:r1133_39, r1133_45
|
||||
# 1134| r1134_1(glval<int &>) = VariableAddress[e] :
|
||||
# 1134| r1134_2(int &) = Load[e] : &:r1134_1, m1133_52
|
||||
# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m1133_48
|
||||
# 1134| r1134_2(int &) = Load[e] : &:r1134_1, m1133_46
|
||||
# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m1133_27
|
||||
# 1134| r1134_4(int) = Constant[5] :
|
||||
# 1134| r1134_5(bool) = CompareLT : r1134_3, r1134_4
|
||||
# 1134| v1134_6(void) = ConditionalBranch : r1134_5
|
||||
@@ -7504,13 +7577,12 @@ ir.cpp:
|
||||
#-----| Goto -> Block 10
|
||||
|
||||
# 1137| Block 10
|
||||
# 1137| m1137_1(unknown) = Phi : from 6:~m1133_32, from 9:~m1133_48
|
||||
# 1137| v1137_2(void) = NoOp :
|
||||
# 1138| v1138_1(void) = NoOp :
|
||||
# 1126| v1126_9(void) = ReturnIndirection[v] : &:r1126_7, m1126_8
|
||||
# 1126| v1126_10(void) = ReturnVoid :
|
||||
# 1126| v1126_11(void) = AliasedUse : ~m1137_1
|
||||
# 1126| v1126_12(void) = ExitFunction :
|
||||
# 1137| v1137_1(void) = NoOp :
|
||||
# 1138| v1138_1(void) = NoOp :
|
||||
# 1126| v1126_9(void) = ReturnIndirection[v] : &:r1126_7, m1126_8
|
||||
# 1126| v1126_10(void) = ReturnVoid :
|
||||
# 1126| v1126_11(void) = AliasedUse : ~m1133_27
|
||||
# 1126| v1126_12(void) = ExitFunction :
|
||||
|
||||
# 1157| int AsmStmt(int)
|
||||
# 1157| Block 0
|
||||
@@ -13555,8 +13627,8 @@ ir.cpp:
|
||||
#-----| Goto -> Block 8
|
||||
|
||||
# 2215| Block 8
|
||||
# 2215| m2215_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 7:m2215_23, from 9:m2215_68
|
||||
# 2215| m2215_31(unknown) = Phi : from 7:~m2215_11, from 9:~m2215_65
|
||||
# 2215| m2215_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 7:m2215_23, from 9:m2215_62
|
||||
# 2215| m2215_31(unknown) = Phi : from 7:~m2215_11, from 9:~m2215_53
|
||||
# 2215| r2215_32(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_7(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_32
|
||||
# 2215| r2215_33(glval<unknown>) = FunctionAddress[operator!=] :
|
||||
@@ -13574,50 +13646,44 @@ ir.cpp:
|
||||
# 2215| m2215_40(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_9, partial:m2215_39
|
||||
#-----| r0_13(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_8, m2215_40
|
||||
# 2215| r2215_41(bool) = Call[operator!=] : func:r2215_33, this:r0_7, 0:r0_13
|
||||
# 2215| m2215_42(unknown) = ^CallSideEffect : ~m2215_38
|
||||
# 2215| m2215_43(unknown) = Chi : total:m2215_38, partial:m2215_42
|
||||
#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2215_30
|
||||
# 2215| v2215_44(void) = ConditionalBranch : r2215_41
|
||||
# 2215| v2215_42(void) = ConditionalBranch : r2215_41
|
||||
#-----| False -> Block 10
|
||||
#-----| True -> Block 9
|
||||
|
||||
# 2215| Block 9
|
||||
# 2215| r2215_45(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2215| r2215_46(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_15(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_46
|
||||
# 2215| r2215_47(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2215| r2215_48(ClassWithDestructor &) = Call[operator*] : func:r2215_47, this:r0_15
|
||||
# 2215| m2215_49(unknown) = ^CallSideEffect : ~m2215_43
|
||||
# 2215| m2215_50(unknown) = Chi : total:m2215_43, partial:m2215_49
|
||||
# 2215| r2215_43(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2215| r2215_44(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_15(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_44
|
||||
# 2215| r2215_45(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2215| r2215_46(ClassWithDestructor &) = Call[operator*] : func:r2215_45, this:r0_15
|
||||
#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2215_30
|
||||
# 2215| r2215_51(ClassWithDestructor) = Load[?] : &:r2215_48, ~m2215_50
|
||||
# 2215| m2215_52(ClassWithDestructor) = Store[y] : &:r2215_45, r2215_51
|
||||
# 2215| r2215_47(ClassWithDestructor) = Load[?] : &:r2215_46, ~m2215_38
|
||||
# 2215| m2215_48(ClassWithDestructor) = Store[y] : &:r2215_43, r2215_47
|
||||
# 2216| r2216_1(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2216| r2216_2(glval<unknown>) = FunctionAddress[set_x] :
|
||||
# 2216| r2216_3(char) = Constant[97] :
|
||||
# 2216| v2216_4(void) = Call[set_x] : func:r2216_2, this:r2216_1, 0:r2216_3
|
||||
# 2216| m2216_5(unknown) = ^CallSideEffect : ~m2215_50
|
||||
# 2216| m2216_6(unknown) = Chi : total:m2215_50, partial:m2216_5
|
||||
# 2216| v2216_7(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, m2215_52
|
||||
# 2216| m2216_5(unknown) = ^CallSideEffect : ~m2215_38
|
||||
# 2216| m2216_6(unknown) = Chi : total:m2215_38, partial:m2216_5
|
||||
# 2216| v2216_7(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, m2215_48
|
||||
# 2216| m2216_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1
|
||||
# 2216| m2216_9(ClassWithDestructor) = Chi : total:m2215_52, partial:m2216_8
|
||||
# 2215| r2215_53(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2215| r2215_54(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2215| v2215_55(void) = Call[~ClassWithDestructor] : func:r2215_54, this:r2215_53
|
||||
# 2215| m2215_56(unknown) = ^CallSideEffect : ~m2216_6
|
||||
# 2215| m2215_57(unknown) = Chi : total:m2216_6, partial:m2215_56
|
||||
# 2215| v2215_58(void) = ^IndirectReadSideEffect[-1] : &:r2215_53, m2216_9
|
||||
# 2215| m2215_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_53
|
||||
# 2215| m2215_60(ClassWithDestructor) = Chi : total:m2216_9, partial:m2215_59
|
||||
# 2215| r2215_61(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
# 2215| r2215_62(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2215| r2215_63(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2215_62, this:r2215_61
|
||||
# 2215| m2215_64(unknown) = ^CallSideEffect : ~m2215_57
|
||||
# 2215| m2215_65(unknown) = Chi : total:m2215_57, partial:m2215_64
|
||||
# 2215| v2215_66(void) = ^IndirectReadSideEffect[-1] : &:r2215_61, m2215_30
|
||||
# 2215| m2215_67(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_61
|
||||
# 2215| m2215_68(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2215_30, partial:m2215_67
|
||||
# 2215| r2215_69(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2215_63
|
||||
# 2216| m2216_9(ClassWithDestructor) = Chi : total:m2215_48, partial:m2216_8
|
||||
# 2215| r2215_49(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2215| r2215_50(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2215| v2215_51(void) = Call[~ClassWithDestructor] : func:r2215_50, this:r2215_49
|
||||
# 2215| m2215_52(unknown) = ^CallSideEffect : ~m2216_6
|
||||
# 2215| m2215_53(unknown) = Chi : total:m2216_6, partial:m2215_52
|
||||
# 2215| v2215_54(void) = ^IndirectReadSideEffect[-1] : &:r2215_49, m2216_9
|
||||
# 2215| m2215_55(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_49
|
||||
# 2215| m2215_56(ClassWithDestructor) = Chi : total:m2216_9, partial:m2215_55
|
||||
# 2215| r2215_57(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
# 2215| r2215_58(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2215| r2215_59(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2215_58, this:r2215_57
|
||||
# 2215| v2215_60(void) = ^IndirectReadSideEffect[-1] : &:r2215_57, m2215_30
|
||||
# 2215| m2215_61(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_57
|
||||
# 2215| m2215_62(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2215_30, partial:m2215_61
|
||||
# 2215| r2215_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2215_59
|
||||
#-----| Goto (back edge) -> Block 8
|
||||
|
||||
# 2218| Block 10
|
||||
@@ -13630,8 +13696,8 @@ ir.cpp:
|
||||
# 2218| m2218_7(ClassWithDestructor) = Store[#temp2218:45] : &:r2218_4, r2218_6
|
||||
# 2218| r2218_8(ClassWithDestructor) = Load[#temp2218:45] : &:r2218_4, m2218_7
|
||||
# 2218| v2218_9(void) = Call[vector] : func:r2218_3, this:r2218_1, 0:r2218_8
|
||||
# 2218| m2218_10(unknown) = ^CallSideEffect : ~m2215_43
|
||||
# 2218| m2218_11(unknown) = Chi : total:m2215_43, partial:m2218_10
|
||||
# 2218| m2218_10(unknown) = ^CallSideEffect : ~m2215_38
|
||||
# 2218| m2218_11(unknown) = Chi : total:m2215_38, partial:m2218_10
|
||||
# 2218| m2218_12(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1
|
||||
# 2218| m2218_13(vector<ClassWithDestructor>) = Chi : total:m2218_2, partial:m2218_12
|
||||
# 2218| r2218_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] :
|
||||
@@ -13659,8 +13725,8 @@ ir.cpp:
|
||||
#-----| Goto -> Block 11
|
||||
|
||||
# 2218| Block 11
|
||||
# 2218| m2218_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 10:m2218_23, from 14:m2218_84
|
||||
# 2218| m2218_31(unknown) = Phi : from 10:~m2218_11, from 14:~m2218_81
|
||||
# 2218| m2218_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 10:m2218_23, from 14:m2218_78
|
||||
# 2218| m2218_31(unknown) = Phi : from 10:~m2218_11, from 14:~m2218_69
|
||||
# 2218| r2218_32(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2218_32
|
||||
# 2218| r2218_33(glval<unknown>) = FunctionAddress[operator!=] :
|
||||
@@ -13678,33 +13744,29 @@ ir.cpp:
|
||||
# 2218| m2218_40(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_25, partial:m2218_39
|
||||
#-----| r0_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_24, m2218_40
|
||||
# 2218| r2218_41(bool) = Call[operator!=] : func:r2218_33, this:r0_23, 0:r0_29
|
||||
# 2218| m2218_42(unknown) = ^CallSideEffect : ~m2218_38
|
||||
# 2218| m2218_43(unknown) = Chi : total:m2218_38, partial:m2218_42
|
||||
#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, m2218_30
|
||||
# 2218| v2218_44(void) = ConditionalBranch : r2218_41
|
||||
# 2218| v2218_42(void) = ConditionalBranch : r2218_41
|
||||
#-----| False -> Block 15
|
||||
#-----| True -> Block 12
|
||||
|
||||
# 2218| Block 12
|
||||
# 2218| r2218_45(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2218| r2218_46(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2218_46
|
||||
# 2218| r2218_47(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2218| r2218_48(ClassWithDestructor &) = Call[operator*] : func:r2218_47, this:r0_31
|
||||
# 2218| m2218_49(unknown) = ^CallSideEffect : ~m2218_43
|
||||
# 2218| m2218_50(unknown) = Chi : total:m2218_43, partial:m2218_49
|
||||
# 2218| r2218_43(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2218| r2218_44(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2218_44
|
||||
# 2218| r2218_45(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2218| r2218_46(ClassWithDestructor &) = Call[operator*] : func:r2218_45, this:r0_31
|
||||
#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, m2218_30
|
||||
# 2218| r2218_51(ClassWithDestructor) = Load[?] : &:r2218_48, ~m2218_50
|
||||
# 2218| m2218_52(ClassWithDestructor) = Store[y] : &:r2218_45, r2218_51
|
||||
# 2218| r2218_47(ClassWithDestructor) = Load[?] : &:r2218_46, ~m2218_38
|
||||
# 2218| m2218_48(ClassWithDestructor) = Store[y] : &:r2218_43, r2218_47
|
||||
# 2219| r2219_1(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2219| r2219_2(glval<unknown>) = FunctionAddress[set_x] :
|
||||
# 2219| r2219_3(char) = Constant[97] :
|
||||
# 2219| v2219_4(void) = Call[set_x] : func:r2219_2, this:r2219_1, 0:r2219_3
|
||||
# 2219| m2219_5(unknown) = ^CallSideEffect : ~m2218_50
|
||||
# 2219| m2219_6(unknown) = Chi : total:m2218_50, partial:m2219_5
|
||||
# 2219| v2219_7(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2218_52
|
||||
# 2219| m2219_5(unknown) = ^CallSideEffect : ~m2218_38
|
||||
# 2219| m2219_6(unknown) = Chi : total:m2218_38, partial:m2219_5
|
||||
# 2219| v2219_7(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2218_48
|
||||
# 2219| m2219_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1
|
||||
# 2219| m2219_9(ClassWithDestructor) = Chi : total:m2218_52, partial:m2219_8
|
||||
# 2219| m2219_9(ClassWithDestructor) = Chi : total:m2218_48, partial:m2219_8
|
||||
# 2220| r2220_1(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2220| r2220_2(glval<unknown>) = FunctionAddress[get_x] :
|
||||
# 2220| r2220_3(char) = Call[get_x] : func:r2220_2, this:r2220_1
|
||||
@@ -13722,50 +13784,48 @@ ir.cpp:
|
||||
|
||||
# 2221| Block 13
|
||||
# 2221| v2221_1(void) = NoOp :
|
||||
# 2218| r2218_53(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2218| r2218_54(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2218| v2218_55(void) = Call[~ClassWithDestructor] : func:r2218_54, this:r2218_53
|
||||
# 2218| m2218_56(unknown) = ^CallSideEffect : ~m2220_5
|
||||
# 2218| m2218_57(unknown) = Chi : total:m2220_5, partial:m2218_56
|
||||
# 2218| v2218_58(void) = ^IndirectReadSideEffect[-1] : &:r2218_53, m2220_8
|
||||
# 2218| m2218_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_53
|
||||
# 2218| m2218_60(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_59
|
||||
# 2218| r2218_61(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] :
|
||||
# 2218| r2218_62(glval<unknown>) = FunctionAddress[~vector] :
|
||||
# 2218| v2218_63(void) = Call[~vector] : func:r2218_62, this:r2218_61
|
||||
# 2218| m2218_64(unknown) = ^CallSideEffect : ~m2218_57
|
||||
# 2218| m2218_65(unknown) = Chi : total:m2218_57, partial:m2218_64
|
||||
# 2218| v2218_66(void) = ^IndirectReadSideEffect[-1] : &:r2218_61, m2218_13
|
||||
# 2218| m2218_67(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2218_61
|
||||
# 2218| m2218_68(vector<ClassWithDestructor>) = Chi : total:m2218_13, partial:m2218_67
|
||||
# 2218| r2218_49(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2218| r2218_50(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2218| v2218_51(void) = Call[~ClassWithDestructor] : func:r2218_50, this:r2218_49
|
||||
# 2218| m2218_52(unknown) = ^CallSideEffect : ~m2220_5
|
||||
# 2218| m2218_53(unknown) = Chi : total:m2220_5, partial:m2218_52
|
||||
# 2218| v2218_54(void) = ^IndirectReadSideEffect[-1] : &:r2218_49, m2220_8
|
||||
# 2218| m2218_55(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_49
|
||||
# 2218| m2218_56(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_55
|
||||
# 2218| r2218_57(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] :
|
||||
# 2218| r2218_58(glval<unknown>) = FunctionAddress[~vector] :
|
||||
# 2218| v2218_59(void) = Call[~vector] : func:r2218_58, this:r2218_57
|
||||
# 2218| m2218_60(unknown) = ^CallSideEffect : ~m2218_53
|
||||
# 2218| m2218_61(unknown) = Chi : total:m2218_53, partial:m2218_60
|
||||
# 2218| v2218_62(void) = ^IndirectReadSideEffect[-1] : &:r2218_57, m2218_13
|
||||
# 2218| m2218_63(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2218_57
|
||||
# 2218| m2218_64(vector<ClassWithDestructor>) = Chi : total:m2218_13, partial:m2218_63
|
||||
# 2233| r2233_1(glval<ClassWithDestructor>) = VariableAddress[x] :
|
||||
# 2233| r2233_2(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2233| v2233_3(void) = Call[~ClassWithDestructor] : func:r2233_2, this:r2233_1
|
||||
# 2233| m2233_4(unknown) = ^CallSideEffect : ~m2218_65
|
||||
# 2233| m2233_5(unknown) = Chi : total:m2218_65, partial:m2233_4
|
||||
# 2233| m2233_4(unknown) = ^CallSideEffect : ~m2218_61
|
||||
# 2233| m2233_5(unknown) = Chi : total:m2218_61, partial:m2233_4
|
||||
# 2233| v2233_6(void) = ^IndirectReadSideEffect[-1] : &:r2233_1, m2214_8
|
||||
# 2233| m2233_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1
|
||||
# 2233| m2233_8(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_7
|
||||
#-----| Goto -> Block 1
|
||||
|
||||
# 2218| Block 14
|
||||
# 2218| r2218_69(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2218| r2218_70(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2218| v2218_71(void) = Call[~ClassWithDestructor] : func:r2218_70, this:r2218_69
|
||||
# 2218| m2218_72(unknown) = ^CallSideEffect : ~m2220_5
|
||||
# 2218| m2218_73(unknown) = Chi : total:m2220_5, partial:m2218_72
|
||||
# 2218| v2218_74(void) = ^IndirectReadSideEffect[-1] : &:r2218_69, m2220_8
|
||||
# 2218| m2218_75(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_69
|
||||
# 2218| m2218_76(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_75
|
||||
# 2218| r2218_77(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
# 2218| r2218_78(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2218| r2218_79(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2218_78, this:r2218_77
|
||||
# 2218| m2218_80(unknown) = ^CallSideEffect : ~m2218_73
|
||||
# 2218| m2218_81(unknown) = Chi : total:m2218_73, partial:m2218_80
|
||||
# 2218| v2218_82(void) = ^IndirectReadSideEffect[-1] : &:r2218_77, m2218_30
|
||||
# 2218| m2218_83(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2218_77
|
||||
# 2218| m2218_84(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2218_30, partial:m2218_83
|
||||
# 2218| r2218_85(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2218_79
|
||||
# 2218| r2218_65(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2218| r2218_66(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2218| v2218_67(void) = Call[~ClassWithDestructor] : func:r2218_66, this:r2218_65
|
||||
# 2218| m2218_68(unknown) = ^CallSideEffect : ~m2220_5
|
||||
# 2218| m2218_69(unknown) = Chi : total:m2220_5, partial:m2218_68
|
||||
# 2218| v2218_70(void) = ^IndirectReadSideEffect[-1] : &:r2218_65, m2220_8
|
||||
# 2218| m2218_71(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_65
|
||||
# 2218| m2218_72(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_71
|
||||
# 2218| r2218_73(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
# 2218| r2218_74(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2218| r2218_75(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2218_74, this:r2218_73
|
||||
# 2218| v2218_76(void) = ^IndirectReadSideEffect[-1] : &:r2218_73, m2218_30
|
||||
# 2218| m2218_77(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2218_73
|
||||
# 2218| m2218_78(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2218_30, partial:m2218_77
|
||||
# 2218| r2218_79(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2218_75
|
||||
#-----| Goto (back edge) -> Block 11
|
||||
|
||||
# 2224| Block 15
|
||||
@@ -13774,8 +13834,8 @@ ir.cpp:
|
||||
# 2224| r2224_3(glval<unknown>) = FunctionAddress[vector] :
|
||||
# 2224| r2224_4(int) = Constant[1] :
|
||||
# 2224| v2224_5(void) = Call[vector] : func:r2224_3, this:r2224_1, 0:r2224_4
|
||||
# 2224| m2224_6(unknown) = ^CallSideEffect : ~m2218_43
|
||||
# 2224| m2224_7(unknown) = Chi : total:m2218_43, partial:m2224_6
|
||||
# 2224| m2224_6(unknown) = ^CallSideEffect : ~m2218_38
|
||||
# 2224| m2224_7(unknown) = Chi : total:m2218_38, partial:m2224_6
|
||||
# 2224| m2224_8(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2224_1
|
||||
# 2224| m2224_9(vector<int>) = Chi : total:m2224_2, partial:m2224_8
|
||||
# 2224| r2224_10(glval<vector<int> &>) = VariableAddress[(__range)] :
|
||||
@@ -13803,8 +13863,8 @@ ir.cpp:
|
||||
#-----| Goto -> Block 16
|
||||
|
||||
# 2224| Block 16
|
||||
# 2224| m2224_26(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 15:m2224_19, from 17:m2224_48
|
||||
# 2224| m2224_27(unknown) = Phi : from 15:~m2224_7, from 17:~m2224_45
|
||||
# 2224| m2224_26(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 15:m2224_19, from 17:m2224_44
|
||||
# 2224| m2224_27(unknown) = Phi : from 15:~m2224_7, from 17:~m2224_34
|
||||
# 2224| r2224_28(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2224_28
|
||||
# 2224| r2224_29(glval<unknown>) = FunctionAddress[operator!=] :
|
||||
@@ -13822,38 +13882,32 @@ ir.cpp:
|
||||
# 2224| m2224_36(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_41, partial:m2224_35
|
||||
#-----| r0_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_40, m2224_36
|
||||
# 2224| r2224_37(bool) = Call[operator!=] : func:r2224_29, this:r0_39, 0:r0_45
|
||||
# 2224| m2224_38(unknown) = ^CallSideEffect : ~m2224_34
|
||||
# 2224| m2224_39(unknown) = Chi : total:m2224_34, partial:m2224_38
|
||||
#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2224_26
|
||||
# 2224| v2224_40(void) = ConditionalBranch : r2224_37
|
||||
# 2224| v2224_38(void) = ConditionalBranch : r2224_37
|
||||
#-----| False -> Block 20
|
||||
#-----| True -> Block 18
|
||||
|
||||
# 2224| Block 17
|
||||
# 2224| r2224_41(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
# 2224| r2224_42(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2224| r2224_43(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r2224_42, this:r2224_41
|
||||
# 2224| m2224_44(unknown) = ^CallSideEffect : ~m2224_55
|
||||
# 2224| m2224_45(unknown) = Chi : total:m2224_55, partial:m2224_44
|
||||
# 2224| v2224_46(void) = ^IndirectReadSideEffect[-1] : &:r2224_41, m2224_26
|
||||
# 2224| m2224_47(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r2224_41
|
||||
# 2224| m2224_48(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m2224_26, partial:m2224_47
|
||||
# 2224| r2224_49(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r2224_43
|
||||
# 2224| r2224_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
# 2224| r2224_40(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2224| r2224_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r2224_40, this:r2224_39
|
||||
# 2224| v2224_42(void) = ^IndirectReadSideEffect[-1] : &:r2224_39, m2224_26
|
||||
# 2224| m2224_43(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r2224_39
|
||||
# 2224| m2224_44(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m2224_26, partial:m2224_43
|
||||
# 2224| r2224_45(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r2224_41
|
||||
#-----| Goto (back edge) -> Block 16
|
||||
|
||||
# 2224| Block 18
|
||||
# 2224| r2224_50(glval<int>) = VariableAddress[y] :
|
||||
# 2224| r2224_51(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2224_51
|
||||
# 2224| r2224_52(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2224| r2224_53(int &) = Call[operator*] : func:r2224_52, this:r0_47
|
||||
# 2224| m2224_54(unknown) = ^CallSideEffect : ~m2224_39
|
||||
# 2224| m2224_55(unknown) = Chi : total:m2224_39, partial:m2224_54
|
||||
# 2224| r2224_46(glval<int>) = VariableAddress[y] :
|
||||
# 2224| r2224_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2224_47
|
||||
# 2224| r2224_48(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2224| r2224_49(int &) = Call[operator*] : func:r2224_48, this:r0_47
|
||||
#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, m2224_26
|
||||
# 2224| r2224_56(int) = Load[?] : &:r2224_53, ~m2224_55
|
||||
# 2224| m2224_57(int) = Store[y] : &:r2224_50, r2224_56
|
||||
# 2224| r2224_50(int) = Load[?] : &:r2224_49, ~m2224_34
|
||||
# 2224| m2224_51(int) = Store[y] : &:r2224_46, r2224_50
|
||||
# 2225| r2225_1(glval<int>) = VariableAddress[y] :
|
||||
# 2225| r2225_2(int) = Load[y] : &:r2225_1, m2224_57
|
||||
# 2225| r2225_2(int) = Load[y] : &:r2225_1, m2224_51
|
||||
# 2225| r2225_3(int) = Constant[1] :
|
||||
# 2225| r2225_4(bool) = CompareEQ : r2225_2, r2225_3
|
||||
# 2225| v2225_5(void) = ConditionalBranch : r2225_4
|
||||
@@ -13862,19 +13916,19 @@ ir.cpp:
|
||||
|
||||
# 2226| Block 19
|
||||
# 2226| v2226_1(void) = NoOp :
|
||||
# 2224| r2224_58(glval<vector<int>>) = VariableAddress[ys] :
|
||||
# 2224| r2224_59(glval<unknown>) = FunctionAddress[~vector] :
|
||||
# 2224| v2224_60(void) = Call[~vector] : func:r2224_59, this:r2224_58
|
||||
# 2224| m2224_61(unknown) = ^CallSideEffect : ~m2224_55
|
||||
# 2224| m2224_62(unknown) = Chi : total:m2224_55, partial:m2224_61
|
||||
# 2224| v2224_63(void) = ^IndirectReadSideEffect[-1] : &:r2224_58, m2224_9
|
||||
# 2224| m2224_64(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2224_58
|
||||
# 2224| m2224_65(vector<int>) = Chi : total:m2224_9, partial:m2224_64
|
||||
# 2224| r2224_52(glval<vector<int>>) = VariableAddress[ys] :
|
||||
# 2224| r2224_53(glval<unknown>) = FunctionAddress[~vector] :
|
||||
# 2224| v2224_54(void) = Call[~vector] : func:r2224_53, this:r2224_52
|
||||
# 2224| m2224_55(unknown) = ^CallSideEffect : ~m2224_34
|
||||
# 2224| m2224_56(unknown) = Chi : total:m2224_34, partial:m2224_55
|
||||
# 2224| v2224_57(void) = ^IndirectReadSideEffect[-1] : &:r2224_52, m2224_9
|
||||
# 2224| m2224_58(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2224_52
|
||||
# 2224| m2224_59(vector<int>) = Chi : total:m2224_9, partial:m2224_58
|
||||
# 2233| r2233_9(glval<ClassWithDestructor>) = VariableAddress[x] :
|
||||
# 2233| r2233_10(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2233| v2233_11(void) = Call[~ClassWithDestructor] : func:r2233_10, this:r2233_9
|
||||
# 2233| m2233_12(unknown) = ^CallSideEffect : ~m2224_62
|
||||
# 2233| m2233_13(unknown) = Chi : total:m2224_62, partial:m2233_12
|
||||
# 2233| m2233_12(unknown) = ^CallSideEffect : ~m2224_56
|
||||
# 2233| m2233_13(unknown) = Chi : total:m2224_56, partial:m2233_12
|
||||
# 2233| v2233_14(void) = ^IndirectReadSideEffect[-1] : &:r2233_9, m2214_8
|
||||
# 2233| m2233_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_9
|
||||
# 2233| m2233_16(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_15
|
||||
@@ -13890,8 +13944,8 @@ ir.cpp:
|
||||
# 2229| m2229_7(ClassWithDestructor) = Store[#temp2229:45] : &:r2229_4, r2229_6
|
||||
# 2229| r2229_8(ClassWithDestructor) = Load[#temp2229:45] : &:r2229_4, m2229_7
|
||||
# 2229| v2229_9(void) = Call[vector] : func:r2229_3, this:r2229_1, 0:r2229_8
|
||||
# 2229| m2229_10(unknown) = ^CallSideEffect : ~m2224_39
|
||||
# 2229| m2229_11(unknown) = Chi : total:m2224_39, partial:m2229_10
|
||||
# 2229| m2229_10(unknown) = ^CallSideEffect : ~m2224_34
|
||||
# 2229| m2229_11(unknown) = Chi : total:m2224_34, partial:m2229_10
|
||||
# 2229| m2229_12(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2229_1
|
||||
# 2229| m2229_13(vector<ClassWithDestructor>) = Chi : total:m2229_2, partial:m2229_12
|
||||
# 2229| r2229_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] :
|
||||
@@ -13919,8 +13973,8 @@ ir.cpp:
|
||||
#-----| Goto -> Block 21
|
||||
|
||||
# 2229| Block 21
|
||||
# 2229| m2229_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 20:m2229_23, from 22:m2229_68
|
||||
# 2229| m2229_31(unknown) = Phi : from 20:~m2229_11, from 22:~m2229_65
|
||||
# 2229| m2229_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 20:m2229_23, from 22:m2229_62
|
||||
# 2229| m2229_31(unknown) = Phi : from 20:~m2229_11, from 22:~m2229_53
|
||||
# 2229| r2229_32(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_55(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2229_32
|
||||
# 2229| r2229_33(glval<unknown>) = FunctionAddress[operator!=] :
|
||||
@@ -13938,30 +13992,26 @@ ir.cpp:
|
||||
# 2229| m2229_40(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_57, partial:m2229_39
|
||||
#-----| r0_61(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_56, m2229_40
|
||||
# 2229| r2229_41(bool) = Call[operator!=] : func:r2229_33, this:r0_55, 0:r0_61
|
||||
# 2229| m2229_42(unknown) = ^CallSideEffect : ~m2229_38
|
||||
# 2229| m2229_43(unknown) = Chi : total:m2229_38, partial:m2229_42
|
||||
#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, m2229_30
|
||||
# 2229| v2229_44(void) = ConditionalBranch : r2229_41
|
||||
# 2229| v2229_42(void) = ConditionalBranch : r2229_41
|
||||
#-----| False -> Block 23
|
||||
#-----| True -> Block 22
|
||||
|
||||
# 2229| Block 22
|
||||
# 2229| r2229_45(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2229| r2229_46(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2229_46
|
||||
# 2229| r2229_47(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2229| r2229_48(ClassWithDestructor &) = Call[operator*] : func:r2229_47, this:r0_63
|
||||
# 2229| m2229_49(unknown) = ^CallSideEffect : ~m2229_43
|
||||
# 2229| m2229_50(unknown) = Chi : total:m2229_43, partial:m2229_49
|
||||
# 2229| r2229_43(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2229| r2229_44(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2229_44
|
||||
# 2229| r2229_45(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2229| r2229_46(ClassWithDestructor &) = Call[operator*] : func:r2229_45, this:r0_63
|
||||
#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, m2229_30
|
||||
# 2229| r2229_51(ClassWithDestructor) = Load[?] : &:r2229_48, ~m2229_50
|
||||
# 2229| m2229_52(ClassWithDestructor) = Store[y] : &:r2229_45, r2229_51
|
||||
# 2229| r2229_47(ClassWithDestructor) = Load[?] : &:r2229_46, ~m2229_38
|
||||
# 2229| m2229_48(ClassWithDestructor) = Store[y] : &:r2229_43, r2229_47
|
||||
# 2230| r2230_1(glval<ClassWithDestructor>) = VariableAddress[z1] :
|
||||
# 2230| m2230_2(ClassWithDestructor) = Uninitialized[z1] : &:r2230_1
|
||||
# 2230| r2230_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
|
||||
# 2230| v2230_4(void) = Call[ClassWithDestructor] : func:r2230_3, this:r2230_1
|
||||
# 2230| m2230_5(unknown) = ^CallSideEffect : ~m2229_50
|
||||
# 2230| m2230_6(unknown) = Chi : total:m2229_50, partial:m2230_5
|
||||
# 2230| m2230_5(unknown) = ^CallSideEffect : ~m2229_38
|
||||
# 2230| m2230_6(unknown) = Chi : total:m2229_38, partial:m2230_5
|
||||
# 2230| m2230_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2230_1
|
||||
# 2230| m2230_8(ClassWithDestructor) = Chi : total:m2230_2, partial:m2230_7
|
||||
# 2231| r2231_1(glval<ClassWithDestructor>) = VariableAddress[z2] :
|
||||
@@ -13988,23 +14038,21 @@ ir.cpp:
|
||||
# 2232| v2232_14(void) = ^IndirectReadSideEffect[-1] : &:r2232_9, m2230_8
|
||||
# 2232| m2232_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_9
|
||||
# 2232| m2232_16(ClassWithDestructor) = Chi : total:m2230_8, partial:m2232_15
|
||||
# 2229| r2229_53(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2229| r2229_54(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2229| v2229_55(void) = Call[~ClassWithDestructor] : func:r2229_54, this:r2229_53
|
||||
# 2229| m2229_56(unknown) = ^CallSideEffect : ~m2232_13
|
||||
# 2229| m2229_57(unknown) = Chi : total:m2232_13, partial:m2229_56
|
||||
# 2229| v2229_58(void) = ^IndirectReadSideEffect[-1] : &:r2229_53, m2229_52
|
||||
# 2229| m2229_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_53
|
||||
# 2229| m2229_60(ClassWithDestructor) = Chi : total:m2229_52, partial:m2229_59
|
||||
# 2229| r2229_61(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
# 2229| r2229_62(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2229| r2229_63(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2229_62, this:r2229_61
|
||||
# 2229| m2229_64(unknown) = ^CallSideEffect : ~m2229_57
|
||||
# 2229| m2229_65(unknown) = Chi : total:m2229_57, partial:m2229_64
|
||||
# 2229| v2229_66(void) = ^IndirectReadSideEffect[-1] : &:r2229_61, m2229_30
|
||||
# 2229| m2229_67(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2229_61
|
||||
# 2229| m2229_68(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2229_30, partial:m2229_67
|
||||
# 2229| r2229_69(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2229_63
|
||||
# 2229| r2229_49(glval<ClassWithDestructor>) = VariableAddress[y] :
|
||||
# 2229| r2229_50(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2229| v2229_51(void) = Call[~ClassWithDestructor] : func:r2229_50, this:r2229_49
|
||||
# 2229| m2229_52(unknown) = ^CallSideEffect : ~m2232_13
|
||||
# 2229| m2229_53(unknown) = Chi : total:m2232_13, partial:m2229_52
|
||||
# 2229| v2229_54(void) = ^IndirectReadSideEffect[-1] : &:r2229_49, m2229_48
|
||||
# 2229| m2229_55(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_49
|
||||
# 2229| m2229_56(ClassWithDestructor) = Chi : total:m2229_48, partial:m2229_55
|
||||
# 2229| r2229_57(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] :
|
||||
# 2229| r2229_58(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2229| r2229_59(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2229_58, this:r2229_57
|
||||
# 2229| v2229_60(void) = ^IndirectReadSideEffect[-1] : &:r2229_57, m2229_30
|
||||
# 2229| m2229_61(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2229_57
|
||||
# 2229| m2229_62(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2229_30, partial:m2229_61
|
||||
# 2229| r2229_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2229_59
|
||||
#-----| Goto (back edge) -> Block 21
|
||||
|
||||
# 2233| Block 23
|
||||
@@ -14012,8 +14060,8 @@ ir.cpp:
|
||||
# 2233| r2233_18(glval<ClassWithDestructor>) = VariableAddress[x] :
|
||||
# 2233| r2233_19(glval<unknown>) = FunctionAddress[~ClassWithDestructor] :
|
||||
# 2233| v2233_20(void) = Call[~ClassWithDestructor] : func:r2233_19, this:r2233_18
|
||||
# 2233| m2233_21(unknown) = ^CallSideEffect : ~m2229_43
|
||||
# 2233| m2233_22(unknown) = Chi : total:m2229_43, partial:m2233_21
|
||||
# 2233| m2233_21(unknown) = ^CallSideEffect : ~m2229_38
|
||||
# 2233| m2233_22(unknown) = Chi : total:m2229_38, partial:m2233_21
|
||||
# 2233| v2233_23(void) = ^IndirectReadSideEffect[-1] : &:r2233_18, m2214_8
|
||||
# 2233| m2233_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_18
|
||||
# 2233| m2233_25(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_24
|
||||
@@ -14685,8 +14733,8 @@ ir.cpp:
|
||||
#-----| Goto -> Block 4
|
||||
|
||||
# 2307| Block 4
|
||||
# 2307| m2307_36(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Phi : from 3:m2307_29, from 5:m2307_83
|
||||
# 2307| m2307_37(unknown) = Phi : from 3:~m2307_19, from 5:~m2307_80
|
||||
# 2307| m2307_36(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Phi : from 3:m2307_29, from 5:m2307_77
|
||||
# 2307| m2307_37(unknown) = Phi : from 3:~m2307_19, from 5:~m2307_68
|
||||
# 2307| r2307_38(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_7(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2307_38
|
||||
# 2307| r2307_39(glval<unknown>) = FunctionAddress[operator!=] :
|
||||
@@ -14704,39 +14752,35 @@ ir.cpp:
|
||||
# 2307| m2307_46(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Chi : total:m0_9, partial:m2307_45
|
||||
#-----| r0_13(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Load[#temp0:0] : &:r0_8, m2307_46
|
||||
# 2307| r2307_47(bool) = Call[operator!=] : func:r2307_39, this:r0_7, 0:r0_13
|
||||
# 2307| m2307_48(unknown) = ^CallSideEffect : ~m2307_44
|
||||
# 2307| m2307_49(unknown) = Chi : total:m2307_44, partial:m2307_48
|
||||
#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2307_36
|
||||
# 2307| v2307_50(void) = ConditionalBranch : r2307_47
|
||||
# 2307| v2307_48(void) = ConditionalBranch : r2307_47
|
||||
#-----| False -> Block 6
|
||||
#-----| True -> Block 5
|
||||
|
||||
# 2307| Block 5
|
||||
# 2307| r2307_51(glval<String>) = VariableAddress[s] :
|
||||
# 2307| m2307_52(String) = Uninitialized[s] : &:r2307_51
|
||||
# 2307| r2307_53(glval<unknown>) = FunctionAddress[String] :
|
||||
# 2307| r2307_54(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_15(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2307_54
|
||||
# 2307| r2307_55(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2307| r2307_56(String &) = Call[operator*] : func:r2307_55, this:r0_15
|
||||
# 2307| m2307_57(unknown) = ^CallSideEffect : ~m2307_49
|
||||
# 2307| m2307_58(unknown) = Chi : total:m2307_49, partial:m2307_57
|
||||
# 2307| r2307_49(glval<String>) = VariableAddress[s] :
|
||||
# 2307| m2307_50(String) = Uninitialized[s] : &:r2307_49
|
||||
# 2307| r2307_51(glval<unknown>) = FunctionAddress[String] :
|
||||
# 2307| r2307_52(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_15(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2307_52
|
||||
# 2307| r2307_53(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2307| r2307_54(String &) = Call[operator*] : func:r2307_53, this:r0_15
|
||||
#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2307_36
|
||||
# 2307| r2307_59(glval<String>) = CopyValue : r2307_56
|
||||
# 2307| r2307_60(glval<String>) = Convert : r2307_59
|
||||
# 2307| r2307_61(String &) = CopyValue : r2307_60
|
||||
# 2307| v2307_62(void) = Call[String] : func:r2307_53, this:r2307_51, 0:r2307_61
|
||||
# 2307| m2307_63(unknown) = ^CallSideEffect : ~m2307_58
|
||||
# 2307| m2307_64(unknown) = Chi : total:m2307_58, partial:m2307_63
|
||||
# 2307| v2307_65(void) = ^BufferReadSideEffect[0] : &:r2307_61, ~m2307_64
|
||||
# 2307| m2307_66(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_51
|
||||
# 2307| m2307_67(String) = Chi : total:m2307_52, partial:m2307_66
|
||||
# 2307| r2307_55(glval<String>) = CopyValue : r2307_54
|
||||
# 2307| r2307_56(glval<String>) = Convert : r2307_55
|
||||
# 2307| r2307_57(String &) = CopyValue : r2307_56
|
||||
# 2307| v2307_58(void) = Call[String] : func:r2307_51, this:r2307_49, 0:r2307_57
|
||||
# 2307| m2307_59(unknown) = ^CallSideEffect : ~m2307_44
|
||||
# 2307| m2307_60(unknown) = Chi : total:m2307_44, partial:m2307_59
|
||||
# 2307| v2307_61(void) = ^BufferReadSideEffect[0] : &:r2307_57, ~m2307_60
|
||||
# 2307| m2307_62(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_49
|
||||
# 2307| m2307_63(String) = Chi : total:m2307_50, partial:m2307_62
|
||||
# 2308| r2308_1(glval<String>) = VariableAddress[s2] :
|
||||
# 2308| m2308_2(String) = Uninitialized[s2] : &:r2308_1
|
||||
# 2308| r2308_3(glval<unknown>) = FunctionAddress[String] :
|
||||
# 2308| v2308_4(void) = Call[String] : func:r2308_3, this:r2308_1
|
||||
# 2308| m2308_5(unknown) = ^CallSideEffect : ~m2307_64
|
||||
# 2308| m2308_6(unknown) = Chi : total:m2307_64, partial:m2308_5
|
||||
# 2308| m2308_5(unknown) = ^CallSideEffect : ~m2307_60
|
||||
# 2308| m2308_6(unknown) = Chi : total:m2307_60, partial:m2308_5
|
||||
# 2308| m2308_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2308_1
|
||||
# 2308| m2308_8(String) = Chi : total:m2308_2, partial:m2308_7
|
||||
# 2309| r2309_1(glval<String>) = VariableAddress[s2] :
|
||||
@@ -14747,23 +14791,21 @@ ir.cpp:
|
||||
# 2309| v2309_6(void) = ^IndirectReadSideEffect[-1] : &:r2309_1, m2308_8
|
||||
# 2309| m2309_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2309_1
|
||||
# 2309| m2309_8(String) = Chi : total:m2308_8, partial:m2309_7
|
||||
# 2307| r2307_68(glval<String>) = VariableAddress[s] :
|
||||
# 2307| r2307_69(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 2307| v2307_70(void) = Call[~String] : func:r2307_69, this:r2307_68
|
||||
# 2307| m2307_71(unknown) = ^CallSideEffect : ~m2309_5
|
||||
# 2307| m2307_72(unknown) = Chi : total:m2309_5, partial:m2307_71
|
||||
# 2307| v2307_73(void) = ^IndirectReadSideEffect[-1] : &:r2307_68, m2307_67
|
||||
# 2307| m2307_74(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_68
|
||||
# 2307| m2307_75(String) = Chi : total:m2307_67, partial:m2307_74
|
||||
# 2307| r2307_76(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] :
|
||||
# 2307| r2307_77(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2307| r2307_78(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = Call[operator++] : func:r2307_77, this:r2307_76
|
||||
# 2307| m2307_79(unknown) = ^CallSideEffect : ~m2307_72
|
||||
# 2307| m2307_80(unknown) = Chi : total:m2307_72, partial:m2307_79
|
||||
# 2307| v2307_81(void) = ^IndirectReadSideEffect[-1] : &:r2307_76, m2307_36
|
||||
# 2307| m2307_82(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r2307_76
|
||||
# 2307| m2307_83(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Chi : total:m2307_36, partial:m2307_82
|
||||
# 2307| r2307_84(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = CopyValue : r2307_78
|
||||
# 2307| r2307_64(glval<String>) = VariableAddress[s] :
|
||||
# 2307| r2307_65(glval<unknown>) = FunctionAddress[~String] :
|
||||
# 2307| v2307_66(void) = Call[~String] : func:r2307_65, this:r2307_64
|
||||
# 2307| m2307_67(unknown) = ^CallSideEffect : ~m2309_5
|
||||
# 2307| m2307_68(unknown) = Chi : total:m2309_5, partial:m2307_67
|
||||
# 2307| v2307_69(void) = ^IndirectReadSideEffect[-1] : &:r2307_64, m2307_63
|
||||
# 2307| m2307_70(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_64
|
||||
# 2307| m2307_71(String) = Chi : total:m2307_63, partial:m2307_70
|
||||
# 2307| r2307_72(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] :
|
||||
# 2307| r2307_73(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2307| r2307_74(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = Call[operator++] : func:r2307_73, this:r2307_72
|
||||
# 2307| v2307_75(void) = ^IndirectReadSideEffect[-1] : &:r2307_72, m2307_36
|
||||
# 2307| m2307_76(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r2307_72
|
||||
# 2307| m2307_77(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Chi : total:m2307_36, partial:m2307_76
|
||||
# 2307| r2307_78(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = CopyValue : r2307_74
|
||||
#-----| Goto (back edge) -> Block 4
|
||||
|
||||
# 2311| Block 6
|
||||
@@ -14773,8 +14815,8 @@ ir.cpp:
|
||||
# 2311| r2311_4(glval<char[6]>) = StringConstant["hello"] :
|
||||
# 2311| r2311_5(char *) = Convert : r2311_4
|
||||
# 2311| v2311_6(void) = Call[String] : func:r2311_3, this:r2311_1, 0:r2311_5
|
||||
# 2311| m2311_7(unknown) = ^CallSideEffect : ~m2307_49
|
||||
# 2311| m2311_8(unknown) = Chi : total:m2307_49, partial:m2311_7
|
||||
# 2311| m2311_7(unknown) = ^CallSideEffect : ~m2307_44
|
||||
# 2311| m2311_8(unknown) = Chi : total:m2307_44, partial:m2311_7
|
||||
# 2311| v2311_9(void) = ^BufferReadSideEffect[0] : &:r2311_5, ~m2301_3
|
||||
# 2311| m2311_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1
|
||||
# 2311| m2311_11(String) = Chi : total:m2311_2, partial:m2311_10
|
||||
@@ -15517,8 +15559,8 @@ ir.cpp:
|
||||
#-----| Goto -> Block 10
|
||||
|
||||
# 2430| Block 10
|
||||
# 2430| m2430_43(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Phi : from 9:m2430_36, from 11:m2430_73
|
||||
# 2430| m2430_44(unknown) = Phi : from 9:~m2430_26, from 11:~m2430_70
|
||||
# 2430| m2430_43(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Phi : from 9:m2430_36, from 11:m2430_67
|
||||
# 2430| m2430_44(unknown) = Phi : from 9:~m2430_26, from 11:~m2430_51
|
||||
# 2430| r2430_45(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_7(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = Convert : r2430_45
|
||||
# 2430| r2430_46(glval<unknown>) = FunctionAddress[operator!=] :
|
||||
@@ -15536,48 +15578,42 @@ ir.cpp:
|
||||
# 2430| m2430_53(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Chi : total:m0_9, partial:m2430_52
|
||||
#-----| r0_13(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Load[#temp0:0] : &:r0_8, m2430_53
|
||||
# 2430| r2430_54(bool) = Call[operator!=] : func:r2430_46, this:r0_7, 0:r0_13
|
||||
# 2430| m2430_55(unknown) = ^CallSideEffect : ~m2430_51
|
||||
# 2430| m2430_56(unknown) = Chi : total:m2430_51, partial:m2430_55
|
||||
#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2430_43
|
||||
# 2430| v2430_57(void) = ConditionalBranch : r2430_54
|
||||
# 2430| v2430_55(void) = ConditionalBranch : r2430_54
|
||||
#-----| False -> Block 12
|
||||
#-----| True -> Block 11
|
||||
|
||||
# 2430| Block 11
|
||||
# 2430| r2430_58(glval<char>) = VariableAddress[y] :
|
||||
# 2430| r2430_59(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_15(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = Convert : r2430_59
|
||||
# 2430| r2430_60(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2430| r2430_61(char &) = Call[operator*] : func:r2430_60, this:r0_15
|
||||
# 2430| m2430_62(unknown) = ^CallSideEffect : ~m2430_56
|
||||
# 2430| m2430_63(unknown) = Chi : total:m2430_56, partial:m2430_62
|
||||
# 2430| r2430_56(glval<char>) = VariableAddress[y] :
|
||||
# 2430| r2430_57(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
|
||||
#-----| r0_15(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = Convert : r2430_57
|
||||
# 2430| r2430_58(glval<unknown>) = FunctionAddress[operator*] :
|
||||
# 2430| r2430_59(char &) = Call[operator*] : func:r2430_58, this:r0_15
|
||||
#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2430_43
|
||||
# 2430| r2430_64(char) = Load[?] : &:r2430_61, ~m2430_63
|
||||
# 2430| m2430_65(char) = Store[y] : &:r2430_58, r2430_64
|
||||
# 2430| r2430_60(char) = Load[?] : &:r2430_59, ~m2430_51
|
||||
# 2430| m2430_61(char) = Store[y] : &:r2430_56, r2430_60
|
||||
# 2431| r2431_1(glval<char>) = VariableAddress[x] :
|
||||
# 2431| r2431_2(char) = Load[x] : &:r2431_1, m2430_17
|
||||
# 2431| r2431_3(int) = Convert : r2431_2
|
||||
# 2431| r2431_4(glval<char>) = VariableAddress[y] :
|
||||
# 2431| r2431_5(char) = Load[y] : &:r2431_4, m2430_65
|
||||
# 2431| r2431_5(char) = Load[y] : &:r2431_4, m2430_61
|
||||
# 2431| r2431_6(int) = Convert : r2431_5
|
||||
# 2431| r2431_7(int) = Add : r2431_6, r2431_3
|
||||
# 2431| r2431_8(char) = Convert : r2431_7
|
||||
# 2431| m2431_9(char) = Store[y] : &:r2431_4, r2431_8
|
||||
# 2430| r2430_66(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
|
||||
# 2430| r2430_67(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2430| r2430_68(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &) = Call[operator++] : func:r2430_67, this:r2430_66
|
||||
# 2430| m2430_69(unknown) = ^CallSideEffect : ~m2430_63
|
||||
# 2430| m2430_70(unknown) = Chi : total:m2430_63, partial:m2430_69
|
||||
# 2430| v2430_71(void) = ^IndirectReadSideEffect[-1] : &:r2430_66, m2430_43
|
||||
# 2430| m2430_72(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = ^IndirectMayWriteSideEffect[-1] : &:r2430_66
|
||||
# 2430| m2430_73(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Chi : total:m2430_43, partial:m2430_72
|
||||
# 2430| r2430_74(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = CopyValue : r2430_68
|
||||
# 2430| r2430_62(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
|
||||
# 2430| r2430_63(glval<unknown>) = FunctionAddress[operator++] :
|
||||
# 2430| r2430_64(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &) = Call[operator++] : func:r2430_63, this:r2430_62
|
||||
# 2430| v2430_65(void) = ^IndirectReadSideEffect[-1] : &:r2430_62, m2430_43
|
||||
# 2430| m2430_66(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = ^IndirectMayWriteSideEffect[-1] : &:r2430_62
|
||||
# 2430| m2430_67(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Chi : total:m2430_43, partial:m2430_66
|
||||
# 2430| r2430_68(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = CopyValue : r2430_64
|
||||
#-----| Goto (back edge) -> Block 10
|
||||
|
||||
# 2432| Block 12
|
||||
# 2432| v2432_1(void) = NoOp :
|
||||
# 2410| v2410_5(void) = ReturnVoid :
|
||||
# 2410| v2410_6(void) = AliasedUse : ~m2430_56
|
||||
# 2410| v2410_6(void) = AliasedUse : ~m2430_51
|
||||
# 2410| v2410_7(void) = ExitFunction :
|
||||
|
||||
# 2410| Block 13
|
||||
|
||||
@@ -6,6 +6,12 @@ missingOperandType
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| coroutines.cpp:87:20:87:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:91:21:91:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:95:20:95:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:99:21:99:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:103:20:103:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:108:21:108:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
|
||||
@@ -6,6 +6,12 @@ missingOperandType
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| coroutines.cpp:87:20:87:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:91:21:91:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:95:20:95:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:99:21:99:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:103:20:103:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:108:21:108:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
|
||||
115
cpp/ql/test/library-tests/ir/ir/coroutines.cpp
Normal file
115
cpp/ql/test/library-tests/ir/ir/coroutines.cpp
Normal file
@@ -0,0 +1,115 @@
|
||||
namespace std {
|
||||
|
||||
template<class R, class... Args>
|
||||
struct coroutine_traits{
|
||||
using promise_type = R::promise_type;
|
||||
};
|
||||
|
||||
using nullptr_t = decltype(nullptr);
|
||||
|
||||
template<typename Promise>
|
||||
struct coroutine_handle {
|
||||
constexpr coroutine_handle() noexcept;
|
||||
constexpr coroutine_handle( std::nullptr_t ) noexcept;
|
||||
coroutine_handle(const coroutine_handle&) noexcept;
|
||||
coroutine_handle(coroutine_handle&&) noexcept;
|
||||
|
||||
static coroutine_handle from_promise(Promise&);
|
||||
coroutine_handle& operator=(nullptr_t) noexcept;
|
||||
coroutine_handle& operator=(const coroutine_handle&) noexcept;
|
||||
coroutine_handle& operator=(coroutine_handle&&) noexcept;
|
||||
constexpr operator coroutine_handle() const noexcept;
|
||||
|
||||
bool done() const;
|
||||
constexpr explicit operator bool() const noexcept;
|
||||
|
||||
void operator()() const;
|
||||
void resume() const;
|
||||
|
||||
void destroy() const;
|
||||
|
||||
Promise& promise() const;
|
||||
|
||||
constexpr void* address() const noexcept;
|
||||
static constexpr coroutine_handle from_address(void *);
|
||||
};
|
||||
|
||||
template<typename Promise>
|
||||
constexpr bool operator==(coroutine_handle<Promise>, coroutine_handle<Promise>) noexcept;
|
||||
|
||||
struct suspend_always {
|
||||
constexpr bool await_ready() const noexcept;
|
||||
template<typename Promise> constexpr void await_suspend(coroutine_handle<Promise>) const noexcept;
|
||||
constexpr void await_resume() const noexcept;
|
||||
};
|
||||
}
|
||||
|
||||
class co_returnable_void {
|
||||
public:
|
||||
struct promise_type;
|
||||
co_returnable_void(std::coroutine_handle<promise_type>);
|
||||
|
||||
co_returnable_void(co_returnable_void&) = delete;
|
||||
co_returnable_void(co_returnable_void&&) = delete;
|
||||
};
|
||||
|
||||
struct co_returnable_void::promise_type {
|
||||
std::coroutine_handle<promise_type> get_return_object();
|
||||
std::suspend_always initial_suspend() noexcept;
|
||||
std::suspend_always final_suspend() noexcept;
|
||||
|
||||
void return_void();
|
||||
void unhandled_exception();
|
||||
|
||||
std::suspend_always yield_value(int);
|
||||
};
|
||||
|
||||
class co_returnable_value {
|
||||
public:
|
||||
struct promise_type;
|
||||
co_returnable_value(std::coroutine_handle<promise_type>);
|
||||
|
||||
co_returnable_value(co_returnable_value&) = delete;
|
||||
co_returnable_value(co_returnable_value&&) = delete;
|
||||
};
|
||||
|
||||
struct co_returnable_value::promise_type {
|
||||
std::coroutine_handle<promise_type> get_return_object();
|
||||
std::suspend_always initial_suspend() noexcept;
|
||||
std::suspend_always final_suspend() noexcept;
|
||||
|
||||
void return_value(int);
|
||||
void unhandled_exception();
|
||||
|
||||
std::suspend_always yield_value(int);
|
||||
};
|
||||
|
||||
co_returnable_void co_return_void() {
|
||||
co_return;
|
||||
}
|
||||
|
||||
co_returnable_value co_return_int(int i) {
|
||||
co_return i;
|
||||
}
|
||||
|
||||
co_returnable_void co_yield_value_void(int i) {
|
||||
co_yield i;
|
||||
}
|
||||
|
||||
co_returnable_value co_yield_value_value(int i) {
|
||||
co_yield i;
|
||||
}
|
||||
|
||||
co_returnable_void co_yield_and_return_void(int i) {
|
||||
co_yield i;
|
||||
co_return;
|
||||
}
|
||||
|
||||
co_returnable_value co_yield_and_return_value(int i) {
|
||||
co_yield i;
|
||||
co_return (i + 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// semmle-extractor-options: --edg --c++20
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
||||
private import cpp
|
||||
private import semmle.code.cpp.ir.IR
|
||||
private import PrintConfig
|
||||
|
||||
from Operand a
|
||||
where not locationIsInStandardHeaders(a.getLocation())
|
||||
select a, a.getDumpString()
|
||||
@@ -1,4 +1,36 @@
|
||||
missingOperand
|
||||
| coroutines.cpp:87:20:88:11 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:87:20:88:11 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:87:20:88:11 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:87:20:88:11 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:91:21:92:11 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:91:21:92:11 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:91:21:92:11 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:91:21:92:11 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:95:20:96:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:95:20:96:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:95:20:96:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:95:20:96:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:96:13:96:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:96:13:96:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:99:21:100:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:99:21:100:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:99:21:100:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:99:21:100:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:100:13:100:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:100:13:100:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:103:20:104:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:103:20:104:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:103:20:104:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:103:20:104:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:104:13:104:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:104:13:104:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:108:21:109:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:108:21:109:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:108:21:109:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:108:21:109:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:109:13:109:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:109:13:109:13 | CopyValue: * ... | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
unexpectedOperand
|
||||
duplicateOperand
|
||||
missingPhiOperand
|
||||
@@ -6,6 +38,93 @@ missingOperandType
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| coroutines.cpp:87:20:87:20 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:87:20:87:20 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:87:20:87:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:87:20:88:11 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:87:20:88:11 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:91:21:91:21 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:91:21:91:21 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:91:21:91:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:91:21:92:11 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:91:21:92:11 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:95:20:95:20 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:95:20:95:20 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:95:20:95:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:95:20:96:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:95:20:96:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:96:12:96:12 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:96:13:96:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:99:21:99:21 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:99:21:99:21 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:99:21:99:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:99:21:100:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:99:21:100:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:100:12:100:12 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:100:13:100:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:103:20:103:20 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:103:20:103:20 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:103:20:103:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:103:20:104:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:103:20:104:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:104:12:104:12 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:104:13:104:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:108:21:108:21 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:108:21:108:21 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:108:21:108:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:108:21:109:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:108:21:109:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:109:12:109:12 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:109:13:109:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| file://:0:0:0:0 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| file://:0:0:0:0 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | IndirectMayWriteSideEffect: (unnamed local variable) | Instruction 'IndirectMayWriteSideEffect: (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | NoOp: label ...: | Instruction 'NoOp: label ...:' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| file://:0:0:0:0 | NoOp: label ...: | Instruction 'NoOp: label ...:' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| file://:0:0:0:0 | NoOp: label ...: | Instruction 'NoOp: label ...:' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | NoOp: label ...: | Instruction 'NoOp: label ...:' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | NoOp: label ...: | Instruction 'NoOp: label ...:' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | NoOp: label ...: | Instruction 'NoOp: label ...:' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| file://:0:0:0:0 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| file://:0:0:0:0 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
@@ -37,4 +156,32 @@ nonUniqueEnclosingIRFunction
|
||||
fieldAddressOnNonPointer
|
||||
thisArgumentIsNonPointer
|
||||
nonUniqueIRVariable
|
||||
| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
missingCppType
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,6 +6,12 @@ missingOperandType
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| coroutines.cpp:87:20:87:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:91:21:91:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:95:20:95:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:99:21:99:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:103:20:103:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:108:21:108:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
|
||||
@@ -6,6 +6,12 @@ missingOperandType
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| coroutines.cpp:87:20:87:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() |
|
||||
| coroutines.cpp:91:21:91:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) |
|
||||
| coroutines.cpp:95:20:95:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) |
|
||||
| coroutines.cpp:99:21:99:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) |
|
||||
| coroutines.cpp:103:20:103:20 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) |
|
||||
| coroutines.cpp:108:21:108:21 | Uninitialized: declaration of (unnamed local variable) | Instruction 'Uninitialized: declaration of (unnamed local variable)' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
|
||||
@@ -314,24 +314,46 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given b in a?.b.c, return a.
|
||||
/// Given `b` in `a?.b.c`, return `(a?.b, a?.b)`.
|
||||
///
|
||||
/// Given `c` in `a?.b?.c.d`, return `(b?.c, a?.b?.c)`.
|
||||
/// </summary>
|
||||
/// <param name="node">A MemberBindingExpression.</param>
|
||||
/// <returns>The qualifier of the conditional access.</returns>
|
||||
protected static ExpressionSyntax FindConditionalQualifier(ExpressionSyntax node)
|
||||
/// <returns>The conditional access.</returns>
|
||||
public static (ConditionalAccessExpressionSyntax Parent, ConditionalAccessExpressionSyntax Root) FindConditionalAccessParent(ExpressionSyntax node)
|
||||
{
|
||||
for (SyntaxNode? n = node; n is not null; n = n.Parent)
|
||||
(ConditionalAccessExpressionSyntax, ConditionalAccessExpressionSyntax)? res = null;
|
||||
SyntaxNode? prev = null;
|
||||
|
||||
for (SyntaxNode? n = node; n is not null; prev = n, n = n.Parent)
|
||||
{
|
||||
if (n.Parent is ConditionalAccessExpressionSyntax conditionalAccess &&
|
||||
conditionalAccess.WhenNotNull == n)
|
||||
if (n is ConditionalAccessExpressionSyntax conditionalAccess &&
|
||||
(prev is null || conditionalAccess.WhenNotNull == prev))
|
||||
{
|
||||
return conditionalAccess.Expression;
|
||||
res = res is null ? (conditionalAccess, conditionalAccess) : (res.Value.Item1, conditionalAccess);
|
||||
}
|
||||
else if (res.HasValue)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (res.HasValue)
|
||||
{
|
||||
return res.Value;
|
||||
}
|
||||
|
||||
throw new InternalError(node, "Unable to locate a ConditionalAccessExpression");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given b in a?.b.c, return a.
|
||||
/// </summary>
|
||||
/// <param name="node">A MemberBindingExpression.</param>
|
||||
/// <returns>The qualifier of the conditional access.</returns>
|
||||
protected static ExpressionSyntax FindConditionalQualifier(ExpressionSyntax node) =>
|
||||
FindConditionalAccessParent(node).Parent.Expression;
|
||||
|
||||
public void MakeConditional(TextWriter trapFile)
|
||||
{
|
||||
trapFile.conditional_access(this);
|
||||
|
||||
@@ -125,11 +125,6 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
cachedLocation = Context.CreateLocation(CodeAnalysisLocation);
|
||||
return cachedLocation;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
cachedLocation = value;
|
||||
}
|
||||
}
|
||||
|
||||
public ExprKind Kind { get; set; } = ExprKind.UNKNOWN;
|
||||
|
||||
@@ -79,7 +79,9 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
internal class BindingElementAccess : ElementAccess
|
||||
{
|
||||
private BindingElementAccess(ExpressionNodeInfo info)
|
||||
: base(info, FindConditionalQualifier(info.Node), ((ElementBindingExpressionSyntax)info.Node).ArgumentList) { }
|
||||
: base(info, FindConditionalQualifier(info.Node), ((ElementBindingExpressionSyntax)info.Node).ArgumentList)
|
||||
{
|
||||
}
|
||||
|
||||
public static Expression Create(ExpressionNodeInfo info) => new BindingElementAccess(info).TryPopulate();
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Semmle.Extraction.CSharp.Populators
|
||||
/// <param name="l1">The location to extend.</param>
|
||||
/// <param name="n2">The node to extend the location to.</param>
|
||||
/// <returns>Extended location.</returns>
|
||||
public static Location ExtendLocation(this Location l1, SyntaxNode n2)
|
||||
public static Location ExtendLocation(this Location l1, SyntaxNode n2, bool onlyStart = false)
|
||||
{
|
||||
if (n2 is null)
|
||||
{
|
||||
@@ -22,7 +22,7 @@ namespace Semmle.Extraction.CSharp.Populators
|
||||
|
||||
var l2 = n2.FixedLocation();
|
||||
var start = System.Math.Min(l1.SourceSpan.Start, l2.SourceSpan.Start);
|
||||
var end = System.Math.Max(l1.SourceSpan.End, l2.SourceSpan.End);
|
||||
var end = onlyStart ? l1.SourceSpan.End : System.Math.Max(l1.SourceSpan.End, l2.SourceSpan.End);
|
||||
return Location.Create(n2.SyntaxTree, new Microsoft.CodeAnalysis.Text.TextSpan(start, end - start));
|
||||
}
|
||||
|
||||
@@ -85,6 +85,17 @@ namespace Semmle.Extraction.CSharp.Populators
|
||||
return ((CatchDeclarationSyntax)node).Identifier.GetLocation();
|
||||
case SyntaxKind.LabeledStatement:
|
||||
return ((LabeledStatementSyntax)node).Identifier.GetLocation();
|
||||
case SyntaxKind.ElementBindingExpression:
|
||||
return node.GetLocation().ExtendLocation(Entities.Expression.FindConditionalAccessParent((ElementBindingExpressionSyntax)node).Root, onlyStart: true);
|
||||
case SyntaxKind.MemberBindingExpression:
|
||||
return node.GetLocation().ExtendLocation(Entities.Expression.FindConditionalAccessParent((MemberBindingExpressionSyntax)node).Root, onlyStart: true);
|
||||
case SyntaxKind.ElementAccessExpression:
|
||||
return node.GetLocation().ExtendLocation(((ElementAccessExpressionSyntax)node).Expression);
|
||||
case SyntaxKind.SimpleMemberAccessExpression:
|
||||
return node.GetLocation().ExtendLocation(((MemberAccessExpressionSyntax)node).Expression);
|
||||
case SyntaxKind.InvocationExpression:
|
||||
return node.GetLocation().ExtendLocation(((InvocationExpressionSyntax)node).Expression);
|
||||
|
||||
default:
|
||||
result = node.GetLocation();
|
||||
break;
|
||||
|
||||
@@ -242,39 +242,39 @@
|
||||
| ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess | 5 |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:26 | access to parameter i | 2 |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | exit M1 | 2 |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:28:3:38 | call to method ToString | 1 |
|
||||
| ConditionalAccess.cs:3:40:3:49 | call to method ToLower | ConditionalAccess.cs:3:40:3:49 | call to method ToLower | 1 |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:38 | call to method ToString | 1 |
|
||||
| ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | 1 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:26:5:26 | access to parameter s | 2 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:10:5:11 | exit M2 | 2 |
|
||||
| ConditionalAccess.cs:5:28:5:34 | access to property Length | ConditionalAccess.cs:5:28:5:34 | access to property Length | 1 |
|
||||
| ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:34 | access to property Length | 1 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | 2 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:10:7:11 | exit M3 | 2 |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:38:7:55 | access to property Length | 1 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | 1 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... | 1 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... | 1 |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | 1 |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:49:7:55 | access to property Length | 1 |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:25:9:25 | access to parameter s | 2 |
|
||||
| ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:33 | access to property Length | 1 |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:9:9:10 | exit M4 | 3 |
|
||||
| ConditionalAccess.cs:9:27:9:33 | access to property Length | ConditionalAccess.cs:9:27:9:33 | access to property Length | 1 |
|
||||
| ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:38:9:38 | 0 | 1 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:13:13:13:13 | access to parameter s | 4 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:11:9:11:10 | exit M5 | 2 |
|
||||
| ConditionalAccess.cs:13:15:13:21 | access to property Length | ConditionalAccess.cs:13:15:13:21 | access to property Length | 1 |
|
||||
| ConditionalAccess.cs:13:13:13:21 | access to property Length | ConditionalAccess.cs:13:13:13:21 | access to property Length | 1 |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:13:13:25 | ... > ... | 3 |
|
||||
| ConditionalAccess.cs:14:20:14:20 | 0 | ConditionalAccess.cs:14:13:14:21 | return ...; | 2 |
|
||||
| ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:16:13:16:21 | return ...; | 2 |
|
||||
| ConditionalAccess.cs:19:12:19:13 | enter M6 | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | 2 |
|
||||
| ConditionalAccess.cs:19:12:19:13 | exit M6 (normal) | ConditionalAccess.cs:19:12:19:13 | exit M6 | 2 |
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | 2 |
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | 2 |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:23:18:23:29 | (...) ... | 5 |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:18:24:24 | (...) ... | 4 |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:25:13:25:14 | "" | 4 |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:25:13:25:14 | "" | 4 |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:21:10:21:11 | exit M7 | 5 |
|
||||
| ConditionalAccess.cs:30:10:30:12 | enter Out | ConditionalAccess.cs:30:10:30:12 | exit Out | 5 |
|
||||
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:9:35:12 | access to property Prop | 8 |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | exit M8 | 2 |
|
||||
| ConditionalAccess.cs:35:14:35:24 | call to method Out | ConditionalAccess.cs:35:14:35:24 | call to method Out | 1 |
|
||||
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out | 1 |
|
||||
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | 8 |
|
||||
| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | exit Conditions | 5 |
|
||||
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:5:13:5:15 | access to parameter inc | 4 |
|
||||
@@ -674,8 +674,8 @@
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:18:10:18:11 | exit M3 | 2 |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | 1 |
|
||||
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:21:11:21:11 | ; | 2 |
|
||||
| Foreach.cs:20:27:20:38 | call to method ToArray<String> | Foreach.cs:20:27:20:38 | call to method ToArray<String> | 1 |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:68 | ... ?? ... | 1 |
|
||||
| Foreach.cs:20:29:20:38 | call to method ToArray<String> | Foreach.cs:20:29:20:38 | call to method ToArray<String> | 1 |
|
||||
| Foreach.cs:20:43:20:68 | call to method Empty<String> | Foreach.cs:20:43:20:68 | call to method Empty<String> | 1 |
|
||||
| Foreach.cs:24:10:24:11 | enter M4 | Foreach.cs:26:36:26:39 | access to parameter args | 3 |
|
||||
| Foreach.cs:24:10:24:11 | exit M4 (normal) | Foreach.cs:24:10:24:11 | exit M4 | 2 |
|
||||
@@ -1138,7 +1138,7 @@
|
||||
| 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 (normal) | Switch.cs:101:9:101:10 | exit M9 | 2 |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:19:103:25 | access to property Length | 1 |
|
||||
| Switch.cs:103:17:103:25 | access to property Length | Switch.cs:103:17:103:25 | access to property Length | 1 |
|
||||
| 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 |
|
||||
@@ -1166,6 +1166,7 @@
|
||||
| Switch.cs:126:13:126:19 | return ...; | Switch.cs:126:13:126:19 | return ...; | 1 |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:28:131:35 | String s | 4 |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:129:12:129:14 | exit M12 | 3 |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:16:131:66 | call to method ToString | 1 |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | 1 |
|
||||
| Switch.cs:131:17:131:53 | [null] ... switch { ... } | Switch.cs:131:17:131:53 | [null] ... switch { ... } | 1 |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:131:28:131:40 | [non-null] ... => ... | 1 |
|
||||
@@ -1174,7 +1175,6 @@
|
||||
| Switch.cs:131:43:131:43 | _ | Switch.cs:131:43:131:43 | _ | 1 |
|
||||
| Switch.cs:131:43:131:51 | [null] ... => ... | Switch.cs:131:43:131:51 | [null] ... => ... | 1 |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:131:48:131:51 | null | 1 |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:131:56:131:66 | call to method ToString | 1 |
|
||||
| Switch.cs:134:9:134:11 | enter M13 | Switch.cs:139:18:139:18 | 1 | 6 |
|
||||
| Switch.cs:134:9:134:11 | exit M13 (normal) | Switch.cs:134:9:134:11 | exit M13 | 2 |
|
||||
| Switch.cs:138:13:138:20 | default: | Switch.cs:138:22:138:31 | return ...; | 4 |
|
||||
|
||||
@@ -1127,28 +1127,28 @@ conditionBlock
|
||||
| BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:68:21:68:26 | break; | false |
|
||||
| BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:68:21:68:26 | break; | true |
|
||||
| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:68:21:68:26 | [finally: return] break; | true |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:28:3:38 | call to method ToString | false |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:40:3:49 | call to method ToLower | false |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:40:3:49 | call to method ToLower | false |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:28:5:34 | access to property Length | false |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:38 | call to method ToString | false |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | false |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | false |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:26:5:34 | access to property Length | false |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | false |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... | true |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... | true |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | true |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... | false |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... | true |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:27:9:33 | access to property Length | false |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:13:15:13:21 | access to property Length | false |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:25:9:33 | access to property Length | false |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:13:13:13:21 | access to property Length | false |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:14:20:14:20 | 0 | true |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:16:20:16:20 | 1 | false |
|
||||
| ConditionalAccess.cs:19:12:19:13 | enter M6 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | false |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | true |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:24:27:24:37 | call to method ToString | true |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:24:17:24:37 | call to method ToString | true |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:25:31:25:31 | access to local variable s | true |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString | false |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:17:24:37 | call to method ToString | false |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:25:31:25:31 | access to local variable s | false |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:25:31:25:31 | access to local variable s | false |
|
||||
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:14:35:24 | call to method Out | false |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:25:31:25:31 | access to local variable s | false |
|
||||
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:9:35:24 | call to method Out | false |
|
||||
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | true |
|
||||
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | false |
|
||||
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:7:13:7:16 | [false] !... | true |
|
||||
@@ -1691,7 +1691,7 @@ conditionBlock
|
||||
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:22:8:24 | String arg | false |
|
||||
| Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:12:10:12:11 | exit M2 (normal) | true |
|
||||
| Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:14:22:14:22 | String _ | false |
|
||||
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:29:20:38 | call to method ToArray<String> | false |
|
||||
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:27:20:38 | call to method ToArray<String> | false |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | exit M3 (normal) | true |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:22:20:22 | String x | false |
|
||||
| Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | Foreach.cs:24:10:24:11 | exit M4 (normal) | true |
|
||||
@@ -2072,7 +2072,7 @@ conditionBlock
|
||||
| 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:101:9:101:10 | enter M9 | Switch.cs:103:17:103:25 | access to property Length | 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 |
|
||||
@@ -2103,6 +2103,7 @@ conditionBlock
|
||||
| Switch.cs:125:37:125:37 | _ | Switch.cs:125:37:125:46 | [false] ... => ... | true |
|
||||
| Switch.cs:125:37:125:37 | _ | Switch.cs:125:42:125:46 | false | true |
|
||||
| Switch.cs:125:42:125:46 | false | Switch.cs:125:37:125:46 | [false] ... => ... | false |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:16:131:66 | call to method ToString | true |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | true |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:28:131:40 | [non-null] ... => ... | true |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:28:131:40 | [null] ... => ... | true |
|
||||
@@ -2110,14 +2111,13 @@ conditionBlock
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:43:131:43 | _ | false |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:43:131:51 | [null] ... => ... | false |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:48:131:51 | null | false |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:56:131:66 | call to method ToString | true |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:56:131:66 | call to method ToString | false |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:16:131:66 | call to method ToString | false |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:131:16:131:66 | call to method ToString | false |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | false |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:131:56:131:66 | call to method ToString | false |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:16:131:66 | call to method ToString | false |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | false |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:28:131:40 | [non-null] ... => ... | false |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:28:131:40 | [null] ... => ... | true |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:56:131:66 | call to method ToString | false |
|
||||
| Switch.cs:131:43:131:43 | _ | Switch.cs:131:43:131:51 | [null] ... => ... | true |
|
||||
| Switch.cs:131:43:131:43 | _ | Switch.cs:131:48:131:51 | null | true |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:131:43:131:51 | [null] ... => ... | true |
|
||||
|
||||
@@ -1083,12 +1083,12 @@ dominance
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:26 | access to parameter i |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | exit M1 |
|
||||
| ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) |
|
||||
| ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:28:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:40:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:26:5:26 | access to parameter s |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:10:5:11 | exit M2 |
|
||||
| ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) |
|
||||
| ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:28:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:26:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:10:7:11 | exit M3 |
|
||||
| ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | ConditionalAccess.cs:7:39:7:46 | ... ?? ... |
|
||||
@@ -1097,14 +1097,14 @@ dominance
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:25:9:25 | access to parameter s |
|
||||
| ConditionalAccess.cs:9:9:9:10 | exit M4 (normal) | ConditionalAccess.cs:9:9:9:10 | exit M4 |
|
||||
| ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:27:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:25:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:38:9:38 | 0 |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:9:9:10 | exit M4 (normal) |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:12:5:17:5 | {...} |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:11:9:11:10 | exit M5 |
|
||||
| ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:13:9:16:21 | if (...) ... |
|
||||
| ConditionalAccess.cs:13:9:16:21 | if (...) ... | ConditionalAccess.cs:13:13:13:13 | access to parameter s |
|
||||
| ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:13:15:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:13:13:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:13:25:13:25 | 0 |
|
||||
| ConditionalAccess.cs:13:13:13:25 | ... > ... | ConditionalAccess.cs:14:20:14:20 | 0 |
|
||||
| ConditionalAccess.cs:13:13:13:25 | ... > ... | ConditionalAccess.cs:16:20:16:20 | 1 |
|
||||
@@ -1116,7 +1116,7 @@ dominance
|
||||
| ConditionalAccess.cs:19:12:19:13 | exit M6 (normal) | ConditionalAccess.cs:19:12:19:13 | exit M6 |
|
||||
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:12:19:13 | exit M6 (normal) |
|
||||
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith |
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:22:5:26:5 | {...} |
|
||||
| ConditionalAccess.cs:21:10:21:11 | exit M7 (normal) | ConditionalAccess.cs:21:10:21:11 | exit M7 |
|
||||
| ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:23:9:23:39 | ... ...; |
|
||||
@@ -1126,14 +1126,14 @@ dominance
|
||||
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:18:23:29 | (...) ... |
|
||||
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:9:25:33 | ...; |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:17:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:18:24:24 | (...) ... |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:21:10:21:11 | exit M7 (normal) |
|
||||
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:13:25:14 | "" |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith |
|
||||
| ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith |
|
||||
| ConditionalAccess.cs:30:10:30:12 | enter Out | ConditionalAccess.cs:30:32:30:32 | 0 |
|
||||
| ConditionalAccess.cs:30:10:30:12 | exit Out (normal) | ConditionalAccess.cs:30:10:30:12 | exit Out |
|
||||
| ConditionalAccess.cs:30:28:30:32 | ... = ... | ConditionalAccess.cs:30:10:30:12 | exit Out (normal) |
|
||||
@@ -1145,7 +1145,7 @@ dominance
|
||||
| ConditionalAccess.cs:34:9:34:14 | ...; | ConditionalAccess.cs:34:13:34:13 | 0 |
|
||||
| ConditionalAccess.cs:34:13:34:13 | 0 | ConditionalAccess.cs:34:9:34:13 | ... = ... |
|
||||
| ConditionalAccess.cs:35:9:35:12 | access to property Prop | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) |
|
||||
| ConditionalAccess.cs:35:9:35:12 | access to property Prop | ConditionalAccess.cs:35:14:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:35:9:35:12 | access to property Prop | ConditionalAccess.cs:35:9:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:35:9:35:12 | access to property Prop |
|
||||
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:12 | this access |
|
||||
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 |
|
||||
@@ -2483,7 +2483,7 @@ dominance
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | exit M3 (normal) |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:21:11:21:11 | ; |
|
||||
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:29:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:27:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:43:20:68 | call to method Empty<String> |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
|
||||
| Foreach.cs:24:10:24:11 | enter M4 | Foreach.cs:25:5:28:5 | {...} |
|
||||
@@ -3625,7 +3625,7 @@ dominance
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:101:9:101:10 | exit M9 |
|
||||
| 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:103:17:103:25 | access to property Length |
|
||||
| Switch.cs:103:17:103:17 | access to parameter s | 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:28:105:28 | 0 |
|
||||
@@ -3681,7 +3681,7 @@ dominance
|
||||
| Switch.cs:130:5:132:5 | {...} | Switch.cs:131:17:131:17 | access to parameter o |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:129:12:129:14 | exit M12 (normal) |
|
||||
| Switch.cs:131:17:131:17 | access to parameter o | Switch.cs:131:28:131:35 | String s |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:56:131:66 | call to method ToString |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:16:131:66 | call to method ToString |
|
||||
| Switch.cs:131:28:131:35 | String s | Switch.cs:131:40:131:40 | access to local variable s |
|
||||
| Switch.cs:131:28:131:35 | String s | Switch.cs:131:43:131:43 | _ |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
@@ -5502,23 +5502,23 @@ postDominance
|
||||
| ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | call to constructor Object |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:26:3:26 | access to parameter i |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:28:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:40:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:26:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:26:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:12:3:13 | enter M1 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 | ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:26:5:26 | access to parameter s |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:28:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:26:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:10:5:11 | enter M2 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 | ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:38:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:39:7:46 | ... ?? ... |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:49:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | ConditionalAccess.cs:7:10:7:11 | enter M3 |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... |
|
||||
| ConditionalAccess.cs:9:9:9:10 | exit M4 | ConditionalAccess.cs:9:9:9:10 | exit M4 (normal) |
|
||||
| ConditionalAccess.cs:9:9:9:10 | exit M4 (normal) | ConditionalAccess.cs:9:25:9:38 | ... ?? ... |
|
||||
| ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:9:9:10 | enter M4 |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:27:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:25:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:38:9:38 | 0 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 | ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:14:13:14:21 | return ...; |
|
||||
@@ -5528,15 +5528,15 @@ postDominance
|
||||
| ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:13:9:16:21 | if (...) ... |
|
||||
| ConditionalAccess.cs:13:13:13:25 | ... > ... | ConditionalAccess.cs:13:25:13:25 | (...) ... |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:13:13:13 | access to parameter s |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:15:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:13:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:25:13:25 | (...) ... | ConditionalAccess.cs:13:25:13:25 | 0 |
|
||||
| ConditionalAccess.cs:14:13:14:21 | return ...; | ConditionalAccess.cs:14:20:14:20 | 0 |
|
||||
| ConditionalAccess.cs:16:13:16:21 | return ...; | ConditionalAccess.cs:16:20:16:20 | 1 |
|
||||
| ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:12:19:13 | exit M6 (normal) |
|
||||
| ConditionalAccess.cs:19:12:19:13 | exit M6 (normal) | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:19:12:19:13 | exit M6 (normal) | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith |
|
||||
| ConditionalAccess.cs:19:12:19:13 | exit M6 (normal) | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith |
|
||||
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:12:19:13 | enter M6 |
|
||||
| ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:21:10:21:11 | exit M7 | ConditionalAccess.cs:21:10:21:11 | exit M7 (normal) |
|
||||
| ConditionalAccess.cs:21:10:21:11 | exit M7 (normal) | ConditionalAccess.cs:25:9:25:32 | ... = ... |
|
||||
| ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
@@ -5545,14 +5545,14 @@ postDominance
|
||||
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:26:23:29 | null |
|
||||
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:9:23:39 | ... ...; |
|
||||
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:17:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:24:18:24:24 | (...) ... |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
|
||||
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:9:24:38 | ... ...; |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:18:24:24 | (...) ... |
|
||||
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith |
|
||||
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith |
|
||||
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:24:13:24:37 | String s = ... |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:9:25:33 | ...; |
|
||||
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | "" |
|
||||
| ConditionalAccess.cs:30:10:30:12 | exit Out | ConditionalAccess.cs:30:10:30:12 | exit Out (normal) |
|
||||
| ConditionalAccess.cs:30:10:30:12 | exit Out (normal) | ConditionalAccess.cs:30:28:30:32 | ... = ... |
|
||||
@@ -5560,7 +5560,7 @@ postDominance
|
||||
| ConditionalAccess.cs:30:32:30:32 | 0 | ConditionalAccess.cs:30:10:30:12 | enter Out |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:35:9:35:12 | access to property Prop |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:35:14:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:35:9:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:32:10:32:11 | enter M8 |
|
||||
| ConditionalAccess.cs:34:9:34:13 | ... = ... | ConditionalAccess.cs:34:13:34:13 | 0 |
|
||||
| ConditionalAccess.cs:34:9:34:14 | ...; | ConditionalAccess.cs:33:5:36:5 | {...} |
|
||||
@@ -6770,7 +6770,7 @@ postDominance
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:27:20:68 | ... ?? ... |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:21:11:21:11 | ; |
|
||||
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:19:5:22:5 | {...} |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:29:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:43:20:68 | call to method Empty<String> |
|
||||
| Foreach.cs:21:11:21:11 | ; | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:24:10:24:11 | exit M4 | Foreach.cs:24:10:24:11 | exit M4 (normal) |
|
||||
@@ -7868,7 +7868,7 @@ postDominance
|
||||
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:102:5:109:5 | {...} |
|
||||
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:9:107:9 | switch (...) {...} |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:103:17:103:17 | access to parameter s |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:103:19:103:25 | access to property Length |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:103:17:103:25 | access to property Length |
|
||||
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:13:105:19 | case ...: |
|
||||
| Switch.cs:105:21:105:29 | return ...; | Switch.cs:105:28:105:28 | 0 |
|
||||
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:13:106:19 | case ...: |
|
||||
@@ -7914,8 +7914,9 @@ postDominance
|
||||
| Switch.cs:129:12:129:14 | exit M12 | Switch.cs:129:12:129:14 | exit M12 (normal) |
|
||||
| Switch.cs:129:12:129:14 | exit M12 (normal) | Switch.cs:131:9:131:67 | return ...; |
|
||||
| Switch.cs:130:5:132:5 | {...} | Switch.cs:129:12:129:14 | enter M12 |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:16:131:66 | call to method ToString |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:17:131:53 | [null] ... switch { ... } |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:56:131:66 | call to method ToString |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:131:17:131:17 | access to parameter o | Switch.cs:130:5:132:5 | {...} |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:28:131:40 | [non-null] ... => ... |
|
||||
| Switch.cs:131:17:131:53 | [null] ... switch { ... } | Switch.cs:131:28:131:40 | [null] ... => ... |
|
||||
@@ -7923,7 +7924,6 @@ postDominance
|
||||
| Switch.cs:131:28:131:35 | String s | Switch.cs:131:17:131:17 | access to parameter o |
|
||||
| Switch.cs:131:43:131:51 | [null] ... => ... | Switch.cs:131:48:131:51 | null |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:131:43:131:43 | _ |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:134:9:134:11 | exit M13 | Switch.cs:134:9:134:11 | exit M13 (normal) |
|
||||
| Switch.cs:134:9:134:11 | exit M13 (normal) | Switch.cs:138:22:138:31 | return ...; |
|
||||
| Switch.cs:134:9:134:11 | exit M13 (normal) | Switch.cs:139:21:139:29 | return ...; |
|
||||
@@ -10158,47 +10158,47 @@ blockDominance
|
||||
| ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:12:3:13 | enter M1 |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:28:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:40:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:28:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:40:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:40:3:49 | call to method ToLower | ConditionalAccess.cs:3:40:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:10:5:11 | enter M2 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:28:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:26:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) |
|
||||
| ConditionalAccess.cs:5:28:5:34 | access to property Length | ConditionalAccess.cs:5:28:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:10:7:11 | enter M3 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:38:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:39:7:46 | ... ?? ... |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:49:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:38:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:39:7:46 | ... ?? ... |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:49:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:9:9:10 | enter M4 |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:25:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:25:9:38 | ... ?? ... |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:27:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:38:9:38 | 0 |
|
||||
| ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:25:9:38 | ... ?? ... |
|
||||
| ConditionalAccess.cs:9:27:9:33 | access to property Length | ConditionalAccess.cs:9:27:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:38:9:38 | 0 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:11:9:11:10 | enter M5 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:13:15:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:13:13:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:13:25:13:25 | 0 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:14:20:14:20 | 0 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:16:20:16:20 | 1 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) |
|
||||
| ConditionalAccess.cs:13:15:13:21 | access to property Length | ConditionalAccess.cs:13:15:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:13:13:21 | access to property Length | ConditionalAccess.cs:13:13:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:25:13:25 | 0 |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:14:20:14:20 | 0 |
|
||||
@@ -10212,20 +10212,20 @@ blockDominance
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:24:17:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:17:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:24:17:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:30:10:30:12 | enter Out | ConditionalAccess.cs:30:10:30:12 | enter Out |
|
||||
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:32:10:32:11 | enter M8 |
|
||||
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) |
|
||||
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:14:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:9:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) |
|
||||
| ConditionalAccess.cs:35:14:35:24 | call to method Out | ConditionalAccess.cs:35:14:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith |
|
||||
| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | enter Conditions |
|
||||
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | enter IncrOrDecr |
|
||||
@@ -11567,19 +11567,19 @@ blockDominance
|
||||
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:18:10:18:11 | exit M3 (normal) |
|
||||
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
|
||||
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:27:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:27:20:68 | ... ?? ... |
|
||||
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:29:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:43:20:68 | call to method Empty<String> |
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:18:10:18:11 | exit M3 (normal) |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | exit M3 (normal) |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:20:27:20:38 | call to method ToArray<String> | Foreach.cs:20:27:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:18:10:18:11 | exit M3 (normal) |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:68 | ... ?? ... |
|
||||
| Foreach.cs:20:29:20:38 | call to method ToArray<String> | Foreach.cs:20:29:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:43:20:68 | call to method Empty<String> | Foreach.cs:20:43:20:68 | call to method Empty<String> |
|
||||
| Foreach.cs:24:10:24:11 | enter M4 | Foreach.cs:24:10:24:11 | enter M4 |
|
||||
| Foreach.cs:24:10:24:11 | enter M4 | Foreach.cs:24:10:24:11 | exit M4 (normal) |
|
||||
@@ -12615,14 +12615,14 @@ blockDominance
|
||||
| Switch.cs:98:16:98:20 | false | Switch.cs:98:16:98:20 | false |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:101:9:101:10 | enter M9 |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:101:9:101:10 | exit M9 (normal) |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:103:19:103:25 | access to property Length |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:103:17:103:25 | access to property Length |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:105:13:105:19 | case ...: |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:105:28:105:28 | 0 |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:106:13:106:19 | case ...: |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:106:28:106:28 | 1 |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:108:17:108:17 | 1 |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:101:9:101:10 | exit M9 (normal) |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:19:103:25 | access to property Length |
|
||||
| Switch.cs:103:17:103:25 | access to property Length | Switch.cs:103:17:103:25 | access to property Length |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:101:9:101:10 | exit M9 (normal) |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:105:13:105:19 | case ...: |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:105:28:105:28 | 0 |
|
||||
@@ -12689,6 +12689,7 @@ blockDominance
|
||||
| Switch.cs:126:13:126:19 | return ...; | Switch.cs:126:13:126:19 | return ...; |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:129:12:129:14 | enter M12 |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:9:131:67 | return ...; |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:16:131:66 | call to method ToString |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:17:131:53 | [null] ... switch { ... } |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:28:131:40 | [non-null] ... => ... |
|
||||
@@ -12697,27 +12698,26 @@ blockDominance
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:43:131:43 | _ |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:43:131:51 | [null] ... => ... |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:48:131:51 | null |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:131:56:131:66 | call to method ToString |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:9:131:67 | return ...; |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:16:131:66 | call to method ToString |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:16:131:66 | call to method ToString |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:56:131:66 | call to method ToString |
|
||||
| Switch.cs:131:17:131:53 | [null] ... switch { ... } | Switch.cs:131:17:131:53 | [null] ... switch { ... } |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:131:16:131:66 | call to method ToString |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:131:28:131:40 | [non-null] ... => ... |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:131:56:131:66 | call to method ToString |
|
||||
| Switch.cs:131:28:131:40 | [null] ... => ... | Switch.cs:131:28:131:40 | [null] ... => ... |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:16:131:66 | call to method ToString |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:28:131:40 | [non-null] ... => ... |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:28:131:40 | [null] ... => ... |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:40:131:40 | access to local variable s |
|
||||
| Switch.cs:131:40:131:40 | access to local variable s | Switch.cs:131:56:131:66 | call to method ToString |
|
||||
| Switch.cs:131:43:131:43 | _ | Switch.cs:131:43:131:43 | _ |
|
||||
| Switch.cs:131:43:131:43 | _ | Switch.cs:131:43:131:51 | [null] ... => ... |
|
||||
| Switch.cs:131:43:131:43 | _ | Switch.cs:131:48:131:51 | null |
|
||||
| Switch.cs:131:43:131:51 | [null] ... => ... | Switch.cs:131:43:131:51 | [null] ... => ... |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:131:43:131:51 | [null] ... => ... |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:131:48:131:51 | null |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:131:56:131:66 | call to method ToString |
|
||||
| Switch.cs:134:9:134:11 | enter M13 | Switch.cs:134:9:134:11 | enter M13 |
|
||||
| Switch.cs:134:9:134:11 | enter M13 | Switch.cs:134:9:134:11 | exit M13 (normal) |
|
||||
| Switch.cs:134:9:134:11 | enter M13 | Switch.cs:138:13:138:20 | default: |
|
||||
@@ -14465,46 +14465,46 @@ postBlockDominance
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:12:3:13 | enter M1 |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | enter M1 |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:28:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:40:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:28:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:40:3:49 | call to method ToLower | ConditionalAccess.cs:3:40:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:26:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:26:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:38 | call to method ToString |
|
||||
| ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:49 | call to method ToLower |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:10:5:11 | enter M2 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:10:5:11 | enter M2 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:28:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:5:28:5:34 | access to property Length | ConditionalAccess.cs:5:28:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:26:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:34 | access to property Length |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:10:7:11 | enter M3 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:10:7:11 | enter M3 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:38:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:39:7:46 | ... ?? ... |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:49:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:38:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:39:7:46 | ... ?? ... |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... | ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:49:7:55 | access to property Length |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:9:9:10 | enter M4 |
|
||||
| ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:9:9:10 | enter M4 |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:25:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:25:9:38 | ... ?? ... |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:27:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:38:9:38 | 0 |
|
||||
| ConditionalAccess.cs:9:27:9:33 | access to property Length | ConditionalAccess.cs:9:27:9:33 | access to property Length |
|
||||
| ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:38:9:38 | 0 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:11:9:11:10 | enter M5 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:11:9:11:10 | enter M5 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:13:15:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:13:13:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:13:25:13:25 | 0 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:14:20:14:20 | 0 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:16:20:16:20 | 1 |
|
||||
| ConditionalAccess.cs:13:15:13:21 | access to property Length | ConditionalAccess.cs:13:15:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:13:13:21 | access to property Length | ConditionalAccess.cs:13:13:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:11:9:11:10 | enter M5 |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:15:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:13:13:21 | access to property Length |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:25:13:25 | 0 |
|
||||
| ConditionalAccess.cs:14:20:14:20 | 0 | ConditionalAccess.cs:14:20:14:20 | 0 |
|
||||
| ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:16:20:16:20 | 1 |
|
||||
@@ -14516,19 +14516,19 @@ postBlockDominance
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:24:17:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:21:10:21:11 | enter M7 |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:24:17:24:37 | call to method ToString |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:30:10:30:12 | enter Out | ConditionalAccess.cs:30:10:30:12 | enter Out |
|
||||
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:32:10:32:11 | enter M8 |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | enter M8 |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:35:14:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:35:14:35:24 | call to method Out | ConditionalAccess.cs:35:14:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:35:9:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out |
|
||||
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith |
|
||||
| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | enter Conditions |
|
||||
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | enter IncrOrDecr |
|
||||
@@ -15242,21 +15242,21 @@ postBlockDominance
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:18:10:18:11 | exit M3 (normal) |
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:20:27:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:20:27:20:68 | ... ?? ... |
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:20:29:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:20:43:20:68 | call to method Empty<String> |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | enter M3 |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:27:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:27:20:68 | ... ?? ... |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:29:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:43:20:68 | call to method Empty<String> |
|
||||
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:20:27:20:38 | call to method ToArray<String> | Foreach.cs:20:27:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:18:10:18:11 | enter M3 |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:68 | ... ?? ... |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:29:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:43:20:68 | call to method Empty<String> |
|
||||
| Foreach.cs:20:29:20:38 | call to method ToArray<String> | Foreach.cs:20:29:20:38 | call to method ToArray<String> |
|
||||
| Foreach.cs:20:43:20:68 | call to method Empty<String> | Foreach.cs:20:43:20:68 | call to method Empty<String> |
|
||||
| Foreach.cs:24:10:24:11 | enter M4 | Foreach.cs:24:10:24:11 | enter M4 |
|
||||
| Foreach.cs:24:10:24:11 | exit M4 (normal) | Foreach.cs:24:10:24:11 | enter M4 |
|
||||
@@ -16098,15 +16098,15 @@ postBlockDominance
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:101:9:101:10 | enter M9 |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:101:9:101:10 | enter M9 |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:101:9:101:10 | exit M9 (normal) |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:103:19:103:25 | access to property Length |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:103:17:103:25 | access to property Length |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:105:13:105:19 | case ...: |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:105:28:105:28 | 0 |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:106:13:106:19 | case ...: |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:106:28:106:28 | 1 |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:108:17:108:17 | 1 |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:19:103:25 | access to property Length |
|
||||
| Switch.cs:103:17:103:25 | access to property Length | Switch.cs:103:17:103:25 | access to property Length |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:101:9:101:10 | enter M9 |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:103:19:103:25 | access to property Length |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:103:17:103:25 | access to property Length |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:105:13:105:19 | case ...: |
|
||||
| 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 ...: |
|
||||
@@ -16162,6 +16162,7 @@ postBlockDominance
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:129:12:129:14 | enter M12 |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:129:12:129:14 | enter M12 |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:9:131:67 | return ...; |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:16:131:66 | call to method ToString |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:17:131:53 | [null] ... switch { ... } |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:28:131:40 | [non-null] ... => ... |
|
||||
@@ -16170,7 +16171,9 @@ postBlockDominance
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:43:131:43 | _ |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:43:131:51 | [null] ... => ... |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:48:131:51 | null |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:56:131:66 | call to method ToString |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:16:131:66 | call to method ToString |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:28:131:40 | [non-null] ... => ... |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:131:28:131:40 | [non-null] ... => ... |
|
||||
| Switch.cs:131:17:131:53 | [null] ... switch { ... } | Switch.cs:131:17:131:53 | [null] ... switch { ... } |
|
||||
@@ -16187,9 +16190,6 @@ postBlockDominance
|
||||
| Switch.cs:131:43:131:51 | [null] ... => ... | Switch.cs:131:48:131:51 | null |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:131:43:131:43 | _ |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:131:48:131:51 | null |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:131:17:131:53 | [non-null] ... switch { ... } |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:131:28:131:40 | [non-null] ... => ... |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:131:56:131:66 | call to method ToString |
|
||||
| Switch.cs:134:9:134:11 | enter M13 | Switch.cs:134:9:134:11 | enter M13 |
|
||||
| Switch.cs:134:9:134:11 | exit M13 (normal) | Switch.cs:134:9:134:11 | enter M13 |
|
||||
| Switch.cs:134:9:134:11 | exit M13 (normal) | Switch.cs:134:9:134:11 | exit M13 (normal) |
|
||||
|
||||
@@ -1163,28 +1163,28 @@ nodeEnclosing
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:40:3:49 | call to method ToLower | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:5:28:5:34 | access to property Length | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:9:9:10 | exit M4 | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:9:9:10 | exit M4 (normal) | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:27:9:33 | access to property Length | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
@@ -1192,8 +1192,8 @@ nodeEnclosing
|
||||
| ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:9:16:21 | if (...) ... | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:13:13:21 | access to property Length | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:13:13:25 | ... > ... | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:15:13:21 | access to property Length | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:25:13:25 | (...) ... | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:14:13:14:21 | return ...; | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
@@ -1204,7 +1204,7 @@ nodeEnclosing
|
||||
| ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:12:19:13 | M6 |
|
||||
| ConditionalAccess.cs:19:12:19:13 | exit M6 (normal) | ConditionalAccess.cs:19:12:19:13 | M6 |
|
||||
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:12:19:13 | M6 |
|
||||
| ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:12:19:13 | M6 |
|
||||
| ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:12:19:13 | M6 |
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:12:19:13 | M6 |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:21:10:21:11 | exit M7 | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
@@ -1216,13 +1216,13 @@ nodeEnclosing
|
||||
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:30:10:30:12 | enter Out | ConditionalAccess.cs:30:10:30:12 | Out |
|
||||
| ConditionalAccess.cs:30:10:30:12 | exit Out | ConditionalAccess.cs:30:10:30:12 | Out |
|
||||
@@ -1238,8 +1238,8 @@ nodeEnclosing
|
||||
| ConditionalAccess.cs:34:13:34:13 | 0 | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:35:9:35:12 | access to property Prop | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:35:14:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
|
||||
| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
|
||||
| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
|
||||
@@ -2694,8 +2694,8 @@ nodeEnclosing
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:27:20:38 | call to method ToArray<String> | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:29:20:38 | call to method ToArray<String> | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:43:20:68 | call to method Empty<String> | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:21:11:21:11 | ; | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:24:10:24:11 | enter M4 | Foreach.cs:24:10:24:11 | M4 |
|
||||
@@ -4153,7 +4153,7 @@ nodeEnclosing
|
||||
| Switch.cs:102:5:109:5 | {...} | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:103:17:103:25 | access to property Length | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:105:18:105:18 | 0 | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:105:21:105:29 | return ...; | Switch.cs:101:9:101:10 | M9 |
|
||||
@@ -4215,6 +4215,7 @@ nodeEnclosing
|
||||
| Switch.cs:129:12:129:14 | exit M12 (normal) | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:130:5:132:5 | {...} | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:17:131:17 | access to parameter o | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:17:131:53 | [null] ... switch { ... } | Switch.cs:129:12:129:14 | M12 |
|
||||
@@ -4225,7 +4226,6 @@ nodeEnclosing
|
||||
| Switch.cs:131:43:131:43 | _ | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:43:131:51 | [null] ... => ... | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:134:9:134:11 | enter M13 | Switch.cs:134:9:134:11 | M13 |
|
||||
| Switch.cs:134:9:134:11 | exit M13 | Switch.cs:134:9:134:11 | M13 |
|
||||
| Switch.cs:134:9:134:11 | exit M13 (normal) | Switch.cs:134:9:134:11 | M13 |
|
||||
@@ -5338,25 +5338,25 @@ blockEnclosing
|
||||
| ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | ConditionalAccess |
|
||||
| ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:40:3:49 | call to method ToLower | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:12:3:13 | M1 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | enter M2 | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:5:10:5:11 | exit M2 (normal) | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:5:28:5:34 | access to property Length | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:10:5:11 | M2 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | enter M3 | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:10:7:11 | exit M3 (normal) | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [non-null] ... ?? ... | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | [null] ... ?? ... | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:10:7:11 | M3 |
|
||||
| ConditionalAccess.cs:9:9:9:10 | enter M4 | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:27:9:33 | access to property Length | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:9:9:10 | M4 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | enter M5 | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:11:9:11:10 | exit M5 (normal) | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:15:13:21 | access to property Length | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:13:13:21 | access to property Length | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:14:20:14:20 | 0 | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
| ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:11:9:11:10 | M5 |
|
||||
@@ -5365,12 +5365,12 @@ blockEnclosing
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:12:19:13 | M6 |
|
||||
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:21:10:21:11 | M7 |
|
||||
| ConditionalAccess.cs:30:10:30:12 | enter Out | ConditionalAccess.cs:30:10:30:12 | Out |
|
||||
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:35:14:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | M8 |
|
||||
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
|
||||
| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | Conditions |
|
||||
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | IncrOrDecr |
|
||||
@@ -5770,8 +5770,8 @@ blockEnclosing
|
||||
| Foreach.cs:18:10:18:11 | exit M3 (normal) | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:27:20:38 | call to method ToArray<String> | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:29:20:38 | call to method ToArray<String> | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:20:43:20:68 | call to method Empty<String> | Foreach.cs:18:10:18:11 | M3 |
|
||||
| Foreach.cs:24:10:24:11 | enter M4 | Foreach.cs:24:10:24:11 | M4 |
|
||||
| Foreach.cs:24:10:24:11 | exit M4 (normal) | Foreach.cs:24:10:24:11 | M4 |
|
||||
@@ -6245,7 +6245,7 @@ blockEnclosing
|
||||
| Switch.cs:98:16:98:20 | false | Switch.cs:91:10:91:11 | M8 |
|
||||
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:101:9:101:10 | exit M9 (normal) | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:103:17:103:25 | access to property Length | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:105:13:105:19 | case ...: | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:105:28:105:28 | 0 | Switch.cs:101:9:101:10 | M9 |
|
||||
| Switch.cs:106:13:106:19 | case ...: | Switch.cs:101:9:101:10 | M9 |
|
||||
@@ -6273,6 +6273,7 @@ blockEnclosing
|
||||
| Switch.cs:126:13:126:19 | return ...; | Switch.cs:123:10:123:12 | M11 |
|
||||
| Switch.cs:129:12:129:14 | enter M12 | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:17:131:53 | [non-null] ... switch { ... } | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:17:131:53 | [null] ... switch { ... } | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:28:131:40 | [non-null] ... => ... | Switch.cs:129:12:129:14 | M12 |
|
||||
@@ -6281,7 +6282,6 @@ blockEnclosing
|
||||
| Switch.cs:131:43:131:43 | _ | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:43:131:51 | [null] ... => ... | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:129:12:129:14 | M12 |
|
||||
| Switch.cs:134:9:134:11 | enter M13 | Switch.cs:134:9:134:11 | M13 |
|
||||
| Switch.cs:134:9:134:11 | exit M13 (normal) | Switch.cs:134:9:134:11 | M13 |
|
||||
| Switch.cs:138:13:138:20 | default: | Switch.cs:134:9:134:11 | M13 |
|
||||
|
||||
@@ -828,23 +828,23 @@
|
||||
| ConditionalAccess.cs:1:7:1:23 | call to constructor Object | ConditionalAccess.cs:1:7:1:23 | call to constructor Object |
|
||||
| ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | {...} |
|
||||
| ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | access to parameter i |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:26 | access to parameter i |
|
||||
| ConditionalAccess.cs:3:40:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:26 | access to parameter i |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:26 | access to parameter i |
|
||||
| ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:26 | access to parameter i |
|
||||
| ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:26:5:26 | access to parameter s |
|
||||
| ConditionalAccess.cs:5:28:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:26 | access to parameter s |
|
||||
| ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:26 | access to parameter s |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:25:9:25 | access to parameter s |
|
||||
| ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:25 | access to parameter s |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:25:9:25 | access to parameter s |
|
||||
| ConditionalAccess.cs:9:27:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:25 | access to parameter s |
|
||||
| ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:38:9:38 | 0 |
|
||||
| ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:12:5:17:5 | {...} |
|
||||
| ConditionalAccess.cs:13:9:16:21 | if (...) ... | ConditionalAccess.cs:13:9:16:21 | if (...) ... |
|
||||
| ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:13:13:13:13 | access to parameter s |
|
||||
| ConditionalAccess.cs:13:13:13:21 | access to property Length | ConditionalAccess.cs:13:13:13:13 | access to parameter s |
|
||||
| ConditionalAccess.cs:13:13:13:25 | ... > ... | ConditionalAccess.cs:13:13:13:13 | access to parameter s |
|
||||
| ConditionalAccess.cs:13:15:13:21 | access to property Length | ConditionalAccess.cs:13:13:13:13 | access to parameter s |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:25:13:25 | 0 |
|
||||
| ConditionalAccess.cs:13:25:13:25 | (...) ... | ConditionalAccess.cs:13:25:13:25 | 0 |
|
||||
| ConditionalAccess.cs:14:13:14:21 | return ...; | ConditionalAccess.cs:14:20:14:20 | 0 |
|
||||
@@ -852,23 +852,23 @@
|
||||
| ConditionalAccess.cs:16:13:16:21 | return ...; | ConditionalAccess.cs:16:20:16:20 | 1 |
|
||||
| ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:16:20:16:20 | 1 |
|
||||
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
|
||||
| ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:22:5:26:5 | {...} |
|
||||
| ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:9:23:39 | ... ...; |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:26:23:29 | null |
|
||||
| ConditionalAccess.cs:23:17:23:38 | access to property Length | ConditionalAccess.cs:23:26:23:29 | null |
|
||||
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:26:23:29 | null |
|
||||
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:26:23:29 | null |
|
||||
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:26:23:29 | null |
|
||||
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:9:24:38 | ... ...; |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
|
||||
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
|
||||
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:13:25:14 | "" |
|
||||
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:33 | ...; |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:13:25:14 | "" |
|
||||
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:13:25:14 | "" |
|
||||
| ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:13:25:14 | "" |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
|
||||
| ConditionalAccess.cs:30:28:30:32 | ... = ... | ConditionalAccess.cs:30:32:30:32 | 0 |
|
||||
| ConditionalAccess.cs:30:32:30:32 | 0 | ConditionalAccess.cs:30:32:30:32 | 0 |
|
||||
@@ -878,8 +878,8 @@
|
||||
| ConditionalAccess.cs:34:13:34:13 | 0 | ConditionalAccess.cs:34:13:34:13 | 0 |
|
||||
| ConditionalAccess.cs:35:9:35:12 | access to property Prop | ConditionalAccess.cs:35:9:35:12 | this access |
|
||||
| ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:35:9:35:12 | this access |
|
||||
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:12 | this access |
|
||||
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:25 | ...; |
|
||||
| ConditionalAccess.cs:35:14:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:12 | this access |
|
||||
| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 |
|
||||
| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 |
|
||||
@@ -1680,8 +1680,8 @@
|
||||
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:27:20:27 | access to parameter e |
|
||||
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:22:20:22 | String x |
|
||||
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:27:20:27 | access to parameter e |
|
||||
| Foreach.cs:20:27:20:38 | call to method ToArray<String> | Foreach.cs:20:27:20:27 | access to parameter e |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:27 | access to parameter e |
|
||||
| Foreach.cs:20:29:20:38 | call to method ToArray<String> | Foreach.cs:20:27:20:27 | access to parameter e |
|
||||
| Foreach.cs:20:43:20:68 | call to method Empty<String> | Foreach.cs:20:43:20:68 | call to method Empty<String> |
|
||||
| Foreach.cs:21:11:21:11 | ; | Foreach.cs:21:11:21:11 | ; |
|
||||
| Foreach.cs:25:5:28:5 | {...} | Foreach.cs:25:5:28:5 | {...} |
|
||||
@@ -2592,7 +2592,7 @@
|
||||
| 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:103:17:103:25 | access to property Length | Switch.cs:103:17:103:17 | access to parameter s |
|
||||
| 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:21:105:29 | return ...; | Switch.cs:105:28:105:28 | 0 |
|
||||
@@ -2640,6 +2640,7 @@
|
||||
| Switch.cs:126:13:126:19 | return ...; | Switch.cs:126:13:126:19 | return ...; |
|
||||
| Switch.cs:130:5:132:5 | {...} | Switch.cs:130:5:132:5 | {...} |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:17:131:17 | access to parameter o |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:17:131:17 | access to parameter o |
|
||||
| Switch.cs:131:17:131:17 | access to parameter o | Switch.cs:131:17:131:17 | access to parameter o |
|
||||
| Switch.cs:131:17:131:53 | ... switch { ... } | Switch.cs:131:17:131:17 | access to parameter o |
|
||||
| Switch.cs:131:28:131:35 | String s | Switch.cs:131:28:131:35 | String s |
|
||||
@@ -2648,7 +2649,6 @@
|
||||
| Switch.cs:131:43:131:43 | _ | Switch.cs:131:43:131:43 | _ |
|
||||
| Switch.cs:131:43:131:51 | ... => ... | Switch.cs:131:43:131:43 | _ |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:131:48:131:51 | null |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:131:17:131:17 | access to parameter o |
|
||||
| Switch.cs:135:5:142:5 | {...} | Switch.cs:135:5:142:5 | {...} |
|
||||
| Switch.cs:136:9:141:9 | switch (...) {...} | Switch.cs:136:9:141:9 | switch (...) {...} |
|
||||
| Switch.cs:136:17:136:17 | access to parameter i | Switch.cs:136:17:136:17 | access to parameter i |
|
||||
|
||||
@@ -1021,30 +1021,30 @@
|
||||
| ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | {...} | normal |
|
||||
| ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | access to parameter i | non-null |
|
||||
| ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | access to parameter i | null |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:26 | access to parameter i | null |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:28:3:38 | call to method ToString | non-null |
|
||||
| ConditionalAccess.cs:3:28:3:38 | call to method ToString | ConditionalAccess.cs:3:28:3:38 | call to method ToString | null |
|
||||
| ConditionalAccess.cs:3:40:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:26 | access to parameter i | null |
|
||||
| ConditionalAccess.cs:3:40:3:49 | call to method ToLower | ConditionalAccess.cs:3:28:3:38 | call to method ToString | null |
|
||||
| ConditionalAccess.cs:3:40:3:49 | call to method ToLower | ConditionalAccess.cs:3:40:3:49 | call to method ToLower | normal |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:26 | access to parameter i | null |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:38 | call to method ToString | non-null |
|
||||
| ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:38 | call to method ToString | null |
|
||||
| ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:26 | access to parameter i | null |
|
||||
| ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:38 | call to method ToString | null |
|
||||
| ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | normal |
|
||||
| ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:26:5:26 | access to parameter s | non-null |
|
||||
| ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:26:5:26 | access to parameter s | null |
|
||||
| ConditionalAccess.cs:5:28:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:26 | access to parameter s | null |
|
||||
| ConditionalAccess.cs:5:28:5:34 | access to property Length | ConditionalAccess.cs:5:28:5:34 | access to property Length | normal |
|
||||
| ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:26 | access to parameter s | null |
|
||||
| ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:34 | access to property Length | normal |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:38:7:55 | access to property Length | normal |
|
||||
| ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | null |
|
||||
| ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | non-null |
|
||||
| ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | null |
|
||||
| ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | non-null |
|
||||
| ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | null |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | non-null |
|
||||
| ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | null |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | null |
|
||||
| ConditionalAccess.cs:7:49:7:55 | access to property Length | ConditionalAccess.cs:7:49:7:55 | access to property Length | normal |
|
||||
| ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:25:9:25 | access to parameter s | non-null |
|
||||
| ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:25:9:25 | access to parameter s | null |
|
||||
| ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:25 | access to parameter s | null |
|
||||
| ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:33 | access to property Length | non-null |
|
||||
| ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:33 | access to property Length | null |
|
||||
| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | normal |
|
||||
| ConditionalAccess.cs:9:27:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:25 | access to parameter s | null |
|
||||
| ConditionalAccess.cs:9:27:9:33 | access to property Length | ConditionalAccess.cs:9:27:9:33 | access to property Length | non-null |
|
||||
| ConditionalAccess.cs:9:27:9:33 | access to property Length | ConditionalAccess.cs:9:27:9:33 | access to property Length | null |
|
||||
| ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:38:9:38 | 0 | normal |
|
||||
| ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:14:13:14:21 | return ...; | return |
|
||||
| ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:16:13:16:21 | return ...; | return |
|
||||
@@ -1052,10 +1052,10 @@
|
||||
| ConditionalAccess.cs:13:9:16:21 | if (...) ... | ConditionalAccess.cs:16:13:16:21 | return ...; | return |
|
||||
| ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:13:13:13:13 | access to parameter s | non-null |
|
||||
| ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:13:13:13:13 | access to parameter s | null |
|
||||
| ConditionalAccess.cs:13:13:13:21 | access to property Length | ConditionalAccess.cs:13:13:13:13 | access to parameter s | null |
|
||||
| ConditionalAccess.cs:13:13:13:21 | access to property Length | ConditionalAccess.cs:13:13:13:21 | access to property Length | normal |
|
||||
| ConditionalAccess.cs:13:13:13:25 | ... > ... | ConditionalAccess.cs:13:13:13:25 | ... > ... | false |
|
||||
| ConditionalAccess.cs:13:13:13:25 | ... > ... | ConditionalAccess.cs:13:13:13:25 | ... > ... | true |
|
||||
| ConditionalAccess.cs:13:15:13:21 | access to property Length | ConditionalAccess.cs:13:13:13:13 | access to parameter s | null |
|
||||
| ConditionalAccess.cs:13:15:13:21 | access to property Length | ConditionalAccess.cs:13:15:13:21 | access to property Length | normal |
|
||||
| ConditionalAccess.cs:13:25:13:25 | 0 | ConditionalAccess.cs:13:25:13:25 | 0 | normal |
|
||||
| ConditionalAccess.cs:13:25:13:25 | (...) ... | ConditionalAccess.cs:13:25:13:25 | (...) ... | normal |
|
||||
| ConditionalAccess.cs:14:13:14:21 | return ...; | ConditionalAccess.cs:14:13:14:21 | return ...; | return |
|
||||
@@ -1064,40 +1064,40 @@
|
||||
| ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:16:20:16:20 | 1 | normal |
|
||||
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | non-null |
|
||||
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | null |
|
||||
| ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | null |
|
||||
| ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | normal |
|
||||
| ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | null |
|
||||
| ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | normal |
|
||||
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | normal |
|
||||
| ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:25:9:25:32 | ... = ... | normal |
|
||||
| ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | normal |
|
||||
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | normal |
|
||||
| ConditionalAccess.cs:23:17:23:38 | access to property Length | ConditionalAccess.cs:23:17:23:38 | access to property Length | normal |
|
||||
| ConditionalAccess.cs:23:17:23:38 | access to property Length | ConditionalAccess.cs:23:18:23:29 | (...) ... | null |
|
||||
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:18:23:29 | (...) ... | null |
|
||||
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:26:23:29 | null | normal |
|
||||
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:18:23:29 | (...) ... | null |
|
||||
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:32:23:38 | access to property Length | normal |
|
||||
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:13:24:37 | String s = ... | normal |
|
||||
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:13:24:37 | String s = ... | normal |
|
||||
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:24:17:24:37 | call to method ToString | normal |
|
||||
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:18:24:24 | (...) ... | non-null |
|
||||
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:24:24:24 | access to parameter i | normal |
|
||||
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:27:24:37 | call to method ToString | normal |
|
||||
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:9:25:32 | ... = ... | normal |
|
||||
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:32 | ... = ... | normal |
|
||||
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:13:25:14 | "" | non-null |
|
||||
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | normal |
|
||||
| ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | normal |
|
||||
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:31:25:31 | access to local variable s | normal |
|
||||
| ConditionalAccess.cs:30:28:30:32 | ... = ... | ConditionalAccess.cs:30:28:30:32 | ... = ... | normal |
|
||||
| ConditionalAccess.cs:30:32:30:32 | 0 | ConditionalAccess.cs:30:32:30:32 | 0 | normal |
|
||||
| ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:35:9:35:12 | access to property Prop | null |
|
||||
| ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:35:14:35:24 | call to method Out | normal |
|
||||
| ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:35:9:35:24 | call to method Out | normal |
|
||||
| ConditionalAccess.cs:34:9:34:13 | ... = ... | ConditionalAccess.cs:34:9:34:13 | ... = ... | normal |
|
||||
| ConditionalAccess.cs:34:9:34:14 | ...; | ConditionalAccess.cs:34:9:34:13 | ... = ... | normal |
|
||||
| ConditionalAccess.cs:34:13:34:13 | 0 | ConditionalAccess.cs:34:13:34:13 | 0 | normal |
|
||||
| ConditionalAccess.cs:35:9:35:12 | access to property Prop | ConditionalAccess.cs:35:9:35:12 | access to property Prop | non-null |
|
||||
| ConditionalAccess.cs:35:9:35:12 | access to property Prop | ConditionalAccess.cs:35:9:35:12 | access to property Prop | null |
|
||||
| ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:35:9:35:12 | this access | normal |
|
||||
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:12 | access to property Prop | null |
|
||||
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out | normal |
|
||||
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:12 | access to property Prop | null |
|
||||
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:14:35:24 | call to method Out | normal |
|
||||
| ConditionalAccess.cs:35:14:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:12 | access to property Prop | null |
|
||||
| ConditionalAccess.cs:35:14:35:24 | call to method Out | ConditionalAccess.cs:35:14:35:24 | call to method Out | normal |
|
||||
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:24 | call to method Out | normal |
|
||||
| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | normal |
|
||||
| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:70:41:78 | ... + ... | normal |
|
||||
| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:70:41:83 | ... + ... | normal |
|
||||
@@ -2316,10 +2316,10 @@
|
||||
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:22:20:22 | String x | normal |
|
||||
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:27:20:27 | access to parameter e | non-null |
|
||||
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:27:20:27 | access to parameter e | null |
|
||||
| Foreach.cs:20:27:20:38 | call to method ToArray<String> | Foreach.cs:20:27:20:27 | access to parameter e | null |
|
||||
| Foreach.cs:20:27:20:38 | call to method ToArray<String> | Foreach.cs:20:27:20:38 | call to method ToArray<String> | non-null |
|
||||
| Foreach.cs:20:27:20:38 | call to method ToArray<String> | Foreach.cs:20:27:20:38 | call to method ToArray<String> | null |
|
||||
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:68 | ... ?? ... | normal |
|
||||
| Foreach.cs:20:29:20:38 | call to method ToArray<String> | Foreach.cs:20:27:20:27 | access to parameter e | null |
|
||||
| Foreach.cs:20:29:20:38 | call to method ToArray<String> | Foreach.cs:20:29:20:38 | call to method ToArray<String> | non-null |
|
||||
| Foreach.cs:20:29:20:38 | call to method ToArray<String> | Foreach.cs:20:29:20:38 | call to method ToArray<String> | null |
|
||||
| Foreach.cs:20:43:20:68 | call to method Empty<String> | Foreach.cs:20:43:20:68 | call to method Empty<String> | normal |
|
||||
| Foreach.cs:21:11:21:11 | ; | Foreach.cs:21:11:21:11 | ; | normal |
|
||||
| Foreach.cs:25:5:28:5 | {...} | Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | empty |
|
||||
@@ -3405,8 +3405,8 @@
|
||||
| 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:103:17:103:25 | access to property Length | Switch.cs:103:17:103:17 | access to parameter s | null |
|
||||
| Switch.cs:103:17:103:25 | access to property Length | Switch.cs:103:17:103:25 | access to property Length | normal |
|
||||
| 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 |
|
||||
@@ -3478,6 +3478,8 @@
|
||||
| Switch.cs:126:13:126:19 | return ...; | Switch.cs:126:13:126:19 | return ...; | return |
|
||||
| Switch.cs:130:5:132:5 | {...} | Switch.cs:131:9:131:67 | return ...; | return |
|
||||
| Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:9:131:67 | return ...; | return |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:16:131:66 | call to method ToString | normal |
|
||||
| Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:17:131:53 | ... switch { ... } | null |
|
||||
| Switch.cs:131:17:131:17 | access to parameter o | Switch.cs:131:17:131:17 | access to parameter o | normal |
|
||||
| Switch.cs:131:17:131:53 | ... switch { ... } | Switch.cs:131:17:131:53 | ... switch { ... } | non-null |
|
||||
| Switch.cs:131:17:131:53 | ... switch { ... } | Switch.cs:131:17:131:53 | ... switch { ... } | null |
|
||||
@@ -3491,8 +3493,6 @@
|
||||
| Switch.cs:131:43:131:51 | ... => ... | Switch.cs:131:43:131:51 | ... => ... | non-null |
|
||||
| Switch.cs:131:43:131:51 | ... => ... | Switch.cs:131:43:131:51 | ... => ... | null |
|
||||
| Switch.cs:131:48:131:51 | null | Switch.cs:131:48:131:51 | null | null |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:131:17:131:53 | ... switch { ... } | null |
|
||||
| Switch.cs:131:56:131:66 | call to method ToString | Switch.cs:131:56:131:66 | call to method ToString | normal |
|
||||
| Switch.cs:135:5:142:5 | {...} | Switch.cs:138:22:138:31 | return ...; | return |
|
||||
| Switch.cs:135:5:142:5 | {...} | Switch.cs:139:21:139:29 | return ...; | return |
|
||||
| Switch.cs:135:5:142:5 | {...} | Switch.cs:140:21:140:29 | return ...; | return |
|
||||
|
||||
@@ -96,31 +96,31 @@
|
||||
| Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | non-null |
|
||||
| Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:24 | ... != ... | Guards.cs:68:16:68:16 | access to parameter s | true |
|
||||
| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | non-null |
|
||||
| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:21 | access to property Length | Guards.cs:78:13:78:13 | access to parameter s | non-null |
|
||||
| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:26 | ... == ... | Guards.cs:78:13:78:13 | access to parameter s | true |
|
||||
| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:15:78:21 | access to property Length | Guards.cs:78:13:78:13 | access to parameter s | non-null |
|
||||
| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | non-null |
|
||||
| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:21 | access to property Length | Guards.cs:80:13:80:13 | access to parameter s | non-null |
|
||||
| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:25 | ... > ... | Guards.cs:80:13:80:13 | access to parameter s | true |
|
||||
| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:15:80:21 | access to property Length | Guards.cs:80:13:80:13 | access to parameter s | non-null |
|
||||
| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | non-null |
|
||||
| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:21 | access to property Length | Guards.cs:82:13:82:13 | access to parameter s | non-null |
|
||||
| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:26 | ... >= ... | Guards.cs:82:13:82:13 | access to parameter s | true |
|
||||
| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:15:82:21 | access to property Length | Guards.cs:82:13:82:13 | access to parameter s | non-null |
|
||||
| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | non-null |
|
||||
| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:21 | access to property Length | Guards.cs:84:13:84:13 | access to parameter s | non-null |
|
||||
| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:26 | ... < ... | Guards.cs:84:13:84:13 | access to parameter s | true |
|
||||
| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:15:84:21 | access to property Length | Guards.cs:84:13:84:13 | access to parameter s | non-null |
|
||||
| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | non-null |
|
||||
| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:21 | access to property Length | Guards.cs:86:13:86:13 | access to parameter s | non-null |
|
||||
| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:27 | ... <= ... | Guards.cs:86:13:86:13 | access to parameter s | true |
|
||||
| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:15:86:21 | access to property Length | Guards.cs:86:13:86:13 | access to parameter s | non-null |
|
||||
| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | non-null |
|
||||
| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | non-null |
|
||||
| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:29 | ... != ... | Guards.cs:88:13:88:13 | access to parameter s | true |
|
||||
| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:15:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | non-null |
|
||||
| Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | null |
|
||||
| Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | null |
|
||||
| Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:29 | ... != ... | Guards.cs:88:13:88:13 | access to parameter s | false |
|
||||
| Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:15:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | null |
|
||||
| Guards.cs:93:31:93:31 | access to parameter s | Guards.cs:92:13:92:30 | ... != ... | Guards.cs:92:13:92:13 | access to parameter s | true |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:21 | access to property Length | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:25 | ... - ... | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:30 | ... != ... | Guards.cs:92:13:92:13 | access to parameter s | false |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:15:92:21 | access to property Length | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | non-null |
|
||||
| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:19 | ... == ... | Guards.cs:96:13:96:13 | access to parameter s | true |
|
||||
| Guards.cs:99:31:99:31 | access to parameter s | Guards.cs:96:13:96:19 | ... == ... | Guards.cs:96:13:96:13 | access to parameter s | false |
|
||||
@@ -183,8 +183,8 @@
|
||||
| Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | non-null |
|
||||
| Guards.cs: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:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | non-null |
|
||||
| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:25 | call to method GetType | Guards.cs:268:13:268:14 | access to parameter o1 | non-null |
|
||||
| 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:269:13:269:14 | access to parameter o1 | Guards.cs:268:16:268:25 | call to method GetType | Guards.cs:268:13:268:14 | access to parameter o1 | non-null |
|
||||
| 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:279:17:279: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 | match access to type Action<Object> |
|
||||
| Guards.cs:279:17:279: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 |
|
||||
|
||||
@@ -80,31 +80,31 @@
|
||||
| Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | non-null |
|
||||
| Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:24 | ... != ... | Guards.cs:68:16:68:16 | access to parameter s | true |
|
||||
| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | non-null |
|
||||
| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:21 | access to property Length | Guards.cs:78:13:78:13 | access to parameter s | non-null |
|
||||
| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:26 | ... == ... | Guards.cs:78:13:78:13 | access to parameter s | true |
|
||||
| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:15:78:21 | access to property Length | Guards.cs:78:13:78:13 | access to parameter s | non-null |
|
||||
| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | non-null |
|
||||
| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:21 | access to property Length | Guards.cs:80:13:80:13 | access to parameter s | non-null |
|
||||
| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:25 | ... > ... | Guards.cs:80:13:80:13 | access to parameter s | true |
|
||||
| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:15:80:21 | access to property Length | Guards.cs:80:13:80:13 | access to parameter s | non-null |
|
||||
| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | non-null |
|
||||
| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:21 | access to property Length | Guards.cs:82:13:82:13 | access to parameter s | non-null |
|
||||
| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:26 | ... >= ... | Guards.cs:82:13:82:13 | access to parameter s | true |
|
||||
| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:15:82:21 | access to property Length | Guards.cs:82:13:82:13 | access to parameter s | non-null |
|
||||
| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | non-null |
|
||||
| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:21 | access to property Length | Guards.cs:84:13:84:13 | access to parameter s | non-null |
|
||||
| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:26 | ... < ... | Guards.cs:84:13:84:13 | access to parameter s | true |
|
||||
| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:15:84:21 | access to property Length | Guards.cs:84:13:84:13 | access to parameter s | non-null |
|
||||
| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | non-null |
|
||||
| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:21 | access to property Length | Guards.cs:86:13:86:13 | access to parameter s | non-null |
|
||||
| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:27 | ... <= ... | Guards.cs:86:13:86:13 | access to parameter s | true |
|
||||
| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:15:86:21 | access to property Length | Guards.cs:86:13:86:13 | access to parameter s | non-null |
|
||||
| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | non-null |
|
||||
| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | non-null |
|
||||
| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:29 | ... != ... | Guards.cs:88:13:88:13 | access to parameter s | true |
|
||||
| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:15:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | non-null |
|
||||
| Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | null |
|
||||
| Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | null |
|
||||
| Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:29 | ... != ... | Guards.cs:88:13:88:13 | access to parameter s | false |
|
||||
| Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:15:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | null |
|
||||
| Guards.cs:93:31:93:31 | access to parameter s | Guards.cs:92:13:92:30 | ... != ... | Guards.cs:92:13:92:13 | access to parameter s | true |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:21 | access to property Length | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:25 | ... - ... | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:30 | ... != ... | Guards.cs:92:13:92:13 | access to parameter s | false |
|
||||
| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:15:92:21 | access to property Length | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | non-null |
|
||||
| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:19 | ... == ... | Guards.cs:96:13:96:13 | access to parameter s | true |
|
||||
| Guards.cs:99:31:99:31 | access to parameter s | Guards.cs:96:13:96:19 | ... == ... | Guards.cs:96:13:96:13 | access to parameter s | false |
|
||||
@@ -167,8 +167,8 @@
|
||||
| Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | non-null |
|
||||
| Guards.cs: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:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | non-null |
|
||||
| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:25 | call to method GetType | Guards.cs:268:13:268:14 | access to parameter o1 | non-null |
|
||||
| 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:269:13:269:14 | access to parameter o1 | Guards.cs:268:16:268:25 | call to method GetType | Guards.cs:268:13:268:14 | access to parameter o1 | non-null |
|
||||
| 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:279:17:279: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 | match access to type Action<Object> |
|
||||
| Guards.cs:279:17:279: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 |
|
||||
|
||||
@@ -288,31 +288,31 @@
|
||||
| Guards.cs:72:31:72:31 | access to parameter s | non-empty | Guards.cs:71:17:71:20 | null | non-empty |
|
||||
| Guards.cs:72:31:72:31 | access to parameter s | non-null | Guards.cs:71:17:71:20 | null | non-null |
|
||||
| Guards.cs:72:31:72:31 | access to parameter s | null | Guards.cs:71:17:71:20 | null | null |
|
||||
| Guards.cs:78:13:78:26 | ... == ... | true | Guards.cs:78:15:78:21 | access to property Length | non-null |
|
||||
| Guards.cs:78:15:78:21 | access to property Length | non-null | Guards.cs:78:13:78:13 | access to parameter s | non-null |
|
||||
| Guards.cs:78:15:78:21 | access to property Length | null | Guards.cs:78:13:78:13 | access to parameter s | null |
|
||||
| Guards.cs:80:13:80:25 | ... > ... | true | Guards.cs:80:15:80:21 | access to property Length | non-null |
|
||||
| Guards.cs:80:15:80:21 | access to property Length | non-null | Guards.cs:80:13:80:13 | access to parameter s | non-null |
|
||||
| Guards.cs:80:15:80:21 | access to property Length | null | Guards.cs:80:13:80:13 | access to parameter s | null |
|
||||
| Guards.cs:82:13:82:26 | ... >= ... | true | Guards.cs:82:15:82:21 | access to property Length | non-null |
|
||||
| Guards.cs:82:15:82:21 | access to property Length | non-null | Guards.cs:82:13:82:13 | access to parameter s | non-null |
|
||||
| Guards.cs:82:15:82:21 | access to property Length | null | Guards.cs:82:13:82:13 | access to parameter s | null |
|
||||
| Guards.cs:84:13:84:26 | ... < ... | true | Guards.cs:84:15:84:21 | access to property Length | non-null |
|
||||
| Guards.cs:84:15:84:21 | access to property Length | non-null | Guards.cs:84:13:84:13 | access to parameter s | non-null |
|
||||
| Guards.cs:84:15:84:21 | access to property Length | null | Guards.cs:84:13:84:13 | access to parameter s | null |
|
||||
| Guards.cs:86:13:86:27 | ... <= ... | true | Guards.cs:86:15:86:21 | access to property Length | non-null |
|
||||
| Guards.cs:86:15:86:21 | access to property Length | non-null | Guards.cs:86:13:86:13 | access to parameter s | non-null |
|
||||
| Guards.cs:86:15:86:21 | access to property Length | null | Guards.cs:86:13:86:13 | access to parameter s | null |
|
||||
| Guards.cs:88:13:88:29 | ... != ... | false | Guards.cs:88:15:88:21 | access to property Length | null |
|
||||
| Guards.cs:88:13:88:29 | ... != ... | true | Guards.cs:88:15:88:21 | access to property Length | non-null |
|
||||
| Guards.cs:88:15:88:21 | access to property Length | non-null | Guards.cs:88:13:88:13 | access to parameter s | non-null |
|
||||
| Guards.cs:88:15:88:21 | access to property Length | null | Guards.cs:88:13:88:13 | access to parameter s | null |
|
||||
| Guards.cs:92:13:92:25 | ... - ... | non-null | Guards.cs:92:15:92:21 | access to property Length | non-null |
|
||||
| Guards.cs:78:13:78:21 | access to property Length | non-null | Guards.cs:78:13:78:13 | access to parameter s | non-null |
|
||||
| Guards.cs:78:13:78:21 | access to property Length | null | Guards.cs:78:13:78:13 | access to parameter s | null |
|
||||
| Guards.cs:78:13:78:26 | ... == ... | true | Guards.cs:78:13:78:21 | access to property Length | non-null |
|
||||
| Guards.cs:80:13:80:21 | access to property Length | non-null | Guards.cs:80:13:80:13 | access to parameter s | non-null |
|
||||
| Guards.cs:80:13:80:21 | access to property Length | null | Guards.cs:80:13:80:13 | access to parameter s | null |
|
||||
| Guards.cs:80:13:80:25 | ... > ... | true | Guards.cs:80:13:80:21 | access to property Length | non-null |
|
||||
| Guards.cs:82:13:82:21 | access to property Length | non-null | Guards.cs:82:13:82:13 | access to parameter s | non-null |
|
||||
| Guards.cs:82:13:82:21 | access to property Length | null | Guards.cs:82:13:82:13 | access to parameter s | null |
|
||||
| Guards.cs:82:13:82:26 | ... >= ... | true | Guards.cs:82:13:82:21 | access to property Length | non-null |
|
||||
| Guards.cs:84:13:84:21 | access to property Length | non-null | Guards.cs:84:13:84:13 | access to parameter s | non-null |
|
||||
| Guards.cs:84:13:84:21 | access to property Length | null | Guards.cs:84:13:84:13 | access to parameter s | null |
|
||||
| Guards.cs:84:13:84:26 | ... < ... | true | Guards.cs:84:13:84:21 | access to property Length | non-null |
|
||||
| Guards.cs:86:13:86:21 | access to property Length | non-null | Guards.cs:86:13:86:13 | access to parameter s | non-null |
|
||||
| Guards.cs:86:13:86:21 | access to property Length | null | Guards.cs:86:13:86:13 | access to parameter s | null |
|
||||
| Guards.cs:86:13:86:27 | ... <= ... | true | Guards.cs:86:13:86:21 | access to property Length | non-null |
|
||||
| Guards.cs:88:13:88:21 | access to property Length | non-null | Guards.cs:88:13:88:13 | access to parameter s | non-null |
|
||||
| Guards.cs:88:13:88:21 | access to property Length | null | Guards.cs:88:13:88:13 | access to parameter s | null |
|
||||
| Guards.cs:88:13:88:29 | ... != ... | false | Guards.cs:88:13:88:21 | access to property Length | null |
|
||||
| Guards.cs:88:13:88:29 | ... != ... | true | Guards.cs:88:13:88:21 | access to property Length | non-null |
|
||||
| Guards.cs:92:13:92:21 | access to property Length | non-null | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:92:13:92:21 | access to property Length | null | Guards.cs:92:13:92:13 | access to parameter s | null |
|
||||
| Guards.cs:92:13:92:25 | ... - ... | non-null | Guards.cs:92:13:92:21 | access to property Length | non-null |
|
||||
| Guards.cs:92:13:92:25 | ... - ... | non-null | Guards.cs:92:25:92:25 | (...) ... | non-null |
|
||||
| Guards.cs:92:13:92:25 | ... - ... | null | Guards.cs:92:15:92:21 | access to property Length | null |
|
||||
| Guards.cs:92:13:92:25 | ... - ... | null | Guards.cs:92:13:92:21 | access to property Length | null |
|
||||
| Guards.cs:92:13:92:30 | ... != ... | false | Guards.cs:92:13:92:25 | ... - ... | non-null |
|
||||
| Guards.cs:92:15:92:21 | access to property Length | non-null | Guards.cs:92:13:92:13 | access to parameter s | non-null |
|
||||
| Guards.cs:92:15:92:21 | access to property Length | null | Guards.cs:92:13:92:13 | access to parameter s | null |
|
||||
| Guards.cs:96:13:96:19 | ... == ... | true | Guards.cs:96:13:96:13 | access to parameter s | non-null |
|
||||
| Guards.cs:104:13:104:45 | ... == ... | false | Guards.cs:104:13:104:37 | access to field Field | non-null |
|
||||
| Guards.cs:104:13:104:45 | ... == ... | true | Guards.cs:104:13:104:37 | access to field Field | null |
|
||||
@@ -328,10 +328,10 @@
|
||||
| Guards.cs:118:27:118:36 | access to property Property | null | Guards.cs:117:22:117:25 | null | null |
|
||||
| Guards.cs:119:27:119:36 | access to property Property | non-null | Guards.cs:117:22:117:25 | null | non-null |
|
||||
| Guards.cs:119:27:119:36 | access to property Property | null | Guards.cs:117:22:117:25 | null | null |
|
||||
| Guards.cs:125:21:125:31 | call to method Equals | non-null | Guards.cs:125:18:125:19 | access to parameter s1 | non-null |
|
||||
| Guards.cs:125:21:125:31 | call to method Equals | null | Guards.cs:125:18:125:19 | access to parameter s1 | null |
|
||||
| Guards.cs:125:21:125:31 | call to method Equals | true | Guards.cs:125:18:125:19 | access to parameter s1 | non-null |
|
||||
| Guards.cs:125:21:125:31 | call to method Equals | true | Guards.cs:125:29:125:30 | access to parameter s1 | non-null |
|
||||
| Guards.cs:125:18:125:31 | call to method Equals | non-null | Guards.cs:125:18:125:19 | access to parameter s1 | non-null |
|
||||
| Guards.cs:125:18:125:31 | call to method Equals | null | Guards.cs:125:18:125:19 | access to parameter s1 | null |
|
||||
| Guards.cs:125:18:125:31 | call to method Equals | true | Guards.cs:125:18:125:19 | access to parameter s1 | non-null |
|
||||
| Guards.cs:125:18:125:31 | call to method Equals | true | Guards.cs:125:29:125:30 | access to parameter s1 | non-null |
|
||||
| Guards.cs:130:13:130:21 | ... is ... | false | Guards.cs:130:13:130:13 | access to parameter s | non-null |
|
||||
| Guards.cs:130:13:130:21 | ... is ... | true | Guards.cs:130:13:130:13 | access to parameter s | null |
|
||||
| Guards.cs:137:13:137:25 | ... is ... | false | Guards.cs:137:13:137:13 | access to parameter s | null |
|
||||
@@ -396,10 +396,10 @@
|
||||
| Guards.cs:258:17:258:17 | access to local variable e | match access to constant B | Guards.cs:256:13:256:13 | access to parameter b | true |
|
||||
| Guards.cs:258:17:258:17 | access to local variable e | match access to constant B | Guards.cs:258:17:258:17 | access to local variable e | 1 |
|
||||
| Guards.cs:258:17:258:17 | access to local variable e | non-match access to constant B | Guards.cs:256:13:256:13 | access to parameter b | false |
|
||||
| Guards.cs:268:13:268:41 | call to operator == | true | Guards.cs:268:16:268:25 | call to method GetType | non-null |
|
||||
| Guards.cs:268:16:268:25 | call to method GetType | non-null | Guards.cs:268:13:268:14 | access to parameter o1 | non-null |
|
||||
| Guards.cs:270:16:270:25 | call to method GetType | non-null | Guards.cs:270:13:270:14 | access to parameter o1 | non-null |
|
||||
| Guards.cs:270:33:270:42 | call to method GetType | non-null | Guards.cs:270:30:270:31 | access to parameter o2 | non-null |
|
||||
| Guards.cs:268:13:268:25 | call to method GetType | non-null | Guards.cs:268:13:268:14 | access to parameter o1 | non-null |
|
||||
| Guards.cs:268:13:268:41 | call to operator == | true | Guards.cs:268:13:268:25 | call to method GetType | non-null |
|
||||
| Guards.cs:270:13:270:25 | call to method GetType | non-null | Guards.cs:270:13:270:14 | access to parameter o1 | non-null |
|
||||
| Guards.cs:270:30:270:42 | call to method GetType | non-null | Guards.cs:270:30:270:31 | access to parameter o2 | non-null |
|
||||
| Guards.cs:276:16:276:16 | access to parameter o | match "" | Guards.cs:276:16:276:16 | access to parameter o | non-null |
|
||||
| Guards.cs:276:16:276:16 | access to parameter o | match Action<String> a | Guards.cs:276:16:276:16 | access to parameter o | non-null |
|
||||
| Guards.cs:276:16:276:16 | access to parameter o | match access to type Action<Object> | Guards.cs:276:16:276:16 | access to parameter o | non-null |
|
||||
|
||||
11
csharp/ql/test/library-tests/csharp6/MemberAccess.expected
Normal file
11
csharp/ql/test/library-tests/csharp6/MemberAccess.expected
Normal file
@@ -0,0 +1,11 @@
|
||||
memberAccess
|
||||
| csharp6.cs:25:79:25:89 | access to property Length | csharp6.cs:25:79:25:81 | access to local variable bar | Conditional |
|
||||
| csharp6.cs:27:73:27:83 | access to property Length | csharp6.cs:27:73:27:75 | access to local variable bar | Conditional |
|
||||
| csharp6.cs:32:38:32:70 | access to indexer | csharp6.cs:32:38:32:66 | object creation of type Dictionary<Int32,String> | Conditional |
|
||||
| csharp6.cs:32:38:32:73 | access to indexer | csharp6.cs:32:38:32:70 | access to indexer | Unconditional |
|
||||
methodCall
|
||||
| csharp6.cs:30:31:30:44 | call to method ToUpper | csharp6.cs:30:31:30:33 | access to local variable foo | Conditional |
|
||||
extensionMethodCall
|
||||
| csharp6.cs:29:35:29:44 | call to method Any<Char> | csharp6.cs:29:35:29:37 | access to local variable bar | Conditional |
|
||||
| csharp6.cs:30:31:30:66 | call to method Select<Char,Boolean> | csharp6.cs:30:31:30:44 | call to method ToUpper | Unconditional |
|
||||
| csharp6.cs:30:31:30:75 | call to method Count<Boolean> | csharp6.cs:30:31:30:66 | call to method Select<Char,Boolean> | Conditional |
|
||||
16
csharp/ql/test/library-tests/csharp6/MemberAccess.ql
Normal file
16
csharp/ql/test/library-tests/csharp6/MemberAccess.ql
Normal file
@@ -0,0 +1,16 @@
|
||||
import csharp
|
||||
|
||||
query predicate memberAccess(MemberAccess ma, Expr qualifier, string conditional) {
|
||||
qualifier = ma.getQualifier() and
|
||||
if ma.isConditional() then conditional = "Conditional" else conditional = "Unconditional"
|
||||
}
|
||||
|
||||
query predicate methodCall(MethodCall mc, Expr qualifier, string conditional) {
|
||||
qualifier = mc.getQualifier() and
|
||||
if mc.isConditional() then conditional = "Conditional" else conditional = "Unconditional"
|
||||
}
|
||||
|
||||
query predicate extensionMethodCall(ExtensionMethodCall mc, Expr qualifier, string conditional) {
|
||||
qualifier = mc.getArgument(0) and
|
||||
if mc.isConditional() then conditional = "Conditional" else conditional = "Unconditional"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
| csharp6.cs:25:83:25:89 | access to property Length | csharp6.cs:25:79:25:81 | access to local variable bar | Conditional |
|
||||
| csharp6.cs:27:77:27:83 | access to property Length | csharp6.cs:27:73:27:75 | access to local variable bar | Conditional |
|
||||
| csharp6.cs:32:68:32:70 | access to indexer | csharp6.cs:32:38:32:66 | object creation of type Dictionary<Int32,String> | Conditional |
|
||||
| csharp6.cs:32:68:32:73 | access to indexer | csharp6.cs:32:68:32:70 | access to indexer | Unconditional |
|
||||
@@ -1,12 +0,0 @@
|
||||
/**
|
||||
* @name Tests member access
|
||||
*/
|
||||
|
||||
import csharp
|
||||
|
||||
from MemberAccess ma, string conditional
|
||||
where
|
||||
ma.isConditional() and conditional = "Conditional"
|
||||
or
|
||||
not ma.isConditional() and conditional = "Unconditional"
|
||||
select ma, ma.getQualifier(), conditional
|
||||
@@ -1 +0,0 @@
|
||||
| csharp6.cs:30:35:30:44 | call to method ToUpper | csharp6.cs:30:31:30:33 | access to local variable foo | Conditional |
|
||||
@@ -1,12 +0,0 @@
|
||||
/**
|
||||
* @name Tests conditional method calls
|
||||
*/
|
||||
|
||||
import csharp
|
||||
|
||||
from MethodCall mc, string conditional
|
||||
where
|
||||
mc.isConditional() and conditional = "Conditional"
|
||||
or
|
||||
not mc.isConditional() and conditional = "Unconditional"
|
||||
select mc, mc.getQualifier(), conditional
|
||||
@@ -7,8 +7,8 @@ assignedMembers
|
||||
| csharp6.cs:61:26:61:36 | ArrayField2 | csharp6.cs:76:27:76:56 | { ..., ... } |
|
||||
| csharp6.cs:62:26:62:39 | ArrayProperty2 | csharp6.cs:78:30:78:59 | { ..., ... } |
|
||||
indexerCalls
|
||||
| csharp6.cs:32:68:32:70 | access to indexer | 0 | csharp6.cs:32:69:32:69 | 2 |
|
||||
| csharp6.cs:32:68:32:73 | access to indexer | 0 | csharp6.cs:32:72:32:72 | 1 |
|
||||
| csharp6.cs:32:38:32:70 | access to indexer | 0 | csharp6.cs:32:69:32:69 | 2 |
|
||||
| csharp6.cs:32:38:32:73 | access to indexer | 0 | csharp6.cs:32:72:32:72 | 1 |
|
||||
| csharp6.cs:68:52:68:54 | access to indexer | 0 | csharp6.cs:68:53:68:53 | 0 |
|
||||
| csharp6.cs:68:52:68:54 | access to indexer | 1 | csharp6.cs:68:58:68:63 | "Zero" |
|
||||
| csharp6.cs:68:66:68:68 | access to indexer | 0 | csharp6.cs:68:67:68:67 | 1 |
|
||||
@@ -50,8 +50,8 @@ elementAssignments
|
||||
| csharp6.cs:78:46:78:51 | access to array element | csharp6.cs:78:46:78:57 | ... = ... | 0 | csharp6.cs:78:47:78:47 | 1 |
|
||||
| csharp6.cs:78:46:78:51 | access to array element | csharp6.cs:78:46:78:57 | ... = ... | 1 | csharp6.cs:78:50:78:50 | 0 |
|
||||
arrayQualifiers
|
||||
| csharp6.cs:32:68:32:70 | access to indexer | csharp6.cs:32:38:32:66 | object creation of type Dictionary<Int32,String> |
|
||||
| csharp6.cs:32:68:32:73 | access to indexer | csharp6.cs:32:68:32:70 | access to indexer |
|
||||
| csharp6.cs:32:38:32:70 | access to indexer | csharp6.cs:32:38:32:66 | object creation of type Dictionary<Int32,String> |
|
||||
| csharp6.cs:32:38:32:73 | access to indexer | csharp6.cs:32:38:32:70 | access to indexer |
|
||||
initializers
|
||||
| csharp6.cs:68:50:68:91 | { ..., ... } | 0 | csharp6.cs:68:52:68:63 | ... = ... |
|
||||
| csharp6.cs:68:50:68:91 | { ..., ... } | 1 | csharp6.cs:68:66:68:76 | ... = ... |
|
||||
|
||||
@@ -381,18 +381,18 @@ expressionTypes
|
||||
| NullableRefTypes.cs:211:13:211:13 | access to local variable t | Type? |
|
||||
| NullableRefTypes.cs:211:13:211:28 | Type t = ... | Type? |
|
||||
| NullableRefTypes.cs:211:17:211:17 | access to parameter o | object? |
|
||||
| NullableRefTypes.cs:211:19:211:28 | call to method GetType | Type? |
|
||||
| NullableRefTypes.cs:211:17:211:28 | call to method GetType | Type? |
|
||||
| NullableRefTypes.cs:212:16:212:16 | access to local variable t | Type? |
|
||||
| NullableRefTypes.cs:212:16:212:27 | call to method ToString | string! |
|
||||
| NullableRefTypes.cs:217:17:217:17 | access to local variable a | string! |
|
||||
| NullableRefTypes.cs:217:17:217:36 | String a = ... | string! |
|
||||
| NullableRefTypes.cs:217:21:217:29 | call to method GetSelf | TestNullableFlowStates? |
|
||||
| NullableRefTypes.cs:217:21:217:29 | this access | TestNullableFlowStates |
|
||||
| NullableRefTypes.cs:217:31:217:36 | access to field Field | string? |
|
||||
| NullableRefTypes.cs:217:21:217:36 | access to field Field | string? |
|
||||
| NullableRefTypes.cs:218:17:218:17 | access to local variable b | string! |
|
||||
| NullableRefTypes.cs:218:17:218:28 | String b = ... | string! |
|
||||
| NullableRefTypes.cs:218:21:218:24 | access to parameter list | List<string!>? |
|
||||
| NullableRefTypes.cs:218:26:218:28 | access to indexer | string? |
|
||||
| NullableRefTypes.cs:218:21:218:28 | access to indexer | string? |
|
||||
| NullableRefTypes.cs:218:27:218:27 | 0 | int! |
|
||||
| NullableRefTypes.cs:219:16:219:16 | access to local variable c | string! |
|
||||
| NullableRefTypes.cs:219:16:219:26 | String c = ... | string! |
|
||||
@@ -481,13 +481,13 @@ exprFlowState
|
||||
| NullableRefTypes.cs:206:9:206:16 | call to method Check | Not null |
|
||||
| NullableRefTypes.cs:206:15:206:15 | access to local variable y | Not null |
|
||||
| NullableRefTypes.cs:211:17:211:17 | access to parameter o | Maybe null |
|
||||
| NullableRefTypes.cs:211:19:211:28 | call to method GetType | Maybe null |
|
||||
| NullableRefTypes.cs:211:17:211:28 | call to method GetType | Maybe null |
|
||||
| NullableRefTypes.cs:212:16:212:16 | access to local variable t | Maybe null |
|
||||
| NullableRefTypes.cs:212:16:212:27 | call to method ToString | Not null |
|
||||
| NullableRefTypes.cs:217:21:217:29 | call to method GetSelf | Maybe null |
|
||||
| NullableRefTypes.cs:217:31:217:36 | access to field Field | Maybe null |
|
||||
| NullableRefTypes.cs:217:21:217:36 | access to field Field | Maybe null |
|
||||
| NullableRefTypes.cs:218:21:218:24 | access to parameter list | Maybe null |
|
||||
| NullableRefTypes.cs:218:26:218:28 | access to indexer | Maybe null |
|
||||
| NullableRefTypes.cs:218:21:218:28 | access to indexer | Maybe null |
|
||||
| NullableRefTypes.cs:218:27:218:27 | 0 | Not null |
|
||||
| NullableRefTypes.cs:219:20:219:23 | access to parameter list | Maybe null |
|
||||
| NullableRefTypes.cs:219:20:219:26 | access to indexer | Not null |
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
| dynamic.cs:62:9:62:12 | dynamic access to element | dynamic.cs:62:9:62:9 | access to local variable d | false | 0 | dynamic.cs:62:11:62:11 | 0 |
|
||||
| dynamic.cs:62:16:62:19 | dynamic access to element | dynamic.cs:62:16:62:16 | access to local variable d | false | 0 | dynamic.cs:62:18:62:18 | 0 |
|
||||
| dynamic.cs:63:15:63:17 | dynamic access to element | dynamic.cs:63:13:63:13 | access to local variable d | true | 0 | dynamic.cs:63:16:63:16 | 0 |
|
||||
| dynamic.cs:63:13:63:17 | dynamic access to element | dynamic.cs:63:13:63:13 | access to local variable d | true | 0 | dynamic.cs:63:16:63:16 | 0 |
|
||||
|
||||
@@ -216,8 +216,8 @@
|
||||
| E.cs:259:13:259:21 | ... == ... | true | E.cs:259:18:259:21 | null | E.cs:259:13:259:13 | access to parameter i |
|
||||
| E.cs:274:17:274:25 | ... != ... | false | E.cs:274:17:274:17 | access to local variable o | E.cs:274:22:274:25 | null |
|
||||
| E.cs:274:17:274:25 | ... != ... | false | E.cs:274:22:274:25 | null | E.cs:274:17:274:17 | access to local variable o |
|
||||
| E.cs:293:13:293:24 | ... == ... | true | E.cs:293:15:293:19 | call to method M2 | E.cs:293:24:293:24 | (...) ... |
|
||||
| E.cs:293:13:293:24 | ... == ... | true | E.cs:293:24:293:24 | (...) ... | E.cs:293:15:293:19 | call to method M2 |
|
||||
| E.cs:293:13:293:24 | ... == ... | true | E.cs:293:13:293:19 | call to method M2 | E.cs:293:24:293:24 | (...) ... |
|
||||
| E.cs:293:13:293:24 | ... == ... | true | E.cs:293:24:293:24 | (...) ... | E.cs:293:13:293:19 | call to method M2 |
|
||||
| E.cs:321:13:321:30 | ... is ... | true | E.cs:321:14:321:21 | ... ?? ... | E.cs:321:27:321:30 | null |
|
||||
| E.cs:321:13:321:30 | ... is ... | true | E.cs:321:27:321:30 | null | E.cs:321:14:321:21 | ... ?? ... |
|
||||
| E.cs:355:13:355:21 | dynamic call to operator != | false | E.cs:355:13:355:13 | access to local variable x | E.cs:355:18:355:21 | null |
|
||||
@@ -252,10 +252,10 @@
|
||||
| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | true | Forwarding.cs:78:35:78:38 | null | Forwarding.cs:78:32:78:32 | access to parameter o |
|
||||
| Forwarding.cs:83:16:83:24 | ... != ... | false | Forwarding.cs:83:16:83:16 | access to parameter o | Forwarding.cs:83:21:83:24 | null |
|
||||
| Forwarding.cs:83:16:83:24 | ... != ... | false | Forwarding.cs:83:21:83:24 | null | Forwarding.cs:83:16:83:16 | access to parameter o |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:15:19:21 | access to property Length | GuardedString.cs:19:26:19:26 | (...) ... |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:26:19:26 | (...) ... | GuardedString.cs:19:15:19:21 | access to property Length |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:15:34:21 | access to property Length | GuardedString.cs:34:26:34:26 | (...) ... |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:26:34:26 | (...) ... | GuardedString.cs:34:15:34:21 | access to property Length |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:13:19:21 | access to property Length | GuardedString.cs:19:26:19:26 | (...) ... |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:26:19:26 | (...) ... | GuardedString.cs:19:13:19:21 | access to property Length |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:13:34:21 | access to property Length | GuardedString.cs:34:26:34:26 | (...) ... |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:26:34:26 | (...) ... | GuardedString.cs:34:13:34:21 | access to property Length |
|
||||
| NullAlwaysBad.cs:9:17:9:25 | ... != ... | false | NullAlwaysBad.cs:9:17:9:17 | access to parameter s | NullAlwaysBad.cs:9:22:9:25 | null |
|
||||
| NullAlwaysBad.cs:9:17:9:25 | ... != ... | false | NullAlwaysBad.cs:9:22:9:25 | null | NullAlwaysBad.cs:9:17:9:17 | access to parameter s |
|
||||
| NullAlwaysGood.cs:9:17:9:25 | ... != ... | false | NullAlwaysGood.cs:9:17:9:17 | access to parameter s | NullAlwaysGood.cs:9:22:9:25 | null |
|
||||
|
||||
@@ -1137,7 +1137,7 @@
|
||||
| E.cs:184:13:184:22 | ... == ... | false | E.cs:184:13:184:14 | (...) ... | non-null |
|
||||
| E.cs:184:13:184:22 | ... == ... | true | E.cs:184:13:184:14 | (...) ... | null |
|
||||
| E.cs:184:13:184:22 | ... == ... | true | E.cs:184:19:184:22 | null | non-null |
|
||||
| E.cs:193:19:193:29 | call to method ToString | non-null | E.cs:193:17:193:17 | access to parameter o | non-null |
|
||||
| E.cs:193:17:193:29 | call to method ToString | non-null | E.cs:193:17:193:17 | access to parameter o | non-null |
|
||||
| E.cs:198:17:198:29 | ... ? ... : ... | non-null | E.cs:198:17:198:17 | access to parameter b | false |
|
||||
| E.cs:198:17:198:29 | ... ? ... : ... | non-null | E.cs:198:28:198:29 | "" | non-null |
|
||||
| E.cs:198:17:198:29 | ... ? ... : ... | null | E.cs:198:17:198:17 | access to parameter b | true |
|
||||
@@ -1184,9 +1184,9 @@
|
||||
| E.cs:293:13:293:13 | access to local variable s | non-null | E.cs:292:20:292:32 | ... ? ... : ... | non-null |
|
||||
| E.cs:293:13:293:13 | access to local variable s | null | E.cs:292:20:292:20 | access to parameter b | true |
|
||||
| E.cs:293:13:293:13 | access to local variable s | null | E.cs:292:20:292:32 | ... ? ... : ... | null |
|
||||
| E.cs:293:13:293:24 | ... == ... | true | E.cs:293:15:293:19 | call to method M2 | non-null |
|
||||
| E.cs:293:15:293:19 | call to method M2 | non-null | E.cs:293:13:293:13 | access to local variable s | non-null |
|
||||
| E.cs:293:15:293:19 | call to method M2 | null | E.cs:293:13:293:13 | access to local variable s | null |
|
||||
| E.cs:293:13:293:19 | call to method M2 | non-null | E.cs:293:13:293:13 | access to local variable s | non-null |
|
||||
| E.cs:293:13:293:19 | call to method M2 | null | E.cs:293:13:293:13 | access to local variable s | null |
|
||||
| E.cs:293:13:293:24 | ... == ... | true | E.cs:293:13:293:19 | call to method M2 | non-null |
|
||||
| E.cs:295:13:295:13 | access to local variable s | non-null | E.cs:292:20:292:32 | ... ? ... : ... | non-null |
|
||||
| E.cs:295:13:295:13 | access to local variable s | null | E.cs:292:20:292:32 | ... ? ... : ... | null |
|
||||
| E.cs:302:9:302:9 | access to local variable s | empty | E.cs:301:17:301:27 | ... as ... | empty |
|
||||
@@ -1399,54 +1399,54 @@
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:15:19:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:19:15:19:21 | access to property Length | non-null | GuardedString.cs:19:13:19:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:19:15:19:21 | access to property Length | null | GuardedString.cs:19:13:19:13 | access to local variable s | null |
|
||||
| GuardedString.cs:19:13:19:21 | access to property Length | non-null | GuardedString.cs:19:13:19:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:19:13:19:21 | access to property Length | null | GuardedString.cs:19:13:19:13 | access to local variable s | null |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:13:19:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:20:31:20:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:20:31:20:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:22:13:22:25 | ... > ... | true | GuardedString.cs:22:15:22:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:22:15:22:21 | access to property Length | non-null | GuardedString.cs:22:13:22:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:22:15:22:21 | access to property Length | null | GuardedString.cs:22:13:22:13 | access to local variable s | null |
|
||||
| GuardedString.cs:22:13:22:21 | access to property Length | non-null | GuardedString.cs:22:13:22:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:22:13:22:21 | access to property Length | null | GuardedString.cs:22:13:22:13 | access to local variable s | null |
|
||||
| GuardedString.cs:22:13:22:25 | ... > ... | true | GuardedString.cs:22:13:22:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:23:31:23:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:23:31:23:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:25:13:25:26 | ... >= ... | true | GuardedString.cs:25:15:25:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:25:15:25:21 | access to property Length | non-null | GuardedString.cs:25:13:25:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:25:15:25:21 | access to property Length | null | GuardedString.cs:25:13:25:13 | access to local variable s | null |
|
||||
| GuardedString.cs:25:13:25:21 | access to property Length | non-null | GuardedString.cs:25:13:25:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:25:13:25:21 | access to property Length | null | GuardedString.cs:25:13:25:13 | access to local variable s | null |
|
||||
| GuardedString.cs:25:13:25:26 | ... >= ... | true | GuardedString.cs:25:13:25:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:26:31:26:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:26:31:26:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:28:13:28:26 | ... < ... | true | GuardedString.cs:28:15:28:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:28:15:28:21 | access to property Length | non-null | GuardedString.cs:28:13:28:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:28:15:28:21 | access to property Length | null | GuardedString.cs:28:13:28:13 | access to local variable s | null |
|
||||
| GuardedString.cs:28:13:28:21 | access to property Length | non-null | GuardedString.cs:28:13:28:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:28:13:28:21 | access to property Length | null | GuardedString.cs:28:13:28:13 | access to local variable s | null |
|
||||
| GuardedString.cs:28:13:28:26 | ... < ... | true | GuardedString.cs:28:13:28:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:29:31:29:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:29:31:29:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:31:13:31:27 | ... <= ... | true | GuardedString.cs:31:15:31:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:31:15:31:21 | access to property Length | non-null | GuardedString.cs:31:13:31:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:31:15:31:21 | access to property Length | null | GuardedString.cs:31:13:31:13 | access to local variable s | null |
|
||||
| GuardedString.cs:31:13:31:21 | access to property Length | non-null | GuardedString.cs:31:13:31:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:31:13:31:21 | access to property Length | null | GuardedString.cs:31:13:31:13 | access to local variable s | null |
|
||||
| GuardedString.cs:31:13:31:27 | ... <= ... | true | GuardedString.cs:31:13:31:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:32:31:32:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:32:31:32:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:15:34:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:34:15:34:21 | access to property Length | non-null | GuardedString.cs:34:13:34:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:34:15:34:21 | access to property Length | null | GuardedString.cs:34:13:34:13 | access to local variable s | null |
|
||||
| GuardedString.cs:34:13:34:21 | access to property Length | non-null | GuardedString.cs:34:13:34:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:34:13:34:21 | access to property Length | null | GuardedString.cs:34:13:34:13 | access to local variable s | null |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:13:34:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:35:31:35:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:35:31:35:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:37:31:37:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
| E.cs:284:9:284:9 | access to local variable o | E.cs:284:9:284:9 | access to local variable o | null | true |
|
||||
| E.cs:293:13:293:13 | access to local variable s | E.cs:293:13:293:13 | access to local variable s | non-null | false |
|
||||
| E.cs:293:13:293:13 | access to local variable s | E.cs:293:13:293:13 | access to local variable s | null | true |
|
||||
| E.cs:293:13:293:24 | ... == ... | E.cs:293:15:293:19 | call to method M2 | true | false |
|
||||
| E.cs:293:13:293:24 | ... == ... | E.cs:293:13:293:19 | call to method M2 | true | false |
|
||||
| E.cs:306:31:306:31 | access to field l | E.cs:306:31:306:31 | access to field l | non-null | false |
|
||||
| E.cs:306:31:306:31 | access to field l | E.cs:306:31:306:31 | access to field l | null | true |
|
||||
| E.cs:309:13:309:22 | access to property HasValue | E.cs:309:13:309:13 | access to field l | false | true |
|
||||
@@ -329,22 +329,22 @@
|
||||
| GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | GuardedString.cs:14:40:14:40 | access to local variable s | false | false |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | GuardedString.cs:19:13:19:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | GuardedString.cs:19:13:19:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | GuardedString.cs:19:15:19:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | GuardedString.cs:19:13:19:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | GuardedString.cs:22:13:22:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | GuardedString.cs:22:13:22:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:22:13:22:25 | ... > ... | GuardedString.cs:22:15:22:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:22:13:22:25 | ... > ... | GuardedString.cs:22:13:22:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | GuardedString.cs:25:13:25:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | GuardedString.cs:25:13:25:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:25:13:25:26 | ... >= ... | GuardedString.cs:25:15:25:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:25:13:25:26 | ... >= ... | GuardedString.cs:25:13:25:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | GuardedString.cs:28:13:28:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | GuardedString.cs:28:13:28:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:28:13:28:26 | ... < ... | GuardedString.cs:28:15:28:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:28:13:28:26 | ... < ... | GuardedString.cs:28:13:28:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | GuardedString.cs:31:13:31:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | GuardedString.cs:31:13:31:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:31:13:31:27 | ... <= ... | GuardedString.cs:31:15:31:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:31:13:31:27 | ... <= ... | GuardedString.cs:31:13:31:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | GuardedString.cs:34:13:34:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | GuardedString.cs:34:13:34:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | GuardedString.cs:34:15:34:21 | access to property Length | false | false |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | GuardedString.cs:34:13:34:21 | access to property Length | false | false |
|
||||
| NullAlwaysBad.cs:9:17:9:25 | ... != ... | NullAlwaysBad.cs:9:17:9:17 | access to parameter s | false | true |
|
||||
| NullAlwaysBad.cs:9:17:9:25 | ... != ... | NullAlwaysBad.cs:9:17:9:17 | access to parameter s | true | false |
|
||||
| NullAlwaysGood.cs:9:17:9:25 | ... != ... | NullAlwaysGood.cs:9:17:9:17 | access to parameter s | false | true |
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* Data flow through variables declared in statements of the form `x := y.(type)` at the beginning of type switches has been fixed, which may result in more alerts.
|
||||
@@ -122,9 +122,10 @@ class Entity extends @object {
|
||||
/**
|
||||
* Gets the declaring identifier for this entity, if any.
|
||||
*
|
||||
* Note that type switch statements which define a new variable in the guard
|
||||
* Note that type switch statements which declare a new variable in the guard
|
||||
* actually have a new variable (of the right type) implicitly declared at
|
||||
* the beginning of each case clause, and these do not have a declaration.
|
||||
* the beginning of each case clause, and these do not have a syntactic
|
||||
* declaration.
|
||||
*/
|
||||
Ident getDeclaration() { result.declares(this) }
|
||||
|
||||
@@ -137,6 +138,15 @@ class Entity extends @object {
|
||||
/** Gets a textual representation of this entity. */
|
||||
string toString() { result = this.getName() }
|
||||
|
||||
private predicate hasRealLocationInfo(
|
||||
string filepath, int startline, int startcolumn, int endline, int endcolumn
|
||||
) {
|
||||
// take the location of the declaration if there is one
|
||||
this.getDeclaration().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) or
|
||||
any(CaseClause cc | this = cc.getImplicitlyDeclaredVariable())
|
||||
.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if this element is at the specified location.
|
||||
* The location spans column `startcolumn` of line `startline` to
|
||||
@@ -148,15 +158,16 @@ class Entity extends @object {
|
||||
string filepath, int startline, int startcolumn, int endline, int endcolumn
|
||||
) {
|
||||
// take the location of the declaration if there is one
|
||||
this.getDeclaration().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
|
||||
or
|
||||
// otherwise fall back on dummy location
|
||||
not exists(this.getDeclaration()) and
|
||||
filepath = "" and
|
||||
startline = 0 and
|
||||
startcolumn = 0 and
|
||||
endline = 0 and
|
||||
endcolumn = 0
|
||||
if this.hasRealLocationInfo(_, _, _, _, _)
|
||||
then this.hasRealLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
|
||||
else (
|
||||
// otherwise fall back on dummy location
|
||||
filepath = "" and
|
||||
startline = 0 and
|
||||
startcolumn = 0 and
|
||||
endline = 0 and
|
||||
endcolumn = 0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -777,6 +777,16 @@ class CaseClause extends @caseclause, Stmt, ScopeNode {
|
||||
/** Gets the number of statements of this `case` clause. */
|
||||
int getNumStmt() { result = this.getNumChildStmt() }
|
||||
|
||||
/**
|
||||
* Gets the implicitly declared variable for this `case` clause, if any.
|
||||
*
|
||||
* This exists for case clauses in type switch statements which declare a
|
||||
* variable in the guard.
|
||||
*/
|
||||
LocalVariable getImplicitlyDeclaredVariable() {
|
||||
not exists(result.getDeclaration()) and result.getScope().(LocalScope).getNode() = this
|
||||
}
|
||||
|
||||
override predicate mayHaveSideEffects() {
|
||||
this.getAnExpr().mayHaveSideEffects() or
|
||||
this.getAStmt().mayHaveSideEffects()
|
||||
|
||||
@@ -306,6 +306,19 @@ newtype TControlFlowNode =
|
||||
* the `i`th expression of a case clause `cc`.
|
||||
*/
|
||||
MkCaseCheckNode(CaseClause cc, int i) { exists(cc.getExpr(i)) } or
|
||||
/**
|
||||
* A control-flow node that represents the implicit declaration of the
|
||||
* variable `lv` in case clause `cc` and its assignment of the value
|
||||
* `switchExpr` from the guard. This only occurs in case clauses in a type
|
||||
* switch statement which declares a variable in its guard.
|
||||
*/
|
||||
MkTypeSwitchImplicitVariable(CaseClause cc, LocalVariable lv, Expr switchExpr) {
|
||||
exists(TypeSwitchStmt ts, DefineStmt ds | ds = ts.getAssign() |
|
||||
cc = ts.getACase() and
|
||||
lv = cc.getImplicitlyDeclaredVariable() and
|
||||
switchExpr = ds.getRhs().(TypeAssertExpr).getExpr()
|
||||
)
|
||||
} or
|
||||
/**
|
||||
* A control-flow node that represents the implicit lower bound of a slice expression.
|
||||
*/
|
||||
@@ -1099,6 +1112,10 @@ module CFG {
|
||||
first = this.getExprStart(0)
|
||||
or
|
||||
not exists(this.getAnExpr()) and
|
||||
first = MkTypeSwitchImplicitVariable(this, _, _)
|
||||
or
|
||||
not exists(this.getAnExpr()) and
|
||||
not exists(MkTypeSwitchImplicitVariable(this, _, _)) and
|
||||
first = this.getBodyStart()
|
||||
}
|
||||
|
||||
@@ -1119,6 +1136,9 @@ module CFG {
|
||||
override predicate succ0(ControlFlow::Node pred, ControlFlow::Node succ) {
|
||||
ControlFlowTree.super.succ0(pred, succ)
|
||||
or
|
||||
pred = MkTypeSwitchImplicitVariable(this, _, _) and
|
||||
succ = this.getBodyStart()
|
||||
or
|
||||
exists(int i |
|
||||
lastNode(this.getExpr(i), pred, normalCompletion()) and
|
||||
succ = MkCaseCheckNode(this, i)
|
||||
@@ -1137,8 +1157,13 @@ module CFG {
|
||||
|
||||
predicate isPassingEdge(int i, ControlFlow::Node pred, ControlFlow::Node succ, Expr testExpr) {
|
||||
pred = this.getExprEnd(i, true) and
|
||||
succ = this.getBodyStart() and
|
||||
testExpr = this.getExpr(i)
|
||||
testExpr = this.getExpr(i) and
|
||||
(
|
||||
succ = MkTypeSwitchImplicitVariable(this, _, _)
|
||||
or
|
||||
not exists(MkTypeSwitchImplicitVariable(this, _, _)) and
|
||||
succ = this.getBodyStart()
|
||||
)
|
||||
}
|
||||
|
||||
override ControlFlowTree getChildTree(int i) { result = this.getStmt(i) }
|
||||
|
||||
@@ -45,6 +45,7 @@ module IR {
|
||||
this instanceof MkNextNode or
|
||||
this instanceof MkImplicitTrue or
|
||||
this instanceof MkCaseCheckNode or
|
||||
this instanceof MkTypeSwitchImplicitVariable or
|
||||
this instanceof MkImplicitLowerSliceBound or
|
||||
this instanceof MkImplicitUpperSliceBound or
|
||||
this instanceof MkImplicitMaxSliceBound or
|
||||
@@ -167,6 +168,9 @@ module IR {
|
||||
or
|
||||
this instanceof MkCaseCheckNode and result = "case"
|
||||
or
|
||||
this instanceof MkTypeSwitchImplicitVariable and
|
||||
result = "type switch implicit variable declaration"
|
||||
or
|
||||
this instanceof MkImplicitLowerSliceBound and result = "implicit lower bound"
|
||||
or
|
||||
this instanceof MkImplicitUpperSliceBound and result = "implicit upper bound"
|
||||
@@ -1269,6 +1273,52 @@ module IR {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An instruction corresponding to the implicit declaration of the variable
|
||||
* `lv` in case clause `cc` and its assignment of the value `switchExpr` from
|
||||
* the guard. This only occurs in case clauses in a type switch statement
|
||||
* which declares a variable in its guard.
|
||||
*
|
||||
* For example, consider this type switch statement:
|
||||
*
|
||||
* ```go
|
||||
* switch y := x.(type) {
|
||||
* case Type1:
|
||||
* f(y)
|
||||
* ...
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* The `y` inside the case clause is actually a local variable with type
|
||||
* `Type1` that is implicitly declared at the top of the case clause. In
|
||||
* default clauses and case clauses which list more than one type, the type
|
||||
* of the implicitly declared variable is the type of `switchExpr`.
|
||||
*/
|
||||
class TypeSwitchImplicitVariableInstruction extends Instruction, MkTypeSwitchImplicitVariable {
|
||||
CaseClause cc;
|
||||
LocalVariable lv;
|
||||
Expr switchExpr;
|
||||
|
||||
TypeSwitchImplicitVariableInstruction() {
|
||||
this = MkTypeSwitchImplicitVariable(cc, lv, switchExpr)
|
||||
}
|
||||
|
||||
override predicate writes(ValueEntity v, Instruction rhs) {
|
||||
v = lv and
|
||||
rhs = evalExprInstruction(switchExpr)
|
||||
}
|
||||
|
||||
override ControlFlow::Root getRoot() { result.isRootOf(cc) }
|
||||
|
||||
override string toString() { result = "implicit type switch variable declaration" }
|
||||
|
||||
override predicate hasLocationInfo(
|
||||
string filepath, int startline, int startcolumn, int endline, int endcolumn
|
||||
) {
|
||||
cc.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An instruction computing the implicit lower slice bound of zero in a slice expression without
|
||||
* an explicit lower bound.
|
||||
|
||||
@@ -88,13 +88,41 @@ module TaintedPath {
|
||||
}
|
||||
}
|
||||
|
||||
/**An call to ParseMultipartForm creates multipart.Form and cleans multipart.Form.FileHeader.Filename using path.Base() */
|
||||
class MultipartClean extends Sanitizer {
|
||||
MultipartClean() {
|
||||
exists(DataFlow::FieldReadNode frn |
|
||||
frn.getField().hasQualifiedName("mime/multipart", "FileHeader", "Filename") and
|
||||
this = frn
|
||||
)
|
||||
/**
|
||||
* A read from the field `Filename` of the type `mime/multipart.FileHeader`,
|
||||
* considered as a sanitizer for path traversal.
|
||||
*
|
||||
* The only way to create a `mime/multipart.FileHeader` is to create a
|
||||
* `mime/multipart.Form`, which creates the `Filename` field of each
|
||||
* `mime/multipart.FileHeader` by calling `Part.FileName`, which calls
|
||||
* `path/filepath.Base` on its return value. In general `path/filepath.Base`
|
||||
* is not a sanitizer for path traversal, but in this specific case where the
|
||||
* output is going to be used as a filename rather than a directory name, it
|
||||
* is adequate.
|
||||
*/
|
||||
class MimeMultipartFileHeaderFilenameSanitizer extends Sanitizer {
|
||||
MimeMultipartFileHeaderFilenameSanitizer() {
|
||||
this.(DataFlow::FieldReadNode)
|
||||
.getField()
|
||||
.hasQualifiedName("mime/multipart", "FileHeader", "Filename")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A call to `mime/multipart.Part.FileName`, considered as a sanitizer
|
||||
* against path traversal.
|
||||
*
|
||||
* `Part.FileName` calls `path/filepath.Base` on its return value. In
|
||||
* general `path/filepath.Base` is not a sanitizer for path traversal, but in
|
||||
* this specific case where the output is going to be used as a filename
|
||||
* rather than a directory name, it is adequate.
|
||||
*/
|
||||
class MimeMultipartPartFileNameSanitizer extends Sanitizer {
|
||||
MimeMultipartPartFileNameSanitizer() {
|
||||
this =
|
||||
any(Method m | m.hasQualifiedName("mime/multipart", "Part", "FileName"))
|
||||
.getACall()
|
||||
.getResult()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,15 +148,8 @@ module TaintedPath {
|
||||
* A replacement of the form `!strings.ReplaceAll(nd, "..")` or `!strings.ReplaceAll(nd, ".")`, considered as a sanitizer for
|
||||
* path traversal.
|
||||
*/
|
||||
class DotDotReplace extends Sanitizer {
|
||||
DotDotReplace() {
|
||||
exists(DataFlow::CallNode cleanCall, DataFlow::Node valueNode |
|
||||
cleanCall = any(Function f | f.hasQualifiedName("strings", "ReplaceAll")).getACall() and
|
||||
valueNode = cleanCall.getArgument(1) and
|
||||
valueNode.asExpr().(StringLit).getValue() = ["..", "."] and
|
||||
this = cleanCall.getResult()
|
||||
)
|
||||
}
|
||||
class DotDotReplaceAll extends StringOps::ReplaceAll, Sanitizer {
|
||||
DotDotReplaceAll() { this.getReplacedString() = ["..", "."] }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +0,0 @@
|
||||
import go
|
||||
|
||||
query predicate edges(ControlFlow::Node pred, ControlFlow::Node succ) {
|
||||
not succ.getFile().hasBuildConstraints() and
|
||||
not pred.getFile().hasBuildConstraints() and
|
||||
succ = pred.getASuccessor()
|
||||
}
|
||||
|
||||
select ""
|
||||
@@ -1369,85 +1369,111 @@
|
||||
| stmts.go:107:10:107:10 | true is false | stmts.go:106:3:106:7 | skip |
|
||||
| stmts.go:107:10:107:10 | true is true | stmts.go:107:2:107:11 | skip |
|
||||
| stmts.go:112:1:112:1 | entry | stmts.go:112:12:112:12 | argument corresponding to x |
|
||||
| stmts.go:112:1:125:1 | function declaration | stmts.go:128:6:128:11 | skip |
|
||||
| stmts.go:112:6:112:10 | skip | stmts.go:112:1:125:1 | function declaration |
|
||||
| stmts.go:112:1:137:1 | function declaration | stmts.go:140:6:140:11 | skip |
|
||||
| stmts.go:112:6:112:10 | skip | stmts.go:112:1:137:1 | function declaration |
|
||||
| stmts.go:112:12:112:12 | argument corresponding to x | stmts.go:112:12:112:12 | initialization of x |
|
||||
| stmts.go:112:12:112:12 | initialization of x | stmts.go:113:9:113:9 | skip |
|
||||
| stmts.go:113:9:113:9 | assignment to y | stmts.go:114:7:114:11 | case error |
|
||||
| stmts.go:113:9:113:9 | assignment to y | stmts.go:121:9:121:9 | skip |
|
||||
| stmts.go:113:9:113:9 | skip | stmts.go:113:14:113:14 | x |
|
||||
| stmts.go:113:14:113:14 | x | stmts.go:113:14:113:21 | type assertion |
|
||||
| stmts.go:113:14:113:21 | type assertion | stmts.go:113:9:113:9 | assignment to y |
|
||||
| stmts.go:114:2:115:16 | implicit type switch variable declaration | stmts.go:115:3:115:13 | selection of Println |
|
||||
| stmts.go:114:7:114:11 | case error | stmts.go:114:2:115:16 | implicit type switch variable declaration |
|
||||
| stmts.go:114:7:114:11 | case error | stmts.go:114:14:114:19 | case string |
|
||||
| stmts.go:114:7:114:11 | case error | stmts.go:115:3:115:13 | selection of Println |
|
||||
| stmts.go:114:14:114:19 | case string | stmts.go:115:3:115:13 | selection of Println |
|
||||
| stmts.go:114:14:114:19 | case string | stmts.go:114:2:115:16 | implicit type switch variable declaration |
|
||||
| stmts.go:114:14:114:19 | case string | stmts.go:116:7:116:13 | case float32 |
|
||||
| stmts.go:115:3:115:13 | selection of Println | stmts.go:115:15:115:15 | y |
|
||||
| stmts.go:115:3:115:16 | call to Println | stmts.go:121:9:121:9 | skip |
|
||||
| stmts.go:115:3:115:16 | call to Println | stmts.go:125:1:125:1 | exit |
|
||||
| stmts.go:115:3:115:16 | call to Println | stmts.go:123:9:123:9 | skip |
|
||||
| stmts.go:115:3:115:16 | call to Println | stmts.go:137:1:137:1 | exit |
|
||||
| stmts.go:115:15:115:15 | y | stmts.go:115:3:115:16 | call to Println |
|
||||
| stmts.go:116:7:116:13 | case float32 | stmts.go:117:3:117:7 | test5 |
|
||||
| stmts.go:116:7:116:13 | case float32 | stmts.go:121:9:121:9 | skip |
|
||||
| stmts.go:116:2:118:14 | implicit type switch variable declaration | stmts.go:117:3:117:7 | test5 |
|
||||
| stmts.go:116:7:116:13 | case float32 | stmts.go:116:2:118:14 | implicit type switch variable declaration |
|
||||
| stmts.go:116:7:116:13 | case float32 | stmts.go:119:2:120:7 | implicit type switch variable declaration |
|
||||
| stmts.go:117:3:117:7 | test5 | stmts.go:117:9:117:12 | true |
|
||||
| stmts.go:117:3:117:13 | call to test5 | stmts.go:125:1:125:1 | exit |
|
||||
| stmts.go:117:3:117:13 | call to test5 | stmts.go:137:1:137:1 | exit |
|
||||
| stmts.go:117:9:117:12 | true | stmts.go:117:3:117:13 | call to test5 |
|
||||
| stmts.go:118:3:118:7 | test5 | stmts.go:118:9:118:13 | false |
|
||||
| stmts.go:118:9:118:13 | false | stmts.go:118:3:118:14 | call to test5 |
|
||||
| stmts.go:121:9:121:9 | assignment to y | stmts.go:121:17:121:17 | y |
|
||||
| stmts.go:121:9:121:9 | skip | stmts.go:121:14:121:14 | x |
|
||||
| stmts.go:121:14:121:14 | x | stmts.go:121:9:121:9 | assignment to y |
|
||||
| stmts.go:121:17:121:17 | y | stmts.go:121:17:121:24 | type assertion |
|
||||
| stmts.go:121:17:121:24 | type assertion | stmts.go:123:3:123:7 | test5 |
|
||||
| stmts.go:123:3:123:7 | test5 | stmts.go:123:9:123:13 | false |
|
||||
| stmts.go:123:3:123:14 | call to test5 | stmts.go:125:1:125:1 | exit |
|
||||
| stmts.go:123:9:123:13 | false | stmts.go:123:3:123:14 | call to test5 |
|
||||
| stmts.go:128:1:128:1 | entry | stmts.go:128:13:128:13 | argument corresponding to f |
|
||||
| stmts.go:128:1:130:1 | function declaration | stmts.go:133:6:133:11 | skip |
|
||||
| stmts.go:128:6:128:11 | skip | stmts.go:128:1:130:1 | function declaration |
|
||||
| stmts.go:128:13:128:13 | argument corresponding to f | stmts.go:128:13:128:13 | initialization of f |
|
||||
| stmts.go:128:13:128:13 | initialization of f | stmts.go:129:5:129:5 | f |
|
||||
| stmts.go:129:2:129:7 | go statement | stmts.go:130:1:130:1 | exit |
|
||||
| stmts.go:129:5:129:5 | f | stmts.go:129:2:129:7 | go statement |
|
||||
| stmts.go:133:1:133:1 | entry | stmts.go:133:13:133:14 | argument corresponding to xs |
|
||||
| stmts.go:133:1:147:1 | function declaration | stmts.go:0:0:0:0 | exit |
|
||||
| stmts.go:133:6:133:11 | skip | stmts.go:133:1:147:1 | function declaration |
|
||||
| stmts.go:133:13:133:14 | argument corresponding to xs | stmts.go:133:13:133:14 | initialization of xs |
|
||||
| stmts.go:133:13:133:14 | initialization of xs | stmts.go:134:17:134:18 | xs |
|
||||
| stmts.go:134:2:139:2 | range statement[0] | stmts.go:134:6:134:6 | assignment to x |
|
||||
| stmts.go:134:6:134:6 | assignment to x | stmts.go:135:6:135:6 | x |
|
||||
| stmts.go:134:6:134:6 | skip | stmts.go:134:2:139:2 | range statement[0] |
|
||||
| stmts.go:134:17:134:18 | next key-value pair in range | stmts.go:134:6:134:6 | skip |
|
||||
| stmts.go:134:17:134:18 | next key-value pair in range | stmts.go:141:20:141:21 | xs |
|
||||
| stmts.go:134:17:134:18 | xs | stmts.go:134:17:134:18 | next key-value pair in range |
|
||||
| stmts.go:135:6:135:6 | x | stmts.go:135:10:135:10 | 5 |
|
||||
| stmts.go:135:6:135:10 | ...>... | stmts.go:135:10:135:10 | ...>... is false |
|
||||
| stmts.go:135:6:135:10 | ...>... | stmts.go:135:10:135:10 | ...>... is true |
|
||||
| stmts.go:135:10:135:10 | 5 | stmts.go:135:6:135:10 | ...>... |
|
||||
| stmts.go:135:10:135:10 | ...>... is false | stmts.go:138:3:138:11 | selection of Print |
|
||||
| stmts.go:135:10:135:10 | ...>... is true | stmts.go:136:4:136:11 | skip |
|
||||
| stmts.go:136:4:136:11 | skip | stmts.go:134:17:134:18 | next key-value pair in range |
|
||||
| stmts.go:138:3:138:11 | selection of Print | stmts.go:138:13:138:13 | x |
|
||||
| stmts.go:138:3:138:14 | call to Print | stmts.go:134:17:134:18 | next key-value pair in range |
|
||||
| stmts.go:138:3:138:14 | call to Print | stmts.go:147:1:147:1 | exit |
|
||||
| stmts.go:138:13:138:13 | x | stmts.go:138:3:138:14 | call to Print |
|
||||
| stmts.go:141:2:143:2 | range statement[0] | stmts.go:141:2:143:2 | range statement[1] |
|
||||
| stmts.go:141:2:143:2 | range statement[1] | stmts.go:141:6:141:6 | assignment to i |
|
||||
| stmts.go:141:6:141:6 | assignment to i | stmts.go:141:9:141:9 | assignment to v |
|
||||
| stmts.go:141:6:141:6 | skip | stmts.go:141:9:141:9 | skip |
|
||||
| stmts.go:141:9:141:9 | assignment to v | stmts.go:142:3:142:11 | selection of Print |
|
||||
| stmts.go:141:9:141:9 | skip | stmts.go:141:2:143:2 | range statement[0] |
|
||||
| stmts.go:141:20:141:21 | next key-value pair in range | stmts.go:141:6:141:6 | skip |
|
||||
| stmts.go:141:20:141:21 | next key-value pair in range | stmts.go:145:12:145:13 | xs |
|
||||
| stmts.go:141:20:141:21 | xs | stmts.go:141:20:141:21 | next key-value pair in range |
|
||||
| stmts.go:142:3:142:11 | selection of Print | stmts.go:142:13:142:13 | i |
|
||||
| stmts.go:142:3:142:17 | call to Print | stmts.go:141:20:141:21 | next key-value pair in range |
|
||||
| stmts.go:142:3:142:17 | call to Print | stmts.go:147:1:147:1 | exit |
|
||||
| stmts.go:142:13:142:13 | i | stmts.go:142:16:142:16 | v |
|
||||
| stmts.go:142:16:142:16 | v | stmts.go:142:3:142:17 | call to Print |
|
||||
| stmts.go:145:12:145:13 | next key-value pair in range | stmts.go:145:15:146:2 | skip |
|
||||
| stmts.go:145:12:145:13 | next key-value pair in range | stmts.go:147:1:147:1 | exit |
|
||||
| stmts.go:145:12:145:13 | xs | stmts.go:145:12:145:13 | next key-value pair in range |
|
||||
| stmts.go:145:15:146:2 | skip | stmts.go:145:12:145:13 | next key-value pair in range |
|
||||
| stmts.go:119:2:120:7 | implicit type switch variable declaration | stmts.go:120:3:120:3 | skip |
|
||||
| stmts.go:120:3:120:3 | skip | stmts.go:120:7:120:7 | y |
|
||||
| stmts.go:120:7:120:7 | y | stmts.go:123:9:123:9 | skip |
|
||||
| stmts.go:123:9:123:9 | assignment to y | stmts.go:123:17:123:17 | y |
|
||||
| stmts.go:123:9:123:9 | skip | stmts.go:123:14:123:14 | x |
|
||||
| stmts.go:123:14:123:14 | x | stmts.go:123:9:123:9 | assignment to y |
|
||||
| stmts.go:123:17:123:17 | y | stmts.go:123:17:123:24 | type assertion |
|
||||
| stmts.go:123:17:123:24 | type assertion | stmts.go:124:7:124:11 | case error |
|
||||
| stmts.go:124:7:124:11 | case error | stmts.go:124:14:124:19 | case string |
|
||||
| stmts.go:124:7:124:11 | case error | stmts.go:125:3:125:13 | selection of Println |
|
||||
| stmts.go:124:14:124:19 | case string | stmts.go:125:3:125:13 | selection of Println |
|
||||
| stmts.go:124:14:124:19 | case string | stmts.go:126:7:126:13 | case float32 |
|
||||
| stmts.go:125:3:125:13 | selection of Println | stmts.go:125:15:125:15 | y |
|
||||
| stmts.go:125:3:125:16 | call to Println | stmts.go:133:9:133:9 | skip |
|
||||
| stmts.go:125:3:125:16 | call to Println | stmts.go:137:1:137:1 | exit |
|
||||
| stmts.go:125:15:125:15 | y | stmts.go:125:3:125:16 | call to Println |
|
||||
| stmts.go:126:7:126:13 | case float32 | stmts.go:127:3:127:7 | test5 |
|
||||
| stmts.go:126:7:126:13 | case float32 | stmts.go:130:3:130:3 | skip |
|
||||
| stmts.go:127:3:127:7 | test5 | stmts.go:127:9:127:12 | true |
|
||||
| stmts.go:127:3:127:13 | call to test5 | stmts.go:137:1:137:1 | exit |
|
||||
| stmts.go:127:9:127:12 | true | stmts.go:127:3:127:13 | call to test5 |
|
||||
| stmts.go:128:3:128:7 | test5 | stmts.go:128:9:128:13 | false |
|
||||
| stmts.go:128:9:128:13 | false | stmts.go:128:3:128:14 | call to test5 |
|
||||
| stmts.go:130:3:130:3 | skip | stmts.go:130:7:130:7 | y |
|
||||
| stmts.go:130:7:130:7 | y | stmts.go:133:9:133:9 | skip |
|
||||
| stmts.go:133:9:133:9 | assignment to y | stmts.go:133:17:133:17 | y |
|
||||
| stmts.go:133:9:133:9 | skip | stmts.go:133:14:133:14 | x |
|
||||
| stmts.go:133:14:133:14 | x | stmts.go:133:9:133:9 | assignment to y |
|
||||
| stmts.go:133:17:133:17 | y | stmts.go:133:17:133:24 | type assertion |
|
||||
| stmts.go:133:17:133:24 | type assertion | stmts.go:135:3:135:7 | test5 |
|
||||
| stmts.go:135:3:135:7 | test5 | stmts.go:135:9:135:13 | false |
|
||||
| stmts.go:135:3:135:14 | call to test5 | stmts.go:137:1:137:1 | exit |
|
||||
| stmts.go:135:9:135:13 | false | stmts.go:135:3:135:14 | call to test5 |
|
||||
| stmts.go:140:1:140:1 | entry | stmts.go:140:13:140:13 | argument corresponding to f |
|
||||
| stmts.go:140:1:142:1 | function declaration | stmts.go:145:6:145:11 | skip |
|
||||
| stmts.go:140:6:140:11 | skip | stmts.go:140:1:142:1 | function declaration |
|
||||
| stmts.go:140:13:140:13 | argument corresponding to f | stmts.go:140:13:140:13 | initialization of f |
|
||||
| stmts.go:140:13:140:13 | initialization of f | stmts.go:141:5:141:5 | f |
|
||||
| stmts.go:141:2:141:7 | go statement | stmts.go:142:1:142:1 | exit |
|
||||
| stmts.go:141:5:141:5 | f | stmts.go:141:2:141:7 | go statement |
|
||||
| stmts.go:145:1:145:1 | entry | stmts.go:145:13:145:14 | argument corresponding to xs |
|
||||
| stmts.go:145:1:159:1 | function declaration | stmts.go:0:0:0:0 | exit |
|
||||
| stmts.go:145:6:145:11 | skip | stmts.go:145:1:159:1 | function declaration |
|
||||
| stmts.go:145:13:145:14 | argument corresponding to xs | stmts.go:145:13:145:14 | initialization of xs |
|
||||
| stmts.go:145:13:145:14 | initialization of xs | stmts.go:146:17:146:18 | xs |
|
||||
| stmts.go:146:2:151:2 | range statement[0] | stmts.go:146:6:146:6 | assignment to x |
|
||||
| stmts.go:146:6:146:6 | assignment to x | stmts.go:147:6:147:6 | x |
|
||||
| stmts.go:146:6:146:6 | skip | stmts.go:146:2:151:2 | range statement[0] |
|
||||
| stmts.go:146:17:146:18 | next key-value pair in range | stmts.go:146:6:146:6 | skip |
|
||||
| stmts.go:146:17:146:18 | next key-value pair in range | stmts.go:153:20:153:21 | xs |
|
||||
| stmts.go:146:17:146:18 | xs | stmts.go:146:17:146:18 | next key-value pair in range |
|
||||
| stmts.go:147:6:147:6 | x | stmts.go:147:10:147:10 | 5 |
|
||||
| stmts.go:147:6:147:10 | ...>... | stmts.go:147:10:147:10 | ...>... is false |
|
||||
| stmts.go:147:6:147:10 | ...>... | stmts.go:147:10:147:10 | ...>... is true |
|
||||
| stmts.go:147:10:147:10 | 5 | stmts.go:147:6:147:10 | ...>... |
|
||||
| stmts.go:147:10:147:10 | ...>... is false | stmts.go:150:3:150:11 | selection of Print |
|
||||
| stmts.go:147:10:147:10 | ...>... is true | stmts.go:148:4:148:11 | skip |
|
||||
| stmts.go:148:4:148:11 | skip | stmts.go:146:17:146:18 | next key-value pair in range |
|
||||
| stmts.go:150:3:150:11 | selection of Print | stmts.go:150:13:150:13 | x |
|
||||
| stmts.go:150:3:150:14 | call to Print | stmts.go:146:17:146:18 | next key-value pair in range |
|
||||
| stmts.go:150:3:150:14 | call to Print | stmts.go:159:1:159:1 | exit |
|
||||
| stmts.go:150:13:150:13 | x | stmts.go:150:3:150:14 | call to Print |
|
||||
| stmts.go:153:2:155:2 | range statement[0] | stmts.go:153:2:155:2 | range statement[1] |
|
||||
| stmts.go:153:2:155:2 | range statement[1] | stmts.go:153:6:153:6 | assignment to i |
|
||||
| stmts.go:153:6:153:6 | assignment to i | stmts.go:153:9:153:9 | assignment to v |
|
||||
| stmts.go:153:6:153:6 | skip | stmts.go:153:9:153:9 | skip |
|
||||
| stmts.go:153:9:153:9 | assignment to v | stmts.go:154:3:154:11 | selection of Print |
|
||||
| stmts.go:153:9:153:9 | skip | stmts.go:153:2:155:2 | range statement[0] |
|
||||
| stmts.go:153:20:153:21 | next key-value pair in range | stmts.go:153:6:153:6 | skip |
|
||||
| stmts.go:153:20:153:21 | next key-value pair in range | stmts.go:157:12:157:13 | xs |
|
||||
| stmts.go:153:20:153:21 | xs | stmts.go:153:20:153:21 | next key-value pair in range |
|
||||
| stmts.go:154:3:154:11 | selection of Print | stmts.go:154:13:154:13 | i |
|
||||
| stmts.go:154:3:154:17 | call to Print | stmts.go:153:20:153:21 | next key-value pair in range |
|
||||
| stmts.go:154:3:154:17 | call to Print | stmts.go:159:1:159:1 | exit |
|
||||
| stmts.go:154:13:154:13 | i | stmts.go:154:16:154:16 | v |
|
||||
| stmts.go:154:16:154:16 | v | stmts.go:154:3:154:17 | call to Print |
|
||||
| stmts.go:157:12:157:13 | next key-value pair in range | stmts.go:157:15:158:2 | skip |
|
||||
| stmts.go:157:12:157:13 | next key-value pair in range | stmts.go:159:1:159:1 | exit |
|
||||
| stmts.go:157:12:157:13 | xs | stmts.go:157:12:157:13 | next key-value pair in range |
|
||||
| stmts.go:157:15:158:2 | skip | stmts.go:157:12:157:13 | next key-value pair in range |
|
||||
| tst.go:0:0:0:0 | entry | tst.go:3:6:3:10 | skip |
|
||||
| tst.go:3:1:3:1 | entry | tst.go:3:12:3:12 | argument corresponding to x |
|
||||
| tst.go:3:1:12:1 | function declaration | tst.go:14:6:14:11 | skip |
|
||||
|
||||
@@ -116,6 +116,18 @@ func test9(x interface{}) {
|
||||
case float32:
|
||||
test5(true)
|
||||
test5(false)
|
||||
default:
|
||||
_ = y
|
||||
}
|
||||
|
||||
switch y := x; y.(type) {
|
||||
case error, string:
|
||||
fmt.Println(y)
|
||||
case float32:
|
||||
test5(true)
|
||||
test5(false)
|
||||
default:
|
||||
_ = y
|
||||
}
|
||||
|
||||
switch y := x; y.(type) {
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
import go
|
||||
import TestUtilities.InlineFlowTest
|
||||
import DefaultFlowTest
|
||||
102
go/ql/test/library-tests/semmle/go/dataflow/Switch/switch.go
Normal file
102
go/ql/test/library-tests/semmle/go/dataflow/Switch/switch.go
Normal file
@@ -0,0 +1,102 @@
|
||||
package main
|
||||
|
||||
type Type1 struct {
|
||||
field1 string
|
||||
}
|
||||
type Type2 struct {
|
||||
field2 string
|
||||
}
|
||||
type Type3 struct {
|
||||
field3 string
|
||||
}
|
||||
|
||||
func source() string {
|
||||
return "source"
|
||||
}
|
||||
|
||||
func sink(s string) {
|
||||
}
|
||||
|
||||
func typeSwitch1(input any, defaultValue string) string {
|
||||
switch x := input.(type) {
|
||||
case *Type1:
|
||||
return x.field1
|
||||
case *Type2, *Type3:
|
||||
if x3, ok := x.(*Type2); ok {
|
||||
return x3.field2
|
||||
}
|
||||
if x4, ok := x.(*Type3); ok {
|
||||
return x4.field3
|
||||
}
|
||||
return ""
|
||||
default:
|
||||
_ = x
|
||||
return defaultValue
|
||||
}
|
||||
}
|
||||
|
||||
func typeSwitch2(input any, defaultValue string) string {
|
||||
switch input.(type) {
|
||||
case *Type1:
|
||||
return input.(*Type1).field1
|
||||
case *Type2, *Type3:
|
||||
if x3, ok := input.(*Type2); ok {
|
||||
return x3.field2
|
||||
}
|
||||
if x4, ok := input.(*Type3); ok {
|
||||
return x4.field3
|
||||
}
|
||||
return ""
|
||||
default:
|
||||
_ = input
|
||||
return defaultValue
|
||||
}
|
||||
}
|
||||
|
||||
func expressionSwitch1(input string, defaultValue string) string {
|
||||
switch input {
|
||||
case "0":
|
||||
return "0"
|
||||
case "1", "2":
|
||||
return "1 or 2"
|
||||
case "3":
|
||||
fallthrough
|
||||
default:
|
||||
return defaultValue
|
||||
}
|
||||
}
|
||||
|
||||
func expressionSwitch2(input string, defaultValue string) string {
|
||||
switch def := defaultValue; input {
|
||||
case "0":
|
||||
return "0"
|
||||
case "1", "2":
|
||||
return "1 or 2"
|
||||
case "3":
|
||||
fallthrough
|
||||
default:
|
||||
return def
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
sink(typeSwitch1(&Type1{source()}, "default")) // $ hasValueFlow="call to typeSwitch1"
|
||||
sink(typeSwitch1(&Type2{source()}, "default")) // $ hasValueFlow="call to typeSwitch1"
|
||||
sink(typeSwitch1(&Type3{source()}, "default")) // $ hasValueFlow="call to typeSwitch1"
|
||||
sink(typeSwitch1(nil, source())) // $ hasValueFlow="call to typeSwitch1"
|
||||
|
||||
sink(typeSwitch2(&Type1{source()}, "default")) // $ hasValueFlow="call to typeSwitch2"
|
||||
sink(typeSwitch2(&Type2{source()}, "default")) // $ hasValueFlow="call to typeSwitch2"
|
||||
sink(typeSwitch2(&Type3{source()}, "default")) // $ hasValueFlow="call to typeSwitch2"
|
||||
sink(typeSwitch2(nil, source())) // $ hasValueFlow="call to typeSwitch2"
|
||||
|
||||
sink(expressionSwitch1("1", source())) // $ SPURIOUS: hasValueFlow="call to expressionSwitch1"
|
||||
sink(expressionSwitch1("2", source())) // $ SPURIOUS: hasValueFlow="call to expressionSwitch1"
|
||||
sink(expressionSwitch1("3", source())) // $ hasValueFlow="call to expressionSwitch1"
|
||||
sink(expressionSwitch1("4", source())) // $ hasValueFlow="call to expressionSwitch1"
|
||||
|
||||
sink(expressionSwitch2("1", source())) // $ SPURIOUS: hasValueFlow="call to expressionSwitch2"
|
||||
sink(expressionSwitch2("2", source())) // $ SPURIOUS: hasValueFlow="call to expressionSwitch2"
|
||||
sink(expressionSwitch2("3", source())) // $ hasValueFlow="call to expressionSwitch2"
|
||||
sink(expressionSwitch2("4", source())) // $ hasValueFlow="call to expressionSwitch2"
|
||||
}
|
||||
@@ -1,20 +1,20 @@
|
||||
edges
|
||||
| TaintedPath.go:13:18:13:22 | selection of URL | TaintedPath.go:13:18:13:30 | call to Query | provenance | |
|
||||
| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:16:29:16:40 | tainted_path | provenance | |
|
||||
| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:20:57:20:68 | tainted_path | provenance | |
|
||||
| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:67:39:67:56 | ...+... | provenance | |
|
||||
| TaintedPath.go:20:57:20:68 | tainted_path | TaintedPath.go:20:28:20:69 | call to Join | provenance | |
|
||||
| TaintedPath.go:67:39:67:56 | ...+... | TaintedPath.go:67:28:67:57 | call to Clean | provenance | |
|
||||
| TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:14:18:14:30 | call to Query | provenance | |
|
||||
| TaintedPath.go:14:18:14:30 | call to Query | TaintedPath.go:17:29:17:40 | tainted_path | provenance | |
|
||||
| TaintedPath.go:14:18:14:30 | call to Query | TaintedPath.go:21:57:21:68 | tainted_path | provenance | |
|
||||
| TaintedPath.go:14:18:14:30 | call to Query | TaintedPath.go:68:39:68:56 | ...+... | provenance | |
|
||||
| TaintedPath.go:21:57:21:68 | tainted_path | TaintedPath.go:21:28:21:69 | call to Join | provenance | |
|
||||
| TaintedPath.go:68:39:68:56 | ...+... | TaintedPath.go:68:28:68:57 | call to Clean | provenance | |
|
||||
nodes
|
||||
| TaintedPath.go:13:18:13:22 | selection of URL | semmle.label | selection of URL |
|
||||
| TaintedPath.go:13:18:13:30 | call to Query | semmle.label | call to Query |
|
||||
| TaintedPath.go:16:29:16:40 | tainted_path | semmle.label | tainted_path |
|
||||
| TaintedPath.go:20:28:20:69 | call to Join | semmle.label | call to Join |
|
||||
| TaintedPath.go:20:57:20:68 | tainted_path | semmle.label | tainted_path |
|
||||
| TaintedPath.go:67:28:67:57 | call to Clean | semmle.label | call to Clean |
|
||||
| TaintedPath.go:67:39:67:56 | ...+... | semmle.label | ...+... |
|
||||
| TaintedPath.go:14:18:14:22 | selection of URL | semmle.label | selection of URL |
|
||||
| TaintedPath.go:14:18:14:30 | call to Query | semmle.label | call to Query |
|
||||
| TaintedPath.go:17:29:17:40 | tainted_path | semmle.label | tainted_path |
|
||||
| TaintedPath.go:21:28:21:69 | call to Join | semmle.label | call to Join |
|
||||
| TaintedPath.go:21:57:21:68 | tainted_path | semmle.label | tainted_path |
|
||||
| TaintedPath.go:68:28:68:57 | call to Clean | semmle.label | call to Clean |
|
||||
| TaintedPath.go:68:39:68:56 | ...+... | semmle.label | ...+... |
|
||||
subpaths
|
||||
#select
|
||||
| TaintedPath.go:16:29:16:40 | tainted_path | TaintedPath.go:13:18:13:22 | selection of URL | TaintedPath.go:16:29:16:40 | tainted_path | This path depends on a $@. | TaintedPath.go:13:18:13:22 | selection of URL | user-provided value |
|
||||
| TaintedPath.go:20:28:20:69 | call to Join | TaintedPath.go:13:18:13:22 | selection of URL | TaintedPath.go:20:28:20:69 | call to Join | This path depends on a $@. | TaintedPath.go:13:18:13:22 | selection of URL | user-provided value |
|
||||
| TaintedPath.go:67:28:67:57 | call to Clean | TaintedPath.go:13:18:13:22 | selection of URL | TaintedPath.go:67:28:67:57 | call to Clean | This path depends on a $@. | TaintedPath.go:13:18:13:22 | selection of URL | user-provided value |
|
||||
| TaintedPath.go:17:29:17:40 | tainted_path | TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:17:29:17:40 | tainted_path | This path depends on a $@. | TaintedPath.go:14:18:14:22 | selection of URL | user-provided value |
|
||||
| TaintedPath.go:21:28:21:69 | call to Join | TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:21:28:21:69 | call to Join | This path depends on a $@. | TaintedPath.go:14:18:14:22 | selection of URL | user-provided value |
|
||||
| TaintedPath.go:68:28:68:57 | call to Clean | TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:68:28:68:57 | call to Clean | This path depends on a $@. | TaintedPath.go:14:18:14:22 | selection of URL | user-provided value |
|
||||
|
||||
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"path"
|
||||
"path/filepath"
|
||||
@@ -76,4 +77,20 @@ func handler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
data, _ = ioutil.ReadFile(files[0].Filename)
|
||||
w.Write(data)
|
||||
|
||||
// GOOD: Part.FileName sanitized by filepath.Base
|
||||
r.ParseMultipartForm(32 << 20)
|
||||
file, _, err := r.FormFile("uploadfile")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
reader := multipart.NewReader(file, "foo")
|
||||
|
||||
// Read the first part
|
||||
part, err := reader.NextPart()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
data, _ = ioutil.ReadFile(part.FileName())
|
||||
}
|
||||
|
||||
@@ -75,39 +75,63 @@ jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,
|
||||
jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,
|
||||
jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55
|
||||
jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,
|
||||
java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3
|
||||
java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
|
||||
java.io,51,1,47,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,1,,45,2
|
||||
java.lang,38,3,102,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,,3,,,59,43
|
||||
java.net,23,3,31,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,3,31,
|
||||
java.nio,44,,38,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,,38,
|
||||
java.security,21,,7,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,4
|
||||
java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,,1,,,,2,
|
||||
java.util,47,2,529,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,,2,,,49,480
|
||||
java.applet,,,14,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,14,
|
||||
java.awt,1,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,2,3
|
||||
java.beans,,,193,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,193,
|
||||
java.io,51,1,256,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,1,,249,7
|
||||
java.lang,38,3,759,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,,3,,,681,78
|
||||
java.math,,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9
|
||||
java.net,23,3,278,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,3,274,4
|
||||
java.nio,44,,361,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,,259,102
|
||||
java.rmi,,,71,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,71,
|
||||
java.security,21,,543,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,539,4
|
||||
java.sql,15,1,303,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,,1,,,,303,
|
||||
java.text,,,134,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,134,
|
||||
java.time,,,476,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,388,88
|
||||
java.util,47,2,1218,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,,2,,,704,514
|
||||
javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,
|
||||
javax.accessibility,,,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,31,
|
||||
javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,7,
|
||||
javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,
|
||||
javax.annotation.processing,,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,
|
||||
javax.crypto,19,,128,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,128,
|
||||
javax.faces.context,2,7,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,
|
||||
javax.imageio.stream,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,1,
|
||||
javax.imageio,1,,261,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,261,
|
||||
javax.jms,,9,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,57,
|
||||
javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23
|
||||
javax.management,2,,1,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
|
||||
javax.naming,7,,1,,,,,,,,,,,,,,,,,6,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
|
||||
javax.net.ssl,4,,,,,,2,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
javax.lang.model.element,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,
|
||||
javax.lang.model.type,,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,
|
||||
javax.lang.model.util,,,68,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,68,
|
||||
javax.management,2,,799,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,798,1
|
||||
javax.naming,7,,324,,,,,,,,,,,,,,,,,6,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,318,6
|
||||
javax.net,4,,86,,,,2,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,86,
|
||||
javax.portlet,1,,61,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,61,
|
||||
javax.print.attribute.standard,2,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
javax.script,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
javax.security.auth.callback,1,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
javax.security.auth.kerberos,6,,,,,4,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
javax.print,2,,100,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,
|
||||
javax.rmi.ssl,,,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,
|
||||
javax.script,1,,42,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,42,
|
||||
javax.security.auth,7,,137,,,4,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,137,
|
||||
javax.security.cert,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,
|
||||
javax.security.sasl,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,
|
||||
javax.servlet,9,22,3,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,3,,,2,2,,,,,,,,,22,3,
|
||||
javax.sql,7,,,,,,4,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
javax.smartcardio,,,30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,30,
|
||||
javax.sound.midi,,,29,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,29,
|
||||
javax.sound.sampled,,,66,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,66,
|
||||
javax.sql,7,,63,,,,4,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,63,
|
||||
javax.tools,,,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,31,
|
||||
javax.transaction.xa,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
|
||||
javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,
|
||||
javax.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,
|
||||
javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,
|
||||
javax.ws.rs.core,3,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,2,,,,,,,,,94,55
|
||||
javax.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,
|
||||
javax.xml.transform,2,,6,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,1,,,,,,,6,
|
||||
javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,
|
||||
javax.xml.catalog,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,1
|
||||
javax.xml.crypto,,,126,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,126,
|
||||
javax.xml.datatype,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,
|
||||
javax.xml.namespace,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,
|
||||
javax.xml.parsers,,,18,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18,
|
||||
javax.xml.stream,,,36,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,
|
||||
javax.xml.transform,2,,89,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,1,,,,,,,89,
|
||||
javax.xml.validation,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,
|
||||
javax.xml.xpath,3,,12,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,12,
|
||||
jenkins,,,523,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,500,23
|
||||
jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10
|
||||
kotlin,16,,1849,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,2,,,,,,,,,,,,,,,1836,13
|
||||
@@ -225,7 +249,8 @@ org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
org.springframework.web.servlet,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,
|
||||
org.springframework.web.util,,9,157,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,132,25
|
||||
org.thymeleaf,2,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,2,
|
||||
org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
|
||||
org.w3c.dom,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,1
|
||||
org.xml.sax,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,
|
||||
org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,
|
||||
org.yaml.snakeyaml,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
|
||||
play.libs.ws,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,
|
||||
@@ -240,17 +265,21 @@ ratpack.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4,
|
||||
ratpack.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10,
|
||||
ratpack.util,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35
|
||||
retrofit2,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1,
|
||||
sun.awt,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,
|
||||
sun.jvmstat.perfdata.monitor.protocol.local,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.jvmstat.perfdata.monitor.protocol.rmi,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.management.spi,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
|
||||
sun.misc,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.net.ftp,5,,,,,,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.net.www.protocol.http,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.nio.ch,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,
|
||||
sun.security.acl,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.security.jgss.krb5,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.security.krb5,9,,,,,3,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.security.krb5,9,,7,,,3,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,
|
||||
sun.security.pkcs,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.security.pkcs11,3,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.security.provider,2,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.security.ssl,3,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.security.x509,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.tools.jconsole,28,,,,,,13,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
sun.util.logging.internal,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,
|
||||
|
||||
|
@@ -18,10 +18,10 @@ Java framework & library support
|
||||
`Google Guava <https://guava.dev/>`_,``com.google.common.*``,,730,43,9,,,,,
|
||||
JBoss Logging,``org.jboss.logging``,,,324,,,,,,
|
||||
`JSON-java <https://github.com/stleary/JSON-java>`_,``org.json``,,236,,,,,,,
|
||||
Java Standard Library,``java.*``,10,760,240,80,,9,,,26
|
||||
Java extensions,"``javax.*``, ``jakarta.*``",69,688,85,5,4,2,1,1,4
|
||||
Java Standard Library,``java.*``,10,4620,240,80,,9,,,26
|
||||
Java extensions,"``javax.*``, ``jakarta.*``",69,3257,85,5,4,2,1,1,4
|
||||
Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2
|
||||
`Spring <https://spring.io/>`_,``org.springframework.*``,38,481,122,5,,28,14,,35
|
||||
Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,125,6,22,18,,208
|
||||
Totals,,310,18976,2569,338,16,128,33,1,409
|
||||
Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.w3c.dom``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.awt``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.management.spi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.nio.ch``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``, ``sun.util.logging.internal``",131,10596,893,125,6,22,18,,208
|
||||
Totals,,310,25483,2569,338,16,128,33,1,409
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ def version_string_to_version(version):
|
||||
# Version number used by CI.
|
||||
ci_version = '1.9.0'
|
||||
|
||||
many_versions = [ '1.5.0', '1.5.10', '1.5.20', '1.5.30', '1.6.0', '1.6.20', '1.7.0', '1.7.20', '1.8.0', '1.9.0-Beta', '1.9.20-Beta', '2.0.0-Beta4', '2.0.255-SNAPSHOT' ]
|
||||
many_versions = [ '1.5.0', '1.5.10', '1.5.20', '1.5.30', '1.6.0', '1.6.20', '1.7.0', '1.7.20', '1.8.0', '1.9.0-Beta', '1.9.20-Beta', '2.0.0-RC1' ]
|
||||
|
||||
many_versions_versions = [version_string_to_version(v) for v in many_versions]
|
||||
many_versions_versions_asc = sorted(many_versions_versions, key = lambda v: v.toTupleWithTag())
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.github.codeql.comments
|
||||
|
||||
import com.github.codeql.*
|
||||
import com.github.codeql.utils.versions.*
|
||||
import com.intellij.lang.LighterASTNode
|
||||
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
||||
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
|
||||
@@ -26,7 +27,7 @@ class CommentExtractorLighterAST(
|
||||
// Returns true if it extracted the comments; false otherwise.
|
||||
fun extract(): Boolean {
|
||||
val sourceElement =
|
||||
(file.metadata as? FirMetadataSource.File)?.files?.elementAtOrNull(0)?.source
|
||||
(file.metadata as? FirMetadataSource.File)?.firFile?.source
|
||||
val treeStructure = sourceElement?.treeStructure
|
||||
if (treeStructure == null) {
|
||||
return false
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
|
||||
val FirMetadataSource.File.firFile: FirFile?
|
||||
get() = this.files.elementAtOrNull(0)
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.github.codeql
|
||||
|
||||
import com.github.codeql.utils.versions.*
|
||||
import com.intellij.lang.LighterASTNode
|
||||
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
@@ -14,7 +15,7 @@ class LinesOfCodeLighterAST(val logger: FileLogger, val tw: FileTrapWriter, val
|
||||
|
||||
fun linesOfCodeInFile(id: Label<DbFile>): Boolean {
|
||||
val sourceElement =
|
||||
(file.metadata as? FirMetadataSource.File)?.files?.elementAtOrNull(0)?.source
|
||||
(file.metadata as? FirMetadataSource.File)?.firFile?.source
|
||||
if (sourceElement == null) {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
|
||||
val FirMetadataSource.File.firFile: FirFile?
|
||||
get() = this.fir
|
||||
@@ -0,0 +1 @@
|
||||
// Nothing to do
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"markdownMessage": "The Kotlin version installed (`999.999.999`) is too recent for this version of CodeQL. Install a version lower than 1.9.30.",
|
||||
"markdownMessage": "The Kotlin version installed (`999.999.999`) is too recent for this version of CodeQL. Install a version lower than 2.0.10.",
|
||||
"severity": "error",
|
||||
"source": {
|
||||
"extractorName": "java",
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
| 12 | ControlFlowNode for implementer | class implementer | ../../../query-tests/Security/lib/zope/interface/__init__.py:5 |
|
||||
| 13 | ControlFlowNode for IThing | class IThing | test.py:4 |
|
||||
| 14 | ControlFlowNode for Thing | class Thing | test.py:9 |
|
||||
@@ -1,10 +0,0 @@
|
||||
import python
|
||||
import semmle.python.TestUtils
|
||||
|
||||
from ControlFlowNode f, Value v, ControlFlowNode x
|
||||
where
|
||||
exists(ExprStmt s | s.getValue().getAFlowNode() = f) and
|
||||
f.pointsTo(v, x) and
|
||||
f.getLocation().getFile().getBaseName() = "test.py"
|
||||
select f.getLocation().getStartLine(), f.toString(), v.toString(),
|
||||
remove_library_prefix(x.getLocation())
|
||||
@@ -1 +0,0 @@
|
||||
semmle-extractor-options: --max-import-depth=3 -p ../../../query-tests/Security/lib/
|
||||
@@ -1,14 +0,0 @@
|
||||
|
||||
from zope.interface import Interface, implementer
|
||||
|
||||
class IThing(Interface):
|
||||
pass
|
||||
|
||||
|
||||
@implementer(IThing)
|
||||
class Thing(object):
|
||||
pass
|
||||
|
||||
implementer
|
||||
IThing
|
||||
Thing
|
||||
@@ -1,3 +0,0 @@
|
||||
|
||||
def new(*args):
|
||||
pass
|
||||
@@ -1,3 +0,0 @@
|
||||
|
||||
def new(*args):
|
||||
pass
|
||||
@@ -1 +0,0 @@
|
||||
__all__ = ['AES', 'ARC4']
|
||||
@@ -1,2 +0,0 @@
|
||||
def generate(bits):
|
||||
pass
|
||||
@@ -1,2 +0,0 @@
|
||||
def generate(bits):
|
||||
pass
|
||||
@@ -1,3 +0,0 @@
|
||||
class Template:
|
||||
def __init__(self, content, filename="<string>"):
|
||||
pass
|
||||
@@ -1,2 +0,0 @@
|
||||
def decodestring(s):
|
||||
return None
|
||||
@@ -1,69 +0,0 @@
|
||||
|
||||
class Bottle(object):
|
||||
|
||||
def route(self, path=None, method='GET', **options):
|
||||
pass
|
||||
|
||||
def get(self, path=None, method='GET', **options):
|
||||
""" Equals :meth:`route`. """
|
||||
return self.route(path, method, **options)
|
||||
|
||||
def post(self, path=None, method='POST', **options):
|
||||
""" Equals :meth:`route` with a ``POST`` method parameter. """
|
||||
return self.route(path, method, **options)
|
||||
|
||||
def put(self, path=None, method='PUT', **options):
|
||||
""" Equals :meth:`route` with a ``PUT`` method parameter. """
|
||||
return self.route(path, method, **options)
|
||||
|
||||
def delete(self, path=None, method='DELETE', **options):
|
||||
""" Equals :meth:`route` with a ``DELETE`` method parameter. """
|
||||
return self.route(path, method, **options)
|
||||
|
||||
def error(self, code=500):
|
||||
""" Decorator: Register an output handler for a HTTP error code"""
|
||||
def wrapper(handler):
|
||||
self.error_handler[int(code)] = handler
|
||||
return handler
|
||||
return wrapper
|
||||
|
||||
#Use same wrapper logic as the original `bottle` code.
|
||||
|
||||
def make_default_app_wrapper(name):
|
||||
""" Return a callable that relays calls to the current default app. """
|
||||
|
||||
@functools.wraps(getattr(Bottle, name))
|
||||
def wrapper(*a, **ka):
|
||||
return getattr(app(), name)(*a, **ka)
|
||||
|
||||
return wrapper
|
||||
|
||||
route = make_default_app_wrapper('route')
|
||||
get = make_default_app_wrapper('get')
|
||||
post = make_default_app_wrapper('post')
|
||||
put = make_default_app_wrapper('put')
|
||||
delete = make_default_app_wrapper('delete')
|
||||
patch = make_default_app_wrapper('patch')
|
||||
error = make_default_app_wrapper('error')
|
||||
mount = make_default_app_wrapper('mount')
|
||||
hook = make_default_app_wrapper('hook')
|
||||
install = make_default_app_wrapper('install')
|
||||
uninstall = make_default_app_wrapper('uninstall')
|
||||
url = make_default_app_wrapper('get_url')
|
||||
|
||||
class LocalProxy(object):
|
||||
pass
|
||||
|
||||
class LocalRequest(LocalProxy):
|
||||
pass
|
||||
|
||||
class LocalResponse(LocalProxy):
|
||||
pass
|
||||
|
||||
|
||||
request = LocalRequest()
|
||||
response = LocalResponse()
|
||||
|
||||
|
||||
def redirect(url, code=None):
|
||||
pass
|
||||
@@ -1,2 +0,0 @@
|
||||
class Template(object):
|
||||
pass
|
||||
@@ -1,15 +0,0 @@
|
||||
|
||||
|
||||
from ._helper import expose, popargs, url
|
||||
|
||||
class _ThreadLocalProxy(object):
|
||||
def __getattr__(self, name):
|
||||
pass
|
||||
|
||||
|
||||
request = _ThreadLocalProxy('request')
|
||||
response = _ThreadLocalProxy('response')
|
||||
|
||||
def quickstart(root=None, script_name='', config=None):
|
||||
"""Mount the given root, start the builtin server (and engine), then block."""
|
||||
pass
|
||||
@@ -1,31 +0,0 @@
|
||||
def expose(func=None, alias=None):
|
||||
"""Expose the function or class.
|
||||
Optionally provide an alias or set of aliases.
|
||||
"""
|
||||
def expose_(func):
|
||||
func.exposed = True
|
||||
return func
|
||||
|
||||
return expose_
|
||||
|
||||
|
||||
def popargs(*args, **kwargs):
|
||||
"""Decorate _cp_dispatch."""
|
||||
|
||||
def decorated(cls_or_self=None, vpath=None):
|
||||
if inspect.isclass(cls_or_self):
|
||||
# cherrypy.popargs is a class decorator
|
||||
return cls
|
||||
|
||||
# We're in the actual function
|
||||
self = cls_or_self
|
||||
if vpath:
|
||||
return getattr(self, vpath.pop(0), None)
|
||||
else:
|
||||
return self
|
||||
|
||||
return decorated
|
||||
|
||||
def url(path='', qs='', script_name=None, base=None, relative=None):
|
||||
#Do some opaque stuff here...
|
||||
return new_url
|
||||
@@ -1,6 +0,0 @@
|
||||
|
||||
|
||||
def render(template='', data={}, partials_path='.', partials_ext='mustache',
|
||||
partials_dict={}, padding='', def_ldel='{{', def_rdel='}}',
|
||||
scopes=None):
|
||||
pass
|
||||
@@ -1,4 +0,0 @@
|
||||
|
||||
def generate_private_key(key_size, backend):
|
||||
pass
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
|
||||
def generate_private_key(curve, backend):
|
||||
pass
|
||||
|
||||
class SECT571R1(object):
|
||||
name = "sect571r1"
|
||||
key_size = 570
|
||||
|
||||
|
||||
class SECP384R1(object):
|
||||
name = "secp384r1"
|
||||
key_size = 384
|
||||
|
||||
|
||||
class SECP224R1(object):
|
||||
name = "secp224r1"
|
||||
key_size = 224
|
||||
|
||||
|
||||
class SECT163K1(object):
|
||||
name = "sect163k1"
|
||||
key_size = 163
|
||||
@@ -1,3 +0,0 @@
|
||||
|
||||
def generate_private_key(public_exponent, key_size, backend):
|
||||
pass
|
||||
@@ -1,3 +0,0 @@
|
||||
|
||||
class Cipher(object):
|
||||
pass
|
||||
@@ -1,3 +0,0 @@
|
||||
|
||||
class ARC4(object):
|
||||
name = "RC4"
|
||||
@@ -1,2 +0,0 @@
|
||||
def loads(*args, **kwargs):
|
||||
return None
|
||||
@@ -1,7 +0,0 @@
|
||||
# https://docs.djangoproject.com/en/1.11/_modules/django/conf/urls/#url
|
||||
def url(regex, view, kwargs=None, name=None):
|
||||
pass
|
||||
|
||||
|
||||
def patterns(*urls):
|
||||
pass
|
||||
@@ -1 +0,0 @@
|
||||
connection = object()
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user