Merge pull request #21290 from aschackmull/cfg/new-shared

Java/Cfg: Introduce new shared CFG library and replace the Java CFG.
This commit is contained in:
Anders Schack-Mulligen
2026-03-02 13:56:59 +01:00
committed by GitHub
143 changed files with 4586 additions and 3881 deletions

View File

@@ -0,0 +1,2 @@
import java
import ControlFlow::Consistency

View File

@@ -0,0 +1,16 @@
---
category: breaking
---
* The Java control flow graph (CFG) implementation has been completely
rewritten. The CFG now includes additional nodes to more accurately represent
certain constructs. This also means that any existing code that implicitly
relies on very specific details about the CFG may need to be updated.
The CFG now only includes the nodes that are reachable from the entry point.
Additionally, the following breaking changes have been made:
- `ControlFlowNode.asCall` has been removed - use `Call.getControlFlowNode` instead.
- `ControlFlowNode.getEnclosingStmt` has been removed.
- `ControlFlow::ExprNode` has been removed.
- `ControlFlow::StmtNode` has been removed.
- `ControlFlow::Node` has been removed - this was merely an alias of
`ControlFlowNode`, which is still available.
- Previously deprecated predicates on `BasicBlock` have been removed.

View File

@@ -21,7 +21,7 @@ external int selectedSourceColumn();
private predicate selectedSourceColumnAlias = selectedSourceColumn/0;
module ViewCfgQueryInput implements ViewCfgQueryInputSig<File> {
module ViewCfgQueryInput implements ControlFlow::ViewCfgQueryInputSig<File> {
predicate selectedSourceFile = selectedSourceFileAlias/0;
predicate selectedSourceLine = selectedSourceLineAlias/0;
@@ -42,4 +42,4 @@ module ViewCfgQueryInput implements ViewCfgQueryInputSig<File> {
}
}
import ViewCfgQuery<File, ViewCfgQueryInput>
import ControlFlow::ViewCfgQuery<File, ViewCfgQueryInput>

View File

@@ -1,96 +0,0 @@
/**
* Provides classes and predicates for representing completions.
*/
overlay[local?]
module;
/*
* A completion represents how a statement or expression terminates.
*
* There are five kinds of completions: normal completion,
* `return` completion, `break` completion,
* `continue` completion, and `throw` completion.
*
* Normal completions are further subdivided into boolean completions and all
* other normal completions. A boolean completion adds the information that the
* cfg node terminated with the given boolean value due to a subexpression
* terminating with the other given boolean value. This is only
* relevant for conditional contexts in which the value controls the
* control-flow successor.
*/
import java
/**
* A label of a `LabeledStmt`.
*/
newtype Label = MkLabel(string l) { exists(LabeledStmt lbl | l = lbl.getLabel()) }
/**
* Either a `Label` or nothing.
*/
newtype MaybeLabel =
JustLabel(Label l) or
NoLabel()
/**
* A completion of a statement or an expression.
*/
newtype Completion =
/**
* The statement or expression completes normally and continues to the next statement.
*/
NormalCompletion() or
/**
* The statement or expression completes by returning from the function.
*/
ReturnCompletion() or
/**
* The expression completes with value `outerValue` overall and with the last control
* flow node having value `innerValue`.
*/
BooleanCompletion(boolean outerValue, boolean innerValue) {
(outerValue = true or outerValue = false) and
(innerValue = true or innerValue = false)
} or
/**
* The expression or statement completes via a `break` statement.
*/
BreakCompletion(MaybeLabel l) or
/**
* The expression or statement completes via a `yield` statement.
*/
YieldCompletion(NormalOrBooleanCompletion c) or
/**
* The expression or statement completes via a `continue` statement.
*/
ContinueCompletion(MaybeLabel l) or
/**
* The expression or statement completes by throwing a `ThrowableType`.
*/
ThrowCompletion(ThrowableType tt)
/** A completion that is either a `NormalCompletion` or a `BooleanCompletion`. */
class NormalOrBooleanCompletion extends Completion {
NormalOrBooleanCompletion() {
this instanceof NormalCompletion or this instanceof BooleanCompletion
}
/** Gets a textual representation of this completion. */
string toString() { result = "completion" }
}
/** Gets the completion `ContinueCompletion(NoLabel())`. */
ContinueCompletion anonymousContinueCompletion() { result = ContinueCompletion(NoLabel()) }
/** Gets the completion `ContinueCompletion(JustLabel(l))`. */
ContinueCompletion labelledContinueCompletion(Label l) { result = ContinueCompletion(JustLabel(l)) }
/** Gets the completion `BreakCompletion(NoLabel())`. */
BreakCompletion anonymousBreakCompletion() { result = BreakCompletion(NoLabel()) }
/** Gets the completion `BreakCompletion(JustLabel(l))`. */
BreakCompletion labelledBreakCompletion(Label l) { result = BreakCompletion(JustLabel(l)) }
/** Gets the completion `BooleanCompletion(value, value)`. */
Completion basicBooleanCompletion(boolean value) { result = BooleanCompletion(value, value) }

File diff suppressed because it is too large Load Diff

View File

@@ -1245,6 +1245,9 @@ class ClassInstanceExpr extends Expr, ConstructorCall, @classinstancexpr {
/** Gets the immediately enclosing statement of this class instance creation expression. */
override Stmt getEnclosingStmt() { result = Expr.super.getEnclosingStmt() }
/** Gets the `ControlFlowNode` corresponding to this call. */
override ControlFlowNode getControlFlowNode() { result = Expr.super.getControlFlowNode() }
/** Gets a printable representation of this expression. */
override string toString() {
result = "new " + this.getConstructor().getName() + "(...)"
@@ -2113,6 +2116,9 @@ class MethodCall extends Expr, Call, @methodaccess {
/** Gets the immediately enclosing statement that contains this method access. */
override Stmt getEnclosingStmt() { result = Expr.super.getEnclosingStmt() }
/** Gets the `ControlFlowNode` corresponding to this call. */
override ControlFlowNode getControlFlowNode() { result = Expr.super.getControlFlowNode() }
/** Gets a printable representation of this expression. */
override string toString() {
if exists(this.getMethod())
@@ -2305,6 +2311,9 @@ class Call extends ExprParent, @caller {
/** Gets the enclosing statement of this call. */
/*abstract*/ Stmt getEnclosingStmt() { none() }
/** Gets the `ControlFlowNode` corresponding to this call. */
/*abstract*/ ControlFlowNode getControlFlowNode() { none() }
/** Gets the number of arguments provided in this call. */
int getNumArgument() { count(this.getAnArgument()) = result }

View File

@@ -61,7 +61,7 @@ class Stmt extends StmtParent, ExprParent, @stmt {
}
/** A statement parent is any element that can have a statement as its child. */
class StmtParent extends @stmtparent, Top { }
class StmtParent extends @stmtparent, ExprParent { }
/**
* An error statement.
@@ -960,6 +960,9 @@ class ThisConstructorInvocationStmt extends Stmt, ConstructorCall, @constructori
/** Gets the immediately enclosing statement of this constructor invocation. */
override Stmt getEnclosingStmt() { result = this }
/** Gets the `ControlFlowNode` corresponding to this call. */
override ControlFlowNode getControlFlowNode() { result = Stmt.super.getControlFlowNode() }
override string pp() { result = "this(...)" }
override string toString() { result = "this(...)" }
@@ -1001,6 +1004,9 @@ class SuperConstructorInvocationStmt extends Stmt, ConstructorCall, @superconstr
/** Gets the immediately enclosing statement of this constructor invocation. */
override Stmt getEnclosingStmt() { result = this }
/** Gets the `ControlFlowNode` corresponding to this call. */
override ControlFlowNode getControlFlowNode() { result = Stmt.super.getControlFlowNode() }
override string pp() { result = "super(...)" }
override string toString() { result = "super(...)" }

View File

@@ -6,151 +6,8 @@ module;
import java
import Dominance
private import codeql.controlflow.BasicBlock as BB
private import codeql.controlflow.SuccessorType
private module Input implements BB::InputSig<Location> {
/** Hold if `t` represents a conditional successor type. */
predicate successorTypeIsCondition(SuccessorType t) { none() }
/** A delineated part of the AST with its own CFG. */
class CfgScope = Callable;
/** The class of control flow nodes. */
class Node = ControlFlowNode;
/** Gets the CFG scope in which this node occurs. */
CfgScope nodeGetCfgScope(Node node) { node.getEnclosingCallable() = result }
/** Gets an immediate successor of this node. */
Node nodeGetASuccessor(Node node, SuccessorType t) { result = node.getASuccessor(t) }
/**
* Holds if `node` represents an entry node to be used when calculating
* dominance.
*/
predicate nodeIsDominanceEntry(Node node) {
exists(Stmt entrystmt | entrystmt = node.asStmt() |
exists(Callable c | entrystmt = c.getBody())
or
// This disjunct is technically superfluous, but safeguards against extractor problems.
entrystmt instanceof BlockStmt and
not exists(entrystmt.getEnclosingCallable()) and
not entrystmt.getParent() instanceof Stmt
)
}
/**
* Holds if `node` represents an exit node to be used when calculating
* post dominance.
*/
predicate nodeIsPostDominanceExit(Node node) { node instanceof ControlFlow::NormalExitNode }
}
private module BbImpl = BB::Make<Location, Input>;
import BbImpl
/** Holds if the dominance relation is calculated for `bb`. */
predicate hasDominanceInformation(BasicBlock bb) {
exists(BasicBlock entry |
Input::nodeIsDominanceEntry(entry.getFirstNode()) and entry.getASuccessor*() = bb
)
}
/**
* A basic block, that is, a maximal straight-line sequence of control flow nodes
* without branches or joins.
*/
class BasicBlock extends BbImpl::BasicBlock {
/** Gets the immediately enclosing callable whose body contains this node. */
Callable getEnclosingCallable() { result = this.getScope() }
/**
* Holds if this basic block dominates basic block `bb`.
*
* That is, all paths reaching `bb` from the entry point basic block must
* go through this basic block.
*/
predicate dominates(BasicBlock bb) { super.dominates(bb) }
/**
* Holds if this basic block strictly dominates basic block `bb`.
*
* That is, all paths reaching `bb` from the entry point basic block must
* go through this basic block and this basic block is different from `bb`.
*/
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }
/** Gets an immediate successor of this basic block of a given type, if any. */
BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor(t) }
BasicBlock getASuccessor() { result = super.getASuccessor() }
BasicBlock getImmediateDominator() { result = super.getImmediateDominator() }
predicate inDominanceFrontier(BasicBlock df) { super.inDominanceFrontier(df) }
predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) }
predicate postDominates(BasicBlock bb) { super.postDominates(bb) }
/**
* DEPRECATED: Use `getASuccessor` instead.
*
* Gets an immediate successor of this basic block.
*/
deprecated BasicBlock getABBSuccessor() { result = this.getASuccessor() }
/**
* DEPRECATED: Use `getAPredecessor` instead.
*
* Gets an immediate predecessor of this basic block.
*/
deprecated BasicBlock getABBPredecessor() { result.getASuccessor() = this }
/**
* DEPRECATED: Use `strictlyDominates` instead.
*
* Holds if this basic block strictly dominates `node`.
*/
deprecated predicate bbStrictlyDominates(BasicBlock node) { this.strictlyDominates(node) }
/**
* DEPRECATED: Use `dominates` instead.
*
* Holds if this basic block dominates `node`. (This is reflexive.)
*/
deprecated predicate bbDominates(BasicBlock node) { this.dominates(node) }
/**
* DEPRECATED: Use `strictlyPostDominates` instead.
*
* Holds if this basic block strictly post-dominates `node`.
*/
deprecated predicate bbStrictlyPostDominates(BasicBlock node) { this.strictlyPostDominates(node) }
/**
* DEPRECATED: Use `postDominates` instead.
*
* Holds if this basic block post-dominates `node`. (This is reflexive.)
*/
deprecated predicate bbPostDominates(BasicBlock node) { this.postDominates(node) }
}
/** A basic block that ends in an exit node. */
class ExitBlock extends BasicBlock {
ExitBlock() { this.getLastNode() instanceof ControlFlow::ExitNode }
}
private class BasicBlockAlias = BasicBlock;
module Cfg implements BB::CfgSig<Location> {
class ControlFlowNode = BbImpl::ControlFlowNode;
class BasicBlock = BasicBlockAlias;
class EntryBasicBlock extends BasicBlock instanceof BbImpl::EntryBasicBlock { }
predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { BbImpl::dominatingEdge(bb1, bb2) }
}

View File

@@ -10,6 +10,7 @@ private import semmle.code.java.controlflow.Dominance
private import semmle.code.java.controlflow.internal.Preconditions
private import semmle.code.java.controlflow.internal.SwitchCases
private import codeql.controlflow.Guards as SharedGuards
private import codeql.controlflow.SuccessorType
/**
* A basic block that terminates in a condition, splitting the subsequent control flow.
@@ -75,70 +76,6 @@ class ConditionBlock extends BasicBlock {
}
}
// Join order engineering -- first determine the switch block and the case indices required, then retrieve them.
bindingset[switch, i]
pragma[inline_late]
private predicate isNthCaseOf(SwitchBlock switch, SwitchCase c, int i) { c.isNthCaseOf(switch, i) }
/**
* Gets a switch case >= pred, up to but not including `pred`'s successor pattern case,
* where `pred` is declared on `switch`.
*/
private SwitchCase getACaseUpToNextPattern(PatternCase pred, SwitchBlock switch) {
// Note we do include `case null, default` (as well as plain old `default`) here.
not result.(ConstCase).getValue(_) instanceof NullLiteral and
exists(int maxCaseIndex |
switch = pred.getParent() and
if exists(getNextPatternCase(pred))
then maxCaseIndex = getNextPatternCase(pred).getCaseIndex() - 1
else maxCaseIndex = lastCaseIndex(switch)
|
isNthCaseOf(switch, result, [pred.getCaseIndex() .. maxCaseIndex])
)
}
/**
* Gets the closest pattern case preceding `case`, including `case` itself, if any.
*/
private PatternCase getClosestPrecedingPatternCase(SwitchCase case) {
case = getACaseUpToNextPattern(result, _)
}
/**
* Holds if `pred` is a control-flow predecessor of switch case `sc` that is not a
* fall-through from a previous case.
*
* For classic switches that means flow from the selector expression; for switches
* involving pattern cases it can also mean flow from a previous pattern case's type
* test or guard failing and proceeding to then consider subsequent cases.
*/
private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pred) {
pred = sc.getControlFlowNode().getAPredecessor() and
(
pred.asExpr().getParent*() = sc.getSelectorExpr()
or
// Ambiguous: in the case of `case String _ when x: case "SomeConstant":`, the guard `x`
// passing edge will fall through into the constant case, and the guard failing edge
// will test if the selector equals `"SomeConstant"` and if so branch to the same
// case statement. Therefore don't label this a non-fall-through predecessor.
exists(PatternCase previousPatternCase |
previousPatternCase = getClosestPrecedingPatternCase(sc)
|
pred.asExpr().getParent*() = previousPatternCase.getGuard() and
// Check there is any statement in between the previous pattern case and this one,
// or the case is a rule, so there is no chance of a fall-through.
(
previousPatternCase.isRule() or
not previousPatternCase.getIndex() = sc.getIndex() - 1
)
)
or
// Unambigious: on the test-passing edge there must be at least one intervening
// declaration node, including anonymous `_` declarations.
pred.asStmt() = getClosestPrecedingPatternCase(sc)
)
}
private module GuardsInput implements SharedGuards::InputSig<Location, ControlFlowNode, BasicBlock> {
private import java as J
private import semmle.code.java.dataflow.internal.BaseSSA as Base
@@ -231,29 +168,14 @@ private module GuardsInput implements SharedGuards::InputSig<Location, ControlFl
)
}
private predicate hasPatternCaseMatchEdge(BasicBlock bb1, BasicBlock bb2, boolean isMatch) {
exists(ConditionNode patterncase |
this instanceof PatternCase and
patterncase = super.getControlFlowNode() and
bb1.getLastNode() = patterncase and
bb2.getFirstNode() = patterncase.getABranchSuccessor(isMatch)
)
}
predicate matchEdge(BasicBlock bb1, BasicBlock bb2) {
exists(ControlFlowNode pred |
// Pattern cases are handled as ConditionBlocks.
not this instanceof PatternCase and
bb2.getFirstNode() = super.getControlFlowNode() and
isNonFallThroughPredecessor(this, pred) and
bb1 = pred.getBasicBlock()
)
or
this.hasPatternCaseMatchEdge(bb1, bb2, true)
bb1.getASuccessor(any(MatchingSuccessor s | s.getValue() = true)) = bb2 and
bb1.getLastNode() = super.getControlFlowNode()
}
predicate nonMatchEdge(BasicBlock bb1, BasicBlock bb2) {
this.hasPatternCaseMatchEdge(bb1, bb2, false)
bb1.getASuccessor(any(MatchingSuccessor s | s.getValue() = false)) = bb2 and
bb1.getLastNode() = super.getControlFlowNode()
}
}

View File

@@ -34,7 +34,7 @@ abstract class ActionConfiguration extends string {
private BasicBlock actionBlock(ActionConfiguration conf) {
exists(ControlFlowNode node | result = node.getBasicBlock() |
conf.isAction(node) or
callAlwaysPerformsAction(node.asCall(), conf)
callAlwaysPerformsAction(any(Call call | call.getControlFlowNode() = node), conf)
)
}
@@ -66,10 +66,6 @@ private class JoinBlock extends BasicBlock {
JoinBlock() { 2 <= strictcount(this.getAPredecessor()) }
}
private class ReachableBlock extends BasicBlock {
ReachableBlock() { hasDominanceInformation(this) }
}
/**
* Holds if `bb` is a block that is collectively dominated by a set of one or
* more actions that individually does not dominate the exit.
@@ -78,7 +74,7 @@ private predicate postActionBlock(BasicBlock bb, ActionConfiguration conf) {
bb = nonDominatingActionBlock(conf)
or
if bb instanceof JoinBlock
then forall(ReachableBlock pred | pred = bb.getAPredecessor() | postActionBlock(pred, conf))
then forall(BasicBlock pred | pred = bb.getAPredecessor() | postActionBlock(pred, conf))
else postActionBlock(bb.getAPredecessor(), conf)
}

View File

@@ -229,7 +229,7 @@ class InstanceAccessExt extends TInstanceAccessExt {
/** Gets the control flow node associated with this instance access. */
ControlFlowNode getCfgNode() {
exists(ExprParent e | e = this.getAssociatedExprOrStmt() |
result.asCall() = e
result = e.(Call).getControlFlowNode()
or
e.(InstanceAccess).getControlFlowNode() = result
or

View File

@@ -17,6 +17,7 @@ private import NullGuards
private import semmle.code.java.Collections
private import semmle.code.java.controlflow.internal.Preconditions
private import semmle.code.java.controlflow.ControlFlowReachability
private import codeql.controlflow.SuccessorType
/** Gets an expression that may be `null`. */
Expr nullExpr() { result = nullExpr(_) }
@@ -230,14 +231,8 @@ private Expr nonEmptyExpr() {
/** The control flow edge that exits an enhanced for loop if the `Iterable` is empty. */
private predicate enhancedForEarlyExit(EnhancedForStmt for, ControlFlowNode n1, ControlFlowNode n2) {
exists(Expr forExpr |
n1.getANormalSuccessor() = n2 and
for.getExpr() = forExpr and
forExpr.getAChildExpr*() = n1.asExpr() and
not forExpr.getAChildExpr*() = n2.asExpr() and
n1.getANormalSuccessor().asExpr() = for.getVariable() and
not n2.asExpr() = for.getVariable()
)
n1.getASuccessor(any(EmptinessSuccessor t | t.isEmpty())) = n2 and
for.getExpr().getControlFlowNode() = n1
}
/** A control flow edge that cannot be taken. */

View File

@@ -220,6 +220,8 @@ module Sem implements Semantic<Location> {
int getBlockId1(BasicBlock bb) { idOf(bb, result) }
string getBlockId2(BasicBlock bb) { bb.getFirstNode().getIdTag() = result }
class Guard extends G::Guards_v2::Guard {
Expr asExpr() { result = this }
}

View File

@@ -326,20 +326,45 @@ private module Input implements TypeFlowInput<Location> {
)
}
/**
* Holds if `ioe` checks `v`, its true-successor is `bb`, and `bb` has multiple
* predecessors.
*/
private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, Base::SsaDefinition v) {
/** Holds if `ioe` checks `v` and its true-successor is `bb`. */
private predicate instanceofTrueSuccessor(InstanceOfExpr ioe, BasicBlock bb, Base::SsaDefinition v) {
ioe.getExpr() = v.getARead() and
strictcount(bb.getAPredecessor()) > 1 and
exists(ConditionBlock cb | cb.getCondition() = ioe and cb.getTestSuccessor(true) = bb)
}
/** Holds if `bb` is disjunctively guarded by multiple `instanceof` tests on `v`. */
private predicate instanceofDisjunction(BasicBlock bb, Base::SsaDefinition v) {
strictcount(InstanceOfExpr ioe | instanceofDisjunct(ioe, bb, v)) =
strictcount(bb.getAPredecessor())
/**
* Holds if `bb` is disjunctively guarded by one (`trivial = true`) or more
* (`trivial = false`) `instanceof` tests on `v`.
*/
private predicate instanceofDisjunction(BasicBlock bb, Base::SsaDefinition v, boolean trivial) {
exists(int preds |
strictcount(bb.getAPredecessor()) = preds and
strictcount(InstanceOfExpr ioe | instanceofTrueSuccessor(ioe, bb, v)) = preds and
if preds > 1 then trivial = false else trivial = true
)
or
strictcount(bb.getAPredecessor()) = 2 and
exists(BasicBlock pred1, BasicBlock pred2 |
pred1 != pred2 and
pred1 = bb.getAPredecessor() and
pred2 = bb.getAPredecessor() and
instanceofDisjunction(pred1, v, _) and
instanceofDisjunction(pred2, v, _) and
trivial = false
)
}
/**
* Holds if `bb` is disjunctively guarded by one or more `instanceof` tests
* on `v`, and `ioe` is one of those tests.
*/
private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, Base::SsaDefinition v) {
instanceofDisjunction(bb, v, _) and
(
instanceofTrueSuccessor(ioe, bb, v)
or
exists(BasicBlock pred | pred = bb.getAPredecessor() and instanceofDisjunct(ioe, pred, v))
)
}
/**
@@ -348,7 +373,7 @@ private module Input implements TypeFlowInput<Location> {
*/
predicate instanceofDisjunctionGuarded(TypeFlowNode n, RefType t) {
exists(BasicBlock bb, InstanceOfExpr ioe, Base::SsaDefinition v, VarAccess va |
instanceofDisjunction(bb, v) and
instanceofDisjunction(bb, v, false) and
bb.dominates(va.getBasicBlock()) and
va = v.getARead() and
instanceofDisjunct(ioe, bb, v) and

View File

@@ -93,8 +93,7 @@ private module BaseSsaImpl {
/** Holds if `n` updates the local variable `v`. */
predicate variableUpdate(BaseSsaSourceVariable v, ControlFlowNode n, BasicBlock b, int i) {
exists(VariableUpdate a | a.getControlFlowNode() = n | getDestVar(a) = v) and
b.getNode(i) = n and
hasDominanceInformation(b)
b.getNode(i) = n
}
/** Gets the definition point of a nested class in the parent scope. */
@@ -132,7 +131,7 @@ private module BaseSsaImpl {
inner != outer and
inner.getDeclaringType() = innerclass and
result = parentDef(desugaredGetEnclosingType*(innerclass)) and
result.getEnclosingStmt().getEnclosingCallable() = outer and
result.getEnclosingCallable() = outer and
capturedvar = TLocalVar(outer, v) and
closurevar = TLocalVar(inner, v)
)
@@ -178,15 +177,12 @@ private module SsaImplInput implements SsaImplCommon::InputSig<Location, BasicBl
* Holds if the `i`th of basic block `bb` reads source variable `v`.
*/
predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) {
hasDominanceInformation(bb) and
(
exists(VarRead use |
v.getAnAccess() = use and bb.getNode(i) = use.getControlFlowNode() and certain = true
)
or
variableCapture(v, _, bb, i) and
certain = false
exists(VarRead use |
v.getAnAccess() = use and bb.getNode(i) = use.getControlFlowNode() and certain = true
)
or
variableCapture(v, _, bb, i) and
certain = false
}
}

View File

@@ -115,7 +115,7 @@ private ControlFlowNode captureNode(TrackedVar capturedvar, TrackedVar closureva
inner != outer and
inner.getDeclaringType() = innerclass and
result = parentDef(desugaredGetEnclosingType*(innerclass)) and
result.getEnclosingStmt().getEnclosingCallable() = outer and
result.getEnclosingCallable() = outer and
capturedvar = TLocalVar(outer, v) and
closurevar = TLocalVar(inner, v)
)
@@ -130,8 +130,7 @@ private predicate variableCapture(TrackedVar capturedvar, TrackedVar closurevar,
pragma[nomagic]
private predicate certainVariableUpdate(TrackedVar v, ControlFlowNode n, BasicBlock b, int i) {
exists(VariableUpdate a | a.getControlFlowNode() = n | getDestVar(a) = v) and
b.getNode(i) = n and
hasDominanceInformation(b)
b.getNode(i) = n
or
certainVariableUpdate(v.getQualifier(), n, b, i)
}
@@ -153,9 +152,8 @@ private predicate hasEntryDef(TrackedVar v, BasicBlock b) {
overlay[global]
pragma[nomagic]
private predicate uncertainVariableUpdateImpl(TrackedVar v, ControlFlowNode n, BasicBlock b, int i) {
exists(Call c | c = n.asCall() | updatesNamedField(c, v, _)) and
b.getNode(i) = n and
hasDominanceInformation(b)
exists(Call c | c.getControlFlowNode() = n | updatesNamedField(c, v, _)) and
b.getNode(i) = n
or
uncertainVariableUpdateImpl(v.getQualifier(), n, b, i)
}
@@ -191,18 +189,15 @@ private module SsaImplInput implements SsaImplCommon::InputSig<Location, BasicBl
* This includes implicit reads via calls.
*/
predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) {
hasDominanceInformation(bb) and
(
exists(VarRead use |
v instanceof TrackedVar and
v.getAnAccess() = use and
bb.getNode(i) = use.getControlFlowNode() and
certain = true
)
or
variableCapture(v, _, bb, i) and
certain = false
exists(VarRead use |
v instanceof TrackedVar and
v.getAnAccess() = use and
bb.getNode(i) = use.getControlFlowNode() and
certain = true
)
or
variableCapture(v, _, bb, i) and
certain = false
}
}
@@ -525,8 +520,11 @@ private module Cached {
overlay[global]
cached
predicate defUpdatesNamedField(SsaImplicitWrite calldef, TrackedField f, Callable setter) {
f = calldef.getSourceVariable() and
updatesNamedField0(calldef.getControlFlowNode().asCall(), f, setter)
exists(Call call |
f = calldef.getSourceVariable() and
call.getControlFlowNode() = calldef.getControlFlowNode() and
updatesNamedField0(call, f, setter)
)
}
/** Holds if `init` is a closure variable that captures the value of `capturedvar`. */

View File

@@ -23,7 +23,9 @@ private predicate idOfAst(BB::ExprParent x, int y) = equivalenceRelation(id/2)(x
private predicate idOf(BasicBlock x, int y) { idOfAst(x.getFirstNode().getAstNode(), y) }
private int getId(BasicBlock bb) { idOf(bb, result) }
private int getId1(BasicBlock bb) { idOf(bb, result) }
private string getId2(BasicBlock bb) { bb.getFirstNode().getIdTag() = result }
/**
* Declarations to be exposed to users of SsaReadPositionCommon
@@ -39,7 +41,7 @@ module Public {
rank[r](SsaReadPositionPhiInputEdge e |
e.phiInput(phi, _)
|
e order by getId(e.getOrigBlock())
e order by getId1(e.getOrigBlock()), getId2(e.getOrigBlock())
)
}
}

View File

@@ -71,18 +71,28 @@ class MetricCallable extends Callable {
}
}
private predicate fallthroughSwitchCase(SwitchCase sc1, SwitchCase sc2) {
exists(SwitchStmt switch, int n | switch.getStmt(n) = sc1 and switch.getStmt(n + 1) = sc2)
or
exists(SwitchExpr switch, int n | switch.getStmt(n) = sc1 and switch.getStmt(n + 1) = sc2)
}
// Branching points in the sense of cyclomatic complexity are binary,
// so there should be a branching point for each non-default switch
// case (ignoring those that just fall through to the next case).
private predicate branchingSwitchCase(ConstCase sc) {
not sc.getControlFlowNode().getASuccessor().asStmt() instanceof SwitchCase and
not defaultFallThrough(sc)
if sc.isRule()
then any()
else (
not fallthroughSwitchCase(sc, _) and
not defaultFallThrough(sc)
)
}
private predicate defaultFallThrough(ConstCase sc) {
exists(DefaultCase default | default.getControlFlowNode().getASuccessor().asStmt() = sc)
exists(DefaultCase default | fallthroughSwitchCase(default, sc))
or
defaultFallThrough(sc.getControlFlowNode().getAPredecessor().asStmt())
exists(ConstCase mid | defaultFallThrough(mid) and fallthroughSwitchCase(mid, sc))
}
/** Holds if `stmt` is a branching statement used for the computation of cyclomatic complexity. */

View File

@@ -0,0 +1,28 @@
/**
* Provides utilities for getting an AST-based control flow graph in tests.
*/
overlay[local?]
module;
import java
private predicate isAstNode(ControlFlowNode n) {
n.injects(_) or
n instanceof ControlFlow::EntryNode or
n instanceof ControlFlow::AnnotatedExitNode or
n instanceof ControlFlow::ExitNode
}
private predicate succToAst(ControlFlowNode n1, ControlFlowNode n2) {
n2 = n1.getASuccessor() and
isAstNode(n2)
or
exists(ControlFlowNode mid |
mid = n1.getASuccessor() and
not isAstNode(mid) and
succToAst(mid, n2)
)
}
/** Gets a control flow successor of `n` that skips over non-AST nodes. */
ControlFlowNode getAnAstSuccessor(ControlFlowNode n) { isAstNode(n) and succToAst(n, result) }

View File

@@ -0,0 +1,40 @@
/**
* Provides utilities for working with basic blocks in tests.
*/
overlay[local?]
module;
import java
import codeql.util.Boolean
private predicate entryOrExit(ControlFlowNode n) {
n instanceof ControlFlow::EntryNode or
n instanceof ControlFlow::AnnotatedExitNode or
n instanceof ControlFlow::ExitNode
}
/** Gets the first AST node in the basic block `bb`, if any. */
ControlFlowNode getFirstAstNode(BasicBlock bb) { result = getFirstAstNode(bb, false) }
/**
* Gets the first AST node in the basic block `bb`, if any. Otherwise, gets
* the first synthetic node.
*/
ControlFlowNode getFirstAstNodeOrSynth(BasicBlock bb) { result = getFirstAstNode(bb, true) }
private ControlFlowNode getFirstAstNode(BasicBlock bb, Boolean allowSynthetic) {
result =
min(ControlFlowNode n, int i, int astOrder |
bb.getNode(i) = n and
if n.injects(_)
then astOrder = 0
else
if entryOrExit(n)
then astOrder = 1
else (
allowSynthetic = true and astOrder = 2
)
|
n order by astOrder, i
)
}

View File

@@ -57,13 +57,15 @@ predicate loopExitGuard(LoopStmt loop, Expr cond) {
*/
predicate mainLoopCondition(LoopStmt loop, Expr cond) {
loop.getCondition() = cond and
exists(Expr loopReentry, ControlFlowNode last |
if exists(loop.(ForStmt).getAnUpdate())
then loopReentry = loop.(ForStmt).getUpdate(0)
else loopReentry = cond
|
last.getEnclosingStmt().getEnclosingStmt*() = loop.getBody() and
last.getASuccessor().asExpr().getParent*() = loopReentry
exists(BasicBlock condBlock | condBlock.getANode().isBefore(cond) |
1 < strictcount(condBlock.getAPredecessor()) or loop instanceof DoStmt
)
}
predicate ssaDefinitionInLoop(LoopStmt loop, SsaDefinition ssa) {
exists(ControlFlowNode node | node = ssa.getControlFlowNode() |
node.getAstNode().(Stmt).getEnclosingStmt*() = loop or
node.getAstNode().(Expr).getEnclosingStmt().getEnclosingStmt*() = loop
)
}
@@ -76,7 +78,7 @@ where
) and
// None of the ssa variables in `cond` are updated inside the loop.
forex(SsaDefinition ssa, VarRead use | ssa.getARead() = use and use.getParent*() = cond |
not ssa.getControlFlowNode().getEnclosingStmt().getEnclosingStmt*() = loop or
not ssaDefinitionInLoop(loop, ssa) or
ssa.getControlFlowNode().asExpr().getParent*() = loop.(ForStmt).getAnInit()
) and
// And `cond` does not use method calls, field reads, or array reads.

View File

@@ -1,41 +1,15 @@
import java
private Stmt getASwitchChild(SwitchStmt s) {
result = s.getAChild()
or
exists(Stmt mid |
mid = getASwitchChild(s) and not mid instanceof SwitchStmt and result = mid.getAChild()
)
}
private predicate blockInSwitch(SwitchStmt s, BasicBlock b) {
b.getFirstNode().getEnclosingStmt() = getASwitchChild(s)
}
private predicate switchCaseControlFlow(SwitchStmt switch, BasicBlock b1, BasicBlock b2) {
blockInSwitch(switch, b1) and
b1.getASuccessor() = b2 and
blockInSwitch(switch, b2)
}
predicate switchCaseControlFlowPlus(SwitchStmt switch, BasicBlock b1, BasicBlock b2) {
switchCaseControlFlow(switch, b1, b2)
or
exists(BasicBlock mid |
switchCaseControlFlowPlus(switch, mid, b2) and
switchCaseControlFlow(switch, b1, mid) and
not mid.getFirstNode().asStmt() = switch.getACase()
)
}
predicate mayDropThroughWithoutComment(SwitchStmt switch, Stmt switchCase) {
switchCase = switch.getACase() and
exists(Stmt other, BasicBlock b1, BasicBlock b2 |
b1.getFirstNode().asStmt() = switchCase and
b2.getFirstNode().asStmt() = other and
switchCaseControlFlowPlus(switch, b1, b2) and
other = switch.getACase() and
not fallThroughCommented(other)
exists(int caseIx, SwitchCase next, int nextCaseStmtIx, Stmt lastInCase, ControlFlowNode node |
switch.getCase(caseIx) = switchCase and
switch.getCase(caseIx + 1) = next and
switch.getStmt(nextCaseStmtIx) = next and
switch.getStmt(nextCaseStmtIx - 1) = lastInCase and
lastInCase != switchCase and
node.isAfter(lastInCase) and
node.getANormalSuccessor().asStmt() = switch.getAStmt() and
not fallThroughCommented(next)
)
}

View File

@@ -42,7 +42,7 @@ private DataFlow::Node getGeneratingWrapperSet(Crypto::NonceArtifactNode a) {
}
private predicate ancestorOfArtifact(
Crypto::ArtifactNode a, Callable enclosingCallable, ControlFlow::Node midOrTarget
Crypto::ArtifactNode a, Callable enclosingCallable, ControlFlowNode midOrTarget
) {
a.asElement().(Expr).getEnclosingCallable() = enclosingCallable and
(
@@ -87,7 +87,7 @@ predicate isArtifactReuse(Crypto::ArtifactNode a, Crypto::ArtifactNode b) {
ancestorOfArtifact(b, commonParent, _)
)
implies
exists(Callable commonParent, ControlFlow::Node aMid, ControlFlow::Node bMid |
exists(Callable commonParent, ControlFlowNode aMid, ControlFlowNode bMid |
ancestorOfArtifact(a, commonParent, aMid) and
ancestorOfArtifact(b, commonParent, bMid) and
a instanceof Crypto::NonceArtifactNode and

View File

@@ -1,205 +1,386 @@
| Test.kt:3:8:80:1 | Exceptional Exit | 0 | Test.kt:3:8:80:1 | Exceptional Exit |
| Test.kt:3:8:80:1 | Exit | 0 | Test.kt:3:8:80:1 | Exit |
| Test.kt:3:8:80:1 | { ... } | 0 | Test.kt:3:8:80:1 | { ... } |
| Test.kt:3:8:80:1 | { ... } | 1 | Test.kt:3:1:80:1 | super(...) |
| Test.kt:3:8:80:1 | { ... } | 2 | Test.kt:3:8:80:1 | { ... } |
| Test.kt:3:8:80:1 | { ... } | 3 | Test.kt:3:8:80:1 | Normal Exit |
| Test.kt:4:2:79:2 | Exceptional Exit | 0 | Test.kt:4:2:79:2 | Exceptional Exit |
| Test.kt:4:2:79:2 | Exit | 0 | Test.kt:4:2:79:2 | Exit |
| Test.kt:3:8:80:1 | Entry | 0 | Test.kt:3:8:80:1 | Entry |
| Test.kt:3:8:80:1 | Entry | 1 | Test.kt:3:8:80:1 | { ... } |
| Test.kt:3:8:80:1 | Entry | 2 | Test.kt:3:1:80:1 | Before super(...) |
| Test.kt:3:8:80:1 | Entry | 3 | Test.kt:3:1:80:1 | super(...) |
| Test.kt:3:8:80:1 | Entry | 4 | Test.kt:3:1:80:1 | After super(...) |
| Test.kt:3:8:80:1 | Entry | 5 | Test.kt:3:8:80:1 | { ... } |
| Test.kt:3:8:80:1 | Entry | 6 | Test.kt:3:8:80:1 | After { ... } |
| Test.kt:3:8:80:1 | Entry | 7 | Test.kt:3:8:80:1 | Normal Exit |
| Test.kt:3:8:80:1 | Entry | 8 | Test.kt:3:8:80:1 | Exit |
| Test.kt:4:2:79:2 | Entry | 0 | Test.kt:4:2:79:2 | Entry |
| Test.kt:4:2:79:2 | Entry | 1 | Test.kt:4:13:79:2 | { ... } |
| Test.kt:4:2:79:2 | Entry | 2 | Test.kt:5:7:5:7 | var ...; |
| Test.kt:4:2:79:2 | Entry | 3 | Test.kt:5:7:5:7 | Before x |
| Test.kt:4:2:79:2 | Entry | 4 | Test.kt:5:16:5:16 | 0 |
| Test.kt:4:2:79:2 | Entry | 5 | Test.kt:5:7:5:7 | x |
| Test.kt:4:2:79:2 | Entry | 6 | Test.kt:5:7:5:7 | After x |
| Test.kt:4:2:79:2 | Entry | 7 | Test.kt:5:7:5:7 | After var ...; |
| Test.kt:4:2:79:2 | Entry | 8 | Test.kt:6:7:6:7 | var ...; |
| Test.kt:4:2:79:2 | Entry | 9 | Test.kt:6:7:6:7 | Before y |
| Test.kt:4:2:79:2 | Entry | 10 | Test.kt:6:17:6:18 | 50 |
| Test.kt:4:2:79:2 | Entry | 11 | Test.kt:6:7:6:7 | y |
| Test.kt:4:2:79:2 | Entry | 12 | Test.kt:6:7:6:7 | After y |
| Test.kt:4:2:79:2 | Entry | 13 | Test.kt:6:7:6:7 | After var ...; |
| Test.kt:4:2:79:2 | Entry | 14 | Test.kt:7:7:7:7 | var ...; |
| Test.kt:4:2:79:2 | Entry | 15 | Test.kt:7:7:7:7 | Before z |
| Test.kt:4:2:79:2 | Entry | 16 | Test.kt:7:16:7:16 | 0 |
| Test.kt:4:2:79:2 | Entry | 17 | Test.kt:7:7:7:7 | z |
| Test.kt:4:2:79:2 | Entry | 18 | Test.kt:7:7:7:7 | After z |
| Test.kt:4:2:79:2 | Entry | 19 | Test.kt:7:7:7:7 | After var ...; |
| Test.kt:4:2:79:2 | Entry | 20 | Test.kt:8:7:8:7 | var ...; |
| Test.kt:4:2:79:2 | Entry | 21 | Test.kt:8:7:8:7 | Before w |
| Test.kt:4:2:79:2 | Entry | 22 | Test.kt:8:16:8:16 | 0 |
| Test.kt:4:2:79:2 | Entry | 23 | Test.kt:8:7:8:7 | w |
| Test.kt:4:2:79:2 | Entry | 24 | Test.kt:8:7:8:7 | After w |
| Test.kt:4:2:79:2 | Entry | 25 | Test.kt:8:7:8:7 | After var ...; |
| Test.kt:4:2:79:2 | Entry | 26 | Test.kt:11:3:16:3 | <Expr>; |
| Test.kt:4:2:79:2 | Entry | 27 | Test.kt:11:3:16:3 | when ... |
| Test.kt:4:2:79:2 | Entry | 28 | Test.kt:11:3:16:3 | ... -> ... |
| Test.kt:4:2:79:2 | Entry | 29 | Test.kt:11:7:11:11 | Before ... > ... |
| Test.kt:4:2:79:2 | Entry | 30 | Test.kt:11:7:11:7 | x |
| Test.kt:4:2:79:2 | Entry | 31 | Test.kt:11:11:11:11 | 0 |
| Test.kt:4:2:79:2 | Entry | 32 | Test.kt:11:7:11:11 | ... > ... |
| Test.kt:4:2:79:2 | Normal Exit | 0 | Test.kt:4:2:79:2 | Normal Exit |
| Test.kt:4:13:79:2 | { ... } | 0 | Test.kt:4:13:79:2 | { ... } |
| Test.kt:4:13:79:2 | { ... } | 1 | Test.kt:5:7:5:7 | var ...; |
| Test.kt:4:13:79:2 | { ... } | 2 | Test.kt:5:16:5:16 | 0 |
| Test.kt:4:13:79:2 | { ... } | 3 | Test.kt:5:7:5:7 | x |
| Test.kt:4:13:79:2 | { ... } | 4 | Test.kt:6:7:6:7 | var ...; |
| Test.kt:4:13:79:2 | { ... } | 5 | Test.kt:6:17:6:18 | 50 |
| Test.kt:4:13:79:2 | { ... } | 6 | Test.kt:6:7:6:7 | y |
| Test.kt:4:13:79:2 | { ... } | 7 | Test.kt:7:7:7:7 | var ...; |
| Test.kt:4:13:79:2 | { ... } | 8 | Test.kt:7:16:7:16 | 0 |
| Test.kt:4:13:79:2 | { ... } | 9 | Test.kt:7:7:7:7 | z |
| Test.kt:4:13:79:2 | { ... } | 10 | Test.kt:8:7:8:7 | var ...; |
| Test.kt:4:13:79:2 | { ... } | 11 | Test.kt:8:16:8:16 | 0 |
| Test.kt:4:13:79:2 | { ... } | 12 | Test.kt:8:7:8:7 | w |
| Test.kt:4:13:79:2 | { ... } | 13 | Test.kt:11:3:16:3 | <Expr>; |
| Test.kt:4:13:79:2 | { ... } | 14 | Test.kt:11:3:16:3 | when ... |
| Test.kt:4:13:79:2 | { ... } | 15 | Test.kt:11:3:16:3 | ... -> ... |
| Test.kt:4:13:79:2 | { ... } | 16 | Test.kt:11:7:11:7 | x |
| Test.kt:4:13:79:2 | { ... } | 17 | Test.kt:11:11:11:11 | 0 |
| Test.kt:4:13:79:2 | { ... } | 18 | Test.kt:11:7:11:11 | ... > ... |
| Test.kt:11:3:16:3 | ... -> ... | 0 | Test.kt:11:3:16:3 | ... -> ... |
| Test.kt:11:3:16:3 | ... -> ... | 1 | Test.kt:11:3:16:3 | true |
| Test.kt:11:3:16:3 | ... -> ... | 2 | Test.kt:14:10:16:3 | { ... } |
| Test.kt:11:3:16:3 | ... -> ... | 3 | Test.kt:15:4:15:4 | <Expr>; |
| Test.kt:11:3:16:3 | ... -> ... | 4 | Test.kt:15:8:15:9 | 30 |
| Test.kt:11:3:16:3 | ... -> ... | 5 | Test.kt:15:4:15:9 | ...=... |
| Test.kt:11:14:14:3 | { ... } | 0 | Test.kt:11:14:14:3 | { ... } |
| Test.kt:11:14:14:3 | { ... } | 1 | Test.kt:12:4:12:4 | <Expr>; |
| Test.kt:11:14:14:3 | { ... } | 2 | Test.kt:12:8:12:9 | 20 |
| Test.kt:11:14:14:3 | { ... } | 3 | Test.kt:12:4:12:9 | ...=... |
| Test.kt:11:14:14:3 | { ... } | 4 | Test.kt:13:4:13:4 | <Expr>; |
| Test.kt:11:14:14:3 | { ... } | 5 | Test.kt:13:8:13:9 | 10 |
| Test.kt:11:14:14:3 | { ... } | 6 | Test.kt:13:4:13:9 | ...=... |
| Test.kt:18:3:18:3 | <Expr>; | 0 | Test.kt:18:3:18:3 | <Expr>; |
| Test.kt:18:3:18:3 | <Expr>; | 1 | Test.kt:18:7:18:7 | 0 |
| Test.kt:18:3:18:3 | <Expr>; | 2 | Test.kt:18:3:18:7 | ...=... |
| Test.kt:18:3:18:3 | <Expr>; | 3 | Test.kt:21:3:24:9 | <Expr>; |
| Test.kt:18:3:18:3 | <Expr>; | 4 | Test.kt:21:3:24:9 | when ... |
| Test.kt:18:3:18:3 | <Expr>; | 5 | Test.kt:21:3:24:9 | ... -> ... |
| Test.kt:18:3:18:3 | <Expr>; | 6 | Test.kt:21:6:21:6 | x |
| Test.kt:18:3:18:3 | <Expr>; | 7 | Test.kt:21:10:21:10 | 0 |
| Test.kt:18:3:18:3 | <Expr>; | 8 | Test.kt:21:6:21:10 | ... < ... |
| Test.kt:21:3:24:9 | ... -> ... | 0 | Test.kt:21:3:24:9 | ... -> ... |
| Test.kt:21:3:24:9 | ... -> ... | 1 | Test.kt:21:3:24:9 | true |
| Test.kt:21:3:24:9 | ... -> ... | 2 | Test.kt:24:4:24:9 | INSTANCE |
| Test.kt:21:3:24:9 | ... -> ... | 3 | Test.kt:24:4:24:9 | return ... |
| Test.kt:22:4:22:4 | <Expr>; | 0 | Test.kt:22:4:22:4 | <Expr>; |
| Test.kt:22:4:22:4 | <Expr>; | 1 | Test.kt:22:8:22:9 | 40 |
| Test.kt:22:4:22:4 | <Expr>; | 2 | Test.kt:22:4:22:9 | ...=... |
| Test.kt:22:4:22:4 | <Expr>; | 3 | Test.kt:27:3:27:3 | <Expr>; |
| Test.kt:22:4:22:4 | <Expr>; | 4 | Test.kt:27:7:27:8 | 10 |
| Test.kt:22:4:22:4 | <Expr>; | 5 | Test.kt:27:3:27:8 | ...=... |
| Test.kt:22:4:22:4 | <Expr>; | 6 | Test.kt:30:3:33:3 | <Expr>; |
| Test.kt:22:4:22:4 | <Expr>; | 7 | Test.kt:30:3:33:3 | when ... |
| Test.kt:22:4:22:4 | <Expr>; | 8 | Test.kt:30:3:33:3 | ... -> ... |
| Test.kt:22:4:22:4 | <Expr>; | 9 | Test.kt:30:7:30:7 | x |
| Test.kt:22:4:22:4 | <Expr>; | 10 | Test.kt:30:12:30:12 | 0 |
| Test.kt:22:4:22:4 | <Expr>; | 11 | Test.kt:30:7:30:12 | ... (value equals) ... |
| Test.kt:30:15:33:3 | { ... } | 0 | Test.kt:30:15:33:3 | { ... } |
| Test.kt:30:15:33:3 | { ... } | 1 | Test.kt:31:4:31:4 | <Expr>; |
| Test.kt:30:15:33:3 | { ... } | 2 | Test.kt:31:8:31:9 | 60 |
| Test.kt:30:15:33:3 | { ... } | 3 | Test.kt:31:4:31:9 | ...=... |
| Test.kt:30:15:33:3 | { ... } | 4 | Test.kt:32:4:32:4 | <Expr>; |
| Test.kt:30:15:33:3 | { ... } | 5 | Test.kt:32:8:32:9 | 10 |
| Test.kt:30:15:33:3 | { ... } | 6 | Test.kt:32:4:32:9 | ...=... |
| Test.kt:35:3:35:3 | <Expr>; | 0 | Test.kt:35:3:35:3 | <Expr>; |
| Test.kt:35:3:35:3 | <Expr>; | 1 | Test.kt:35:7:35:8 | 20 |
| Test.kt:35:3:35:3 | <Expr>; | 2 | Test.kt:35:3:35:8 | ...=... |
| Test.kt:35:3:35:3 | <Expr>; | 3 | Test.kt:38:3:41:3 | while (...) |
| Test.kt:38:9:38:9 | x | 0 | Test.kt:38:9:38:9 | x |
| Test.kt:38:9:38:9 | x | 1 | Test.kt:38:13:38:13 | 0 |
| Test.kt:38:9:38:9 | x | 2 | Test.kt:38:9:38:13 | ... > ... |
| Test.kt:38:16:41:3 | { ... } | 0 | Test.kt:38:16:41:3 | { ... } |
| Test.kt:38:16:41:3 | { ... } | 1 | Test.kt:39:4:39:4 | <Expr>; |
| Test.kt:38:16:41:3 | { ... } | 2 | Test.kt:39:8:39:9 | 10 |
| Test.kt:38:16:41:3 | { ... } | 3 | Test.kt:39:4:39:9 | ...=... |
| Test.kt:38:16:41:3 | { ... } | 4 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:16:41:3 | { ... } | 5 | Test.kt:40:4:40:6 | <Stmt> |
| Test.kt:38:16:41:3 | { ... } | 6 | Test.kt:40:4:40:6 | { ... } |
| Test.kt:38:16:41:3 | { ... } | 7 | Test.kt:40:4:40:6 | var ...; |
| Test.kt:38:16:41:3 | { ... } | 8 | Test.kt:40:4:40:4 | x |
| Test.kt:38:16:41:3 | { ... } | 9 | Test.kt:40:4:40:6 | tmp0 |
| Test.kt:38:16:41:3 | { ... } | 10 | Test.kt:40:4:40:4 | <Expr>; |
| Test.kt:38:16:41:3 | { ... } | 11 | Test.kt:40:4:40:6 | tmp0 |
| Test.kt:38:16:41:3 | { ... } | 12 | Test.kt:40:4:40:6 | dec(...) |
| Test.kt:38:16:41:3 | { ... } | 13 | Test.kt:40:4:40:6 | ...=... |
| Test.kt:38:16:41:3 | { ... } | 14 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:16:41:3 | { ... } | 15 | Test.kt:40:4:40:6 | tmp0 |
| Test.kt:38:16:41:3 | { ... } | 16 | Test.kt:40:4:40:6 | <implicit coercion to unit> |
| Test.kt:43:3:43:3 | <Expr>; | 0 | Test.kt:43:3:43:3 | <Expr>; |
| Test.kt:43:3:43:3 | <Expr>; | 1 | Test.kt:43:7:43:8 | 30 |
| Test.kt:43:3:43:3 | <Expr>; | 2 | Test.kt:43:3:43:8 | ...=... |
| Test.kt:43:3:43:3 | <Expr>; | 3 | Test.kt:73:3:73:3 | <Expr>; |
| Test.kt:43:3:43:3 | <Expr>; | 4 | Test.kt:73:7:73:8 | 50 |
| Test.kt:43:3:43:3 | <Expr>; | 5 | Test.kt:73:3:73:8 | ...=... |
| Test.kt:43:3:43:3 | <Expr>; | 6 | Test.kt:77:3:77:3 | <Expr>; |
| Test.kt:43:3:43:3 | <Expr>; | 7 | Test.kt:77:7:77:8 | 40 |
| Test.kt:43:3:43:3 | <Expr>; | 8 | Test.kt:77:3:77:8 | ...=... |
| Test.kt:43:3:43:3 | <Expr>; | 9 | Test.kt:78:3:78:8 | INSTANCE |
| Test.kt:43:3:43:3 | <Expr>; | 10 | Test.kt:78:3:78:8 | return ... |
| Test.kt:82:1:89:1 | Exceptional Exit | 0 | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:4:2:79:2 | Normal Exit | 1 | Test.kt:4:2:79:2 | Exit |
| Test.kt:11:3:16:3 | After when ... | 0 | Test.kt:11:3:16:3 | After when ... |
| Test.kt:11:3:16:3 | After when ... | 1 | Test.kt:11:3:16:3 | After <Expr>; |
| Test.kt:11:3:16:3 | After when ... | 2 | Test.kt:18:3:18:3 | <Expr>; |
| Test.kt:11:3:16:3 | After when ... | 3 | Test.kt:18:3:18:7 | Before ...=... |
| Test.kt:11:3:16:3 | After when ... | 4 | Test.kt:18:3:18:3 | z |
| Test.kt:11:3:16:3 | After when ... | 5 | Test.kt:18:7:18:7 | 0 |
| Test.kt:11:3:16:3 | After when ... | 6 | Test.kt:18:3:18:7 | ...=... |
| Test.kt:11:3:16:3 | After when ... | 7 | Test.kt:18:3:18:7 | After ...=... |
| Test.kt:11:3:16:3 | After when ... | 8 | Test.kt:18:3:18:3 | After <Expr>; |
| Test.kt:11:3:16:3 | After when ... | 9 | Test.kt:21:3:24:9 | <Expr>; |
| Test.kt:11:3:16:3 | After when ... | 10 | Test.kt:21:3:24:9 | when ... |
| Test.kt:11:3:16:3 | After when ... | 11 | Test.kt:21:3:24:9 | ... -> ... |
| Test.kt:11:3:16:3 | After when ... | 12 | Test.kt:21:6:21:10 | Before ... < ... |
| Test.kt:11:3:16:3 | After when ... | 13 | Test.kt:21:6:21:6 | x |
| Test.kt:11:3:16:3 | After when ... | 14 | Test.kt:21:10:21:10 | 0 |
| Test.kt:11:3:16:3 | After when ... | 15 | Test.kt:21:6:21:10 | ... < ... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 0 | Test.kt:11:7:11:11 | After ... > ... [false] |
| Test.kt:11:7:11:11 | After ... > ... [false] | 1 | Test.kt:11:3:16:3 | ... -> ... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 2 | Test.kt:11:3:16:3 | true |
| Test.kt:11:7:11:11 | After ... > ... [false] | 3 | Test.kt:11:3:16:3 | After true [true] |
| Test.kt:11:7:11:11 | After ... > ... [false] | 4 | Test.kt:14:10:16:3 | { ... } |
| Test.kt:11:7:11:11 | After ... > ... [false] | 5 | Test.kt:15:4:15:4 | <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [false] | 6 | Test.kt:15:4:15:9 | Before ...=... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 7 | Test.kt:15:4:15:4 | y |
| Test.kt:11:7:11:11 | After ... > ... [false] | 8 | Test.kt:15:8:15:9 | 30 |
| Test.kt:11:7:11:11 | After ... > ... [false] | 9 | Test.kt:15:4:15:9 | ...=... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 10 | Test.kt:15:4:15:9 | After ...=... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 11 | Test.kt:15:4:15:4 | After <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [false] | 12 | Test.kt:14:10:16:3 | After { ... } |
| Test.kt:11:7:11:11 | After ... > ... [true] | 0 | Test.kt:11:7:11:11 | After ... > ... [true] |
| Test.kt:11:7:11:11 | After ... > ... [true] | 1 | Test.kt:11:14:14:3 | { ... } |
| Test.kt:11:7:11:11 | After ... > ... [true] | 2 | Test.kt:12:4:12:4 | <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [true] | 3 | Test.kt:12:4:12:9 | Before ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 4 | Test.kt:12:4:12:4 | y |
| Test.kt:11:7:11:11 | After ... > ... [true] | 5 | Test.kt:12:8:12:9 | 20 |
| Test.kt:11:7:11:11 | After ... > ... [true] | 6 | Test.kt:12:4:12:9 | ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 7 | Test.kt:12:4:12:9 | After ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 8 | Test.kt:12:4:12:4 | After <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [true] | 9 | Test.kt:13:4:13:4 | <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [true] | 10 | Test.kt:13:4:13:9 | Before ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 11 | Test.kt:13:4:13:4 | z |
| Test.kt:11:7:11:11 | After ... > ... [true] | 12 | Test.kt:13:8:13:9 | 10 |
| Test.kt:11:7:11:11 | After ... > ... [true] | 13 | Test.kt:13:4:13:9 | ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 14 | Test.kt:13:4:13:9 | After ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 15 | Test.kt:13:4:13:4 | After <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [true] | 16 | Test.kt:11:14:14:3 | After { ... } |
| Test.kt:21:6:21:10 | After ... < ... [false] | 0 | Test.kt:21:6:21:10 | After ... < ... [false] |
| Test.kt:21:6:21:10 | After ... < ... [false] | 1 | Test.kt:21:3:24:9 | ... -> ... |
| Test.kt:21:6:21:10 | After ... < ... [false] | 2 | Test.kt:21:3:24:9 | true |
| Test.kt:21:6:21:10 | After ... < ... [false] | 3 | Test.kt:21:3:24:9 | After true [true] |
| Test.kt:21:6:21:10 | After ... < ... [false] | 4 | Test.kt:24:4:24:9 | Before return ... |
| Test.kt:21:6:21:10 | After ... < ... [false] | 5 | Test.kt:24:4:24:9 | INSTANCE |
| Test.kt:21:6:21:10 | After ... < ... [false] | 6 | Test.kt:24:4:24:9 | return ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 0 | Test.kt:21:6:21:10 | After ... < ... [true] |
| Test.kt:21:6:21:10 | After ... < ... [true] | 1 | Test.kt:22:4:22:4 | <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 2 | Test.kt:22:4:22:9 | Before ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 3 | Test.kt:22:4:22:4 | y |
| Test.kt:21:6:21:10 | After ... < ... [true] | 4 | Test.kt:22:8:22:9 | 40 |
| Test.kt:21:6:21:10 | After ... < ... [true] | 5 | Test.kt:22:4:22:9 | ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 6 | Test.kt:22:4:22:9 | After ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 7 | Test.kt:22:4:22:4 | After <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 8 | Test.kt:21:3:24:9 | After when ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 9 | Test.kt:21:3:24:9 | After <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 10 | Test.kt:27:3:27:3 | <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 11 | Test.kt:27:3:27:8 | Before ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 12 | Test.kt:27:3:27:3 | z |
| Test.kt:21:6:21:10 | After ... < ... [true] | 13 | Test.kt:27:7:27:8 | 10 |
| Test.kt:21:6:21:10 | After ... < ... [true] | 14 | Test.kt:27:3:27:8 | ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 15 | Test.kt:27:3:27:8 | After ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 16 | Test.kt:27:3:27:3 | After <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 17 | Test.kt:30:3:33:3 | <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 18 | Test.kt:30:3:33:3 | when ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 19 | Test.kt:30:3:33:3 | ... -> ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 20 | Test.kt:30:7:30:12 | Before ... (value equals) ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 21 | Test.kt:30:7:30:7 | x |
| Test.kt:21:6:21:10 | After ... < ... [true] | 22 | Test.kt:30:12:30:12 | 0 |
| Test.kt:21:6:21:10 | After ... < ... [true] | 23 | Test.kt:30:7:30:12 | ... (value equals) ... |
| Test.kt:30:3:33:3 | After when ... | 0 | Test.kt:30:3:33:3 | After when ... |
| Test.kt:30:3:33:3 | After when ... | 1 | Test.kt:30:3:33:3 | After <Expr>; |
| Test.kt:30:3:33:3 | After when ... | 2 | Test.kt:35:3:35:3 | <Expr>; |
| Test.kt:30:3:33:3 | After when ... | 3 | Test.kt:35:3:35:8 | Before ...=... |
| Test.kt:30:3:33:3 | After when ... | 4 | Test.kt:35:3:35:3 | z |
| Test.kt:30:3:33:3 | After when ... | 5 | Test.kt:35:7:35:8 | 20 |
| Test.kt:30:3:33:3 | After when ... | 6 | Test.kt:35:3:35:8 | ...=... |
| Test.kt:30:3:33:3 | After when ... | 7 | Test.kt:35:3:35:8 | After ...=... |
| Test.kt:30:3:33:3 | After when ... | 8 | Test.kt:35:3:35:3 | After <Expr>; |
| Test.kt:30:3:33:3 | After when ... | 9 | Test.kt:38:3:41:3 | while (...) |
| Test.kt:30:7:30:12 | After ... (value equals) ... [false] | 0 | Test.kt:30:7:30:12 | After ... (value equals) ... [false] |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 0 | Test.kt:30:7:30:12 | After ... (value equals) ... [true] |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 1 | Test.kt:30:15:33:3 | { ... } |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 2 | Test.kt:31:4:31:4 | <Expr>; |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 3 | Test.kt:31:4:31:9 | Before ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 4 | Test.kt:31:4:31:4 | y |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 5 | Test.kt:31:8:31:9 | 60 |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 6 | Test.kt:31:4:31:9 | ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 7 | Test.kt:31:4:31:9 | After ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 8 | Test.kt:31:4:31:4 | After <Expr>; |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 9 | Test.kt:32:4:32:4 | <Expr>; |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 10 | Test.kt:32:4:32:9 | Before ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 11 | Test.kt:32:4:32:4 | z |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 12 | Test.kt:32:8:32:9 | 10 |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 13 | Test.kt:32:4:32:9 | ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 14 | Test.kt:32:4:32:9 | After ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 15 | Test.kt:32:4:32:4 | After <Expr>; |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 16 | Test.kt:30:15:33:3 | After { ... } |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 0 | Test.kt:38:3:41:3 | [LoopHeader] while (...) |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 1 | Test.kt:38:9:38:13 | Before ... > ... |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 2 | Test.kt:38:9:38:9 | x |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 3 | Test.kt:38:13:38:13 | 0 |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 4 | Test.kt:38:9:38:13 | ... > ... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 0 | Test.kt:38:9:38:13 | After ... > ... [false] |
| Test.kt:38:9:38:13 | After ... > ... [false] | 1 | Test.kt:38:3:41:3 | After while (...) |
| Test.kt:38:9:38:13 | After ... > ... [false] | 2 | Test.kt:43:3:43:3 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 3 | Test.kt:43:3:43:8 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 4 | Test.kt:43:3:43:3 | z |
| Test.kt:38:9:38:13 | After ... > ... [false] | 5 | Test.kt:43:7:43:8 | 30 |
| Test.kt:38:9:38:13 | After ... > ... [false] | 6 | Test.kt:43:3:43:8 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 7 | Test.kt:43:3:43:8 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 8 | Test.kt:43:3:43:3 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 9 | Test.kt:73:3:73:3 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 10 | Test.kt:73:3:73:8 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 11 | Test.kt:73:3:73:3 | z |
| Test.kt:38:9:38:13 | After ... > ... [false] | 12 | Test.kt:73:7:73:8 | 50 |
| Test.kt:38:9:38:13 | After ... > ... [false] | 13 | Test.kt:73:3:73:8 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 14 | Test.kt:73:3:73:8 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 15 | Test.kt:73:3:73:3 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 16 | Test.kt:77:3:77:3 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 17 | Test.kt:77:3:77:8 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 18 | Test.kt:77:3:77:3 | w |
| Test.kt:38:9:38:13 | After ... > ... [false] | 19 | Test.kt:77:7:77:8 | 40 |
| Test.kt:38:9:38:13 | After ... > ... [false] | 20 | Test.kt:77:3:77:8 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 21 | Test.kt:77:3:77:8 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 22 | Test.kt:77:3:77:3 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 23 | Test.kt:78:3:78:8 | Before return ... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 24 | Test.kt:78:3:78:8 | INSTANCE |
| Test.kt:38:9:38:13 | After ... > ... [false] | 25 | Test.kt:78:3:78:8 | return ... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 0 | Test.kt:38:9:38:13 | After ... > ... [true] |
| Test.kt:38:9:38:13 | After ... > ... [true] | 1 | Test.kt:38:16:41:3 | { ... } |
| Test.kt:38:9:38:13 | After ... > ... [true] | 2 | Test.kt:39:4:39:4 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 3 | Test.kt:39:4:39:9 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 4 | Test.kt:39:4:39:4 | y |
| Test.kt:38:9:38:13 | After ... > ... [true] | 5 | Test.kt:39:8:39:9 | 10 |
| Test.kt:38:9:38:13 | After ... > ... [true] | 6 | Test.kt:39:4:39:9 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 7 | Test.kt:39:4:39:9 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 8 | Test.kt:39:4:39:4 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 9 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 10 | Test.kt:40:4:40:6 | Before <implicit coercion to unit> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 11 | Test.kt:40:4:40:6 | Before <Stmt> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 12 | Test.kt:40:4:40:6 | { ... } |
| Test.kt:38:9:38:13 | After ... > ... [true] | 13 | Test.kt:40:4:40:6 | var ...; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 14 | Test.kt:40:4:40:6 | Before tmp0 |
| Test.kt:38:9:38:13 | After ... > ... [true] | 15 | Test.kt:40:4:40:4 | x |
| Test.kt:38:9:38:13 | After ... > ... [true] | 16 | Test.kt:40:4:40:6 | tmp0 |
| Test.kt:38:9:38:13 | After ... > ... [true] | 17 | Test.kt:40:4:40:6 | After tmp0 |
| Test.kt:38:9:38:13 | After ... > ... [true] | 18 | Test.kt:40:4:40:6 | After var ...; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 19 | Test.kt:40:4:40:4 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 20 | Test.kt:40:4:40:6 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 21 | Test.kt:40:4:40:4 | x |
| Test.kt:38:9:38:13 | After ... > ... [true] | 22 | Test.kt:40:4:40:6 | Before dec(...) |
| Test.kt:38:9:38:13 | After ... > ... [true] | 23 | Test.kt:40:4:40:6 | tmp0 |
| Test.kt:38:9:38:13 | After ... > ... [true] | 24 | Test.kt:40:4:40:6 | dec(...) |
| Test.kt:38:9:38:13 | After ... > ... [true] | 25 | Test.kt:40:4:40:6 | After dec(...) |
| Test.kt:38:9:38:13 | After ... > ... [true] | 26 | Test.kt:40:4:40:6 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 27 | Test.kt:40:4:40:6 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 28 | Test.kt:40:4:40:4 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 29 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 30 | Test.kt:40:4:40:6 | tmp0 |
| Test.kt:38:9:38:13 | After ... > ... [true] | 31 | Test.kt:40:4:40:6 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 32 | Test.kt:40:4:40:6 | After { ... } |
| Test.kt:38:9:38:13 | After ... > ... [true] | 33 | Test.kt:40:4:40:6 | <Stmt> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 34 | Test.kt:40:4:40:6 | After <Stmt> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 35 | Test.kt:40:4:40:6 | <implicit coercion to unit> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 36 | Test.kt:40:4:40:6 | After <implicit coercion to unit> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 37 | Test.kt:40:4:40:6 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 38 | Test.kt:38:16:41:3 | After { ... } |
| Test.kt:82:1:89:1 | Entry | 0 | Test.kt:82:1:89:1 | Entry |
| Test.kt:82:1:89:1 | Entry | 1 | Test.kt:82:21:89:1 | { ... } |
| Test.kt:82:1:89:1 | Entry | 2 | Test.kt:83:2:88:2 | try ... |
| Test.kt:82:1:89:1 | Entry | 3 | Test.kt:83:6:86:2 | { ... } |
| Test.kt:82:1:89:1 | Entry | 4 | Test.kt:84:7:84:7 | var ...; |
| Test.kt:82:1:89:1 | Entry | 5 | Test.kt:84:7:84:7 | Before x |
| Test.kt:82:1:89:1 | Entry | 6 | Test.kt:84:11:84:18 | Before (...)... |
| Test.kt:82:1:89:1 | Entry | 7 | Test.kt:84:11:84:11 | o |
| Test.kt:82:1:89:1 | Entry | 8 | Test.kt:84:11:84:18 | (...)... |
| Test.kt:82:1:89:1 | Exit | 0 | Test.kt:82:1:89:1 | Exit |
| Test.kt:82:1:89:1 | Normal Exit | 0 | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:82:21:89:1 | { ... } | 0 | Test.kt:82:21:89:1 | { ... } |
| Test.kt:82:21:89:1 | { ... } | 1 | Test.kt:83:2:88:2 | try ... |
| Test.kt:82:21:89:1 | { ... } | 2 | Test.kt:83:6:86:2 | { ... } |
| Test.kt:82:21:89:1 | { ... } | 3 | Test.kt:84:7:84:7 | var ...; |
| Test.kt:82:21:89:1 | { ... } | 4 | Test.kt:84:11:84:11 | o |
| Test.kt:82:21:89:1 | { ... } | 5 | Test.kt:84:11:84:18 | (...)... |
| Test.kt:84:7:84:7 | x | 0 | Test.kt:84:7:84:7 | x |
| Test.kt:84:7:84:7 | x | 1 | Test.kt:85:10:85:10 | 1 |
| Test.kt:84:7:84:7 | x | 2 | Test.kt:85:3:85:10 | return ... |
| Test.kt:84:11:84:18 | After (...)... | 0 | Test.kt:84:11:84:18 | After (...)... |
| Test.kt:84:11:84:18 | After (...)... | 1 | Test.kt:84:7:84:7 | x |
| Test.kt:84:11:84:18 | After (...)... | 2 | Test.kt:84:7:84:7 | After x |
| Test.kt:84:11:84:18 | After (...)... | 3 | Test.kt:84:7:84:7 | After var ...; |
| Test.kt:84:11:84:18 | After (...)... | 4 | Test.kt:85:3:85:10 | Before return ... |
| Test.kt:84:11:84:18 | After (...)... | 5 | Test.kt:85:10:85:10 | 1 |
| Test.kt:84:11:84:18 | After (...)... | 6 | Test.kt:85:3:85:10 | return ... |
| Test.kt:86:4:88:2 | After catch (...) [match] | 0 | Test.kt:86:4:88:2 | After catch (...) [match] |
| Test.kt:86:4:88:2 | After catch (...) [match] | 1 | Test.kt:86:11:86:31 | e |
| Test.kt:86:4:88:2 | After catch (...) [match] | 2 | Test.kt:86:34:88:2 | { ... } |
| Test.kt:86:4:88:2 | After catch (...) [match] | 3 | Test.kt:87:3:87:10 | Before return ... |
| Test.kt:86:4:88:2 | After catch (...) [match] | 4 | Test.kt:87:10:87:10 | 2 |
| Test.kt:86:4:88:2 | After catch (...) [match] | 5 | Test.kt:87:3:87:10 | return ... |
| Test.kt:86:4:88:2 | After catch (...) [no-match] | 0 | Test.kt:86:4:88:2 | After catch (...) [no-match] |
| Test.kt:86:4:88:2 | After catch (...) [no-match] | 1 | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:86:4:88:2 | catch (...) | 0 | Test.kt:86:4:88:2 | catch (...) |
| Test.kt:86:4:88:2 | catch (...) | 1 | Test.kt:86:11:86:31 | e |
| Test.kt:86:4:88:2 | catch (...) | 2 | Test.kt:86:34:88:2 | { ... } |
| Test.kt:86:4:88:2 | catch (...) | 3 | Test.kt:87:10:87:10 | 2 |
| Test.kt:86:4:88:2 | catch (...) | 4 | Test.kt:87:3:87:10 | return ... |
| Test.kt:91:1:98:1 | Exceptional Exit | 0 | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:91:1:98:1 | Entry | 0 | Test.kt:91:1:98:1 | Entry |
| Test.kt:91:1:98:1 | Entry | 1 | Test.kt:91:22:98:1 | { ... } |
| Test.kt:91:1:98:1 | Entry | 2 | Test.kt:92:2:97:2 | try ... |
| Test.kt:91:1:98:1 | Entry | 3 | Test.kt:92:6:95:2 | { ... } |
| Test.kt:91:1:98:1 | Entry | 4 | Test.kt:93:7:93:7 | var ...; |
| Test.kt:91:1:98:1 | Entry | 5 | Test.kt:93:7:93:7 | Before x |
| Test.kt:91:1:98:1 | Entry | 6 | Test.kt:93:12:93:13 | Before ...!! |
| Test.kt:91:1:98:1 | Entry | 7 | Test.kt:93:11:93:11 | o |
| Test.kt:91:1:98:1 | Entry | 8 | Test.kt:93:12:93:13 | ...!! |
| Test.kt:91:1:98:1 | Exit | 0 | Test.kt:91:1:98:1 | Exit |
| Test.kt:91:1:98:1 | Normal Exit | 0 | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:91:22:98:1 | { ... } | 0 | Test.kt:91:22:98:1 | { ... } |
| Test.kt:91:22:98:1 | { ... } | 1 | Test.kt:92:2:97:2 | try ... |
| Test.kt:91:22:98:1 | { ... } | 2 | Test.kt:92:6:95:2 | { ... } |
| Test.kt:91:22:98:1 | { ... } | 3 | Test.kt:93:7:93:7 | var ...; |
| Test.kt:91:22:98:1 | { ... } | 4 | Test.kt:93:11:93:11 | o |
| Test.kt:91:22:98:1 | { ... } | 5 | Test.kt:93:12:93:13 | ...!! |
| Test.kt:93:7:93:7 | x | 0 | Test.kt:93:7:93:7 | x |
| Test.kt:93:7:93:7 | x | 1 | Test.kt:94:10:94:10 | 1 |
| Test.kt:93:7:93:7 | x | 2 | Test.kt:94:3:94:10 | return ... |
| Test.kt:93:12:93:13 | After ...!! | 0 | Test.kt:93:12:93:13 | After ...!! |
| Test.kt:93:12:93:13 | After ...!! | 1 | Test.kt:93:7:93:7 | x |
| Test.kt:93:12:93:13 | After ...!! | 2 | Test.kt:93:7:93:7 | After x |
| Test.kt:93:12:93:13 | After ...!! | 3 | Test.kt:93:7:93:7 | After var ...; |
| Test.kt:93:12:93:13 | After ...!! | 4 | Test.kt:94:3:94:10 | Before return ... |
| Test.kt:93:12:93:13 | After ...!! | 5 | Test.kt:94:10:94:10 | 1 |
| Test.kt:93:12:93:13 | After ...!! | 6 | Test.kt:94:3:94:10 | return ... |
| Test.kt:95:4:97:2 | After catch (...) [match] | 0 | Test.kt:95:4:97:2 | After catch (...) [match] |
| Test.kt:95:4:97:2 | After catch (...) [match] | 1 | Test.kt:95:11:95:33 | e |
| Test.kt:95:4:97:2 | After catch (...) [match] | 2 | Test.kt:95:36:97:2 | { ... } |
| Test.kt:95:4:97:2 | After catch (...) [match] | 3 | Test.kt:96:3:96:10 | Before return ... |
| Test.kt:95:4:97:2 | After catch (...) [match] | 4 | Test.kt:96:10:96:10 | 2 |
| Test.kt:95:4:97:2 | After catch (...) [match] | 5 | Test.kt:96:3:96:10 | return ... |
| Test.kt:95:4:97:2 | After catch (...) [no-match] | 0 | Test.kt:95:4:97:2 | After catch (...) [no-match] |
| Test.kt:95:4:97:2 | After catch (...) [no-match] | 1 | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:95:4:97:2 | catch (...) | 0 | Test.kt:95:4:97:2 | catch (...) |
| Test.kt:95:4:97:2 | catch (...) | 1 | Test.kt:95:11:95:33 | e |
| Test.kt:95:4:97:2 | catch (...) | 2 | Test.kt:95:36:97:2 | { ... } |
| Test.kt:95:4:97:2 | catch (...) | 3 | Test.kt:96:10:96:10 | 2 |
| Test.kt:95:4:97:2 | catch (...) | 4 | Test.kt:96:3:96:10 | return ... |
| Test.kt:100:1:110:1 | Entry | 0 | Test.kt:100:1:110:1 | Entry |
| Test.kt:100:1:110:1 | Entry | 1 | Test.kt:100:25:110:1 | { ... } |
| Test.kt:100:1:110:1 | Entry | 2 | Test.kt:101:5:103:5 | <Expr>; |
| Test.kt:100:1:110:1 | Entry | 3 | Test.kt:101:5:103:5 | when ... |
| Test.kt:100:1:110:1 | Entry | 4 | Test.kt:101:5:103:5 | ... -> ... |
| Test.kt:100:1:110:1 | Entry | 5 | Test.kt:101:9:101:30 | ... && ... |
| Test.kt:100:1:110:1 | Entry | 6 | Test.kt:101:9:101:17 | Before ... (value equals) ... |
| Test.kt:100:1:110:1 | Entry | 7 | Test.kt:101:9:101:9 | x |
| Test.kt:100:1:110:1 | Entry | 8 | Test.kt:101:14:101:17 | null |
| Test.kt:100:1:110:1 | Entry | 9 | Test.kt:101:9:101:17 | ... (value equals) ... |
| Test.kt:100:1:110:1 | Exit | 0 | Test.kt:100:1:110:1 | Exit |
| Test.kt:100:1:110:1 | Normal Exit | 0 | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:100:25:110:1 | { ... } | 0 | Test.kt:100:25:110:1 | { ... } |
| Test.kt:100:25:110:1 | { ... } | 1 | Test.kt:101:5:103:5 | <Expr>; |
| Test.kt:100:25:110:1 | { ... } | 2 | Test.kt:101:5:103:5 | when ... |
| Test.kt:100:25:110:1 | { ... } | 3 | Test.kt:101:5:103:5 | ... -> ... |
| Test.kt:100:25:110:1 | { ... } | 4 | Test.kt:101:9:101:30 | ... && ... |
| Test.kt:100:25:110:1 | { ... } | 5 | Test.kt:101:9:101:9 | x |
| Test.kt:100:25:110:1 | { ... } | 6 | Test.kt:101:14:101:17 | null |
| Test.kt:100:25:110:1 | { ... } | 7 | Test.kt:101:9:101:17 | ... (value equals) ... |
| Test.kt:101:22:101:22 | y | 0 | Test.kt:101:22:101:22 | y |
| Test.kt:101:22:101:22 | y | 1 | Test.kt:101:27:101:30 | null |
| Test.kt:101:22:101:22 | y | 2 | Test.kt:101:22:101:30 | ... (value equals) ... |
| Test.kt:101:33:103:5 | { ... } | 0 | Test.kt:101:33:103:5 | { ... } |
| Test.kt:101:33:103:5 | { ... } | 1 | Test.kt:102:15:102:25 | new Exception(...) |
| Test.kt:101:33:103:5 | { ... } | 2 | Test.kt:102:9:102:25 | throw ... |
| Test.kt:101:33:103:5 | { ... } | 3 | Test.kt:100:1:110:1 | Exceptional Exit |
| Test.kt:105:5:109:5 | <Expr>; | 0 | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:105:5:109:5 | <Expr>; | 1 | Test.kt:105:5:109:5 | when ... |
| Test.kt:105:5:109:5 | <Expr>; | 2 | Test.kt:105:9:107:5 | ... -> ... |
| Test.kt:105:5:109:5 | <Expr>; | 3 | Test.kt:105:9:105:9 | x |
| Test.kt:105:5:109:5 | <Expr>; | 4 | Test.kt:105:14:105:17 | null |
| Test.kt:105:5:109:5 | <Expr>; | 5 | Test.kt:105:9:105:17 | ... (value not-equals) ... |
| Test.kt:105:20:107:5 | { ... } | 0 | Test.kt:105:20:107:5 | { ... } |
| Test.kt:105:20:107:5 | { ... } | 1 | Test.kt:106:9:106:29 | <Expr>; |
| Test.kt:105:20:107:5 | { ... } | 2 | Test.kt:106:17:106:28 | "x not null" |
| Test.kt:105:20:107:5 | { ... } | 3 | Test.kt:106:9:106:29 | println(...) |
| Test.kt:107:16:109:5 | ... -> ... | 0 | Test.kt:107:16:109:5 | ... -> ... |
| Test.kt:107:16:109:5 | ... -> ... | 1 | Test.kt:107:16:107:16 | y |
| Test.kt:107:16:109:5 | ... -> ... | 2 | Test.kt:107:21:107:24 | null |
| Test.kt:107:16:109:5 | ... -> ... | 3 | Test.kt:107:16:107:24 | ... (value not-equals) ... |
| Test.kt:107:27:109:5 | { ... } | 0 | Test.kt:107:27:109:5 | { ... } |
| Test.kt:107:27:109:5 | { ... } | 1 | Test.kt:108:9:108:29 | <Expr>; |
| Test.kt:107:27:109:5 | { ... } | 2 | Test.kt:108:17:108:28 | "y not null" |
| Test.kt:107:27:109:5 | { ... } | 3 | Test.kt:108:9:108:29 | println(...) |
| Test.kt:112:1:116:1 | Exceptional Exit | 0 | Test.kt:112:1:116:1 | Exceptional Exit |
| Test.kt:112:1:116:1 | Exit | 0 | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:1:116:1 | Normal Exit | 0 | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:112:32:116:1 | { ... } | 0 | Test.kt:112:32:116:1 | { ... } |
| Test.kt:112:32:116:1 | { ... } | 1 | Test.kt:113:5:115:5 | <Expr>; |
| Test.kt:112:32:116:1 | { ... } | 2 | Test.kt:113:5:115:5 | when ... |
| Test.kt:112:32:116:1 | { ... } | 3 | Test.kt:113:5:115:5 | ... -> ... |
| Test.kt:112:32:116:1 | { ... } | 4 | Test.kt:113:9:113:14 | ... && ... |
| Test.kt:112:32:116:1 | { ... } | 5 | Test.kt:113:9:113:9 | x |
| Test.kt:113:14:113:14 | y | 0 | Test.kt:113:14:113:14 | y |
| Test.kt:113:17:115:5 | { ... } | 0 | Test.kt:113:17:115:5 | { ... } |
| Test.kt:118:1:124:1 | Exceptional Exit | 0 | Test.kt:118:1:124:1 | Exceptional Exit |
| Test.kt:118:1:124:1 | Exit | 0 | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:1:124:1 | Normal Exit | 0 | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:118:37:124:1 | { ... } | 0 | Test.kt:118:37:124:1 | { ... } |
| Test.kt:118:37:124:1 | { ... } | 1 | Test.kt:119:2:123:12 | <Expr>; |
| Test.kt:118:37:124:1 | { ... } | 2 | Test.kt:119:2:123:12 | when ... |
| Test.kt:118:37:124:1 | { ... } | 3 | Test.kt:120:3:123:10 | ... -> ... |
| Test.kt:118:37:124:1 | { ... } | 4 | Test.kt:120:3:123:3 | when ... |
| Test.kt:118:37:124:1 | { ... } | 5 | Test.kt:121:4:121:9 | ... -> ... |
| Test.kt:118:37:124:1 | { ... } | 6 | Test.kt:121:4:121:4 | x |
| Test.kt:121:9:121:9 | <Expr>; | 0 | Test.kt:121:9:121:9 | <Expr>; |
| Test.kt:121:9:121:9 | <Expr>; | 1 | Test.kt:121:9:121:9 | y |
| Test.kt:122:12:122:16 | ... -> ... | 0 | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:122:12:122:16 | ... -> ... | 1 | Test.kt:122:12:122:16 | true |
| Test.kt:122:12:122:16 | ... -> ... | 2 | Test.kt:122:12:122:16 | <Expr>; |
| Test.kt:122:12:122:16 | ... -> ... | 3 | Test.kt:122:12:122:16 | false |
| Test.kt:123:8:123:10 | { ... } | 0 | Test.kt:123:8:123:10 | { ... } |
| Test.kt:101:9:101:17 | After ... (value equals) ... [false] | 0 | Test.kt:101:9:101:17 | After ... (value equals) ... [false] |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 0 | Test.kt:101:9:101:17 | After ... (value equals) ... [true] |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 1 | Test.kt:101:22:101:30 | Before ... (value equals) ... |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 2 | Test.kt:101:22:101:22 | y |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 3 | Test.kt:101:27:101:30 | null |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 4 | Test.kt:101:22:101:30 | ... (value equals) ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 0 | Test.kt:101:9:101:30 | After ... && ... [false] |
| Test.kt:101:9:101:30 | After ... && ... [false] | 1 | Test.kt:101:5:103:5 | After when ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 2 | Test.kt:101:5:103:5 | After <Expr>; |
| Test.kt:101:9:101:30 | After ... && ... [false] | 3 | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:9:101:30 | After ... && ... [false] | 4 | Test.kt:105:5:109:5 | when ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 5 | Test.kt:105:9:107:5 | ... -> ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 6 | Test.kt:105:9:105:17 | Before ... (value not-equals) ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 7 | Test.kt:105:9:105:9 | x |
| Test.kt:101:9:101:30 | After ... && ... [false] | 8 | Test.kt:105:14:105:17 | null |
| Test.kt:101:9:101:30 | After ... && ... [false] | 9 | Test.kt:105:9:105:17 | ... (value not-equals) ... |
| Test.kt:101:22:101:30 | After ... (value equals) ... [false] | 0 | Test.kt:101:22:101:30 | After ... (value equals) ... [false] |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 0 | Test.kt:101:22:101:30 | After ... (value equals) ... [true] |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 1 | Test.kt:101:9:101:30 | After ... && ... [true] |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 2 | Test.kt:101:33:103:5 | { ... } |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 3 | Test.kt:102:9:102:25 | Before throw ... |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 4 | Test.kt:102:15:102:25 | Before new Exception(...) |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 5 | Test.kt:102:15:102:25 | new Exception(...) |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 6 | Test.kt:102:15:102:25 | After new Exception(...) |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 7 | Test.kt:102:9:102:25 | throw ... |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 8 | Test.kt:100:1:110:1 | Exceptional Exit |
| Test.kt:105:5:109:5 | After when ... | 0 | Test.kt:105:5:109:5 | After when ... |
| Test.kt:105:5:109:5 | After when ... | 1 | Test.kt:105:5:109:5 | After <Expr>; |
| Test.kt:105:5:109:5 | After when ... | 2 | Test.kt:100:25:110:1 | After { ... } |
| Test.kt:105:5:109:5 | After when ... | 3 | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 0 | Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 1 | Test.kt:107:16:109:5 | ... -> ... |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 2 | Test.kt:107:16:107:24 | Before ... (value not-equals) ... |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 3 | Test.kt:107:16:107:16 | y |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 4 | Test.kt:107:21:107:24 | null |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 5 | Test.kt:107:16:107:24 | ... (value not-equals) ... |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 0 | Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 1 | Test.kt:105:20:107:5 | { ... } |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 2 | Test.kt:106:9:106:29 | <Expr>; |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 3 | Test.kt:106:9:106:29 | Before println(...) |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 4 | Test.kt:106:17:106:28 | "x not null" |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 5 | Test.kt:106:9:106:29 | println(...) |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 6 | Test.kt:106:9:106:29 | After println(...) |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 7 | Test.kt:106:9:106:29 | After <Expr>; |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 8 | Test.kt:105:20:107:5 | After { ... } |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | 0 | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 0 | Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 1 | Test.kt:107:27:109:5 | { ... } |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 2 | Test.kt:108:9:108:29 | <Expr>; |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 3 | Test.kt:108:9:108:29 | Before println(...) |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 4 | Test.kt:108:17:108:28 | "y not null" |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 5 | Test.kt:108:9:108:29 | println(...) |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 6 | Test.kt:108:9:108:29 | After println(...) |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 7 | Test.kt:108:9:108:29 | After <Expr>; |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 8 | Test.kt:107:27:109:5 | After { ... } |
| Test.kt:112:1:116:1 | Entry | 0 | Test.kt:112:1:116:1 | Entry |
| Test.kt:112:1:116:1 | Entry | 1 | Test.kt:112:32:116:1 | { ... } |
| Test.kt:112:1:116:1 | Entry | 2 | Test.kt:113:5:115:5 | <Expr>; |
| Test.kt:112:1:116:1 | Entry | 3 | Test.kt:113:5:115:5 | when ... |
| Test.kt:112:1:116:1 | Entry | 4 | Test.kt:113:5:115:5 | ... -> ... |
| Test.kt:112:1:116:1 | Entry | 5 | Test.kt:113:9:113:14 | ... && ... |
| Test.kt:112:1:116:1 | Entry | 6 | Test.kt:113:9:113:9 | x |
| Test.kt:113:5:115:5 | After when ... | 0 | Test.kt:113:5:115:5 | After when ... |
| Test.kt:113:5:115:5 | After when ... | 1 | Test.kt:113:5:115:5 | After <Expr>; |
| Test.kt:113:5:115:5 | After when ... | 2 | Test.kt:112:32:116:1 | After { ... } |
| Test.kt:113:5:115:5 | After when ... | 3 | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:113:5:115:5 | After when ... | 4 | Test.kt:112:1:116:1 | Exit |
| Test.kt:113:9:113:9 | After x [false] | 0 | Test.kt:113:9:113:9 | After x [false] |
| Test.kt:113:9:113:9 | After x [true] | 0 | Test.kt:113:9:113:9 | After x [true] |
| Test.kt:113:9:113:9 | After x [true] | 1 | Test.kt:113:14:113:14 | y |
| Test.kt:113:9:113:14 | After ... && ... [false] | 0 | Test.kt:113:9:113:14 | After ... && ... [false] |
| Test.kt:113:14:113:14 | After y [false] | 0 | Test.kt:113:14:113:14 | After y [false] |
| Test.kt:113:14:113:14 | After y [true] | 0 | Test.kt:113:14:113:14 | After y [true] |
| Test.kt:113:14:113:14 | After y [true] | 1 | Test.kt:113:9:113:14 | After ... && ... [true] |
| Test.kt:113:14:113:14 | After y [true] | 2 | Test.kt:113:17:115:5 | { ... } |
| Test.kt:118:1:124:1 | Entry | 0 | Test.kt:118:1:124:1 | Entry |
| Test.kt:118:1:124:1 | Entry | 1 | Test.kt:118:37:124:1 | { ... } |
| Test.kt:118:1:124:1 | Entry | 2 | Test.kt:119:2:123:12 | <Expr>; |
| Test.kt:118:1:124:1 | Entry | 3 | Test.kt:119:2:123:12 | when ... |
| Test.kt:118:1:124:1 | Entry | 4 | Test.kt:120:3:123:10 | ... -> ... |
| Test.kt:118:1:124:1 | Entry | 5 | Test.kt:120:3:123:3 | when ... |
| Test.kt:118:1:124:1 | Entry | 6 | Test.kt:121:4:121:9 | ... -> ... |
| Test.kt:118:1:124:1 | Entry | 7 | Test.kt:121:4:121:4 | x |
| Test.kt:119:2:123:12 | After when ... | 0 | Test.kt:119:2:123:12 | After when ... |
| Test.kt:119:2:123:12 | After when ... | 1 | Test.kt:119:2:123:12 | After <Expr>; |
| Test.kt:119:2:123:12 | After when ... | 2 | Test.kt:118:37:124:1 | After { ... } |
| Test.kt:119:2:123:12 | After when ... | 3 | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:119:2:123:12 | After when ... | 4 | Test.kt:118:1:124:1 | Exit |
| Test.kt:120:3:123:3 | After when ... [false] | 0 | Test.kt:120:3:123:3 | After when ... [false] |
| Test.kt:120:3:123:3 | After when ... [true] | 0 | Test.kt:120:3:123:3 | After when ... [true] |
| Test.kt:120:3:123:3 | After when ... [true] | 1 | Test.kt:123:8:123:10 | { ... } |
| Test.kt:121:4:121:4 | After x [false] | 0 | Test.kt:121:4:121:4 | After x [false] |
| Test.kt:121:4:121:4 | After x [false] | 1 | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:121:4:121:4 | After x [false] | 2 | Test.kt:122:12:122:16 | true |
| Test.kt:121:4:121:4 | After x [false] | 3 | Test.kt:122:12:122:16 | After true [true] |
| Test.kt:121:4:121:4 | After x [false] | 4 | Test.kt:122:12:122:16 | <Expr>; |
| Test.kt:121:4:121:4 | After x [false] | 5 | Test.kt:122:12:122:16 | false |
| Test.kt:121:4:121:4 | After x [false] | 6 | Test.kt:122:12:122:16 | After <Expr>; |
| Test.kt:121:4:121:4 | After x [true] | 0 | Test.kt:121:4:121:4 | After x [true] |
| Test.kt:121:4:121:4 | After x [true] | 1 | Test.kt:121:9:121:9 | <Expr>; |
| Test.kt:121:4:121:4 | After x [true] | 2 | Test.kt:121:9:121:9 | y |
| Test.kt:121:4:121:4 | After x [true] | 3 | Test.kt:121:9:121:9 | After <Expr>; |

View File

@@ -1,6 +1,3 @@
| Test.kt:3:8:80:1 | { ... } | Test.kt:3:8:80:1 | Exit |
| Test.kt:4:2:79:2 | Normal Exit | Test.kt:4:2:79:2 | Exit |
| Test.kt:4:13:79:2 | { ... } | Test.kt:4:2:79:2 | Exit |
| Test.kt:4:13:79:2 | { ... } | Test.kt:4:2:79:2 | Normal Exit |
| Test.kt:4:13:79:2 | { ... } | Test.kt:11:3:16:3 | ... -> ... |
| Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } |
@@ -12,7 +9,6 @@
| Test.kt:4:13:79:2 | { ... } | Test.kt:38:9:38:9 | x |
| Test.kt:4:13:79:2 | { ... } | Test.kt:38:16:41:3 | { ... } |
| Test.kt:4:13:79:2 | { ... } | Test.kt:43:3:43:3 | <Expr>; |
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:4:2:79:2 | Exit |
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:4:2:79:2 | Normal Exit |
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:21:3:24:9 | ... -> ... |
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:22:4:22:4 | <Expr>; |
@@ -31,16 +27,22 @@
| Test.kt:35:3:35:3 | <Expr>; | Test.kt:43:3:43:3 | <Expr>; |
| Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } |
| Test.kt:38:9:38:9 | x | Test.kt:43:3:43:3 | <Expr>; |
| Test.kt:82:1:89:1 | Normal Exit | Test.kt:82:1:89:1 | Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:84:7:84:7 | x |
| Test.kt:82:21:89:1 | { ... } | Test.kt:86:4:88:2 | catch (...) |
| Test.kt:91:1:98:1 | Normal Exit | Test.kt:91:1:98:1 | Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:86:11:86:31 | e |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:86:11:86:31 | e |
| Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Exit |
| Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:91:22:98:1 | { ... } | Test.kt:93:7:93:7 | x |
| Test.kt:91:22:98:1 | { ... } | Test.kt:95:4:97:2 | catch (...) |
| Test.kt:91:22:98:1 | { ... } | Test.kt:95:11:95:33 | e |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:95:11:95:33 | e |
| Test.kt:100:25:110:1 | { ... } | Test.kt:100:1:110:1 | Exit |
| Test.kt:100:25:110:1 | { ... } | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:100:25:110:1 | { ... } | Test.kt:101:22:101:22 | y |
@@ -55,16 +57,11 @@
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:16:109:5 | ... -> ... |
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:27:109:5 | { ... } |
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
| Test.kt:112:1:116:1 | Normal Exit | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y |
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:17:115:5 | { ... } |
| Test.kt:113:14:113:14 | y | Test.kt:113:17:115:5 | { ... } |
| Test.kt:118:1:124:1 | Normal Exit | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:37:124:1 | { ... } | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:37:124:1 | { ... } | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:118:37:124:1 | { ... } | Test.kt:121:9:121:9 | <Expr>; |
| Test.kt:118:37:124:1 | { ... } | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:118:37:124:1 | { ... } | Test.kt:123:8:123:10 | { ... } |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:123:8:123:10 | { ... } |

View File

@@ -1,6 +1,7 @@
import java
import semmle.code.java.controlflow.Dominance
import utils.test.BasicBlock
from BasicBlock b, BasicBlock b2
where b.strictlyDominates(b2)
select b, b2
select getFirstAstNode(b), getFirstAstNode(b2)

View File

@@ -1,7 +1,3 @@
| Test.kt:3:8:80:1 | Exceptional Exit | Test.kt:3:8:80:1 | Exit |
| Test.kt:3:8:80:1 | { ... } | Test.kt:3:8:80:1 | Exit |
| Test.kt:4:2:79:2 | Exceptional Exit | Test.kt:4:2:79:2 | Exit |
| Test.kt:4:2:79:2 | Normal Exit | Test.kt:4:2:79:2 | Exit |
| Test.kt:4:13:79:2 | { ... } | Test.kt:11:3:16:3 | ... -> ... |
| Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } |
| Test.kt:11:3:16:3 | ... -> ... | Test.kt:18:3:18:3 | <Expr>; |
@@ -9,8 +5,9 @@
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:21:3:24:9 | ... -> ... |
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:22:4:22:4 | <Expr>; |
| Test.kt:21:3:24:9 | ... -> ... | Test.kt:4:2:79:2 | Normal Exit |
| Test.kt:22:4:22:4 | <Expr>; | Test.kt:30:7:30:12 | After ... (value equals) ... [false] |
| Test.kt:22:4:22:4 | <Expr>; | Test.kt:30:15:33:3 | { ... } |
| Test.kt:22:4:22:4 | <Expr>; | Test.kt:35:3:35:3 | <Expr>; |
| Test.kt:30:7:30:12 | After ... (value equals) ... [false] | Test.kt:35:3:35:3 | <Expr>; |
| Test.kt:30:15:33:3 | { ... } | Test.kt:35:3:35:3 | <Expr>; |
| Test.kt:35:3:35:3 | <Expr>; | Test.kt:38:9:38:9 | x |
| Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } |
@@ -22,37 +19,45 @@
| Test.kt:82:21:89:1 | { ... } | Test.kt:84:7:84:7 | x |
| Test.kt:82:21:89:1 | { ... } | Test.kt:86:4:88:2 | catch (...) |
| Test.kt:84:7:84:7 | x | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:86:11:86:31 | e |
| Test.kt:86:11:86:31 | e | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:91:1:98:1 | Exceptional Exit | Test.kt:91:1:98:1 | Exit |
| Test.kt:91:1:98:1 | Normal Exit | Test.kt:91:1:98:1 | Exit |
| Test.kt:91:22:98:1 | { ... } | Test.kt:93:7:93:7 | x |
| Test.kt:91:22:98:1 | { ... } | Test.kt:95:4:97:2 | catch (...) |
| Test.kt:93:7:93:7 | x | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:95:11:95:33 | e |
| Test.kt:95:11:95:33 | e | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:100:1:110:1 | Normal Exit | Test.kt:100:1:110:1 | Exit |
| Test.kt:100:25:110:1 | { ... } | Test.kt:101:9:101:17 | After ... (value equals) ... [false] |
| Test.kt:100:25:110:1 | { ... } | Test.kt:101:22:101:22 | y |
| Test.kt:100:25:110:1 | { ... } | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:9:101:17 | After ... (value equals) ... [false] | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:22:101:22 | y | Test.kt:101:22:101:30 | After ... (value equals) ... [false] |
| Test.kt:101:22:101:22 | y | Test.kt:101:33:103:5 | { ... } |
| Test.kt:101:22:101:22 | y | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:22:101:30 | After ... (value equals) ... [false] | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:33:103:5 | { ... } | Test.kt:100:1:110:1 | Exit |
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:105:20:107:5 | { ... } |
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:16:109:5 | ... -> ... |
| Test.kt:105:20:107:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] |
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
| Test.kt:107:27:109:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:112:1:116:1 | Exceptional Exit | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:1:116:1 | Normal Exit | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:9:113:9 | After x [false] |
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y |
| Test.kt:113:14:113:14 | y | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:113:9:113:9 | After x [false] | Test.kt:113:9:113:14 | After ... && ... [false] |
| Test.kt:113:9:113:14 | After ... && ... [false] | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:113:14:113:14 | After y [false] | Test.kt:113:9:113:14 | After ... && ... [false] |
| Test.kt:113:14:113:14 | y | Test.kt:113:14:113:14 | After y [false] |
| Test.kt:113:14:113:14 | y | Test.kt:113:17:115:5 | { ... } |
| Test.kt:113:17:115:5 | { ... } | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:118:1:124:1 | Exceptional Exit | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:1:124:1 | Normal Exit | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:37:124:1 | { ... } | Test.kt:121:9:121:9 | <Expr>; |
| Test.kt:118:37:124:1 | { ... } | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:120:3:123:3 | After when ... [false] | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:120:3:123:3 | After when ... [false] |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:123:8:123:10 | { ... } |
| Test.kt:122:12:122:16 | ... -> ... | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:122:12:122:16 | ... -> ... | Test.kt:120:3:123:3 | After when ... [false] |
| Test.kt:122:12:122:16 | ... -> ... | Test.kt:123:8:123:10 | { ... } |
| Test.kt:123:8:123:10 | { ... } | Test.kt:118:1:124:1 | Normal Exit |

View File

@@ -1,5 +1,6 @@
import java
import utils.test.BasicBlock
from BasicBlock b, BasicBlock b2
where b.getASuccessor() = b2
select b, b2
select getFirstAstNodeOrSynth(b), getFirstAstNodeOrSynth(b2)

View File

@@ -1,12 +1,10 @@
#select
| Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt | Test.kt:3:8:80:1 | { ... } | BlockStmt |
| Test.kt:3:8:80:1 | Exceptional Exit | Constructor | Test.kt:3:8:80:1 | Exit | Constructor |
| Test.kt:3:8:80:1 | Exit | Constructor | file://:0:0:0:0 | <none> | <none> |
| Test.kt:3:8:80:1 | Entry | Constructor | Test.kt:3:8:80:1 | { ... } | BlockStmt |
| Test.kt:3:8:80:1 | Normal Exit | Constructor | Test.kt:3:8:80:1 | Exit | Constructor |
| Test.kt:3:8:80:1 | { ... } | BlockStmt | Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt |
| Test.kt:3:8:80:1 | { ... } | BlockStmt | Test.kt:3:8:80:1 | Normal Exit | Constructor |
| Test.kt:4:2:79:2 | Exceptional Exit | Method | Test.kt:4:2:79:2 | Exit | Method |
| Test.kt:4:2:79:2 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:4:2:79:2 | Entry | Method | Test.kt:4:13:79:2 | { ... } | BlockStmt |
| Test.kt:4:2:79:2 | Normal Exit | Method | Test.kt:4:2:79:2 | Exit | Method |
| Test.kt:4:13:79:2 | { ... } | BlockStmt | Test.kt:5:7:5:7 | var ...; | LocalVariableDeclStmt |
| Test.kt:5:7:5:7 | var ...; | LocalVariableDeclStmt | Test.kt:5:16:5:16 | 0 | IntegerLiteral |
@@ -31,17 +29,21 @@
| Test.kt:11:7:11:11 | ... > ... | GTExpr | Test.kt:11:14:14:3 | { ... } | BlockStmt |
| Test.kt:11:11:11:11 | 0 | IntegerLiteral | Test.kt:11:7:11:11 | ... > ... | GTExpr |
| Test.kt:11:14:14:3 | { ... } | BlockStmt | Test.kt:12:4:12:4 | <Expr>; | ExprStmt |
| Test.kt:12:4:12:4 | <Expr>; | ExprStmt | Test.kt:12:8:12:9 | 20 | LongLiteral |
| Test.kt:12:4:12:4 | <Expr>; | ExprStmt | Test.kt:12:4:12:4 | y | VarAccess |
| Test.kt:12:4:12:4 | y | VarAccess | Test.kt:12:8:12:9 | 20 | LongLiteral |
| Test.kt:12:4:12:9 | ...=... | AssignExpr | Test.kt:13:4:13:4 | <Expr>; | ExprStmt |
| Test.kt:12:8:12:9 | 20 | LongLiteral | Test.kt:12:4:12:9 | ...=... | AssignExpr |
| Test.kt:13:4:13:4 | <Expr>; | ExprStmt | Test.kt:13:8:13:9 | 10 | IntegerLiteral |
| Test.kt:13:4:13:4 | <Expr>; | ExprStmt | Test.kt:13:4:13:4 | z | VarAccess |
| Test.kt:13:4:13:4 | z | VarAccess | Test.kt:13:8:13:9 | 10 | IntegerLiteral |
| Test.kt:13:4:13:9 | ...=... | AssignExpr | Test.kt:18:3:18:3 | <Expr>; | ExprStmt |
| Test.kt:13:8:13:9 | 10 | IntegerLiteral | Test.kt:13:4:13:9 | ...=... | AssignExpr |
| Test.kt:14:10:16:3 | { ... } | BlockStmt | Test.kt:15:4:15:4 | <Expr>; | ExprStmt |
| Test.kt:15:4:15:4 | <Expr>; | ExprStmt | Test.kt:15:8:15:9 | 30 | LongLiteral |
| Test.kt:15:4:15:4 | <Expr>; | ExprStmt | Test.kt:15:4:15:4 | y | VarAccess |
| Test.kt:15:4:15:4 | y | VarAccess | Test.kt:15:8:15:9 | 30 | LongLiteral |
| Test.kt:15:4:15:9 | ...=... | AssignExpr | Test.kt:18:3:18:3 | <Expr>; | ExprStmt |
| Test.kt:15:8:15:9 | 30 | LongLiteral | Test.kt:15:4:15:9 | ...=... | AssignExpr |
| Test.kt:18:3:18:3 | <Expr>; | ExprStmt | Test.kt:18:7:18:7 | 0 | IntegerLiteral |
| Test.kt:18:3:18:3 | <Expr>; | ExprStmt | Test.kt:18:3:18:3 | z | VarAccess |
| Test.kt:18:3:18:3 | z | VarAccess | Test.kt:18:7:18:7 | 0 | IntegerLiteral |
| Test.kt:18:3:18:7 | ...=... | AssignExpr | Test.kt:21:3:24:9 | <Expr>; | ExprStmt |
| Test.kt:18:7:18:7 | 0 | IntegerLiteral | Test.kt:18:3:18:7 | ...=... | AssignExpr |
| Test.kt:21:3:24:9 | ... -> ... | WhenBranch | Test.kt:21:3:24:9 | true | BooleanLiteral |
@@ -53,12 +55,14 @@
| Test.kt:21:6:21:10 | ... < ... | LTExpr | Test.kt:21:3:24:9 | ... -> ... | WhenBranch |
| Test.kt:21:6:21:10 | ... < ... | LTExpr | Test.kt:22:4:22:4 | <Expr>; | ExprStmt |
| Test.kt:21:10:21:10 | 0 | IntegerLiteral | Test.kt:21:6:21:10 | ... < ... | LTExpr |
| Test.kt:22:4:22:4 | <Expr>; | ExprStmt | Test.kt:22:8:22:9 | 40 | LongLiteral |
| Test.kt:22:4:22:4 | <Expr>; | ExprStmt | Test.kt:22:4:22:4 | y | VarAccess |
| Test.kt:22:4:22:4 | y | VarAccess | Test.kt:22:8:22:9 | 40 | LongLiteral |
| Test.kt:22:4:22:9 | ...=... | AssignExpr | Test.kt:27:3:27:3 | <Expr>; | ExprStmt |
| Test.kt:22:8:22:9 | 40 | LongLiteral | Test.kt:22:4:22:9 | ...=... | AssignExpr |
| Test.kt:24:4:24:9 | INSTANCE | VarAccess | Test.kt:24:4:24:9 | return ... | ReturnStmt |
| Test.kt:24:4:24:9 | return ... | ReturnStmt | Test.kt:4:2:79:2 | Normal Exit | Method |
| Test.kt:27:3:27:3 | <Expr>; | ExprStmt | Test.kt:27:7:27:8 | 10 | IntegerLiteral |
| Test.kt:27:3:27:3 | <Expr>; | ExprStmt | Test.kt:27:3:27:3 | z | VarAccess |
| Test.kt:27:3:27:3 | z | VarAccess | Test.kt:27:7:27:8 | 10 | IntegerLiteral |
| Test.kt:27:3:27:8 | ...=... | AssignExpr | Test.kt:30:3:33:3 | <Expr>; | ExprStmt |
| Test.kt:27:7:27:8 | 10 | IntegerLiteral | Test.kt:27:3:27:8 | ...=... | AssignExpr |
| Test.kt:30:3:33:3 | ... -> ... | WhenBranch | Test.kt:30:7:30:7 | x | VarAccess |
@@ -69,13 +73,16 @@
| Test.kt:30:7:30:12 | ... (value equals) ... | ValueEQExpr | Test.kt:35:3:35:3 | <Expr>; | ExprStmt |
| Test.kt:30:12:30:12 | 0 | IntegerLiteral | Test.kt:30:7:30:12 | ... (value equals) ... | ValueEQExpr |
| Test.kt:30:15:33:3 | { ... } | BlockStmt | Test.kt:31:4:31:4 | <Expr>; | ExprStmt |
| Test.kt:31:4:31:4 | <Expr>; | ExprStmt | Test.kt:31:8:31:9 | 60 | LongLiteral |
| Test.kt:31:4:31:4 | <Expr>; | ExprStmt | Test.kt:31:4:31:4 | y | VarAccess |
| Test.kt:31:4:31:4 | y | VarAccess | Test.kt:31:8:31:9 | 60 | LongLiteral |
| Test.kt:31:4:31:9 | ...=... | AssignExpr | Test.kt:32:4:32:4 | <Expr>; | ExprStmt |
| Test.kt:31:8:31:9 | 60 | LongLiteral | Test.kt:31:4:31:9 | ...=... | AssignExpr |
| Test.kt:32:4:32:4 | <Expr>; | ExprStmt | Test.kt:32:8:32:9 | 10 | IntegerLiteral |
| Test.kt:32:4:32:4 | <Expr>; | ExprStmt | Test.kt:32:4:32:4 | z | VarAccess |
| Test.kt:32:4:32:4 | z | VarAccess | Test.kt:32:8:32:9 | 10 | IntegerLiteral |
| Test.kt:32:4:32:9 | ...=... | AssignExpr | Test.kt:35:3:35:3 | <Expr>; | ExprStmt |
| Test.kt:32:8:32:9 | 10 | IntegerLiteral | Test.kt:32:4:32:9 | ...=... | AssignExpr |
| Test.kt:35:3:35:3 | <Expr>; | ExprStmt | Test.kt:35:7:35:8 | 20 | IntegerLiteral |
| Test.kt:35:3:35:3 | <Expr>; | ExprStmt | Test.kt:35:3:35:3 | z | VarAccess |
| Test.kt:35:3:35:3 | z | VarAccess | Test.kt:35:7:35:8 | 20 | IntegerLiteral |
| Test.kt:35:3:35:8 | ...=... | AssignExpr | Test.kt:38:3:41:3 | while (...) | WhileStmt |
| Test.kt:35:7:35:8 | 20 | IntegerLiteral | Test.kt:35:3:35:8 | ...=... | AssignExpr |
| Test.kt:38:3:41:3 | while (...) | WhileStmt | Test.kt:38:9:38:9 | x | VarAccess |
@@ -84,35 +91,40 @@
| Test.kt:38:9:38:13 | ... > ... | GTExpr | Test.kt:43:3:43:3 | <Expr>; | ExprStmt |
| Test.kt:38:13:38:13 | 0 | IntegerLiteral | Test.kt:38:9:38:13 | ... > ... | GTExpr |
| Test.kt:38:16:41:3 | { ... } | BlockStmt | Test.kt:39:4:39:4 | <Expr>; | ExprStmt |
| Test.kt:39:4:39:4 | <Expr>; | ExprStmt | Test.kt:39:8:39:9 | 10 | LongLiteral |
| Test.kt:39:4:39:4 | <Expr>; | ExprStmt | Test.kt:39:4:39:4 | y | VarAccess |
| Test.kt:39:4:39:4 | y | VarAccess | Test.kt:39:8:39:9 | 10 | LongLiteral |
| Test.kt:39:4:39:9 | ...=... | AssignExpr | Test.kt:40:4:40:6 | <Expr>; | ExprStmt |
| Test.kt:39:8:39:9 | 10 | LongLiteral | Test.kt:39:4:39:9 | ...=... | AssignExpr |
| Test.kt:40:4:40:4 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess |
| Test.kt:40:4:40:4 | <Expr>; | ExprStmt | Test.kt:40:4:40:4 | x | VarAccess |
| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | tmp0 | LocalVariableDeclExpr |
| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | tmp0 | VarAccess |
| Test.kt:40:4:40:6 | ...=... | AssignExpr | Test.kt:40:4:40:6 | <Expr>; | ExprStmt |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | <Stmt> | StmtExpr |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess |
| Test.kt:40:4:40:6 | <Stmt> | StmtExpr | Test.kt:40:4:40:6 | { ... } | BlockStmt |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | { ... } | BlockStmt |
| Test.kt:40:4:40:6 | <Stmt> | StmtExpr | Test.kt:40:4:40:6 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr |
| Test.kt:40:4:40:6 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr | Test.kt:38:9:38:9 | x | VarAccess |
| Test.kt:40:4:40:6 | dec(...) | MethodCall | Test.kt:40:4:40:6 | ...=... | AssignExpr |
| Test.kt:40:4:40:6 | tmp0 | LocalVariableDeclExpr | Test.kt:40:4:40:4 | <Expr>; | ExprStmt |
| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr |
| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | <Stmt> | StmtExpr |
| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | dec(...) | MethodCall |
| Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt | Test.kt:40:4:40:4 | x | VarAccess |
| Test.kt:40:4:40:6 | { ... } | BlockStmt | Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt |
| Test.kt:43:3:43:3 | <Expr>; | ExprStmt | Test.kt:43:7:43:8 | 30 | IntegerLiteral |
| Test.kt:43:3:43:3 | <Expr>; | ExprStmt | Test.kt:43:3:43:3 | z | VarAccess |
| Test.kt:43:3:43:3 | z | VarAccess | Test.kt:43:7:43:8 | 30 | IntegerLiteral |
| Test.kt:43:3:43:8 | ...=... | AssignExpr | Test.kt:73:3:73:3 | <Expr>; | ExprStmt |
| Test.kt:43:7:43:8 | 30 | IntegerLiteral | Test.kt:43:3:43:8 | ...=... | AssignExpr |
| Test.kt:73:3:73:3 | <Expr>; | ExprStmt | Test.kt:73:7:73:8 | 50 | IntegerLiteral |
| Test.kt:73:3:73:3 | <Expr>; | ExprStmt | Test.kt:73:3:73:3 | z | VarAccess |
| Test.kt:73:3:73:3 | z | VarAccess | Test.kt:73:7:73:8 | 50 | IntegerLiteral |
| Test.kt:73:3:73:8 | ...=... | AssignExpr | Test.kt:77:3:77:3 | <Expr>; | ExprStmt |
| Test.kt:73:7:73:8 | 50 | IntegerLiteral | Test.kt:73:3:73:8 | ...=... | AssignExpr |
| Test.kt:77:3:77:3 | <Expr>; | ExprStmt | Test.kt:77:7:77:8 | 40 | IntegerLiteral |
| Test.kt:77:3:77:3 | <Expr>; | ExprStmt | Test.kt:77:3:77:3 | w | VarAccess |
| Test.kt:77:3:77:3 | w | VarAccess | Test.kt:77:7:77:8 | 40 | IntegerLiteral |
| Test.kt:77:3:77:8 | ...=... | AssignExpr | Test.kt:78:3:78:8 | INSTANCE | VarAccess |
| Test.kt:77:7:77:8 | 40 | IntegerLiteral | Test.kt:77:3:77:8 | ...=... | AssignExpr |
| Test.kt:78:3:78:8 | INSTANCE | VarAccess | Test.kt:78:3:78:8 | return ... | ReturnStmt |
| Test.kt:78:3:78:8 | return ... | ReturnStmt | Test.kt:4:2:79:2 | Normal Exit | Method |
| Test.kt:82:1:89:1 | Entry | Method | Test.kt:82:21:89:1 | { ... } | BlockStmt |
| Test.kt:82:1:89:1 | Exceptional Exit | Method | Test.kt:82:1:89:1 | Exit | Method |
| Test.kt:82:1:89:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:82:1:89:1 | Normal Exit | Method | Test.kt:82:1:89:1 | Exit | Method |
| Test.kt:82:21:89:1 | { ... } | BlockStmt | Test.kt:83:2:88:2 | try ... | TryStmt |
| Test.kt:83:2:88:2 | try ... | TryStmt | Test.kt:83:6:86:2 | { ... } | BlockStmt |
@@ -124,13 +136,14 @@
| Test.kt:84:11:84:18 | (...)... | CastExpr | Test.kt:86:4:88:2 | catch (...) | CatchClause |
| Test.kt:85:3:85:10 | return ... | ReturnStmt | Test.kt:82:1:89:1 | Normal Exit | Method |
| Test.kt:85:10:85:10 | 1 | IntegerLiteral | Test.kt:85:3:85:10 | return ... | ReturnStmt |
| Test.kt:86:4:88:2 | catch (...) | CatchClause | Test.kt:82:1:89:1 | Exceptional Exit | Method |
| Test.kt:86:4:88:2 | catch (...) | CatchClause | Test.kt:86:11:86:31 | e | LocalVariableDeclExpr |
| Test.kt:86:11:86:31 | e | LocalVariableDeclExpr | Test.kt:86:34:88:2 | { ... } | BlockStmt |
| Test.kt:86:34:88:2 | { ... } | BlockStmt | Test.kt:87:10:87:10 | 2 | IntegerLiteral |
| Test.kt:87:3:87:10 | return ... | ReturnStmt | Test.kt:82:1:89:1 | Normal Exit | Method |
| Test.kt:87:10:87:10 | 2 | IntegerLiteral | Test.kt:87:3:87:10 | return ... | ReturnStmt |
| Test.kt:91:1:98:1 | Entry | Method | Test.kt:91:22:98:1 | { ... } | BlockStmt |
| Test.kt:91:1:98:1 | Exceptional Exit | Method | Test.kt:91:1:98:1 | Exit | Method |
| Test.kt:91:1:98:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:91:1:98:1 | Normal Exit | Method | Test.kt:91:1:98:1 | Exit | Method |
| Test.kt:91:22:98:1 | { ... } | BlockStmt | Test.kt:92:2:97:2 | try ... | TryStmt |
| Test.kt:92:2:97:2 | try ... | TryStmt | Test.kt:92:6:95:2 | { ... } | BlockStmt |
@@ -142,13 +155,14 @@
| Test.kt:93:12:93:13 | ...!! | NotNullExpr | Test.kt:95:4:97:2 | catch (...) | CatchClause |
| Test.kt:94:3:94:10 | return ... | ReturnStmt | Test.kt:91:1:98:1 | Normal Exit | Method |
| Test.kt:94:10:94:10 | 1 | IntegerLiteral | Test.kt:94:3:94:10 | return ... | ReturnStmt |
| Test.kt:95:4:97:2 | catch (...) | CatchClause | Test.kt:91:1:98:1 | Exceptional Exit | Method |
| Test.kt:95:4:97:2 | catch (...) | CatchClause | Test.kt:95:11:95:33 | e | LocalVariableDeclExpr |
| Test.kt:95:11:95:33 | e | LocalVariableDeclExpr | Test.kt:95:36:97:2 | { ... } | BlockStmt |
| Test.kt:95:36:97:2 | { ... } | BlockStmt | Test.kt:96:10:96:10 | 2 | IntegerLiteral |
| Test.kt:96:3:96:10 | return ... | ReturnStmt | Test.kt:91:1:98:1 | Normal Exit | Method |
| Test.kt:96:10:96:10 | 2 | IntegerLiteral | Test.kt:96:3:96:10 | return ... | ReturnStmt |
| Test.kt:100:1:110:1 | Entry | Method | Test.kt:100:25:110:1 | { ... } | BlockStmt |
| Test.kt:100:1:110:1 | Exceptional Exit | Method | Test.kt:100:1:110:1 | Exit | Method |
| Test.kt:100:1:110:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:100:1:110:1 | Normal Exit | Method | Test.kt:100:1:110:1 | Exit | Method |
| Test.kt:100:25:110:1 | { ... } | BlockStmt | Test.kt:101:5:103:5 | <Expr>; | ExprStmt |
| Test.kt:101:5:103:5 | ... -> ... | WhenBranch | Test.kt:101:9:101:30 | ... && ... | AndLogicalExpr |
@@ -186,8 +200,7 @@
| Test.kt:108:9:108:29 | <Expr>; | ExprStmt | Test.kt:108:17:108:28 | "y not null" | StringLiteral |
| Test.kt:108:9:108:29 | println(...) | MethodCall | Test.kt:100:1:110:1 | Normal Exit | Method |
| Test.kt:108:17:108:28 | "y not null" | StringLiteral | Test.kt:108:9:108:29 | println(...) | MethodCall |
| Test.kt:112:1:116:1 | Exceptional Exit | Method | Test.kt:112:1:116:1 | Exit | Method |
| Test.kt:112:1:116:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:112:1:116:1 | Entry | Method | Test.kt:112:32:116:1 | { ... } | BlockStmt |
| Test.kt:112:1:116:1 | Normal Exit | Method | Test.kt:112:1:116:1 | Exit | Method |
| Test.kt:112:32:116:1 | { ... } | BlockStmt | Test.kt:113:5:115:5 | <Expr>; | ExprStmt |
| Test.kt:113:5:115:5 | ... -> ... | WhenBranch | Test.kt:113:9:113:14 | ... && ... | AndLogicalExpr |
@@ -199,8 +212,7 @@
| Test.kt:113:14:113:14 | y | VarAccess | Test.kt:112:1:116:1 | Normal Exit | Method |
| Test.kt:113:14:113:14 | y | VarAccess | Test.kt:113:17:115:5 | { ... } | BlockStmt |
| Test.kt:113:17:115:5 | { ... } | BlockStmt | Test.kt:112:1:116:1 | Normal Exit | Method |
| Test.kt:118:1:124:1 | Exceptional Exit | Method | Test.kt:118:1:124:1 | Exit | Method |
| Test.kt:118:1:124:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:118:1:124:1 | Entry | Method | Test.kt:118:37:124:1 | { ... } | BlockStmt |
| Test.kt:118:1:124:1 | Normal Exit | Method | Test.kt:118:1:124:1 | Exit | Method |
| Test.kt:118:37:124:1 | { ... } | BlockStmt | Test.kt:119:2:123:12 | <Expr>; | ExprStmt |
| Test.kt:119:2:123:12 | <Expr>; | ExprStmt | Test.kt:119:2:123:12 | when ... | WhenExpr |
@@ -216,6 +228,7 @@
| Test.kt:122:12:122:16 | ... -> ... | WhenBranch | Test.kt:122:12:122:16 | true | BooleanLiteral |
| Test.kt:122:12:122:16 | <Expr>; | ExprStmt | Test.kt:122:12:122:16 | false | BooleanLiteral |
| Test.kt:122:12:122:16 | false | BooleanLiteral | Test.kt:118:1:124:1 | Normal Exit | Method |
| Test.kt:122:12:122:16 | false | BooleanLiteral | Test.kt:123:8:123:10 | { ... } | BlockStmt |
| Test.kt:122:12:122:16 | true | BooleanLiteral | Test.kt:122:12:122:16 | <Expr>; | ExprStmt |
| Test.kt:123:8:123:10 | { ... } | BlockStmt | Test.kt:118:1:124:1 | Normal Exit | Method |
missingSuccessor

View File

@@ -1,53 +1,14 @@
import java
import utils.test.AstCfg
newtype TMaybeControlFlowNode =
TControlFlowNode(ControlFlowNode c) or
TNoControlFlowNode()
class MaybeControlFlowNode extends TMaybeControlFlowNode {
abstract string toString();
abstract Location getLocation();
abstract string getPrimaryQlClasses();
}
class YesMaybeControlFlowNode extends MaybeControlFlowNode {
ControlFlowNode c;
YesMaybeControlFlowNode() { this = TControlFlowNode(c) }
override string toString() { result = c.toString() }
override Location getLocation() { result = c.getLocation() }
override string getPrimaryQlClasses() { result = c.getAstNode().getPrimaryQlClasses() }
}
class NoMaybeControlFlowNode extends MaybeControlFlowNode {
NoMaybeControlFlowNode() { this = TNoControlFlowNode() }
override string toString() { result = "<none>" }
override Location getLocation() { result.toString() = "file://:0:0:0:0" }
override string getPrimaryQlClasses() { result = "<none>" }
}
MaybeControlFlowNode maybeSuccessor(ControlFlowNode n) {
if exists(n.getASuccessor())
then result = TControlFlowNode(n.getASuccessor())
else result = TNoControlFlowNode()
}
from ControlFlowNode n, MaybeControlFlowNode m
from ControlFlowNode n, ControlFlowNode m
where
m = maybeSuccessor(n) and
m = getAnAstSuccessor(n) and
n.getLocation().getFile().(CompilationUnit).fromSource()
select n, n.getAstNode().getPrimaryQlClasses(), m, m.getPrimaryQlClasses()
select n, n.getAstNode().getPrimaryQlClasses(), m, m.getAstNode().getPrimaryQlClasses()
query predicate missingSuccessor(Expr e) {
maybeSuccessor(e.getControlFlowNode()) instanceof NoMaybeControlFlowNode and
exists(ControlFlowNode n | n = e.getControlFlowNode() and not exists(n.getASuccessor())) and
e.getFile().(CompilationUnit).fromSource() and
not e instanceof TypeAccess and
not e instanceof VarWrite

View File

@@ -562,5 +562,4 @@
| Test.kt:121:4:121:9 | ... -> ... | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:121:4:121:9 | ... -> ... | Test.kt:122:12:122:16 | <Expr>; |
| Test.kt:121:4:121:9 | ... -> ... | Test.kt:123:8:123:10 | { ... } |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:123:8:123:10 | { ... } |
| Test.kt:122:12:122:16 | ... -> ... | Test.kt:122:12:122:16 | <Expr>; |

View File

@@ -17,5 +17,6 @@ predicate dominanceCounterExample(ControlFlowNode entry, ControlFlowNode dom, Co
from Callable c, ControlFlowNode dom, ControlFlowNode node
where
strictlyDominates(dom, node) and
dominanceCounterExample(c.getBody().getControlFlowNode(), dom, node)
dominanceCounterExample(any(ControlFlow::EntryNode entry | entry.getEnclosingCallable() = c), dom,
node)
select c, dom, node

View File

@@ -1,157 +1,21 @@
| Test.kt:2:43:79:2 | { ... } | Test.kt:3:13:3:13 | var ...; |
| Test.kt:3:13:3:13 | var ...; | Test.kt:3:17:3:18 | px |
| Test.kt:3:13:3:13 | x | Test.kt:4:13:4:13 | var ...; |
| Test.kt:3:17:3:18 | px | Test.kt:3:13:3:13 | x |
| Test.kt:4:13:4:13 | var ...; | Test.kt:4:17:4:18 | pw |
| Test.kt:4:13:4:13 | w | Test.kt:5:13:5:13 | var ...; |
| Test.kt:4:17:4:18 | pw | Test.kt:4:13:4:13 | w |
| Test.kt:5:13:5:13 | var ...; | Test.kt:5:17:5:18 | pz |
| Test.kt:5:13:5:13 | z | Test.kt:7:7:7:7 | var ...; |
| Test.kt:5:17:5:18 | pz | Test.kt:5:13:5:13 | z |
| Test.kt:7:7:7:7 | j | Test.kt:8:7:8:7 | var ...; |
| Test.kt:7:7:7:7 | var ...; | Test.kt:7:7:7:7 | j |
| Test.kt:8:7:8:7 | var ...; | Test.kt:8:17:8:18 | 50 |
| Test.kt:8:7:8:7 | y | Test.kt:11:3:16:3 | <Expr>; |
| Test.kt:8:17:8:18 | 50 | Test.kt:8:7:8:7 | y |
| Test.kt:11:3:16:3 | ... -> ... | Test.kt:11:3:16:3 | true |
| Test.kt:11:3:16:3 | ... -> ... | Test.kt:11:7:11:7 | x |
| Test.kt:11:3:16:3 | <Expr>; | Test.kt:11:3:16:3 | when ... |
| Test.kt:11:3:16:3 | true | Test.kt:14:10:16:3 | { ... } |
| Test.kt:11:3:16:3 | when ... | Test.kt:11:3:16:3 | ... -> ... |
| Test.kt:11:7:11:7 | x | Test.kt:11:11:11:11 | 0 |
| Test.kt:11:7:11:11 | ... > ... | Test.kt:11:3:16:3 | ... -> ... |
| Test.kt:11:7:11:11 | ... > ... | Test.kt:11:14:14:3 | { ... } |
| Test.kt:11:7:11:11 | ... > ... | Test.kt:18:3:18:3 | <Expr>; |
| Test.kt:11:11:11:11 | 0 | Test.kt:11:7:11:11 | ... > ... |
| Test.kt:11:14:14:3 | { ... } | Test.kt:12:4:12:4 | <Expr>; |
| Test.kt:12:4:12:4 | <Expr>; | Test.kt:12:8:12:9 | 20 |
| Test.kt:12:4:12:9 | ...=... | Test.kt:13:4:13:4 | <Expr>; |
| Test.kt:12:8:12:9 | 20 | Test.kt:12:4:12:9 | ...=... |
| Test.kt:13:4:13:4 | <Expr>; | Test.kt:13:8:13:9 | 10 |
| Test.kt:13:8:13:9 | 10 | Test.kt:13:4:13:9 | ...=... |
| Test.kt:14:10:16:3 | { ... } | Test.kt:15:4:15:4 | <Expr>; |
| Test.kt:15:4:15:4 | <Expr>; | Test.kt:15:8:15:9 | 30 |
| Test.kt:15:8:15:9 | 30 | Test.kt:15:4:15:9 | ...=... |
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:18:8:18:8 | x |
| Test.kt:18:3:18:20 | ...=... | Test.kt:21:3:24:11 | <Expr>; |
| Test.kt:18:7:18:20 | (...)... | Test.kt:18:3:18:20 | ...=... |
| Test.kt:18:8:18:8 | x | Test.kt:18:12:18:12 | y |
| Test.kt:18:8:18:12 | ... + ... | Test.kt:18:7:18:20 | (...)... |
| Test.kt:18:12:18:12 | y | Test.kt:18:8:18:12 | ... + ... |
| Test.kt:21:3:24:11 | ... -> ... | Test.kt:21:3:24:11 | true |
| Test.kt:21:3:24:11 | ... -> ... | Test.kt:21:7:21:7 | x |
| Test.kt:21:3:24:11 | <Expr>; | Test.kt:21:3:24:11 | when ... |
| Test.kt:21:3:24:11 | true | Test.kt:24:11:24:11 | z |
| Test.kt:21:3:24:11 | when ... | Test.kt:21:3:24:11 | ... -> ... |
| Test.kt:21:7:21:7 | x | Test.kt:21:11:21:11 | 0 |
| Test.kt:21:7:21:11 | ... < ... | Test.kt:2:2:79:2 | Normal Exit |
| Test.kt:21:7:21:11 | ... < ... | Test.kt:21:3:24:11 | ... -> ... |
| Test.kt:21:7:21:11 | ... < ... | Test.kt:22:4:22:4 | <Expr>; |
| Test.kt:21:11:21:11 | 0 | Test.kt:21:7:21:11 | ... < ... |
| Test.kt:22:4:22:4 | <Expr>; | Test.kt:22:8:22:9 | 40 |
| Test.kt:22:4:22:9 | ...=... | Test.kt:27:3:27:3 | <Expr>; |
| Test.kt:22:8:22:9 | 40 | Test.kt:22:4:22:9 | ...=... |
| Test.kt:24:11:24:11 | z | Test.kt:24:4:24:11 | return ... |
| Test.kt:27:3:27:3 | <Expr>; | Test.kt:27:7:27:8 | 10 |
| Test.kt:27:3:27:8 | ...=... | Test.kt:30:3:33:3 | <Expr>; |
| Test.kt:27:7:27:8 | 10 | Test.kt:27:3:27:8 | ...=... |
| Test.kt:30:3:33:3 | ... -> ... | Test.kt:30:7:30:7 | x |
| Test.kt:30:3:33:3 | <Expr>; | Test.kt:30:3:33:3 | when ... |
| Test.kt:30:3:33:3 | when ... | Test.kt:30:3:33:3 | ... -> ... |
| Test.kt:30:7:30:7 | x | Test.kt:30:12:30:12 | 0 |
| Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:30:15:33:3 | { ... } |
| Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:35:3:35:3 | <Expr>; |
| Test.kt:30:12:30:12 | 0 | Test.kt:30:7:30:12 | ... (value equals) ... |
| Test.kt:30:15:33:3 | { ... } | Test.kt:31:4:31:4 | <Expr>; |
| Test.kt:31:4:31:4 | <Expr>; | Test.kt:31:8:31:9 | 60 |
| Test.kt:31:4:31:9 | ...=... | Test.kt:32:4:32:4 | <Expr>; |
| Test.kt:31:8:31:9 | 60 | Test.kt:31:4:31:9 | ...=... |
| Test.kt:32:4:32:4 | <Expr>; | Test.kt:32:8:32:9 | 10 |
| Test.kt:32:8:32:9 | 10 | Test.kt:32:4:32:9 | ...=... |
| Test.kt:35:3:35:3 | <Expr>; | Test.kt:35:3:35:3 | z |
| Test.kt:35:3:35:3 | z | Test.kt:35:8:35:8 | x |
| Test.kt:35:3:35:8 | ...+=... | Test.kt:38:3:41:3 | while (...) |
| Test.kt:35:8:35:8 | x | Test.kt:35:3:35:8 | ...+=... |
| Test.kt:38:3:41:3 | while (...) | Test.kt:38:10:38:10 | x |
| Test.kt:38:10:38:10 | x | Test.kt:38:14:38:14 | 0 |
| Test.kt:38:10:38:14 | ... > ... | Test.kt:38:17:41:3 | { ... } |
| Test.kt:38:10:38:14 | ... > ... | Test.kt:43:3:43:3 | <Expr>; |
| Test.kt:38:14:38:14 | 0 | Test.kt:38:10:38:14 | ... > ... |
| Test.kt:38:17:41:3 | { ... } | Test.kt:39:4:39:4 | <Expr>; |
| Test.kt:39:4:39:4 | <Expr>; | Test.kt:39:8:39:9 | 10 |
| Test.kt:39:4:39:9 | ...=... | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:39:8:39:9 | 10 | Test.kt:39:4:39:9 | ...=... |
| Test.kt:40:4:40:4 | <Expr>; | Test.kt:40:4:40:6 | tmp0 |
| Test.kt:40:4:40:4 | x | Test.kt:40:4:40:6 | tmp0 |
| Test.kt:40:4:40:6 | ...=... | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:40:4:40:6 | <Expr>; | Test.kt:40:4:40:6 | <Stmt> |
| Test.kt:40:4:40:6 | <Expr>; | Test.kt:40:4:40:6 | tmp0 |
| Test.kt:40:4:40:6 | <Stmt> | Test.kt:40:4:40:6 | { ... } |
| Test.kt:40:4:40:6 | dec(...) | Test.kt:40:4:40:6 | ...=... |
| Test.kt:40:4:40:6 | tmp0 | Test.kt:40:4:40:4 | <Expr>; |
| Test.kt:40:4:40:6 | tmp0 | Test.kt:40:4:40:6 | <implicit coercion to unit> |
| Test.kt:40:4:40:6 | tmp0 | Test.kt:40:4:40:6 | dec(...) |
| Test.kt:40:4:40:6 | var ...; | Test.kt:40:4:40:4 | x |
| Test.kt:40:4:40:6 | { ... } | Test.kt:40:4:40:6 | var ...; |
| Test.kt:43:3:43:3 | <Expr>; | Test.kt:43:3:43:3 | z |
| Test.kt:43:3:43:3 | z | Test.kt:43:8:43:8 | y |
| Test.kt:43:3:43:15 | ...+=... | Test.kt:73:3:73:3 | <Expr>; |
| Test.kt:43:8:43:8 | y | Test.kt:43:8:43:15 | (...)... |
| Test.kt:43:8:43:15 | (...)... | Test.kt:43:3:43:15 | ...+=... |
| Test.kt:73:3:73:3 | <Expr>; | Test.kt:73:3:73:3 | z |
| Test.kt:73:3:73:3 | z | Test.kt:73:8:73:8 | x |
| Test.kt:73:3:73:16 | ...+=... | Test.kt:77:3:77:3 | <Expr>; |
| Test.kt:73:8:73:8 | x | Test.kt:73:12:73:12 | y |
| Test.kt:73:8:73:12 | ... + ... | Test.kt:73:16:73:16 | w |
| Test.kt:73:8:73:16 | ... + ... | Test.kt:73:3:73:16 | ...+=... |
| Test.kt:73:12:73:12 | <implicit cast> | Test.kt:73:8:73:12 | ... + ... |
| Test.kt:73:12:73:12 | y | Test.kt:73:12:73:12 | <implicit cast> |
| Test.kt:73:16:73:16 | w | Test.kt:73:8:73:16 | ... + ... |
| Test.kt:77:3:77:3 | <Expr>; | Test.kt:77:7:77:8 | 40 |
| Test.kt:77:3:77:8 | ...=... | Test.kt:78:10:78:10 | w |
| Test.kt:77:7:77:8 | 40 | Test.kt:77:3:77:8 | ...=... |
| Test.kt:78:10:78:10 | w | Test.kt:78:3:78:10 | return ... |
| Test.kt:81:25:98:2 | { ... } | Test.kt:83:7:83:7 | var ...; |
| Test.kt:83:7:83:7 | b | Test.kt:84:7:84:7 | var ...; |
| Test.kt:83:7:83:7 | var ...; | Test.kt:83:7:83:7 | b |
| Test.kt:84:7:84:7 | c | Test.kt:85:3:85:3 | <Expr>; |
| Test.kt:84:7:84:7 | var ...; | Test.kt:84:7:84:7 | c |
| Test.kt:85:3:85:3 | <Expr>; | Test.kt:85:7:85:7 | 0 |
| Test.kt:85:3:85:7 | ...=... | Test.kt:86:3:96:3 | while (...) |
| Test.kt:85:7:85:7 | 0 | Test.kt:85:3:85:7 | ...=... |
| Test.kt:86:3:96:3 | while (...) | Test.kt:86:9:86:12 | true |
| Test.kt:86:9:86:12 | true | Test.kt:86:15:96:3 | { ... } |
| Test.kt:86:15:96:3 | { ... } | Test.kt:87:4:87:4 | <Expr>; |
| Test.kt:87:4:87:4 | <Expr>; | Test.kt:87:8:87:9 | 10 |
| Test.kt:87:4:87:9 | ...=... | Test.kt:88:4:91:4 | <Expr>; |
| Test.kt:87:8:87:9 | 10 | Test.kt:87:4:87:9 | ...=... |
| Test.kt:88:4:91:4 | ... -> ... | Test.kt:88:8:88:8 | a |
| Test.kt:88:4:91:4 | <Expr>; | Test.kt:88:4:91:4 | when ... |
| Test.kt:88:4:91:4 | when ... | Test.kt:88:4:91:4 | ... -> ... |
| Test.kt:88:8:88:8 | a | Test.kt:88:12:88:14 | 100 |
| Test.kt:88:8:88:14 | ... > ... | Test.kt:88:17:91:4 | { ... } |
| Test.kt:88:8:88:14 | ... > ... | Test.kt:92:4:93:9 | <Expr>; |
| Test.kt:88:12:88:14 | 100 | Test.kt:88:8:88:14 | ... > ... |
| Test.kt:88:17:91:4 | { ... } | Test.kt:89:5:89:5 | <Expr>; |
| Test.kt:89:5:89:5 | <Expr>; | Test.kt:89:9:89:10 | 10 |
| Test.kt:89:5:89:10 | ...=... | Test.kt:90:5:90:5 | <Expr>; |
| Test.kt:89:9:89:10 | 10 | Test.kt:89:5:89:10 | ...=... |
| Test.kt:90:5:90:5 | <Expr>; | Test.kt:90:9:90:9 | c |
| Test.kt:90:9:90:9 | c | Test.kt:90:5:90:9 | ...=... |
| Test.kt:92:4:93:9 | ... -> ... | Test.kt:92:8:92:8 | a |
| Test.kt:92:4:93:9 | <Expr>; | Test.kt:92:4:93:9 | when ... |
| Test.kt:92:4:93:9 | when ... | Test.kt:92:4:93:9 | ... -> ... |
| Test.kt:92:8:92:8 | a | Test.kt:92:13:92:14 | 10 |
| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:81:2:98:2 | Normal Exit |
| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:93:5:93:9 | break |
| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:94:4:95:12 | <Expr>; |
| Test.kt:92:13:92:14 | 10 | Test.kt:92:8:92:14 | ... (value equals) ... |
| Test.kt:93:5:93:9 | break | Test.kt:97:10:97:10 | b |
| Test.kt:94:4:95:12 | ... -> ... | Test.kt:94:8:94:8 | a |
| Test.kt:94:4:95:12 | <Expr>; | Test.kt:94:4:95:12 | when ... |
| Test.kt:94:4:95:12 | when ... | Test.kt:94:4:95:12 | ... -> ... |
| Test.kt:94:8:94:8 | a | Test.kt:94:13:94:14 | 20 |
| Test.kt:94:8:94:14 | ... (value equals) ... | Test.kt:95:12:95:12 | c |
| Test.kt:94:13:94:14 | 20 | Test.kt:94:8:94:14 | ... (value equals) ... |
| Test.kt:95:12:95:12 | c | Test.kt:95:5:95:12 | return ... |
| Test.kt:97:10:97:10 | b | Test.kt:97:3:97:10 | return ... |
| Test.kt:2:43:79:2 | { ... } | Test.kt:11:3:16:3 | ... -> ... |
| Test.kt:2:43:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } |
| Test.kt:2:43:79:2 | { ... } | Test.kt:18:3:18:3 | <Expr>; |
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:2:2:79:2 | Normal Exit |
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:21:3:24:11 | ... -> ... |
| Test.kt:18:3:18:3 | <Expr>; | Test.kt:22:4:22:4 | <Expr>; |
| Test.kt:22:4:22:4 | <Expr>; | Test.kt:30:7:30:12 | After ... (value equals) ... [false] |
| Test.kt:22:4:22:4 | <Expr>; | Test.kt:30:15:33:3 | { ... } |
| Test.kt:22:4:22:4 | <Expr>; | Test.kt:35:3:35:3 | <Expr>; |
| Test.kt:35:3:35:3 | <Expr>; | Test.kt:38:10:38:10 | x |
| Test.kt:38:10:38:10 | x | Test.kt:38:17:41:3 | { ... } |
| Test.kt:38:10:38:10 | x | Test.kt:43:3:43:3 | <Expr>; |
| Test.kt:81:25:98:2 | { ... } | Test.kt:86:9:86:12 | true |
| Test.kt:86:9:86:12 | true | Test.kt:88:8:88:14 | After ... > ... [false] |
| Test.kt:86:9:86:12 | true | Test.kt:88:17:91:4 | { ... } |
| Test.kt:86:9:86:12 | true | Test.kt:92:4:93:9 | <Expr>; |
| Test.kt:92:4:93:9 | <Expr>; | Test.kt:81:2:98:2 | Normal Exit |
| Test.kt:92:4:93:9 | <Expr>; | Test.kt:93:5:93:9 | break |
| Test.kt:92:4:93:9 | <Expr>; | Test.kt:94:4:95:12 | <Expr>; |
| Test.kt:94:4:95:12 | <Expr>; | Test.kt:94:8:94:14 | After ... (value equals) ... [false] |
| Test.kt:94:4:95:12 | <Expr>; | Test.kt:95:12:95:12 | c |

View File

@@ -1,9 +1,9 @@
import default
import semmle.code.java.controlflow.Dominance
import java
import utils.test.BasicBlock
from Method func, ControlFlowNode dominator, ControlFlowNode node
from Method func, BasicBlock dominator, BasicBlock bb
where
iDominates(dominator, node) and
dominator.getEnclosingStmt().getEnclosingCallable() = func and
dominator.immediatelyDominates(bb) and
dominator.getEnclosingCallable() = func and
func.getDeclaringType().hasName("Test")
select dominator, node
select getFirstAstNodeOrSynth(dominator), getFirstAstNodeOrSynth(bb)

View File

@@ -7,5 +7,5 @@ where
iDominates(dom1, node) and
iDominates(dom2, node) and
dom1 != dom2 and
func = node.getEnclosingStmt().getEnclosingCallable()
func = node.getEnclosingCallable()
select func, node, dom1, dom2

View File

@@ -1,205 +1,386 @@
| Test.kt:3:1:80:1 | Exceptional Exit | 0 | Test.kt:3:1:80:1 | Exceptional Exit |
| Test.kt:3:1:80:1 | Exit | 0 | Test.kt:3:1:80:1 | Exit |
| Test.kt:3:1:80:1 | { ... } | 0 | Test.kt:3:1:80:1 | { ... } |
| Test.kt:3:1:80:1 | { ... } | 1 | Test.kt:3:1:80:1 | super(...) |
| Test.kt:3:1:80:1 | { ... } | 2 | Test.kt:3:1:80:1 | { ... } |
| Test.kt:3:1:80:1 | { ... } | 3 | Test.kt:3:1:80:1 | Normal Exit |
| Test.kt:4:2:79:2 | Exceptional Exit | 0 | Test.kt:4:2:79:2 | Exceptional Exit |
| Test.kt:4:2:79:2 | Exit | 0 | Test.kt:4:2:79:2 | Exit |
| Test.kt:3:1:80:1 | Entry | 0 | Test.kt:3:1:80:1 | Entry |
| Test.kt:3:1:80:1 | Entry | 1 | Test.kt:3:1:80:1 | { ... } |
| Test.kt:3:1:80:1 | Entry | 2 | Test.kt:3:1:80:1 | Before super(...) |
| Test.kt:3:1:80:1 | Entry | 3 | Test.kt:3:1:80:1 | super(...) |
| Test.kt:3:1:80:1 | Entry | 4 | Test.kt:3:1:80:1 | After super(...) |
| Test.kt:3:1:80:1 | Entry | 5 | Test.kt:3:1:80:1 | { ... } |
| Test.kt:3:1:80:1 | Entry | 6 | Test.kt:3:1:80:1 | After { ... } |
| Test.kt:3:1:80:1 | Entry | 7 | Test.kt:3:1:80:1 | Normal Exit |
| Test.kt:3:1:80:1 | Entry | 8 | Test.kt:3:1:80:1 | Exit |
| Test.kt:4:2:79:2 | Entry | 0 | Test.kt:4:2:79:2 | Entry |
| Test.kt:4:2:79:2 | Entry | 1 | Test.kt:4:13:79:2 | { ... } |
| Test.kt:4:2:79:2 | Entry | 2 | Test.kt:5:3:5:16 | var ...; |
| Test.kt:4:2:79:2 | Entry | 3 | Test.kt:5:3:5:16 | Before x |
| Test.kt:4:2:79:2 | Entry | 4 | Test.kt:5:16:5:16 | 0 |
| Test.kt:4:2:79:2 | Entry | 5 | Test.kt:5:3:5:16 | x |
| Test.kt:4:2:79:2 | Entry | 6 | Test.kt:5:3:5:16 | After x |
| Test.kt:4:2:79:2 | Entry | 7 | Test.kt:5:3:5:16 | After var ...; |
| Test.kt:4:2:79:2 | Entry | 8 | Test.kt:6:3:6:18 | var ...; |
| Test.kt:4:2:79:2 | Entry | 9 | Test.kt:6:3:6:18 | Before y |
| Test.kt:4:2:79:2 | Entry | 10 | Test.kt:6:17:6:18 | 50 |
| Test.kt:4:2:79:2 | Entry | 11 | Test.kt:6:3:6:18 | y |
| Test.kt:4:2:79:2 | Entry | 12 | Test.kt:6:3:6:18 | After y |
| Test.kt:4:2:79:2 | Entry | 13 | Test.kt:6:3:6:18 | After var ...; |
| Test.kt:4:2:79:2 | Entry | 14 | Test.kt:7:3:7:16 | var ...; |
| Test.kt:4:2:79:2 | Entry | 15 | Test.kt:7:3:7:16 | Before z |
| Test.kt:4:2:79:2 | Entry | 16 | Test.kt:7:16:7:16 | 0 |
| Test.kt:4:2:79:2 | Entry | 17 | Test.kt:7:3:7:16 | z |
| Test.kt:4:2:79:2 | Entry | 18 | Test.kt:7:3:7:16 | After z |
| Test.kt:4:2:79:2 | Entry | 19 | Test.kt:7:3:7:16 | After var ...; |
| Test.kt:4:2:79:2 | Entry | 20 | Test.kt:8:3:8:16 | var ...; |
| Test.kt:4:2:79:2 | Entry | 21 | Test.kt:8:3:8:16 | Before w |
| Test.kt:4:2:79:2 | Entry | 22 | Test.kt:8:16:8:16 | 0 |
| Test.kt:4:2:79:2 | Entry | 23 | Test.kt:8:3:8:16 | w |
| Test.kt:4:2:79:2 | Entry | 24 | Test.kt:8:3:8:16 | After w |
| Test.kt:4:2:79:2 | Entry | 25 | Test.kt:8:3:8:16 | After var ...; |
| Test.kt:4:2:79:2 | Entry | 26 | Test.kt:11:3:16:3 | <Expr>; |
| Test.kt:4:2:79:2 | Entry | 27 | Test.kt:11:3:16:3 | when ... |
| Test.kt:4:2:79:2 | Entry | 28 | Test.kt:11:7:14:3 | ... -> ... |
| Test.kt:4:2:79:2 | Entry | 29 | Test.kt:11:7:11:11 | Before ... > ... |
| Test.kt:4:2:79:2 | Entry | 30 | Test.kt:11:7:11:7 | x |
| Test.kt:4:2:79:2 | Entry | 31 | Test.kt:11:11:11:11 | 0 |
| Test.kt:4:2:79:2 | Entry | 32 | Test.kt:11:7:11:11 | ... > ... |
| Test.kt:4:2:79:2 | Normal Exit | 0 | Test.kt:4:2:79:2 | Normal Exit |
| Test.kt:4:13:79:2 | { ... } | 0 | Test.kt:4:13:79:2 | { ... } |
| Test.kt:4:13:79:2 | { ... } | 1 | Test.kt:5:3:5:16 | var ...; |
| Test.kt:4:13:79:2 | { ... } | 2 | Test.kt:5:16:5:16 | 0 |
| Test.kt:4:13:79:2 | { ... } | 3 | Test.kt:5:3:5:16 | x |
| Test.kt:4:13:79:2 | { ... } | 4 | Test.kt:6:3:6:18 | var ...; |
| Test.kt:4:13:79:2 | { ... } | 5 | Test.kt:6:17:6:18 | 50 |
| Test.kt:4:13:79:2 | { ... } | 6 | Test.kt:6:3:6:18 | y |
| Test.kt:4:13:79:2 | { ... } | 7 | Test.kt:7:3:7:16 | var ...; |
| Test.kt:4:13:79:2 | { ... } | 8 | Test.kt:7:16:7:16 | 0 |
| Test.kt:4:13:79:2 | { ... } | 9 | Test.kt:7:3:7:16 | z |
| Test.kt:4:13:79:2 | { ... } | 10 | Test.kt:8:3:8:16 | var ...; |
| Test.kt:4:13:79:2 | { ... } | 11 | Test.kt:8:16:8:16 | 0 |
| Test.kt:4:13:79:2 | { ... } | 12 | Test.kt:8:3:8:16 | w |
| Test.kt:4:13:79:2 | { ... } | 13 | Test.kt:11:3:16:3 | <Expr>; |
| Test.kt:4:13:79:2 | { ... } | 14 | Test.kt:11:3:16:3 | when ... |
| Test.kt:4:13:79:2 | { ... } | 15 | Test.kt:11:7:14:3 | ... -> ... |
| Test.kt:4:13:79:2 | { ... } | 16 | Test.kt:11:7:11:7 | x |
| Test.kt:4:13:79:2 | { ... } | 17 | Test.kt:11:11:11:11 | 0 |
| Test.kt:4:13:79:2 | { ... } | 18 | Test.kt:11:7:11:11 | ... > ... |
| Test.kt:11:14:14:3 | { ... } | 0 | Test.kt:11:14:14:3 | { ... } |
| Test.kt:11:14:14:3 | { ... } | 1 | Test.kt:12:4:12:9 | <Expr>; |
| Test.kt:11:14:14:3 | { ... } | 2 | Test.kt:12:8:12:9 | 20 |
| Test.kt:11:14:14:3 | { ... } | 3 | Test.kt:12:4:12:9 | ...=... |
| Test.kt:11:14:14:3 | { ... } | 4 | Test.kt:13:4:13:9 | <Expr>; |
| Test.kt:11:14:14:3 | { ... } | 5 | Test.kt:13:8:13:9 | 10 |
| Test.kt:11:14:14:3 | { ... } | 6 | Test.kt:13:4:13:9 | ...=... |
| Test.kt:14:10:16:3 | ... -> ... | 0 | Test.kt:14:10:16:3 | ... -> ... |
| Test.kt:14:10:16:3 | ... -> ... | 1 | Test.kt:14:10:16:3 | true |
| Test.kt:14:10:16:3 | ... -> ... | 2 | Test.kt:14:10:16:3 | { ... } |
| Test.kt:14:10:16:3 | ... -> ... | 3 | Test.kt:15:4:15:9 | <Expr>; |
| Test.kt:14:10:16:3 | ... -> ... | 4 | Test.kt:15:8:15:9 | 30 |
| Test.kt:14:10:16:3 | ... -> ... | 5 | Test.kt:15:4:15:9 | ...=... |
| Test.kt:18:3:18:7 | <Expr>; | 0 | Test.kt:18:3:18:7 | <Expr>; |
| Test.kt:18:3:18:7 | <Expr>; | 1 | Test.kt:18:7:18:7 | 0 |
| Test.kt:18:3:18:7 | <Expr>; | 2 | Test.kt:18:3:18:7 | ...=... |
| Test.kt:18:3:18:7 | <Expr>; | 3 | Test.kt:21:3:24:9 | <Expr>; |
| Test.kt:18:3:18:7 | <Expr>; | 4 | Test.kt:21:3:24:9 | when ... |
| Test.kt:18:3:18:7 | <Expr>; | 5 | Test.kt:21:6:22:9 | ... -> ... |
| Test.kt:18:3:18:7 | <Expr>; | 6 | Test.kt:21:6:21:6 | x |
| Test.kt:18:3:18:7 | <Expr>; | 7 | Test.kt:21:10:21:10 | 0 |
| Test.kt:18:3:18:7 | <Expr>; | 8 | Test.kt:21:6:21:10 | ... < ... |
| Test.kt:22:4:22:9 | <Expr>; | 0 | Test.kt:22:4:22:9 | <Expr>; |
| Test.kt:22:4:22:9 | <Expr>; | 1 | Test.kt:22:8:22:9 | 40 |
| Test.kt:22:4:22:9 | <Expr>; | 2 | Test.kt:22:4:22:9 | ...=... |
| Test.kt:22:4:22:9 | <Expr>; | 3 | Test.kt:27:3:27:8 | <Expr>; |
| Test.kt:22:4:22:9 | <Expr>; | 4 | Test.kt:27:7:27:8 | 10 |
| Test.kt:22:4:22:9 | <Expr>; | 5 | Test.kt:27:3:27:8 | ...=... |
| Test.kt:22:4:22:9 | <Expr>; | 6 | Test.kt:30:3:33:3 | <Expr>; |
| Test.kt:22:4:22:9 | <Expr>; | 7 | Test.kt:30:3:33:3 | when ... |
| Test.kt:22:4:22:9 | <Expr>; | 8 | Test.kt:30:7:33:3 | ... -> ... |
| Test.kt:22:4:22:9 | <Expr>; | 9 | Test.kt:30:7:30:7 | x |
| Test.kt:22:4:22:9 | <Expr>; | 10 | Test.kt:30:12:30:12 | 0 |
| Test.kt:22:4:22:9 | <Expr>; | 11 | Test.kt:30:7:30:12 | ... (value equals) ... |
| Test.kt:24:4:24:9 | ... -> ... | 0 | Test.kt:24:4:24:9 | ... -> ... |
| Test.kt:24:4:24:9 | ... -> ... | 1 | Test.kt:24:4:24:9 | true |
| Test.kt:24:4:24:9 | ... -> ... | 2 | Test.kt:24:10:24:10 | INSTANCE |
| Test.kt:24:4:24:9 | ... -> ... | 3 | Test.kt:24:4:24:9 | return ... |
| Test.kt:30:15:33:3 | { ... } | 0 | Test.kt:30:15:33:3 | { ... } |
| Test.kt:30:15:33:3 | { ... } | 1 | Test.kt:31:4:31:9 | <Expr>; |
| Test.kt:30:15:33:3 | { ... } | 2 | Test.kt:31:8:31:9 | 60 |
| Test.kt:30:15:33:3 | { ... } | 3 | Test.kt:31:4:31:9 | ...=... |
| Test.kt:30:15:33:3 | { ... } | 4 | Test.kt:32:4:32:9 | <Expr>; |
| Test.kt:30:15:33:3 | { ... } | 5 | Test.kt:32:8:32:9 | 10 |
| Test.kt:30:15:33:3 | { ... } | 6 | Test.kt:32:4:32:9 | ...=... |
| Test.kt:35:3:35:8 | <Expr>; | 0 | Test.kt:35:3:35:8 | <Expr>; |
| Test.kt:35:3:35:8 | <Expr>; | 1 | Test.kt:35:7:35:8 | 20 |
| Test.kt:35:3:35:8 | <Expr>; | 2 | Test.kt:35:3:35:8 | ...=... |
| Test.kt:35:3:35:8 | <Expr>; | 3 | Test.kt:38:3:41:3 | while (...) |
| Test.kt:38:9:38:9 | x | 0 | Test.kt:38:9:38:9 | x |
| Test.kt:38:9:38:9 | x | 1 | Test.kt:38:13:38:13 | 0 |
| Test.kt:38:9:38:9 | x | 2 | Test.kt:38:9:38:13 | ... > ... |
| Test.kt:38:16:41:3 | { ... } | 0 | Test.kt:38:16:41:3 | { ... } |
| Test.kt:38:16:41:3 | { ... } | 1 | Test.kt:39:4:39:9 | <Expr>; |
| Test.kt:38:16:41:3 | { ... } | 2 | Test.kt:39:8:39:9 | 10 |
| Test.kt:38:16:41:3 | { ... } | 3 | Test.kt:39:4:39:9 | ...=... |
| Test.kt:38:16:41:3 | { ... } | 4 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:16:41:3 | { ... } | 5 | Test.kt:40:4:40:6 | <Stmt> |
| Test.kt:38:16:41:3 | { ... } | 6 | Test.kt:40:4:40:6 | { ... } |
| Test.kt:38:16:41:3 | { ... } | 7 | Test.kt:40:4:40:6 | var ...; |
| Test.kt:38:16:41:3 | { ... } | 8 | Test.kt:40:4:40:4 | x |
| Test.kt:38:16:41:3 | { ... } | 9 | Test.kt:40:4:40:6 | <unary> |
| Test.kt:38:16:41:3 | { ... } | 10 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:16:41:3 | { ... } | 11 | Test.kt:40:4:40:6 | <unary> |
| Test.kt:38:16:41:3 | { ... } | 12 | Test.kt:40:4:40:6 | dec(...) |
| Test.kt:38:16:41:3 | { ... } | 13 | Test.kt:40:4:40:6 | ...=... |
| Test.kt:38:16:41:3 | { ... } | 14 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:16:41:3 | { ... } | 15 | Test.kt:40:4:40:6 | <unary> |
| Test.kt:38:16:41:3 | { ... } | 16 | Test.kt:40:4:40:6 | <implicit coercion to unit> |
| Test.kt:43:3:43:8 | <Expr>; | 0 | Test.kt:43:3:43:8 | <Expr>; |
| Test.kt:43:3:43:8 | <Expr>; | 1 | Test.kt:43:7:43:8 | 30 |
| Test.kt:43:3:43:8 | <Expr>; | 2 | Test.kt:43:3:43:8 | ...=... |
| Test.kt:43:3:43:8 | <Expr>; | 3 | Test.kt:73:3:73:8 | <Expr>; |
| Test.kt:43:3:43:8 | <Expr>; | 4 | Test.kt:73:7:73:8 | 50 |
| Test.kt:43:3:43:8 | <Expr>; | 5 | Test.kt:73:3:73:8 | ...=... |
| Test.kt:43:3:43:8 | <Expr>; | 6 | Test.kt:77:3:77:8 | <Expr>; |
| Test.kt:43:3:43:8 | <Expr>; | 7 | Test.kt:77:7:77:8 | 40 |
| Test.kt:43:3:43:8 | <Expr>; | 8 | Test.kt:77:3:77:8 | ...=... |
| Test.kt:43:3:43:8 | <Expr>; | 9 | Test.kt:78:9:78:9 | INSTANCE |
| Test.kt:43:3:43:8 | <Expr>; | 10 | Test.kt:78:3:78:8 | return ... |
| Test.kt:82:1:89:1 | Exceptional Exit | 0 | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:4:2:79:2 | Normal Exit | 1 | Test.kt:4:2:79:2 | Exit |
| Test.kt:11:3:16:3 | After when ... | 0 | Test.kt:11:3:16:3 | After when ... |
| Test.kt:11:3:16:3 | After when ... | 1 | Test.kt:11:3:16:3 | After <Expr>; |
| Test.kt:11:3:16:3 | After when ... | 2 | Test.kt:18:3:18:7 | <Expr>; |
| Test.kt:11:3:16:3 | After when ... | 3 | Test.kt:18:3:18:7 | Before ...=... |
| Test.kt:11:3:16:3 | After when ... | 4 | Test.kt:18:3:18:7 | z |
| Test.kt:11:3:16:3 | After when ... | 5 | Test.kt:18:7:18:7 | 0 |
| Test.kt:11:3:16:3 | After when ... | 6 | Test.kt:18:3:18:7 | ...=... |
| Test.kt:11:3:16:3 | After when ... | 7 | Test.kt:18:3:18:7 | After ...=... |
| Test.kt:11:3:16:3 | After when ... | 8 | Test.kt:18:3:18:7 | After <Expr>; |
| Test.kt:11:3:16:3 | After when ... | 9 | Test.kt:21:3:24:9 | <Expr>; |
| Test.kt:11:3:16:3 | After when ... | 10 | Test.kt:21:3:24:9 | when ... |
| Test.kt:11:3:16:3 | After when ... | 11 | Test.kt:21:6:22:9 | ... -> ... |
| Test.kt:11:3:16:3 | After when ... | 12 | Test.kt:21:6:21:10 | Before ... < ... |
| Test.kt:11:3:16:3 | After when ... | 13 | Test.kt:21:6:21:6 | x |
| Test.kt:11:3:16:3 | After when ... | 14 | Test.kt:21:10:21:10 | 0 |
| Test.kt:11:3:16:3 | After when ... | 15 | Test.kt:21:6:21:10 | ... < ... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 0 | Test.kt:11:7:11:11 | After ... > ... [false] |
| Test.kt:11:7:11:11 | After ... > ... [false] | 1 | Test.kt:14:10:16:3 | ... -> ... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 2 | Test.kt:14:10:16:3 | true |
| Test.kt:11:7:11:11 | After ... > ... [false] | 3 | Test.kt:14:10:16:3 | After true [true] |
| Test.kt:11:7:11:11 | After ... > ... [false] | 4 | Test.kt:14:10:16:3 | { ... } |
| Test.kt:11:7:11:11 | After ... > ... [false] | 5 | Test.kt:15:4:15:9 | <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [false] | 6 | Test.kt:15:4:15:9 | Before ...=... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 7 | Test.kt:15:4:15:9 | y |
| Test.kt:11:7:11:11 | After ... > ... [false] | 8 | Test.kt:15:8:15:9 | 30 |
| Test.kt:11:7:11:11 | After ... > ... [false] | 9 | Test.kt:15:4:15:9 | ...=... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 10 | Test.kt:15:4:15:9 | After ...=... |
| Test.kt:11:7:11:11 | After ... > ... [false] | 11 | Test.kt:15:4:15:9 | After <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [false] | 12 | Test.kt:14:10:16:3 | After { ... } |
| Test.kt:11:7:11:11 | After ... > ... [true] | 0 | Test.kt:11:7:11:11 | After ... > ... [true] |
| Test.kt:11:7:11:11 | After ... > ... [true] | 1 | Test.kt:11:14:14:3 | { ... } |
| Test.kt:11:7:11:11 | After ... > ... [true] | 2 | Test.kt:12:4:12:9 | <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [true] | 3 | Test.kt:12:4:12:9 | Before ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 4 | Test.kt:12:4:12:9 | y |
| Test.kt:11:7:11:11 | After ... > ... [true] | 5 | Test.kt:12:8:12:9 | 20 |
| Test.kt:11:7:11:11 | After ... > ... [true] | 6 | Test.kt:12:4:12:9 | ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 7 | Test.kt:12:4:12:9 | After ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 8 | Test.kt:12:4:12:9 | After <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [true] | 9 | Test.kt:13:4:13:9 | <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [true] | 10 | Test.kt:13:4:13:9 | Before ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 11 | Test.kt:13:4:13:9 | z |
| Test.kt:11:7:11:11 | After ... > ... [true] | 12 | Test.kt:13:8:13:9 | 10 |
| Test.kt:11:7:11:11 | After ... > ... [true] | 13 | Test.kt:13:4:13:9 | ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 14 | Test.kt:13:4:13:9 | After ...=... |
| Test.kt:11:7:11:11 | After ... > ... [true] | 15 | Test.kt:13:4:13:9 | After <Expr>; |
| Test.kt:11:7:11:11 | After ... > ... [true] | 16 | Test.kt:11:14:14:3 | After { ... } |
| Test.kt:21:6:21:10 | After ... < ... [false] | 0 | Test.kt:21:6:21:10 | After ... < ... [false] |
| Test.kt:21:6:21:10 | After ... < ... [false] | 1 | Test.kt:24:4:24:9 | ... -> ... |
| Test.kt:21:6:21:10 | After ... < ... [false] | 2 | Test.kt:24:4:24:9 | true |
| Test.kt:21:6:21:10 | After ... < ... [false] | 3 | Test.kt:24:4:24:9 | After true [true] |
| Test.kt:21:6:21:10 | After ... < ... [false] | 4 | Test.kt:24:4:24:9 | Before return ... |
| Test.kt:21:6:21:10 | After ... < ... [false] | 5 | Test.kt:24:10:24:10 | INSTANCE |
| Test.kt:21:6:21:10 | After ... < ... [false] | 6 | Test.kt:24:4:24:9 | return ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 0 | Test.kt:21:6:21:10 | After ... < ... [true] |
| Test.kt:21:6:21:10 | After ... < ... [true] | 1 | Test.kt:22:4:22:9 | <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 2 | Test.kt:22:4:22:9 | Before ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 3 | Test.kt:22:4:22:9 | y |
| Test.kt:21:6:21:10 | After ... < ... [true] | 4 | Test.kt:22:8:22:9 | 40 |
| Test.kt:21:6:21:10 | After ... < ... [true] | 5 | Test.kt:22:4:22:9 | ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 6 | Test.kt:22:4:22:9 | After ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 7 | Test.kt:22:4:22:9 | After <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 8 | Test.kt:21:3:24:9 | After when ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 9 | Test.kt:21:3:24:9 | After <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 10 | Test.kt:27:3:27:8 | <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 11 | Test.kt:27:3:27:8 | Before ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 12 | Test.kt:27:3:27:8 | z |
| Test.kt:21:6:21:10 | After ... < ... [true] | 13 | Test.kt:27:7:27:8 | 10 |
| Test.kt:21:6:21:10 | After ... < ... [true] | 14 | Test.kt:27:3:27:8 | ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 15 | Test.kt:27:3:27:8 | After ...=... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 16 | Test.kt:27:3:27:8 | After <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 17 | Test.kt:30:3:33:3 | <Expr>; |
| Test.kt:21:6:21:10 | After ... < ... [true] | 18 | Test.kt:30:3:33:3 | when ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 19 | Test.kt:30:7:33:3 | ... -> ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 20 | Test.kt:30:7:30:12 | Before ... (value equals) ... |
| Test.kt:21:6:21:10 | After ... < ... [true] | 21 | Test.kt:30:7:30:7 | x |
| Test.kt:21:6:21:10 | After ... < ... [true] | 22 | Test.kt:30:12:30:12 | 0 |
| Test.kt:21:6:21:10 | After ... < ... [true] | 23 | Test.kt:30:7:30:12 | ... (value equals) ... |
| Test.kt:30:3:33:3 | After when ... | 0 | Test.kt:30:3:33:3 | After when ... |
| Test.kt:30:3:33:3 | After when ... | 1 | Test.kt:30:3:33:3 | After <Expr>; |
| Test.kt:30:3:33:3 | After when ... | 2 | Test.kt:35:3:35:8 | <Expr>; |
| Test.kt:30:3:33:3 | After when ... | 3 | Test.kt:35:3:35:8 | Before ...=... |
| Test.kt:30:3:33:3 | After when ... | 4 | Test.kt:35:3:35:8 | z |
| Test.kt:30:3:33:3 | After when ... | 5 | Test.kt:35:7:35:8 | 20 |
| Test.kt:30:3:33:3 | After when ... | 6 | Test.kt:35:3:35:8 | ...=... |
| Test.kt:30:3:33:3 | After when ... | 7 | Test.kt:35:3:35:8 | After ...=... |
| Test.kt:30:3:33:3 | After when ... | 8 | Test.kt:35:3:35:8 | After <Expr>; |
| Test.kt:30:3:33:3 | After when ... | 9 | Test.kt:38:3:41:3 | while (...) |
| Test.kt:30:7:30:12 | After ... (value equals) ... [false] | 0 | Test.kt:30:7:30:12 | After ... (value equals) ... [false] |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 0 | Test.kt:30:7:30:12 | After ... (value equals) ... [true] |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 1 | Test.kt:30:15:33:3 | { ... } |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 2 | Test.kt:31:4:31:9 | <Expr>; |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 3 | Test.kt:31:4:31:9 | Before ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 4 | Test.kt:31:4:31:9 | y |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 5 | Test.kt:31:8:31:9 | 60 |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 6 | Test.kt:31:4:31:9 | ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 7 | Test.kt:31:4:31:9 | After ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 8 | Test.kt:31:4:31:9 | After <Expr>; |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 9 | Test.kt:32:4:32:9 | <Expr>; |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 10 | Test.kt:32:4:32:9 | Before ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 11 | Test.kt:32:4:32:9 | z |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 12 | Test.kt:32:8:32:9 | 10 |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 13 | Test.kt:32:4:32:9 | ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 14 | Test.kt:32:4:32:9 | After ...=... |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 15 | Test.kt:32:4:32:9 | After <Expr>; |
| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 16 | Test.kt:30:15:33:3 | After { ... } |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 0 | Test.kt:38:3:41:3 | [LoopHeader] while (...) |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 1 | Test.kt:38:9:38:13 | Before ... > ... |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 2 | Test.kt:38:9:38:9 | x |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 3 | Test.kt:38:13:38:13 | 0 |
| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 4 | Test.kt:38:9:38:13 | ... > ... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 0 | Test.kt:38:9:38:13 | After ... > ... [false] |
| Test.kt:38:9:38:13 | After ... > ... [false] | 1 | Test.kt:38:3:41:3 | After while (...) |
| Test.kt:38:9:38:13 | After ... > ... [false] | 2 | Test.kt:43:3:43:8 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 3 | Test.kt:43:3:43:8 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 4 | Test.kt:43:3:43:8 | z |
| Test.kt:38:9:38:13 | After ... > ... [false] | 5 | Test.kt:43:7:43:8 | 30 |
| Test.kt:38:9:38:13 | After ... > ... [false] | 6 | Test.kt:43:3:43:8 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 7 | Test.kt:43:3:43:8 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 8 | Test.kt:43:3:43:8 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 9 | Test.kt:73:3:73:8 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 10 | Test.kt:73:3:73:8 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 11 | Test.kt:73:3:73:8 | z |
| Test.kt:38:9:38:13 | After ... > ... [false] | 12 | Test.kt:73:7:73:8 | 50 |
| Test.kt:38:9:38:13 | After ... > ... [false] | 13 | Test.kt:73:3:73:8 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 14 | Test.kt:73:3:73:8 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 15 | Test.kt:73:3:73:8 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 16 | Test.kt:77:3:77:8 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 17 | Test.kt:77:3:77:8 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 18 | Test.kt:77:3:77:8 | w |
| Test.kt:38:9:38:13 | After ... > ... [false] | 19 | Test.kt:77:7:77:8 | 40 |
| Test.kt:38:9:38:13 | After ... > ... [false] | 20 | Test.kt:77:3:77:8 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 21 | Test.kt:77:3:77:8 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 22 | Test.kt:77:3:77:8 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [false] | 23 | Test.kt:78:3:78:8 | Before return ... |
| Test.kt:38:9:38:13 | After ... > ... [false] | 24 | Test.kt:78:9:78:9 | INSTANCE |
| Test.kt:38:9:38:13 | After ... > ... [false] | 25 | Test.kt:78:3:78:8 | return ... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 0 | Test.kt:38:9:38:13 | After ... > ... [true] |
| Test.kt:38:9:38:13 | After ... > ... [true] | 1 | Test.kt:38:16:41:3 | { ... } |
| Test.kt:38:9:38:13 | After ... > ... [true] | 2 | Test.kt:39:4:39:9 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 3 | Test.kt:39:4:39:9 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 4 | Test.kt:39:4:39:9 | y |
| Test.kt:38:9:38:13 | After ... > ... [true] | 5 | Test.kt:39:8:39:9 | 10 |
| Test.kt:38:9:38:13 | After ... > ... [true] | 6 | Test.kt:39:4:39:9 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 7 | Test.kt:39:4:39:9 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 8 | Test.kt:39:4:39:9 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 9 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 10 | Test.kt:40:4:40:6 | Before <implicit coercion to unit> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 11 | Test.kt:40:4:40:6 | Before <Stmt> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 12 | Test.kt:40:4:40:6 | { ... } |
| Test.kt:38:9:38:13 | After ... > ... [true] | 13 | Test.kt:40:4:40:6 | var ...; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 14 | Test.kt:40:4:40:6 | Before <unary> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 15 | Test.kt:40:4:40:4 | x |
| Test.kt:38:9:38:13 | After ... > ... [true] | 16 | Test.kt:40:4:40:6 | <unary> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 17 | Test.kt:40:4:40:6 | After <unary> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 18 | Test.kt:40:4:40:6 | After var ...; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 19 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 20 | Test.kt:40:4:40:6 | Before ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 21 | Test.kt:40:4:40:6 | x |
| Test.kt:38:9:38:13 | After ... > ... [true] | 22 | Test.kt:40:4:40:6 | Before dec(...) |
| Test.kt:38:9:38:13 | After ... > ... [true] | 23 | Test.kt:40:4:40:6 | <unary> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 24 | Test.kt:40:4:40:6 | dec(...) |
| Test.kt:38:9:38:13 | After ... > ... [true] | 25 | Test.kt:40:4:40:6 | After dec(...) |
| Test.kt:38:9:38:13 | After ... > ... [true] | 26 | Test.kt:40:4:40:6 | ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 27 | Test.kt:40:4:40:6 | After ...=... |
| Test.kt:38:9:38:13 | After ... > ... [true] | 28 | Test.kt:40:4:40:6 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 29 | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 30 | Test.kt:40:4:40:6 | <unary> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 31 | Test.kt:40:4:40:6 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 32 | Test.kt:40:4:40:6 | After { ... } |
| Test.kt:38:9:38:13 | After ... > ... [true] | 33 | Test.kt:40:4:40:6 | <Stmt> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 34 | Test.kt:40:4:40:6 | After <Stmt> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 35 | Test.kt:40:4:40:6 | <implicit coercion to unit> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 36 | Test.kt:40:4:40:6 | After <implicit coercion to unit> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 37 | Test.kt:40:4:40:6 | After <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 38 | Test.kt:38:16:41:3 | After { ... } |
| Test.kt:82:1:89:1 | Entry | 0 | Test.kt:82:1:89:1 | Entry |
| Test.kt:82:1:89:1 | Entry | 1 | Test.kt:82:21:89:1 | { ... } |
| Test.kt:82:1:89:1 | Entry | 2 | Test.kt:83:2:88:2 | try ... |
| Test.kt:82:1:89:1 | Entry | 3 | Test.kt:83:6:86:2 | { ... } |
| Test.kt:82:1:89:1 | Entry | 4 | Test.kt:84:3:84:18 | var ...; |
| Test.kt:82:1:89:1 | Entry | 5 | Test.kt:84:3:84:18 | Before x |
| Test.kt:82:1:89:1 | Entry | 6 | Test.kt:84:11:84:18 | Before (...)... |
| Test.kt:82:1:89:1 | Entry | 7 | Test.kt:84:11:84:11 | o |
| Test.kt:82:1:89:1 | Entry | 8 | Test.kt:84:11:84:18 | (...)... |
| Test.kt:82:1:89:1 | Exit | 0 | Test.kt:82:1:89:1 | Exit |
| Test.kt:82:1:89:1 | Normal Exit | 0 | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:82:21:89:1 | { ... } | 0 | Test.kt:82:21:89:1 | { ... } |
| Test.kt:82:21:89:1 | { ... } | 1 | Test.kt:83:2:88:2 | try ... |
| Test.kt:82:21:89:1 | { ... } | 2 | Test.kt:83:6:86:2 | { ... } |
| Test.kt:82:21:89:1 | { ... } | 3 | Test.kt:84:3:84:18 | var ...; |
| Test.kt:82:21:89:1 | { ... } | 4 | Test.kt:84:11:84:11 | o |
| Test.kt:82:21:89:1 | { ... } | 5 | Test.kt:84:11:84:18 | (...)... |
| Test.kt:84:3:84:18 | x | 0 | Test.kt:84:3:84:18 | x |
| Test.kt:84:3:84:18 | x | 1 | Test.kt:85:10:85:10 | 1 |
| Test.kt:84:3:84:18 | x | 2 | Test.kt:85:3:85:10 | return ... |
| Test.kt:84:11:84:18 | After (...)... | 0 | Test.kt:84:11:84:18 | After (...)... |
| Test.kt:84:11:84:18 | After (...)... | 1 | Test.kt:84:3:84:18 | x |
| Test.kt:84:11:84:18 | After (...)... | 2 | Test.kt:84:3:84:18 | After x |
| Test.kt:84:11:84:18 | After (...)... | 3 | Test.kt:84:3:84:18 | After var ...; |
| Test.kt:84:11:84:18 | After (...)... | 4 | Test.kt:85:3:85:10 | Before return ... |
| Test.kt:84:11:84:18 | After (...)... | 5 | Test.kt:85:10:85:10 | 1 |
| Test.kt:84:11:84:18 | After (...)... | 6 | Test.kt:85:3:85:10 | return ... |
| Test.kt:86:4:88:2 | After catch (...) [match] | 0 | Test.kt:86:4:88:2 | After catch (...) [match] |
| Test.kt:86:4:88:2 | After catch (...) [match] | 1 | Test.kt:86:11:86:31 | e |
| Test.kt:86:4:88:2 | After catch (...) [match] | 2 | Test.kt:86:34:88:2 | { ... } |
| Test.kt:86:4:88:2 | After catch (...) [match] | 3 | Test.kt:87:3:87:10 | Before return ... |
| Test.kt:86:4:88:2 | After catch (...) [match] | 4 | Test.kt:87:10:87:10 | 2 |
| Test.kt:86:4:88:2 | After catch (...) [match] | 5 | Test.kt:87:3:87:10 | return ... |
| Test.kt:86:4:88:2 | After catch (...) [no-match] | 0 | Test.kt:86:4:88:2 | After catch (...) [no-match] |
| Test.kt:86:4:88:2 | After catch (...) [no-match] | 1 | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:86:4:88:2 | catch (...) | 0 | Test.kt:86:4:88:2 | catch (...) |
| Test.kt:86:4:88:2 | catch (...) | 1 | Test.kt:86:11:86:31 | e |
| Test.kt:86:4:88:2 | catch (...) | 2 | Test.kt:86:34:88:2 | { ... } |
| Test.kt:86:4:88:2 | catch (...) | 3 | Test.kt:87:10:87:10 | 2 |
| Test.kt:86:4:88:2 | catch (...) | 4 | Test.kt:87:3:87:10 | return ... |
| Test.kt:91:1:98:1 | Exceptional Exit | 0 | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:91:1:98:1 | Entry | 0 | Test.kt:91:1:98:1 | Entry |
| Test.kt:91:1:98:1 | Entry | 1 | Test.kt:91:22:98:1 | { ... } |
| Test.kt:91:1:98:1 | Entry | 2 | Test.kt:92:2:97:2 | try ... |
| Test.kt:91:1:98:1 | Entry | 3 | Test.kt:92:6:95:2 | { ... } |
| Test.kt:91:1:98:1 | Entry | 4 | Test.kt:93:3:93:13 | var ...; |
| Test.kt:91:1:98:1 | Entry | 5 | Test.kt:93:3:93:13 | Before x |
| Test.kt:91:1:98:1 | Entry | 6 | Test.kt:93:11:93:13 | Before ...!! |
| Test.kt:91:1:98:1 | Entry | 7 | Test.kt:93:11:93:11 | o |
| Test.kt:91:1:98:1 | Entry | 8 | Test.kt:93:11:93:13 | ...!! |
| Test.kt:91:1:98:1 | Exit | 0 | Test.kt:91:1:98:1 | Exit |
| Test.kt:91:1:98:1 | Normal Exit | 0 | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:91:22:98:1 | { ... } | 0 | Test.kt:91:22:98:1 | { ... } |
| Test.kt:91:22:98:1 | { ... } | 1 | Test.kt:92:2:97:2 | try ... |
| Test.kt:91:22:98:1 | { ... } | 2 | Test.kt:92:6:95:2 | { ... } |
| Test.kt:91:22:98:1 | { ... } | 3 | Test.kt:93:3:93:13 | var ...; |
| Test.kt:91:22:98:1 | { ... } | 4 | Test.kt:93:11:93:11 | o |
| Test.kt:91:22:98:1 | { ... } | 5 | Test.kt:93:11:93:13 | ...!! |
| Test.kt:93:3:93:13 | x | 0 | Test.kt:93:3:93:13 | x |
| Test.kt:93:3:93:13 | x | 1 | Test.kt:94:10:94:10 | 1 |
| Test.kt:93:3:93:13 | x | 2 | Test.kt:94:3:94:10 | return ... |
| Test.kt:93:11:93:13 | After ...!! | 0 | Test.kt:93:11:93:13 | After ...!! |
| Test.kt:93:11:93:13 | After ...!! | 1 | Test.kt:93:3:93:13 | x |
| Test.kt:93:11:93:13 | After ...!! | 2 | Test.kt:93:3:93:13 | After x |
| Test.kt:93:11:93:13 | After ...!! | 3 | Test.kt:93:3:93:13 | After var ...; |
| Test.kt:93:11:93:13 | After ...!! | 4 | Test.kt:94:3:94:10 | Before return ... |
| Test.kt:93:11:93:13 | After ...!! | 5 | Test.kt:94:10:94:10 | 1 |
| Test.kt:93:11:93:13 | After ...!! | 6 | Test.kt:94:3:94:10 | return ... |
| Test.kt:95:4:97:2 | After catch (...) [match] | 0 | Test.kt:95:4:97:2 | After catch (...) [match] |
| Test.kt:95:4:97:2 | After catch (...) [match] | 1 | Test.kt:95:11:95:33 | e |
| Test.kt:95:4:97:2 | After catch (...) [match] | 2 | Test.kt:95:36:97:2 | { ... } |
| Test.kt:95:4:97:2 | After catch (...) [match] | 3 | Test.kt:96:3:96:10 | Before return ... |
| Test.kt:95:4:97:2 | After catch (...) [match] | 4 | Test.kt:96:10:96:10 | 2 |
| Test.kt:95:4:97:2 | After catch (...) [match] | 5 | Test.kt:96:3:96:10 | return ... |
| Test.kt:95:4:97:2 | After catch (...) [no-match] | 0 | Test.kt:95:4:97:2 | After catch (...) [no-match] |
| Test.kt:95:4:97:2 | After catch (...) [no-match] | 1 | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:95:4:97:2 | catch (...) | 0 | Test.kt:95:4:97:2 | catch (...) |
| Test.kt:95:4:97:2 | catch (...) | 1 | Test.kt:95:11:95:33 | e |
| Test.kt:95:4:97:2 | catch (...) | 2 | Test.kt:95:36:97:2 | { ... } |
| Test.kt:95:4:97:2 | catch (...) | 3 | Test.kt:96:10:96:10 | 2 |
| Test.kt:95:4:97:2 | catch (...) | 4 | Test.kt:96:3:96:10 | return ... |
| Test.kt:100:1:110:1 | Entry | 0 | Test.kt:100:1:110:1 | Entry |
| Test.kt:100:1:110:1 | Entry | 1 | Test.kt:100:25:110:1 | { ... } |
| Test.kt:100:1:110:1 | Entry | 2 | Test.kt:101:5:103:5 | <Expr>; |
| Test.kt:100:1:110:1 | Entry | 3 | Test.kt:101:5:103:5 | when ... |
| Test.kt:100:1:110:1 | Entry | 4 | Test.kt:101:9:103:5 | ... -> ... |
| Test.kt:100:1:110:1 | Entry | 5 | Test.kt:101:9:101:30 | ... && ... |
| Test.kt:100:1:110:1 | Entry | 6 | Test.kt:101:9:101:17 | Before ... (value equals) ... |
| Test.kt:100:1:110:1 | Entry | 7 | Test.kt:101:9:101:9 | x |
| Test.kt:100:1:110:1 | Entry | 8 | Test.kt:101:14:101:17 | null |
| Test.kt:100:1:110:1 | Entry | 9 | Test.kt:101:9:101:17 | ... (value equals) ... |
| Test.kt:100:1:110:1 | Exit | 0 | Test.kt:100:1:110:1 | Exit |
| Test.kt:100:1:110:1 | Normal Exit | 0 | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:100:25:110:1 | { ... } | 0 | Test.kt:100:25:110:1 | { ... } |
| Test.kt:100:25:110:1 | { ... } | 1 | Test.kt:101:5:103:5 | <Expr>; |
| Test.kt:100:25:110:1 | { ... } | 2 | Test.kt:101:5:103:5 | when ... |
| Test.kt:100:25:110:1 | { ... } | 3 | Test.kt:101:9:103:5 | ... -> ... |
| Test.kt:100:25:110:1 | { ... } | 4 | Test.kt:101:9:101:30 | ... && ... |
| Test.kt:100:25:110:1 | { ... } | 5 | Test.kt:101:9:101:9 | x |
| Test.kt:100:25:110:1 | { ... } | 6 | Test.kt:101:14:101:17 | null |
| Test.kt:100:25:110:1 | { ... } | 7 | Test.kt:101:9:101:17 | ... (value equals) ... |
| Test.kt:101:22:101:22 | y | 0 | Test.kt:101:22:101:22 | y |
| Test.kt:101:22:101:22 | y | 1 | Test.kt:101:27:101:30 | null |
| Test.kt:101:22:101:22 | y | 2 | Test.kt:101:22:101:30 | ... (value equals) ... |
| Test.kt:101:33:103:5 | { ... } | 0 | Test.kt:101:33:103:5 | { ... } |
| Test.kt:101:33:103:5 | { ... } | 1 | Test.kt:102:15:102:25 | new Exception(...) |
| Test.kt:101:33:103:5 | { ... } | 2 | Test.kt:102:9:102:25 | throw ... |
| Test.kt:101:33:103:5 | { ... } | 3 | Test.kt:100:1:110:1 | Exceptional Exit |
| Test.kt:105:5:109:5 | <Expr>; | 0 | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:105:5:109:5 | <Expr>; | 1 | Test.kt:105:5:109:5 | when ... |
| Test.kt:105:5:109:5 | <Expr>; | 2 | Test.kt:105:9:107:5 | ... -> ... |
| Test.kt:105:5:109:5 | <Expr>; | 3 | Test.kt:105:9:105:9 | x |
| Test.kt:105:5:109:5 | <Expr>; | 4 | Test.kt:105:14:105:17 | null |
| Test.kt:105:5:109:5 | <Expr>; | 5 | Test.kt:105:9:105:17 | ... (value not-equals) ... |
| Test.kt:105:20:107:5 | { ... } | 0 | Test.kt:105:20:107:5 | { ... } |
| Test.kt:105:20:107:5 | { ... } | 1 | Test.kt:106:9:106:29 | <Expr>; |
| Test.kt:105:20:107:5 | { ... } | 2 | Test.kt:106:17:106:28 | "x not null" |
| Test.kt:105:20:107:5 | { ... } | 3 | Test.kt:106:9:106:29 | println(...) |
| Test.kt:107:16:109:5 | ... -> ... | 0 | Test.kt:107:16:109:5 | ... -> ... |
| Test.kt:107:16:109:5 | ... -> ... | 1 | Test.kt:107:16:107:16 | y |
| Test.kt:107:16:109:5 | ... -> ... | 2 | Test.kt:107:21:107:24 | null |
| Test.kt:107:16:109:5 | ... -> ... | 3 | Test.kt:107:16:107:24 | ... (value not-equals) ... |
| Test.kt:107:27:109:5 | { ... } | 0 | Test.kt:107:27:109:5 | { ... } |
| Test.kt:107:27:109:5 | { ... } | 1 | Test.kt:108:9:108:29 | <Expr>; |
| Test.kt:107:27:109:5 | { ... } | 2 | Test.kt:108:17:108:28 | "y not null" |
| Test.kt:107:27:109:5 | { ... } | 3 | Test.kt:108:9:108:29 | println(...) |
| Test.kt:112:1:116:1 | Exceptional Exit | 0 | Test.kt:112:1:116:1 | Exceptional Exit |
| Test.kt:112:1:116:1 | Exit | 0 | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:1:116:1 | Normal Exit | 0 | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:112:32:116:1 | { ... } | 0 | Test.kt:112:32:116:1 | { ... } |
| Test.kt:112:32:116:1 | { ... } | 1 | Test.kt:113:5:115:5 | <Expr>; |
| Test.kt:112:32:116:1 | { ... } | 2 | Test.kt:113:5:115:5 | when ... |
| Test.kt:112:32:116:1 | { ... } | 3 | Test.kt:113:9:115:5 | ... -> ... |
| Test.kt:112:32:116:1 | { ... } | 4 | Test.kt:113:9:113:14 | ... && ... |
| Test.kt:112:32:116:1 | { ... } | 5 | Test.kt:113:9:113:9 | x |
| Test.kt:113:14:113:14 | y | 0 | Test.kt:113:14:113:14 | y |
| Test.kt:113:17:115:5 | { ... } | 0 | Test.kt:113:17:115:5 | { ... } |
| Test.kt:118:1:124:1 | Exceptional Exit | 0 | Test.kt:118:1:124:1 | Exceptional Exit |
| Test.kt:118:1:124:1 | Exit | 0 | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:1:124:1 | Normal Exit | 0 | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:118:37:124:1 | { ... } | 0 | Test.kt:118:37:124:1 | { ... } |
| Test.kt:118:37:124:1 | { ... } | 1 | Test.kt:119:2:123:12 | <Expr>; |
| Test.kt:118:37:124:1 | { ... } | 2 | Test.kt:119:2:123:12 | when ... |
| Test.kt:118:37:124:1 | { ... } | 3 | Test.kt:120:3:123:10 | ... -> ... |
| Test.kt:118:37:124:1 | { ... } | 4 | Test.kt:120:3:123:3 | when ... |
| Test.kt:118:37:124:1 | { ... } | 5 | Test.kt:121:4:121:9 | ... -> ... |
| Test.kt:118:37:124:1 | { ... } | 6 | Test.kt:121:4:121:4 | x |
| Test.kt:121:9:121:9 | <Expr>; | 0 | Test.kt:121:9:121:9 | <Expr>; |
| Test.kt:121:9:121:9 | <Expr>; | 1 | Test.kt:121:9:121:9 | y |
| Test.kt:122:12:122:16 | ... -> ... | 0 | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:122:12:122:16 | ... -> ... | 1 | Test.kt:122:12:122:16 | true |
| Test.kt:122:12:122:16 | ... -> ... | 2 | Test.kt:122:12:122:16 | <Expr>; |
| Test.kt:122:12:122:16 | ... -> ... | 3 | Test.kt:122:12:122:16 | false |
| Test.kt:123:8:123:10 | { ... } | 0 | Test.kt:123:8:123:10 | { ... } |
| Test.kt:101:9:101:17 | After ... (value equals) ... [false] | 0 | Test.kt:101:9:101:17 | After ... (value equals) ... [false] |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 0 | Test.kt:101:9:101:17 | After ... (value equals) ... [true] |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 1 | Test.kt:101:22:101:30 | Before ... (value equals) ... |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 2 | Test.kt:101:22:101:22 | y |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 3 | Test.kt:101:27:101:30 | null |
| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 4 | Test.kt:101:22:101:30 | ... (value equals) ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 0 | Test.kt:101:9:101:30 | After ... && ... [false] |
| Test.kt:101:9:101:30 | After ... && ... [false] | 1 | Test.kt:101:5:103:5 | After when ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 2 | Test.kt:101:5:103:5 | After <Expr>; |
| Test.kt:101:9:101:30 | After ... && ... [false] | 3 | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:9:101:30 | After ... && ... [false] | 4 | Test.kt:105:5:109:5 | when ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 5 | Test.kt:105:9:107:5 | ... -> ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 6 | Test.kt:105:9:105:17 | Before ... (value not-equals) ... |
| Test.kt:101:9:101:30 | After ... && ... [false] | 7 | Test.kt:105:9:105:9 | x |
| Test.kt:101:9:101:30 | After ... && ... [false] | 8 | Test.kt:105:14:105:17 | null |
| Test.kt:101:9:101:30 | After ... && ... [false] | 9 | Test.kt:105:9:105:17 | ... (value not-equals) ... |
| Test.kt:101:22:101:30 | After ... (value equals) ... [false] | 0 | Test.kt:101:22:101:30 | After ... (value equals) ... [false] |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 0 | Test.kt:101:22:101:30 | After ... (value equals) ... [true] |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 1 | Test.kt:101:9:101:30 | After ... && ... [true] |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 2 | Test.kt:101:33:103:5 | { ... } |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 3 | Test.kt:102:9:102:25 | Before throw ... |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 4 | Test.kt:102:15:102:25 | Before new Exception(...) |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 5 | Test.kt:102:15:102:25 | new Exception(...) |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 6 | Test.kt:102:15:102:25 | After new Exception(...) |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 7 | Test.kt:102:9:102:25 | throw ... |
| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 8 | Test.kt:100:1:110:1 | Exceptional Exit |
| Test.kt:105:5:109:5 | After when ... | 0 | Test.kt:105:5:109:5 | After when ... |
| Test.kt:105:5:109:5 | After when ... | 1 | Test.kt:105:5:109:5 | After <Expr>; |
| Test.kt:105:5:109:5 | After when ... | 2 | Test.kt:100:25:110:1 | After { ... } |
| Test.kt:105:5:109:5 | After when ... | 3 | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 0 | Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 1 | Test.kt:107:16:109:5 | ... -> ... |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 2 | Test.kt:107:16:107:24 | Before ... (value not-equals) ... |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 3 | Test.kt:107:16:107:16 | y |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 4 | Test.kt:107:21:107:24 | null |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 5 | Test.kt:107:16:107:24 | ... (value not-equals) ... |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 0 | Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 1 | Test.kt:105:20:107:5 | { ... } |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 2 | Test.kt:106:9:106:29 | <Expr>; |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 3 | Test.kt:106:9:106:29 | Before println(...) |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 4 | Test.kt:106:17:106:28 | "x not null" |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 5 | Test.kt:106:9:106:29 | println(...) |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 6 | Test.kt:106:9:106:29 | After println(...) |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 7 | Test.kt:106:9:106:29 | After <Expr>; |
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 8 | Test.kt:105:20:107:5 | After { ... } |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | 0 | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 0 | Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 1 | Test.kt:107:27:109:5 | { ... } |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 2 | Test.kt:108:9:108:29 | <Expr>; |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 3 | Test.kt:108:9:108:29 | Before println(...) |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 4 | Test.kt:108:17:108:28 | "y not null" |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 5 | Test.kt:108:9:108:29 | println(...) |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 6 | Test.kt:108:9:108:29 | After println(...) |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 7 | Test.kt:108:9:108:29 | After <Expr>; |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 8 | Test.kt:107:27:109:5 | After { ... } |
| Test.kt:112:1:116:1 | Entry | 0 | Test.kt:112:1:116:1 | Entry |
| Test.kt:112:1:116:1 | Entry | 1 | Test.kt:112:32:116:1 | { ... } |
| Test.kt:112:1:116:1 | Entry | 2 | Test.kt:113:5:115:5 | <Expr>; |
| Test.kt:112:1:116:1 | Entry | 3 | Test.kt:113:5:115:5 | when ... |
| Test.kt:112:1:116:1 | Entry | 4 | Test.kt:113:9:115:5 | ... -> ... |
| Test.kt:112:1:116:1 | Entry | 5 | Test.kt:113:9:113:14 | ... && ... |
| Test.kt:112:1:116:1 | Entry | 6 | Test.kt:113:9:113:9 | x |
| Test.kt:113:5:115:5 | After when ... | 0 | Test.kt:113:5:115:5 | After when ... |
| Test.kt:113:5:115:5 | After when ... | 1 | Test.kt:113:5:115:5 | After <Expr>; |
| Test.kt:113:5:115:5 | After when ... | 2 | Test.kt:112:32:116:1 | After { ... } |
| Test.kt:113:5:115:5 | After when ... | 3 | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:113:5:115:5 | After when ... | 4 | Test.kt:112:1:116:1 | Exit |
| Test.kt:113:9:113:9 | After x [false] | 0 | Test.kt:113:9:113:9 | After x [false] |
| Test.kt:113:9:113:9 | After x [true] | 0 | Test.kt:113:9:113:9 | After x [true] |
| Test.kt:113:9:113:9 | After x [true] | 1 | Test.kt:113:14:113:14 | y |
| Test.kt:113:9:113:14 | After ... && ... [false] | 0 | Test.kt:113:9:113:14 | After ... && ... [false] |
| Test.kt:113:14:113:14 | After y [false] | 0 | Test.kt:113:14:113:14 | After y [false] |
| Test.kt:113:14:113:14 | After y [true] | 0 | Test.kt:113:14:113:14 | After y [true] |
| Test.kt:113:14:113:14 | After y [true] | 1 | Test.kt:113:9:113:14 | After ... && ... [true] |
| Test.kt:113:14:113:14 | After y [true] | 2 | Test.kt:113:17:115:5 | { ... } |
| Test.kt:118:1:124:1 | Entry | 0 | Test.kt:118:1:124:1 | Entry |
| Test.kt:118:1:124:1 | Entry | 1 | Test.kt:118:37:124:1 | { ... } |
| Test.kt:118:1:124:1 | Entry | 2 | Test.kt:119:2:123:12 | <Expr>; |
| Test.kt:118:1:124:1 | Entry | 3 | Test.kt:119:2:123:12 | when ... |
| Test.kt:118:1:124:1 | Entry | 4 | Test.kt:120:3:123:10 | ... -> ... |
| Test.kt:118:1:124:1 | Entry | 5 | Test.kt:120:3:123:3 | when ... |
| Test.kt:118:1:124:1 | Entry | 6 | Test.kt:121:4:121:9 | ... -> ... |
| Test.kt:118:1:124:1 | Entry | 7 | Test.kt:121:4:121:4 | x |
| Test.kt:119:2:123:12 | After when ... | 0 | Test.kt:119:2:123:12 | After when ... |
| Test.kt:119:2:123:12 | After when ... | 1 | Test.kt:119:2:123:12 | After <Expr>; |
| Test.kt:119:2:123:12 | After when ... | 2 | Test.kt:118:37:124:1 | After { ... } |
| Test.kt:119:2:123:12 | After when ... | 3 | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:119:2:123:12 | After when ... | 4 | Test.kt:118:1:124:1 | Exit |
| Test.kt:120:3:123:3 | After when ... [false] | 0 | Test.kt:120:3:123:3 | After when ... [false] |
| Test.kt:120:3:123:3 | After when ... [true] | 0 | Test.kt:120:3:123:3 | After when ... [true] |
| Test.kt:120:3:123:3 | After when ... [true] | 1 | Test.kt:123:8:123:10 | { ... } |
| Test.kt:121:4:121:4 | After x [false] | 0 | Test.kt:121:4:121:4 | After x [false] |
| Test.kt:121:4:121:4 | After x [false] | 1 | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:121:4:121:4 | After x [false] | 2 | Test.kt:122:12:122:16 | true |
| Test.kt:121:4:121:4 | After x [false] | 3 | Test.kt:122:12:122:16 | After true [true] |
| Test.kt:121:4:121:4 | After x [false] | 4 | Test.kt:122:12:122:16 | <Expr>; |
| Test.kt:121:4:121:4 | After x [false] | 5 | Test.kt:122:12:122:16 | false |
| Test.kt:121:4:121:4 | After x [false] | 6 | Test.kt:122:12:122:16 | After <Expr>; |
| Test.kt:121:4:121:4 | After x [true] | 0 | Test.kt:121:4:121:4 | After x [true] |
| Test.kt:121:4:121:4 | After x [true] | 1 | Test.kt:121:9:121:9 | <Expr>; |
| Test.kt:121:4:121:4 | After x [true] | 2 | Test.kt:121:9:121:9 | y |
| Test.kt:121:4:121:4 | After x [true] | 3 | Test.kt:121:9:121:9 | After <Expr>; |

View File

@@ -1,6 +1,3 @@
| Test.kt:3:1:80:1 | { ... } | Test.kt:3:1:80:1 | Exit |
| Test.kt:4:2:79:2 | Normal Exit | Test.kt:4:2:79:2 | Exit |
| Test.kt:4:13:79:2 | { ... } | Test.kt:4:2:79:2 | Exit |
| Test.kt:4:13:79:2 | { ... } | Test.kt:4:2:79:2 | Normal Exit |
| Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } |
| Test.kt:4:13:79:2 | { ... } | Test.kt:14:10:16:3 | ... -> ... |
@@ -12,7 +9,6 @@
| Test.kt:4:13:79:2 | { ... } | Test.kt:38:9:38:9 | x |
| Test.kt:4:13:79:2 | { ... } | Test.kt:38:16:41:3 | { ... } |
| Test.kt:4:13:79:2 | { ... } | Test.kt:43:3:43:8 | <Expr>; |
| Test.kt:18:3:18:7 | <Expr>; | Test.kt:4:2:79:2 | Exit |
| Test.kt:18:3:18:7 | <Expr>; | Test.kt:4:2:79:2 | Normal Exit |
| Test.kt:18:3:18:7 | <Expr>; | Test.kt:22:4:22:9 | <Expr>; |
| Test.kt:18:3:18:7 | <Expr>; | Test.kt:24:4:24:9 | ... -> ... |
@@ -31,16 +27,22 @@
| Test.kt:35:3:35:8 | <Expr>; | Test.kt:43:3:43:8 | <Expr>; |
| Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } |
| Test.kt:38:9:38:9 | x | Test.kt:43:3:43:8 | <Expr>; |
| Test.kt:82:1:89:1 | Normal Exit | Test.kt:82:1:89:1 | Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:84:3:84:18 | x |
| Test.kt:82:21:89:1 | { ... } | Test.kt:86:4:88:2 | catch (...) |
| Test.kt:91:1:98:1 | Normal Exit | Test.kt:91:1:98:1 | Exit |
| Test.kt:82:21:89:1 | { ... } | Test.kt:86:11:86:31 | e |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:86:11:86:31 | e |
| Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Exit |
| Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:91:22:98:1 | { ... } | Test.kt:93:3:93:13 | x |
| Test.kt:91:22:98:1 | { ... } | Test.kt:95:4:97:2 | catch (...) |
| Test.kt:91:22:98:1 | { ... } | Test.kt:95:11:95:33 | e |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:95:11:95:33 | e |
| Test.kt:100:25:110:1 | { ... } | Test.kt:100:1:110:1 | Exit |
| Test.kt:100:25:110:1 | { ... } | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:100:25:110:1 | { ... } | Test.kt:101:22:101:22 | y |
@@ -55,16 +57,11 @@
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:16:109:5 | ... -> ... |
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:27:109:5 | { ... } |
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
| Test.kt:112:1:116:1 | Normal Exit | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y |
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:17:115:5 | { ... } |
| Test.kt:113:14:113:14 | y | Test.kt:113:17:115:5 | { ... } |
| Test.kt:118:1:124:1 | Normal Exit | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:37:124:1 | { ... } | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:37:124:1 | { ... } | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:118:37:124:1 | { ... } | Test.kt:121:9:121:9 | <Expr>; |
| Test.kt:118:37:124:1 | { ... } | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:118:37:124:1 | { ... } | Test.kt:123:8:123:10 | { ... } |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:123:8:123:10 | { ... } |

View File

@@ -1,6 +1,7 @@
import java
import semmle.code.java.controlflow.Dominance
import utils.test.BasicBlock
from BasicBlock b, BasicBlock b2
where b.strictlyDominates(b2)
select b, b2
select getFirstAstNode(b), getFirstAstNode(b2)

View File

@@ -1,16 +1,13 @@
| Test.kt:3:1:80:1 | Exceptional Exit | Test.kt:3:1:80:1 | Exit |
| Test.kt:3:1:80:1 | { ... } | Test.kt:3:1:80:1 | Exit |
| Test.kt:4:2:79:2 | Exceptional Exit | Test.kt:4:2:79:2 | Exit |
| Test.kt:4:2:79:2 | Normal Exit | Test.kt:4:2:79:2 | Exit |
| Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } |
| Test.kt:4:13:79:2 | { ... } | Test.kt:14:10:16:3 | ... -> ... |
| Test.kt:11:14:14:3 | { ... } | Test.kt:18:3:18:7 | <Expr>; |
| Test.kt:14:10:16:3 | ... -> ... | Test.kt:18:3:18:7 | <Expr>; |
| Test.kt:18:3:18:7 | <Expr>; | Test.kt:22:4:22:9 | <Expr>; |
| Test.kt:18:3:18:7 | <Expr>; | Test.kt:24:4:24:9 | ... -> ... |
| Test.kt:22:4:22:9 | <Expr>; | Test.kt:30:7:30:12 | After ... (value equals) ... [false] |
| Test.kt:22:4:22:9 | <Expr>; | Test.kt:30:15:33:3 | { ... } |
| Test.kt:22:4:22:9 | <Expr>; | Test.kt:35:3:35:8 | <Expr>; |
| Test.kt:24:4:24:9 | ... -> ... | Test.kt:4:2:79:2 | Normal Exit |
| Test.kt:30:7:30:12 | After ... (value equals) ... [false] | Test.kt:35:3:35:8 | <Expr>; |
| Test.kt:30:15:33:3 | { ... } | Test.kt:35:3:35:8 | <Expr>; |
| Test.kt:35:3:35:8 | <Expr>; | Test.kt:38:9:38:9 | x |
| Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } |
@@ -22,37 +19,45 @@
| Test.kt:82:21:89:1 | { ... } | Test.kt:84:3:84:18 | x |
| Test.kt:82:21:89:1 | { ... } | Test.kt:86:4:88:2 | catch (...) |
| Test.kt:84:3:84:18 | x | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Exceptional Exit |
| Test.kt:86:4:88:2 | catch (...) | Test.kt:86:11:86:31 | e |
| Test.kt:86:11:86:31 | e | Test.kt:82:1:89:1 | Normal Exit |
| Test.kt:91:1:98:1 | Exceptional Exit | Test.kt:91:1:98:1 | Exit |
| Test.kt:91:1:98:1 | Normal Exit | Test.kt:91:1:98:1 | Exit |
| Test.kt:91:22:98:1 | { ... } | Test.kt:93:3:93:13 | x |
| Test.kt:91:22:98:1 | { ... } | Test.kt:95:4:97:2 | catch (...) |
| Test.kt:93:3:93:13 | x | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Exceptional Exit |
| Test.kt:95:4:97:2 | catch (...) | Test.kt:95:11:95:33 | e |
| Test.kt:95:11:95:33 | e | Test.kt:91:1:98:1 | Normal Exit |
| Test.kt:100:1:110:1 | Normal Exit | Test.kt:100:1:110:1 | Exit |
| Test.kt:100:25:110:1 | { ... } | Test.kt:101:9:101:17 | After ... (value equals) ... [false] |
| Test.kt:100:25:110:1 | { ... } | Test.kt:101:22:101:22 | y |
| Test.kt:100:25:110:1 | { ... } | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:9:101:17 | After ... (value equals) ... [false] | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:22:101:22 | y | Test.kt:101:22:101:30 | After ... (value equals) ... [false] |
| Test.kt:101:22:101:22 | y | Test.kt:101:33:103:5 | { ... } |
| Test.kt:101:22:101:22 | y | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:22:101:30 | After ... (value equals) ... [false] | Test.kt:105:5:109:5 | <Expr>; |
| Test.kt:101:33:103:5 | { ... } | Test.kt:100:1:110:1 | Exit |
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:105:20:107:5 | { ... } |
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:16:109:5 | ... -> ... |
| Test.kt:105:20:107:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] |
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
| Test.kt:107:27:109:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit |
| Test.kt:112:1:116:1 | Exceptional Exit | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:1:116:1 | Normal Exit | Test.kt:112:1:116:1 | Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:9:113:9 | After x [false] |
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y |
| Test.kt:113:14:113:14 | y | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:113:9:113:9 | After x [false] | Test.kt:113:9:113:14 | After ... && ... [false] |
| Test.kt:113:9:113:14 | After ... && ... [false] | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:113:14:113:14 | After y [false] | Test.kt:113:9:113:14 | After ... && ... [false] |
| Test.kt:113:14:113:14 | y | Test.kt:113:14:113:14 | After y [false] |
| Test.kt:113:14:113:14 | y | Test.kt:113:17:115:5 | { ... } |
| Test.kt:113:17:115:5 | { ... } | Test.kt:112:1:116:1 | Normal Exit |
| Test.kt:118:1:124:1 | Exceptional Exit | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:1:124:1 | Normal Exit | Test.kt:118:1:124:1 | Exit |
| Test.kt:118:37:124:1 | { ... } | Test.kt:121:9:121:9 | <Expr>; |
| Test.kt:118:37:124:1 | { ... } | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:120:3:123:3 | After when ... [false] | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:120:3:123:3 | After when ... [false] |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:123:8:123:10 | { ... } |
| Test.kt:122:12:122:16 | ... -> ... | Test.kt:118:1:124:1 | Normal Exit |
| Test.kt:122:12:122:16 | ... -> ... | Test.kt:120:3:123:3 | After when ... [false] |
| Test.kt:122:12:122:16 | ... -> ... | Test.kt:123:8:123:10 | { ... } |
| Test.kt:123:8:123:10 | { ... } | Test.kt:118:1:124:1 | Normal Exit |

View File

@@ -1,5 +1,6 @@
import java
import utils.test.BasicBlock
from BasicBlock b, BasicBlock b2
where b.getASuccessor() = b2
select b, b2
select getFirstAstNodeOrSynth(b), getFirstAstNodeOrSynth(b2)

View File

@@ -1,12 +1,10 @@
#select
| Test.kt:3:1:80:1 | Exceptional Exit | Constructor | Test.kt:3:1:80:1 | Exit | Constructor |
| Test.kt:3:1:80:1 | Exit | Constructor | file://:0:0:0:0 | <none> | <none> |
| Test.kt:3:1:80:1 | Entry | Constructor | Test.kt:3:1:80:1 | { ... } | BlockStmt |
| Test.kt:3:1:80:1 | Normal Exit | Constructor | Test.kt:3:1:80:1 | Exit | Constructor |
| Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt | Test.kt:3:1:80:1 | { ... } | BlockStmt |
| Test.kt:3:1:80:1 | { ... } | BlockStmt | Test.kt:3:1:80:1 | Normal Exit | Constructor |
| Test.kt:3:1:80:1 | { ... } | BlockStmt | Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt |
| Test.kt:4:2:79:2 | Exceptional Exit | Method | Test.kt:4:2:79:2 | Exit | Method |
| Test.kt:4:2:79:2 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:4:2:79:2 | Entry | Method | Test.kt:4:13:79:2 | { ... } | BlockStmt |
| Test.kt:4:2:79:2 | Normal Exit | Method | Test.kt:4:2:79:2 | Exit | Method |
| Test.kt:4:13:79:2 | { ... } | BlockStmt | Test.kt:5:3:5:16 | var ...; | LocalVariableDeclStmt |
| Test.kt:5:3:5:16 | var ...; | LocalVariableDeclStmt | Test.kt:5:16:5:16 | 0 | IntegerLiteral |
@@ -30,19 +28,23 @@
| Test.kt:11:11:11:11 | 0 | IntegerLiteral | Test.kt:11:7:11:11 | ... > ... | GTExpr |
| Test.kt:11:14:14:3 | { ... } | BlockStmt | Test.kt:12:4:12:9 | <Expr>; | ExprStmt |
| Test.kt:12:4:12:9 | ...=... | AssignExpr | Test.kt:13:4:13:9 | <Expr>; | ExprStmt |
| Test.kt:12:4:12:9 | <Expr>; | ExprStmt | Test.kt:12:8:12:9 | 20 | LongLiteral |
| Test.kt:12:4:12:9 | <Expr>; | ExprStmt | Test.kt:12:4:12:9 | y | VarAccess |
| Test.kt:12:4:12:9 | y | VarAccess | Test.kt:12:8:12:9 | 20 | LongLiteral |
| Test.kt:12:8:12:9 | 20 | LongLiteral | Test.kt:12:4:12:9 | ...=... | AssignExpr |
| Test.kt:13:4:13:9 | ...=... | AssignExpr | Test.kt:18:3:18:7 | <Expr>; | ExprStmt |
| Test.kt:13:4:13:9 | <Expr>; | ExprStmt | Test.kt:13:8:13:9 | 10 | IntegerLiteral |
| Test.kt:13:4:13:9 | <Expr>; | ExprStmt | Test.kt:13:4:13:9 | z | VarAccess |
| Test.kt:13:4:13:9 | z | VarAccess | Test.kt:13:8:13:9 | 10 | IntegerLiteral |
| Test.kt:13:8:13:9 | 10 | IntegerLiteral | Test.kt:13:4:13:9 | ...=... | AssignExpr |
| Test.kt:14:10:16:3 | ... -> ... | WhenBranch | Test.kt:14:10:16:3 | true | BooleanLiteral |
| Test.kt:14:10:16:3 | true | BooleanLiteral | Test.kt:14:10:16:3 | { ... } | BlockStmt |
| Test.kt:14:10:16:3 | { ... } | BlockStmt | Test.kt:15:4:15:9 | <Expr>; | ExprStmt |
| Test.kt:15:4:15:9 | ...=... | AssignExpr | Test.kt:18:3:18:7 | <Expr>; | ExprStmt |
| Test.kt:15:4:15:9 | <Expr>; | ExprStmt | Test.kt:15:8:15:9 | 30 | LongLiteral |
| Test.kt:15:4:15:9 | <Expr>; | ExprStmt | Test.kt:15:4:15:9 | y | VarAccess |
| Test.kt:15:4:15:9 | y | VarAccess | Test.kt:15:8:15:9 | 30 | LongLiteral |
| Test.kt:15:8:15:9 | 30 | LongLiteral | Test.kt:15:4:15:9 | ...=... | AssignExpr |
| Test.kt:18:3:18:7 | ...=... | AssignExpr | Test.kt:21:3:24:9 | <Expr>; | ExprStmt |
| Test.kt:18:3:18:7 | <Expr>; | ExprStmt | Test.kt:18:7:18:7 | 0 | IntegerLiteral |
| Test.kt:18:3:18:7 | <Expr>; | ExprStmt | Test.kt:18:3:18:7 | z | VarAccess |
| Test.kt:18:3:18:7 | z | VarAccess | Test.kt:18:7:18:7 | 0 | IntegerLiteral |
| Test.kt:18:7:18:7 | 0 | IntegerLiteral | Test.kt:18:3:18:7 | ...=... | AssignExpr |
| Test.kt:21:3:24:9 | <Expr>; | ExprStmt | Test.kt:21:3:24:9 | when ... | WhenExpr |
| Test.kt:21:3:24:9 | when ... | WhenExpr | Test.kt:21:6:22:9 | ... -> ... | WhenBranch |
@@ -52,14 +54,16 @@
| Test.kt:21:6:22:9 | ... -> ... | WhenBranch | Test.kt:21:6:21:6 | x | VarAccess |
| Test.kt:21:10:21:10 | 0 | IntegerLiteral | Test.kt:21:6:21:10 | ... < ... | LTExpr |
| Test.kt:22:4:22:9 | ...=... | AssignExpr | Test.kt:27:3:27:8 | <Expr>; | ExprStmt |
| Test.kt:22:4:22:9 | <Expr>; | ExprStmt | Test.kt:22:8:22:9 | 40 | LongLiteral |
| Test.kt:22:4:22:9 | <Expr>; | ExprStmt | Test.kt:22:4:22:9 | y | VarAccess |
| Test.kt:22:4:22:9 | y | VarAccess | Test.kt:22:8:22:9 | 40 | LongLiteral |
| Test.kt:22:8:22:9 | 40 | LongLiteral | Test.kt:22:4:22:9 | ...=... | AssignExpr |
| Test.kt:24:4:24:9 | ... -> ... | WhenBranch | Test.kt:24:4:24:9 | true | BooleanLiteral |
| Test.kt:24:4:24:9 | return ... | ReturnStmt | Test.kt:4:2:79:2 | Normal Exit | Method |
| Test.kt:24:4:24:9 | true | BooleanLiteral | Test.kt:24:10:24:10 | INSTANCE | VarAccess |
| Test.kt:24:10:24:10 | INSTANCE | VarAccess | Test.kt:24:4:24:9 | return ... | ReturnStmt |
| Test.kt:27:3:27:8 | ...=... | AssignExpr | Test.kt:30:3:33:3 | <Expr>; | ExprStmt |
| Test.kt:27:3:27:8 | <Expr>; | ExprStmt | Test.kt:27:7:27:8 | 10 | IntegerLiteral |
| Test.kt:27:3:27:8 | <Expr>; | ExprStmt | Test.kt:27:3:27:8 | z | VarAccess |
| Test.kt:27:3:27:8 | z | VarAccess | Test.kt:27:7:27:8 | 10 | IntegerLiteral |
| Test.kt:27:7:27:8 | 10 | IntegerLiteral | Test.kt:27:3:27:8 | ...=... | AssignExpr |
| Test.kt:30:3:33:3 | <Expr>; | ExprStmt | Test.kt:30:3:33:3 | when ... | WhenExpr |
| Test.kt:30:3:33:3 | when ... | WhenExpr | Test.kt:30:7:33:3 | ... -> ... | WhenBranch |
@@ -70,13 +74,16 @@
| Test.kt:30:12:30:12 | 0 | IntegerLiteral | Test.kt:30:7:30:12 | ... (value equals) ... | ValueEQExpr |
| Test.kt:30:15:33:3 | { ... } | BlockStmt | Test.kt:31:4:31:9 | <Expr>; | ExprStmt |
| Test.kt:31:4:31:9 | ...=... | AssignExpr | Test.kt:32:4:32:9 | <Expr>; | ExprStmt |
| Test.kt:31:4:31:9 | <Expr>; | ExprStmt | Test.kt:31:8:31:9 | 60 | LongLiteral |
| Test.kt:31:4:31:9 | <Expr>; | ExprStmt | Test.kt:31:4:31:9 | y | VarAccess |
| Test.kt:31:4:31:9 | y | VarAccess | Test.kt:31:8:31:9 | 60 | LongLiteral |
| Test.kt:31:8:31:9 | 60 | LongLiteral | Test.kt:31:4:31:9 | ...=... | AssignExpr |
| Test.kt:32:4:32:9 | ...=... | AssignExpr | Test.kt:35:3:35:8 | <Expr>; | ExprStmt |
| Test.kt:32:4:32:9 | <Expr>; | ExprStmt | Test.kt:32:8:32:9 | 10 | IntegerLiteral |
| Test.kt:32:4:32:9 | <Expr>; | ExprStmt | Test.kt:32:4:32:9 | z | VarAccess |
| Test.kt:32:4:32:9 | z | VarAccess | Test.kt:32:8:32:9 | 10 | IntegerLiteral |
| Test.kt:32:8:32:9 | 10 | IntegerLiteral | Test.kt:32:4:32:9 | ...=... | AssignExpr |
| Test.kt:35:3:35:8 | ...=... | AssignExpr | Test.kt:38:3:41:3 | while (...) | WhileStmt |
| Test.kt:35:3:35:8 | <Expr>; | ExprStmt | Test.kt:35:7:35:8 | 20 | IntegerLiteral |
| Test.kt:35:3:35:8 | <Expr>; | ExprStmt | Test.kt:35:3:35:8 | z | VarAccess |
| Test.kt:35:3:35:8 | z | VarAccess | Test.kt:35:7:35:8 | 20 | IntegerLiteral |
| Test.kt:35:7:35:8 | 20 | IntegerLiteral | Test.kt:35:3:35:8 | ...=... | AssignExpr |
| Test.kt:38:3:41:3 | while (...) | WhileStmt | Test.kt:38:9:38:9 | x | VarAccess |
| Test.kt:38:9:38:9 | x | VarAccess | Test.kt:38:13:38:13 | 0 | IntegerLiteral |
@@ -85,34 +92,39 @@
| Test.kt:38:13:38:13 | 0 | IntegerLiteral | Test.kt:38:9:38:13 | ... > ... | GTExpr |
| Test.kt:38:16:41:3 | { ... } | BlockStmt | Test.kt:39:4:39:9 | <Expr>; | ExprStmt |
| Test.kt:39:4:39:9 | ...=... | AssignExpr | Test.kt:40:4:40:6 | <Expr>; | ExprStmt |
| Test.kt:39:4:39:9 | <Expr>; | ExprStmt | Test.kt:39:8:39:9 | 10 | LongLiteral |
| Test.kt:39:4:39:9 | <Expr>; | ExprStmt | Test.kt:39:4:39:9 | y | VarAccess |
| Test.kt:39:4:39:9 | y | VarAccess | Test.kt:39:8:39:9 | 10 | LongLiteral |
| Test.kt:39:8:39:9 | 10 | LongLiteral | Test.kt:39:4:39:9 | ...=... | AssignExpr |
| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | <unary> | LocalVariableDeclExpr |
| Test.kt:40:4:40:6 | ...=... | AssignExpr | Test.kt:40:4:40:6 | <Expr>; | ExprStmt |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | <Stmt> | StmtExpr |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | <unary> | VarAccess |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | <unary> | VarAccess |
| Test.kt:40:4:40:6 | <Stmt> | StmtExpr | Test.kt:40:4:40:6 | { ... } | BlockStmt |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | x | VarAccess |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | { ... } | BlockStmt |
| Test.kt:40:4:40:6 | <Stmt> | StmtExpr | Test.kt:40:4:40:6 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr |
| Test.kt:40:4:40:6 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr | Test.kt:38:9:38:9 | x | VarAccess |
| Test.kt:40:4:40:6 | <unary> | LocalVariableDeclExpr | Test.kt:40:4:40:6 | <Expr>; | ExprStmt |
| Test.kt:40:4:40:6 | <unary> | VarAccess | Test.kt:40:4:40:6 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr |
| Test.kt:40:4:40:6 | <unary> | VarAccess | Test.kt:40:4:40:6 | <Stmt> | StmtExpr |
| Test.kt:40:4:40:6 | <unary> | VarAccess | Test.kt:40:4:40:6 | dec(...) | MethodCall |
| Test.kt:40:4:40:6 | dec(...) | MethodCall | Test.kt:40:4:40:6 | ...=... | AssignExpr |
| Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt | Test.kt:40:4:40:4 | x | VarAccess |
| Test.kt:40:4:40:6 | x | VarAccess | Test.kt:40:4:40:6 | <unary> | VarAccess |
| Test.kt:40:4:40:6 | { ... } | BlockStmt | Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt |
| Test.kt:43:3:43:8 | ...=... | AssignExpr | Test.kt:73:3:73:8 | <Expr>; | ExprStmt |
| Test.kt:43:3:43:8 | <Expr>; | ExprStmt | Test.kt:43:7:43:8 | 30 | IntegerLiteral |
| Test.kt:43:3:43:8 | <Expr>; | ExprStmt | Test.kt:43:3:43:8 | z | VarAccess |
| Test.kt:43:3:43:8 | z | VarAccess | Test.kt:43:7:43:8 | 30 | IntegerLiteral |
| Test.kt:43:7:43:8 | 30 | IntegerLiteral | Test.kt:43:3:43:8 | ...=... | AssignExpr |
| Test.kt:73:3:73:8 | ...=... | AssignExpr | Test.kt:77:3:77:8 | <Expr>; | ExprStmt |
| Test.kt:73:3:73:8 | <Expr>; | ExprStmt | Test.kt:73:7:73:8 | 50 | IntegerLiteral |
| Test.kt:73:3:73:8 | <Expr>; | ExprStmt | Test.kt:73:3:73:8 | z | VarAccess |
| Test.kt:73:3:73:8 | z | VarAccess | Test.kt:73:7:73:8 | 50 | IntegerLiteral |
| Test.kt:73:7:73:8 | 50 | IntegerLiteral | Test.kt:73:3:73:8 | ...=... | AssignExpr |
| Test.kt:77:3:77:8 | ...=... | AssignExpr | Test.kt:78:9:78:9 | INSTANCE | VarAccess |
| Test.kt:77:3:77:8 | <Expr>; | ExprStmt | Test.kt:77:7:77:8 | 40 | IntegerLiteral |
| Test.kt:77:3:77:8 | <Expr>; | ExprStmt | Test.kt:77:3:77:8 | w | VarAccess |
| Test.kt:77:3:77:8 | w | VarAccess | Test.kt:77:7:77:8 | 40 | IntegerLiteral |
| Test.kt:77:7:77:8 | 40 | IntegerLiteral | Test.kt:77:3:77:8 | ...=... | AssignExpr |
| Test.kt:78:3:78:8 | return ... | ReturnStmt | Test.kt:4:2:79:2 | Normal Exit | Method |
| Test.kt:78:9:78:9 | INSTANCE | VarAccess | Test.kt:78:3:78:8 | return ... | ReturnStmt |
| Test.kt:82:1:89:1 | Entry | Method | Test.kt:82:21:89:1 | { ... } | BlockStmt |
| Test.kt:82:1:89:1 | Exceptional Exit | Method | Test.kt:82:1:89:1 | Exit | Method |
| Test.kt:82:1:89:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:82:1:89:1 | Normal Exit | Method | Test.kt:82:1:89:1 | Exit | Method |
| Test.kt:82:21:89:1 | { ... } | BlockStmt | Test.kt:83:2:88:2 | try ... | TryStmt |
| Test.kt:83:2:88:2 | try ... | TryStmt | Test.kt:83:6:86:2 | { ... } | BlockStmt |
@@ -124,13 +136,14 @@
| Test.kt:84:11:84:18 | (...)... | CastExpr | Test.kt:86:4:88:2 | catch (...) | CatchClause |
| Test.kt:85:3:85:10 | return ... | ReturnStmt | Test.kt:82:1:89:1 | Normal Exit | Method |
| Test.kt:85:10:85:10 | 1 | IntegerLiteral | Test.kt:85:3:85:10 | return ... | ReturnStmt |
| Test.kt:86:4:88:2 | catch (...) | CatchClause | Test.kt:82:1:89:1 | Exceptional Exit | Method |
| Test.kt:86:4:88:2 | catch (...) | CatchClause | Test.kt:86:11:86:31 | e | LocalVariableDeclExpr |
| Test.kt:86:11:86:31 | e | LocalVariableDeclExpr | Test.kt:86:34:88:2 | { ... } | BlockStmt |
| Test.kt:86:34:88:2 | { ... } | BlockStmt | Test.kt:87:10:87:10 | 2 | IntegerLiteral |
| Test.kt:87:3:87:10 | return ... | ReturnStmt | Test.kt:82:1:89:1 | Normal Exit | Method |
| Test.kt:87:10:87:10 | 2 | IntegerLiteral | Test.kt:87:3:87:10 | return ... | ReturnStmt |
| Test.kt:91:1:98:1 | Entry | Method | Test.kt:91:22:98:1 | { ... } | BlockStmt |
| Test.kt:91:1:98:1 | Exceptional Exit | Method | Test.kt:91:1:98:1 | Exit | Method |
| Test.kt:91:1:98:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:91:1:98:1 | Normal Exit | Method | Test.kt:91:1:98:1 | Exit | Method |
| Test.kt:91:22:98:1 | { ... } | BlockStmt | Test.kt:92:2:97:2 | try ... | TryStmt |
| Test.kt:92:2:97:2 | try ... | TryStmt | Test.kt:92:6:95:2 | { ... } | BlockStmt |
@@ -142,13 +155,14 @@
| Test.kt:93:11:93:13 | ...!! | NotNullExpr | Test.kt:95:4:97:2 | catch (...) | CatchClause |
| Test.kt:94:3:94:10 | return ... | ReturnStmt | Test.kt:91:1:98:1 | Normal Exit | Method |
| Test.kt:94:10:94:10 | 1 | IntegerLiteral | Test.kt:94:3:94:10 | return ... | ReturnStmt |
| Test.kt:95:4:97:2 | catch (...) | CatchClause | Test.kt:91:1:98:1 | Exceptional Exit | Method |
| Test.kt:95:4:97:2 | catch (...) | CatchClause | Test.kt:95:11:95:33 | e | LocalVariableDeclExpr |
| Test.kt:95:11:95:33 | e | LocalVariableDeclExpr | Test.kt:95:36:97:2 | { ... } | BlockStmt |
| Test.kt:95:36:97:2 | { ... } | BlockStmt | Test.kt:96:10:96:10 | 2 | IntegerLiteral |
| Test.kt:96:3:96:10 | return ... | ReturnStmt | Test.kt:91:1:98:1 | Normal Exit | Method |
| Test.kt:96:10:96:10 | 2 | IntegerLiteral | Test.kt:96:3:96:10 | return ... | ReturnStmt |
| Test.kt:100:1:110:1 | Entry | Method | Test.kt:100:25:110:1 | { ... } | BlockStmt |
| Test.kt:100:1:110:1 | Exceptional Exit | Method | Test.kt:100:1:110:1 | Exit | Method |
| Test.kt:100:1:110:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:100:1:110:1 | Normal Exit | Method | Test.kt:100:1:110:1 | Exit | Method |
| Test.kt:100:25:110:1 | { ... } | BlockStmt | Test.kt:101:5:103:5 | <Expr>; | ExprStmt |
| Test.kt:101:5:103:5 | <Expr>; | ExprStmt | Test.kt:101:5:103:5 | when ... | WhenExpr |
@@ -186,8 +200,7 @@
| Test.kt:108:9:108:29 | <Expr>; | ExprStmt | Test.kt:108:17:108:28 | "y not null" | StringLiteral |
| Test.kt:108:9:108:29 | println(...) | MethodCall | Test.kt:100:1:110:1 | Normal Exit | Method |
| Test.kt:108:17:108:28 | "y not null" | StringLiteral | Test.kt:108:9:108:29 | println(...) | MethodCall |
| Test.kt:112:1:116:1 | Exceptional Exit | Method | Test.kt:112:1:116:1 | Exit | Method |
| Test.kt:112:1:116:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:112:1:116:1 | Entry | Method | Test.kt:112:32:116:1 | { ... } | BlockStmt |
| Test.kt:112:1:116:1 | Normal Exit | Method | Test.kt:112:1:116:1 | Exit | Method |
| Test.kt:112:32:116:1 | { ... } | BlockStmt | Test.kt:113:5:115:5 | <Expr>; | ExprStmt |
| Test.kt:113:5:115:5 | <Expr>; | ExprStmt | Test.kt:113:5:115:5 | when ... | WhenExpr |
@@ -199,8 +212,7 @@
| Test.kt:113:14:113:14 | y | VarAccess | Test.kt:112:1:116:1 | Normal Exit | Method |
| Test.kt:113:14:113:14 | y | VarAccess | Test.kt:113:17:115:5 | { ... } | BlockStmt |
| Test.kt:113:17:115:5 | { ... } | BlockStmt | Test.kt:112:1:116:1 | Normal Exit | Method |
| Test.kt:118:1:124:1 | Exceptional Exit | Method | Test.kt:118:1:124:1 | Exit | Method |
| Test.kt:118:1:124:1 | Exit | Method | file://:0:0:0:0 | <none> | <none> |
| Test.kt:118:1:124:1 | Entry | Method | Test.kt:118:37:124:1 | { ... } | BlockStmt |
| Test.kt:118:1:124:1 | Normal Exit | Method | Test.kt:118:1:124:1 | Exit | Method |
| Test.kt:118:37:124:1 | { ... } | BlockStmt | Test.kt:119:2:123:12 | <Expr>; | ExprStmt |
| Test.kt:119:2:123:12 | <Expr>; | ExprStmt | Test.kt:119:2:123:12 | when ... | WhenExpr |
@@ -216,6 +228,7 @@
| Test.kt:122:12:122:16 | ... -> ... | WhenBranch | Test.kt:122:12:122:16 | true | BooleanLiteral |
| Test.kt:122:12:122:16 | <Expr>; | ExprStmt | Test.kt:122:12:122:16 | false | BooleanLiteral |
| Test.kt:122:12:122:16 | false | BooleanLiteral | Test.kt:118:1:124:1 | Normal Exit | Method |
| Test.kt:122:12:122:16 | false | BooleanLiteral | Test.kt:123:8:123:10 | { ... } | BlockStmt |
| Test.kt:122:12:122:16 | true | BooleanLiteral | Test.kt:122:12:122:16 | <Expr>; | ExprStmt |
| Test.kt:123:8:123:10 | { ... } | BlockStmt | Test.kt:118:1:124:1 | Normal Exit | Method |
missingSuccessor

View File

@@ -1,54 +1,15 @@
import java
import utils.test.AstCfg
newtype TMaybeControlFlowNode =
TControlFlowNode(ControlFlowNode c) or
TNoControlFlowNode()
class MaybeControlFlowNode extends TMaybeControlFlowNode {
abstract string toString();
abstract Location getLocation();
abstract string getPrimaryQlClasses();
}
class YesMaybeControlFlowNode extends MaybeControlFlowNode {
ControlFlowNode c;
YesMaybeControlFlowNode() { this = TControlFlowNode(c) }
override string toString() { result = c.toString() }
override Location getLocation() { result = c.getLocation() }
override string getPrimaryQlClasses() { result = c.getAstNode().getPrimaryQlClasses() }
}
class NoMaybeControlFlowNode extends MaybeControlFlowNode {
NoMaybeControlFlowNode() { this = TNoControlFlowNode() }
override string toString() { result = "<none>" }
override Location getLocation() { result.toString() = "file://:0:0:0:0" }
override string getPrimaryQlClasses() { result = "<none>" }
}
MaybeControlFlowNode maybeSuccessor(ControlFlowNode n) {
if exists(n.getASuccessor())
then result = TControlFlowNode(n.getASuccessor())
else result = TNoControlFlowNode()
}
from ControlFlowNode n, MaybeControlFlowNode m
from ControlFlowNode n, ControlFlowNode m
where
m = maybeSuccessor(n) and
m = getAnAstSuccessor(n) and
n.getLocation().getFile().(CompilationUnit).fromSource()
select n, n.getAstNode().getPrimaryQlClasses(), m, m.getPrimaryQlClasses()
select n, n.getAstNode().getPrimaryQlClasses(), m, m.getAstNode().getPrimaryQlClasses()
query predicate missingSuccessor(Expr n) {
maybeSuccessor(n.getControlFlowNode()) instanceof NoMaybeControlFlowNode and
n.getFile().(CompilationUnit).fromSource() and
not n instanceof TypeAccess and
not n instanceof VarWrite
query predicate missingSuccessor(Expr e) {
exists(ControlFlowNode n | n = e.getControlFlowNode() and not exists(n.getASuccessor())) and
e.getFile().(CompilationUnit).fromSource() and
not e instanceof TypeAccess and
not e instanceof VarWrite
}

View File

@@ -562,5 +562,4 @@
| Test.kt:121:4:121:9 | ... -> ... | Test.kt:122:12:122:16 | ... -> ... |
| Test.kt:121:4:121:9 | ... -> ... | Test.kt:122:12:122:16 | <Expr>; |
| Test.kt:121:4:121:9 | ... -> ... | Test.kt:123:8:123:10 | { ... } |
| Test.kt:121:9:121:9 | <Expr>; | Test.kt:123:8:123:10 | { ... } |
| Test.kt:122:12:122:16 | ... -> ... | Test.kt:122:12:122:16 | <Expr>; |

View File

@@ -17,5 +17,6 @@ predicate dominanceCounterExample(ControlFlowNode entry, ControlFlowNode dom, Co
from Callable c, ControlFlowNode dom, ControlFlowNode node
where
strictlyDominates(dom, node) and
dominanceCounterExample(c.getBody().getControlFlowNode(), dom, node)
dominanceCounterExample(any(ControlFlow::EntryNode entry | entry.getEnclosingCallable() = c), dom,
node)
select c, dom, node

View File

@@ -1,157 +1,21 @@
| Test.kt:2:43:79:2 | { ... } | Test.kt:3:9:3:18 | var ...; |
| Test.kt:3:9:3:18 | var ...; | Test.kt:3:17:3:18 | px |
| Test.kt:3:9:3:18 | x | Test.kt:4:9:4:18 | var ...; |
| Test.kt:3:17:3:18 | px | Test.kt:3:9:3:18 | x |
| Test.kt:4:9:4:18 | var ...; | Test.kt:4:17:4:18 | pw |
| Test.kt:4:9:4:18 | w | Test.kt:5:9:5:18 | var ...; |
| Test.kt:4:17:4:18 | pw | Test.kt:4:9:4:18 | w |
| Test.kt:5:9:5:18 | var ...; | Test.kt:5:17:5:18 | pz |
| Test.kt:5:9:5:18 | z | Test.kt:7:3:7:12 | var ...; |
| Test.kt:5:17:5:18 | pz | Test.kt:5:9:5:18 | z |
| Test.kt:7:3:7:12 | j | Test.kt:8:3:8:18 | var ...; |
| Test.kt:7:3:7:12 | var ...; | Test.kt:7:3:7:12 | j |
| Test.kt:8:3:8:18 | var ...; | Test.kt:8:17:8:18 | 50 |
| Test.kt:8:3:8:18 | y | Test.kt:11:3:16:3 | <Expr>; |
| Test.kt:8:17:8:18 | 50 | Test.kt:8:3:8:18 | y |
| Test.kt:11:3:16:3 | <Expr>; | Test.kt:11:3:16:3 | when ... |
| Test.kt:11:3:16:3 | when ... | Test.kt:11:7:14:3 | ... -> ... |
| Test.kt:11:7:11:7 | x | Test.kt:11:11:11:11 | 0 |
| Test.kt:11:7:11:11 | ... > ... | Test.kt:11:14:14:3 | { ... } |
| Test.kt:11:7:11:11 | ... > ... | Test.kt:14:10:16:3 | ... -> ... |
| Test.kt:11:7:11:11 | ... > ... | Test.kt:18:3:18:20 | <Expr>; |
| Test.kt:11:7:14:3 | ... -> ... | Test.kt:11:7:11:7 | x |
| Test.kt:11:11:11:11 | 0 | Test.kt:11:7:11:11 | ... > ... |
| Test.kt:11:14:14:3 | { ... } | Test.kt:12:4:12:9 | <Expr>; |
| Test.kt:12:4:12:9 | ...=... | Test.kt:13:4:13:9 | <Expr>; |
| Test.kt:12:4:12:9 | <Expr>; | Test.kt:12:8:12:9 | 20 |
| Test.kt:12:8:12:9 | 20 | Test.kt:12:4:12:9 | ...=... |
| Test.kt:13:4:13:9 | <Expr>; | Test.kt:13:8:13:9 | 10 |
| Test.kt:13:8:13:9 | 10 | Test.kt:13:4:13:9 | ...=... |
| Test.kt:14:10:16:3 | ... -> ... | Test.kt:14:10:16:3 | true |
| Test.kt:14:10:16:3 | true | Test.kt:14:10:16:3 | { ... } |
| Test.kt:14:10:16:3 | { ... } | Test.kt:15:4:15:9 | <Expr>; |
| Test.kt:15:4:15:9 | <Expr>; | Test.kt:15:8:15:9 | 30 |
| Test.kt:15:8:15:9 | 30 | Test.kt:15:4:15:9 | ...=... |
| Test.kt:18:3:18:20 | ...=... | Test.kt:21:3:24:11 | <Expr>; |
| Test.kt:18:3:18:20 | <Expr>; | Test.kt:18:8:18:8 | x |
| Test.kt:18:7:18:20 | (...)... | Test.kt:18:3:18:20 | ...=... |
| Test.kt:18:8:18:8 | x | Test.kt:18:12:18:12 | y |
| Test.kt:18:8:18:12 | ... + ... | Test.kt:18:7:18:20 | (...)... |
| Test.kt:18:12:18:12 | y | Test.kt:18:8:18:12 | ... + ... |
| Test.kt:21:3:24:11 | <Expr>; | Test.kt:21:3:24:11 | when ... |
| Test.kt:21:3:24:11 | when ... | Test.kt:21:7:22:9 | ... -> ... |
| Test.kt:21:7:21:7 | x | Test.kt:21:11:21:11 | 0 |
| Test.kt:21:7:21:11 | ... < ... | Test.kt:2:2:79:2 | Normal Exit |
| Test.kt:21:7:21:11 | ... < ... | Test.kt:22:4:22:9 | <Expr>; |
| Test.kt:21:7:21:11 | ... < ... | Test.kt:24:4:24:11 | ... -> ... |
| Test.kt:21:7:22:9 | ... -> ... | Test.kt:21:7:21:7 | x |
| Test.kt:21:11:21:11 | 0 | Test.kt:21:7:21:11 | ... < ... |
| Test.kt:22:4:22:9 | ...=... | Test.kt:27:3:27:8 | <Expr>; |
| Test.kt:22:4:22:9 | <Expr>; | Test.kt:22:8:22:9 | 40 |
| Test.kt:22:8:22:9 | 40 | Test.kt:22:4:22:9 | ...=... |
| Test.kt:24:4:24:11 | ... -> ... | Test.kt:24:4:24:11 | true |
| Test.kt:24:4:24:11 | true | Test.kt:24:11:24:11 | z |
| Test.kt:24:11:24:11 | z | Test.kt:24:4:24:11 | return ... |
| Test.kt:27:3:27:8 | ...=... | Test.kt:30:3:33:3 | <Expr>; |
| Test.kt:27:3:27:8 | <Expr>; | Test.kt:27:7:27:8 | 10 |
| Test.kt:27:7:27:8 | 10 | Test.kt:27:3:27:8 | ...=... |
| Test.kt:30:3:33:3 | <Expr>; | Test.kt:30:3:33:3 | when ... |
| Test.kt:30:3:33:3 | when ... | Test.kt:30:7:33:3 | ... -> ... |
| Test.kt:30:7:30:7 | x | Test.kt:30:12:30:12 | 0 |
| Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:30:15:33:3 | { ... } |
| Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:35:3:35:8 | <Expr>; |
| Test.kt:30:7:33:3 | ... -> ... | Test.kt:30:7:30:7 | x |
| Test.kt:30:12:30:12 | 0 | Test.kt:30:7:30:12 | ... (value equals) ... |
| Test.kt:30:15:33:3 | { ... } | Test.kt:31:4:31:9 | <Expr>; |
| Test.kt:31:4:31:9 | ...=... | Test.kt:32:4:32:9 | <Expr>; |
| Test.kt:31:4:31:9 | <Expr>; | Test.kt:31:8:31:9 | 60 |
| Test.kt:31:8:31:9 | 60 | Test.kt:31:4:31:9 | ...=... |
| Test.kt:32:4:32:9 | <Expr>; | Test.kt:32:8:32:9 | 10 |
| Test.kt:32:8:32:9 | 10 | Test.kt:32:4:32:9 | ...=... |
| Test.kt:35:3:35:8 | ...+=... | Test.kt:38:3:41:3 | while (...) |
| Test.kt:35:3:35:8 | <Expr>; | Test.kt:35:3:35:8 | z |
| Test.kt:35:3:35:8 | z | Test.kt:35:8:35:8 | x |
| Test.kt:35:8:35:8 | x | Test.kt:35:3:35:8 | ...+=... |
| Test.kt:38:3:41:3 | while (...) | Test.kt:38:10:38:10 | x |
| Test.kt:38:10:38:10 | x | Test.kt:38:14:38:14 | 0 |
| Test.kt:38:10:38:14 | ... > ... | Test.kt:38:17:41:3 | { ... } |
| Test.kt:38:10:38:14 | ... > ... | Test.kt:43:3:43:15 | <Expr>; |
| Test.kt:38:14:38:14 | 0 | Test.kt:38:10:38:14 | ... > ... |
| Test.kt:38:17:41:3 | { ... } | Test.kt:39:4:39:9 | <Expr>; |
| Test.kt:39:4:39:9 | ...=... | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:39:4:39:9 | <Expr>; | Test.kt:39:8:39:9 | 10 |
| Test.kt:39:8:39:9 | 10 | Test.kt:39:4:39:9 | ...=... |
| Test.kt:40:4:40:4 | x | Test.kt:40:4:40:6 | <unary> |
| Test.kt:40:4:40:6 | ...=... | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:40:4:40:6 | <Expr>; | Test.kt:40:4:40:6 | <Stmt> |
| Test.kt:40:4:40:6 | <Expr>; | Test.kt:40:4:40:6 | <unary> |
| Test.kt:40:4:40:6 | <Expr>; | Test.kt:40:4:40:6 | <unary> |
| Test.kt:40:4:40:6 | <Stmt> | Test.kt:40:4:40:6 | { ... } |
| Test.kt:40:4:40:6 | <unary> | Test.kt:40:4:40:6 | <Expr>; |
| Test.kt:40:4:40:6 | <unary> | Test.kt:40:4:40:6 | <implicit coercion to unit> |
| Test.kt:40:4:40:6 | <unary> | Test.kt:40:4:40:6 | dec(...) |
| Test.kt:40:4:40:6 | dec(...) | Test.kt:40:4:40:6 | ...=... |
| Test.kt:40:4:40:6 | var ...; | Test.kt:40:4:40:4 | x |
| Test.kt:40:4:40:6 | { ... } | Test.kt:40:4:40:6 | var ...; |
| Test.kt:43:3:43:15 | ...+=... | Test.kt:73:3:73:16 | <Expr>; |
| Test.kt:43:3:43:15 | <Expr>; | Test.kt:43:3:43:15 | z |
| Test.kt:43:3:43:15 | z | Test.kt:43:8:43:8 | y |
| Test.kt:43:8:43:8 | y | Test.kt:43:8:43:15 | (...)... |
| Test.kt:43:8:43:15 | (...)... | Test.kt:43:3:43:15 | ...+=... |
| Test.kt:73:3:73:16 | ...+=... | Test.kt:77:3:77:8 | <Expr>; |
| Test.kt:73:3:73:16 | <Expr>; | Test.kt:73:3:73:16 | z |
| Test.kt:73:3:73:16 | z | Test.kt:73:8:73:8 | x |
| Test.kt:73:8:73:8 | x | Test.kt:73:12:73:12 | y |
| Test.kt:73:8:73:12 | ... + ... | Test.kt:73:16:73:16 | w |
| Test.kt:73:8:73:16 | ... + ... | Test.kt:73:3:73:16 | ...+=... |
| Test.kt:73:12:73:12 | <implicit cast> | Test.kt:73:8:73:12 | ... + ... |
| Test.kt:73:12:73:12 | y | Test.kt:73:12:73:12 | <implicit cast> |
| Test.kt:73:16:73:16 | w | Test.kt:73:8:73:16 | ... + ... |
| Test.kt:77:3:77:8 | ...=... | Test.kt:78:10:78:10 | w |
| Test.kt:77:3:77:8 | <Expr>; | Test.kt:77:7:77:8 | 40 |
| Test.kt:77:7:77:8 | 40 | Test.kt:77:3:77:8 | ...=... |
| Test.kt:78:10:78:10 | w | Test.kt:78:3:78:10 | return ... |
| Test.kt:81:25:98:2 | { ... } | Test.kt:83:3:83:12 | var ...; |
| Test.kt:83:3:83:12 | b | Test.kt:84:3:84:12 | var ...; |
| Test.kt:83:3:83:12 | var ...; | Test.kt:83:3:83:12 | b |
| Test.kt:84:3:84:12 | c | Test.kt:85:3:85:7 | <Expr>; |
| Test.kt:84:3:84:12 | var ...; | Test.kt:84:3:84:12 | c |
| Test.kt:85:3:85:7 | ...=... | Test.kt:86:3:96:3 | while (...) |
| Test.kt:85:3:85:7 | <Expr>; | Test.kt:85:7:85:7 | 0 |
| Test.kt:85:7:85:7 | 0 | Test.kt:85:3:85:7 | ...=... |
| Test.kt:86:3:96:3 | while (...) | Test.kt:86:9:86:12 | true |
| Test.kt:86:9:86:12 | true | Test.kt:86:15:96:3 | { ... } |
| Test.kt:86:15:96:3 | { ... } | Test.kt:87:4:87:9 | <Expr>; |
| Test.kt:87:4:87:9 | ...=... | Test.kt:88:4:91:4 | <Expr>; |
| Test.kt:87:4:87:9 | <Expr>; | Test.kt:87:8:87:9 | 10 |
| Test.kt:87:8:87:9 | 10 | Test.kt:87:4:87:9 | ...=... |
| Test.kt:88:4:91:4 | <Expr>; | Test.kt:88:4:91:4 | when ... |
| Test.kt:88:4:91:4 | when ... | Test.kt:88:8:91:4 | ... -> ... |
| Test.kt:88:8:88:8 | a | Test.kt:88:12:88:14 | 100 |
| Test.kt:88:8:88:14 | ... > ... | Test.kt:88:17:91:4 | { ... } |
| Test.kt:88:8:88:14 | ... > ... | Test.kt:92:4:93:9 | <Expr>; |
| Test.kt:88:8:91:4 | ... -> ... | Test.kt:88:8:88:8 | a |
| Test.kt:88:12:88:14 | 100 | Test.kt:88:8:88:14 | ... > ... |
| Test.kt:88:17:91:4 | { ... } | Test.kt:89:5:89:10 | <Expr>; |
| Test.kt:89:5:89:10 | ...=... | Test.kt:90:5:90:9 | <Expr>; |
| Test.kt:89:5:89:10 | <Expr>; | Test.kt:89:9:89:10 | 10 |
| Test.kt:89:9:89:10 | 10 | Test.kt:89:5:89:10 | ...=... |
| Test.kt:90:5:90:9 | <Expr>; | Test.kt:90:9:90:9 | c |
| Test.kt:90:9:90:9 | c | Test.kt:90:5:90:9 | ...=... |
| Test.kt:92:4:93:9 | <Expr>; | Test.kt:92:4:93:9 | when ... |
| Test.kt:92:4:93:9 | when ... | Test.kt:92:8:93:9 | ... -> ... |
| Test.kt:92:8:92:8 | a | Test.kt:92:13:92:14 | 10 |
| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:81:2:98:2 | Normal Exit |
| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:93:5:93:9 | break |
| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:94:4:95:12 | <Expr>; |
| Test.kt:92:8:93:9 | ... -> ... | Test.kt:92:8:92:8 | a |
| Test.kt:92:13:92:14 | 10 | Test.kt:92:8:92:14 | ... (value equals) ... |
| Test.kt:93:5:93:9 | break | Test.kt:97:10:97:10 | b |
| Test.kt:94:4:95:12 | <Expr>; | Test.kt:94:4:95:12 | when ... |
| Test.kt:94:4:95:12 | when ... | Test.kt:94:8:95:12 | ... -> ... |
| Test.kt:94:8:94:8 | a | Test.kt:94:13:94:14 | 20 |
| Test.kt:94:8:94:14 | ... (value equals) ... | Test.kt:95:12:95:12 | c |
| Test.kt:94:8:95:12 | ... -> ... | Test.kt:94:8:94:8 | a |
| Test.kt:94:13:94:14 | 20 | Test.kt:94:8:94:14 | ... (value equals) ... |
| Test.kt:95:12:95:12 | c | Test.kt:95:5:95:12 | return ... |
| Test.kt:97:10:97:10 | b | Test.kt:97:3:97:10 | return ... |
| Test.kt:2:43:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } |
| Test.kt:2:43:79:2 | { ... } | Test.kt:14:10:16:3 | ... -> ... |
| Test.kt:2:43:79:2 | { ... } | Test.kt:18:3:18:20 | <Expr>; |
| Test.kt:18:3:18:20 | <Expr>; | Test.kt:2:2:79:2 | Normal Exit |
| Test.kt:18:3:18:20 | <Expr>; | Test.kt:22:4:22:9 | <Expr>; |
| Test.kt:18:3:18:20 | <Expr>; | Test.kt:24:4:24:11 | ... -> ... |
| Test.kt:22:4:22:9 | <Expr>; | Test.kt:30:7:30:12 | After ... (value equals) ... [false] |
| Test.kt:22:4:22:9 | <Expr>; | Test.kt:30:15:33:3 | { ... } |
| Test.kt:22:4:22:9 | <Expr>; | Test.kt:35:3:35:8 | <Expr>; |
| Test.kt:35:3:35:8 | <Expr>; | Test.kt:38:10:38:10 | x |
| Test.kt:38:10:38:10 | x | Test.kt:38:17:41:3 | { ... } |
| Test.kt:38:10:38:10 | x | Test.kt:43:3:43:15 | <Expr>; |
| Test.kt:81:25:98:2 | { ... } | Test.kt:86:9:86:12 | true |
| Test.kt:86:9:86:12 | true | Test.kt:88:8:88:14 | After ... > ... [false] |
| Test.kt:86:9:86:12 | true | Test.kt:88:17:91:4 | { ... } |
| Test.kt:86:9:86:12 | true | Test.kt:92:4:93:9 | <Expr>; |
| Test.kt:92:4:93:9 | <Expr>; | Test.kt:81:2:98:2 | Normal Exit |
| Test.kt:92:4:93:9 | <Expr>; | Test.kt:93:5:93:9 | break |
| Test.kt:92:4:93:9 | <Expr>; | Test.kt:94:4:95:12 | <Expr>; |
| Test.kt:94:4:95:12 | <Expr>; | Test.kt:94:8:94:14 | After ... (value equals) ... [false] |
| Test.kt:94:4:95:12 | <Expr>; | Test.kt:95:12:95:12 | c |

View File

@@ -1,9 +1,9 @@
import default
import semmle.code.java.controlflow.Dominance
import java
import utils.test.BasicBlock
from Method func, ControlFlowNode dominator, ControlFlowNode node
from Method func, BasicBlock dominator, BasicBlock bb
where
iDominates(dominator, node) and
dominator.getEnclosingStmt().getEnclosingCallable() = func and
dominator.immediatelyDominates(bb) and
dominator.getEnclosingCallable() = func and
func.getDeclaringType().hasName("Test")
select dominator, node
select getFirstAstNodeOrSynth(dominator), getFirstAstNodeOrSynth(bb)

View File

@@ -7,5 +7,5 @@ where
iDominates(dom1, node) and
iDominates(dom2, node) and
dom1 != dom2 and
func = node.getEnclosingStmt().getEnclosingCallable()
func = node.getEnclosingCallable()
select func, node, dom1, dom2

View File

@@ -1,140 +1,296 @@
| Test.java:3:14:3:17 | Exceptional Exit | 0 | Test.java:3:14:3:17 | Exceptional Exit |
| Test.java:3:14:3:17 | Exit | 0 | Test.java:3:14:3:17 | Exit |
| Test.java:3:14:3:17 | { ... } | 0 | Test.java:3:14:3:17 | { ... } |
| Test.java:3:14:3:17 | { ... } | 1 | Test.java:3:14:3:17 | super(...) |
| Test.java:3:14:3:17 | { ... } | 2 | Test.java:3:14:3:17 | Normal Exit |
| Test.java:4:14:4:17 | Exceptional Exit | 0 | Test.java:4:14:4:17 | Exceptional Exit |
| Test.java:4:14:4:17 | Exit | 0 | Test.java:4:14:4:17 | Exit |
| Test.java:3:14:3:17 | Entry | 0 | Test.java:3:14:3:17 | Entry |
| Test.java:3:14:3:17 | Entry | 1 | Test.java:3:14:3:17 | { ... } |
| Test.java:3:14:3:17 | Entry | 2 | Test.java:3:14:3:17 | Before super(...) |
| Test.java:3:14:3:17 | Entry | 3 | Test.java:3:14:3:17 | super(...) |
| Test.java:3:14:3:17 | Entry | 4 | Test.java:3:14:3:17 | After super(...) |
| Test.java:3:14:3:17 | Entry | 5 | Test.java:3:14:3:17 | After { ... } |
| Test.java:3:14:3:17 | Entry | 6 | Test.java:3:14:3:17 | Normal Exit |
| Test.java:3:14:3:17 | Entry | 7 | Test.java:3:14:3:17 | Exit |
| Test.java:4:14:4:17 | Entry | 0 | Test.java:4:14:4:17 | Entry |
| Test.java:4:14:4:17 | Entry | 1 | Test.java:4:21:76:2 | { ... } |
| Test.java:4:14:4:17 | Entry | 2 | Test.java:5:3:5:12 | var ...; |
| Test.java:4:14:4:17 | Entry | 3 | Test.java:5:7:5:11 | Before x |
| Test.java:4:14:4:17 | Entry | 4 | Test.java:5:11:5:11 | 0 |
| Test.java:4:14:4:17 | Entry | 5 | Test.java:5:7:5:11 | x |
| Test.java:4:14:4:17 | Entry | 6 | Test.java:5:7:5:11 | After x |
| Test.java:4:14:4:17 | Entry | 7 | Test.java:5:3:5:12 | After var ...; |
| Test.java:4:14:4:17 | Entry | 8 | Test.java:6:3:6:14 | var ...; |
| Test.java:4:14:4:17 | Entry | 9 | Test.java:6:8:6:13 | Before y |
| Test.java:4:14:4:17 | Entry | 10 | Test.java:6:12:6:13 | 50 |
| Test.java:4:14:4:17 | Entry | 11 | Test.java:6:8:6:13 | y |
| Test.java:4:14:4:17 | Entry | 12 | Test.java:6:8:6:13 | After y |
| Test.java:4:14:4:17 | Entry | 13 | Test.java:6:3:6:14 | After var ...; |
| Test.java:4:14:4:17 | Entry | 14 | Test.java:7:3:7:12 | var ...; |
| Test.java:4:14:4:17 | Entry | 15 | Test.java:7:7:7:11 | Before z |
| Test.java:4:14:4:17 | Entry | 16 | Test.java:7:11:7:11 | 0 |
| Test.java:4:14:4:17 | Entry | 17 | Test.java:7:7:7:11 | z |
| Test.java:4:14:4:17 | Entry | 18 | Test.java:7:7:7:11 | After z |
| Test.java:4:14:4:17 | Entry | 19 | Test.java:7:3:7:12 | After var ...; |
| Test.java:4:14:4:17 | Entry | 20 | Test.java:8:3:8:12 | var ...; |
| Test.java:4:14:4:17 | Entry | 21 | Test.java:8:7:8:11 | Before w |
| Test.java:4:14:4:17 | Entry | 22 | Test.java:8:11:8:11 | 0 |
| Test.java:4:14:4:17 | Entry | 23 | Test.java:8:7:8:11 | w |
| Test.java:4:14:4:17 | Entry | 24 | Test.java:8:7:8:11 | After w |
| Test.java:4:14:4:17 | Entry | 25 | Test.java:8:3:8:12 | After var ...; |
| Test.java:4:14:4:17 | Entry | 26 | Test.java:11:3:11:12 | if (...) |
| Test.java:4:14:4:17 | Entry | 27 | Test.java:11:7:11:11 | Before ... > ... |
| Test.java:4:14:4:17 | Entry | 28 | Test.java:11:7:11:7 | x |
| Test.java:4:14:4:17 | Entry | 29 | Test.java:11:11:11:11 | 0 |
| Test.java:4:14:4:17 | Entry | 30 | Test.java:11:7:11:11 | ... > ... |
| Test.java:4:14:4:17 | Normal Exit | 0 | Test.java:4:14:4:17 | Normal Exit |
| Test.java:4:21:76:2 | { ... } | 0 | Test.java:4:21:76:2 | { ... } |
| Test.java:4:21:76:2 | { ... } | 1 | Test.java:5:3:5:12 | var ...; |
| Test.java:4:21:76:2 | { ... } | 2 | Test.java:5:11:5:11 | 0 |
| Test.java:4:21:76:2 | { ... } | 3 | Test.java:5:7:5:11 | x |
| Test.java:4:21:76:2 | { ... } | 4 | Test.java:6:3:6:14 | var ...; |
| Test.java:4:21:76:2 | { ... } | 5 | Test.java:6:12:6:13 | 50 |
| Test.java:4:21:76:2 | { ... } | 6 | Test.java:6:8:6:13 | y |
| Test.java:4:21:76:2 | { ... } | 7 | Test.java:7:3:7:12 | var ...; |
| Test.java:4:21:76:2 | { ... } | 8 | Test.java:7:11:7:11 | 0 |
| Test.java:4:21:76:2 | { ... } | 9 | Test.java:7:7:7:11 | z |
| Test.java:4:21:76:2 | { ... } | 10 | Test.java:8:3:8:12 | var ...; |
| Test.java:4:21:76:2 | { ... } | 11 | Test.java:8:11:8:11 | 0 |
| Test.java:4:21:76:2 | { ... } | 12 | Test.java:8:7:8:11 | w |
| Test.java:4:21:76:2 | { ... } | 13 | Test.java:11:3:11:12 | if (...) |
| Test.java:4:21:76:2 | { ... } | 14 | Test.java:11:7:11:7 | x |
| Test.java:4:21:76:2 | { ... } | 15 | Test.java:11:11:11:11 | 0 |
| Test.java:4:21:76:2 | { ... } | 16 | Test.java:11:7:11:11 | ... > ... |
| Test.java:11:14:14:3 | { ... } | 0 | Test.java:11:14:14:3 | { ... } |
| Test.java:11:14:14:3 | { ... } | 1 | Test.java:12:4:12:10 | <Expr>; |
| Test.java:11:14:14:3 | { ... } | 2 | Test.java:12:8:12:9 | 20 |
| Test.java:11:14:14:3 | { ... } | 3 | Test.java:12:4:12:9 | ...=... |
| Test.java:11:14:14:3 | { ... } | 4 | Test.java:13:4:13:10 | <Expr>; |
| Test.java:11:14:14:3 | { ... } | 5 | Test.java:13:8:13:9 | 10 |
| Test.java:11:14:14:3 | { ... } | 6 | Test.java:13:4:13:9 | ...=... |
| Test.java:14:10:16:3 | { ... } | 0 | Test.java:14:10:16:3 | { ... } |
| Test.java:14:10:16:3 | { ... } | 1 | Test.java:15:4:15:10 | <Expr>; |
| Test.java:14:10:16:3 | { ... } | 2 | Test.java:15:8:15:9 | 30 |
| Test.java:14:10:16:3 | { ... } | 3 | Test.java:15:4:15:9 | ...=... |
| Test.java:18:3:18:8 | <Expr>; | 0 | Test.java:18:3:18:8 | <Expr>; |
| Test.java:18:3:18:8 | <Expr>; | 1 | Test.java:18:7:18:7 | 0 |
| Test.java:18:3:18:8 | <Expr>; | 2 | Test.java:18:3:18:7 | ...=... |
| Test.java:18:3:18:8 | <Expr>; | 3 | Test.java:21:3:21:11 | if (...) |
| Test.java:18:3:18:8 | <Expr>; | 4 | Test.java:21:6:21:6 | x |
| Test.java:18:3:18:8 | <Expr>; | 5 | Test.java:21:10:21:10 | 0 |
| Test.java:18:3:18:8 | <Expr>; | 6 | Test.java:21:6:21:10 | ... < ... |
| Test.java:22:4:22:10 | <Expr>; | 0 | Test.java:22:4:22:10 | <Expr>; |
| Test.java:22:4:22:10 | <Expr>; | 1 | Test.java:22:8:22:9 | 40 |
| Test.java:22:4:22:10 | <Expr>; | 2 | Test.java:22:4:22:9 | ...=... |
| Test.java:22:4:22:10 | <Expr>; | 3 | Test.java:27:3:27:9 | <Expr>; |
| Test.java:22:4:22:10 | <Expr>; | 4 | Test.java:27:7:27:8 | 10 |
| Test.java:22:4:22:10 | <Expr>; | 5 | Test.java:27:3:27:8 | ...=... |
| Test.java:22:4:22:10 | <Expr>; | 6 | Test.java:30:3:30:13 | if (...) |
| Test.java:22:4:22:10 | <Expr>; | 7 | Test.java:30:7:30:7 | x |
| Test.java:22:4:22:10 | <Expr>; | 8 | Test.java:30:12:30:12 | 0 |
| Test.java:22:4:22:10 | <Expr>; | 9 | Test.java:30:7:30:12 | ... == ... |
| Test.java:24:4:24:10 | return ... | 0 | Test.java:24:4:24:10 | return ... |
| Test.java:30:15:33:3 | { ... } | 0 | Test.java:30:15:33:3 | { ... } |
| Test.java:30:15:33:3 | { ... } | 1 | Test.java:31:4:31:10 | <Expr>; |
| Test.java:30:15:33:3 | { ... } | 2 | Test.java:31:8:31:9 | 60 |
| Test.java:30:15:33:3 | { ... } | 3 | Test.java:31:4:31:9 | ...=... |
| Test.java:30:15:33:3 | { ... } | 4 | Test.java:32:4:32:10 | <Expr>; |
| Test.java:30:15:33:3 | { ... } | 5 | Test.java:32:8:32:9 | 10 |
| Test.java:30:15:33:3 | { ... } | 6 | Test.java:32:4:32:9 | ...=... |
| Test.java:35:3:35:9 | <Expr>; | 0 | Test.java:35:3:35:9 | <Expr>; |
| Test.java:35:3:35:9 | <Expr>; | 1 | Test.java:35:7:35:8 | 20 |
| Test.java:35:3:35:9 | <Expr>; | 2 | Test.java:35:3:35:8 | ...=... |
| Test.java:35:3:35:9 | <Expr>; | 3 | Test.java:38:3:38:14 | while (...) |
| Test.java:38:9:38:9 | x | 0 | Test.java:38:9:38:9 | x |
| Test.java:38:9:38:9 | x | 1 | Test.java:38:13:38:13 | 0 |
| Test.java:38:9:38:9 | x | 2 | Test.java:38:9:38:13 | ... > ... |
| Test.java:38:16:41:3 | { ... } | 0 | Test.java:38:16:41:3 | { ... } |
| Test.java:38:16:41:3 | { ... } | 1 | Test.java:39:4:39:10 | <Expr>; |
| Test.java:38:16:41:3 | { ... } | 2 | Test.java:39:8:39:9 | 10 |
| Test.java:38:16:41:3 | { ... } | 3 | Test.java:39:4:39:9 | ...=... |
| Test.java:38:16:41:3 | { ... } | 4 | Test.java:40:4:40:7 | <Expr>; |
| Test.java:38:16:41:3 | { ... } | 5 | Test.java:40:4:40:4 | x |
| Test.java:38:16:41:3 | { ... } | 6 | Test.java:40:4:40:6 | ...-- |
| Test.java:43:3:43:9 | <Expr>; | 0 | Test.java:43:3:43:9 | <Expr>; |
| Test.java:43:3:43:9 | <Expr>; | 1 | Test.java:43:7:43:8 | 30 |
| Test.java:43:3:43:9 | <Expr>; | 2 | Test.java:43:3:43:8 | ...=... |
| Test.java:43:3:43:9 | <Expr>; | 3 | Test.java:46:3:46:29 | for (...;...;...) |
| Test.java:43:3:43:9 | <Expr>; | 4 | Test.java:46:15:46:15 | 0 |
| Test.java:43:3:43:9 | <Expr>; | 5 | Test.java:46:11:46:15 | j |
| Test.java:46:18:46:18 | j | 0 | Test.java:46:18:46:18 | j |
| Test.java:46:18:46:18 | j | 1 | Test.java:46:22:46:23 | 10 |
| Test.java:46:18:46:18 | j | 2 | Test.java:46:18:46:23 | ... < ... |
| Test.java:46:31:49:3 | { ... } | 0 | Test.java:46:31:49:3 | { ... } |
| Test.java:46:31:49:3 | { ... } | 1 | Test.java:47:4:47:9 | <Expr>; |
| Test.java:46:31:49:3 | { ... } | 2 | Test.java:47:8:47:8 | 0 |
| Test.java:46:31:49:3 | { ... } | 3 | Test.java:47:4:47:8 | ...=... |
| Test.java:46:31:49:3 | { ... } | 4 | Test.java:48:4:48:10 | <Expr>; |
| Test.java:46:31:49:3 | { ... } | 5 | Test.java:48:8:48:9 | 10 |
| Test.java:46:31:49:3 | { ... } | 6 | Test.java:48:4:48:9 | ...=... |
| Test.java:46:31:49:3 | { ... } | 7 | Test.java:46:26:46:26 | j |
| Test.java:46:31:49:3 | { ... } | 8 | Test.java:46:26:46:28 | ...++ |
| Test.java:51:3:51:9 | <Expr>; | 0 | Test.java:51:3:51:9 | <Expr>; |
| Test.java:51:3:51:9 | <Expr>; | 1 | Test.java:51:7:51:8 | 40 |
| Test.java:51:3:51:9 | <Expr>; | 2 | Test.java:51:3:51:8 | ...=... |
| Test.java:51:3:51:9 | <Expr>; | 3 | Test.java:54:3:54:29 | for (...;...;...) |
| Test.java:51:3:51:9 | <Expr>; | 4 | Test.java:54:15:54:15 | 0 |
| Test.java:51:3:51:9 | <Expr>; | 5 | Test.java:54:11:54:15 | j |
| Test.java:54:18:54:18 | j | 0 | Test.java:54:18:54:18 | j |
| Test.java:54:18:54:18 | j | 1 | Test.java:54:22:54:23 | 10 |
| Test.java:54:18:54:18 | j | 2 | Test.java:54:18:54:23 | ... < ... |
| Test.java:54:26:54:26 | j | 0 | Test.java:54:26:54:26 | j |
| Test.java:54:26:54:26 | j | 1 | Test.java:54:26:54:28 | ...++ |
| Test.java:54:31:68:3 | { ... } | 0 | Test.java:54:31:68:3 | { ... } |
| Test.java:54:31:68:3 | { ... } | 1 | Test.java:55:4:55:10 | <Expr>; |
| Test.java:54:31:68:3 | { ... } | 2 | Test.java:55:8:55:9 | 30 |
| Test.java:54:31:68:3 | { ... } | 3 | Test.java:55:4:55:9 | ...=... |
| Test.java:54:31:68:3 | { ... } | 4 | Test.java:56:4:56:12 | if (...) |
| Test.java:54:31:68:3 | { ... } | 5 | Test.java:56:7:56:7 | z |
| Test.java:54:31:68:3 | { ... } | 6 | Test.java:56:11:56:11 | 0 |
| Test.java:54:31:68:3 | { ... } | 7 | Test.java:56:7:56:11 | ... > ... |
| Test.java:57:5:57:13 | if (...) | 0 | Test.java:57:5:57:13 | if (...) |
| Test.java:57:5:57:13 | if (...) | 1 | Test.java:57:8:57:8 | y |
| Test.java:57:5:57:13 | if (...) | 2 | Test.java:57:12:57:12 | 0 |
| Test.java:57:5:57:13 | if (...) | 3 | Test.java:57:8:57:12 | ... > ... |
| Test.java:57:15:60:5 | { ... } | 0 | Test.java:57:15:60:5 | { ... } |
| Test.java:57:15:60:5 | { ... } | 1 | Test.java:58:6:58:11 | <Expr>; |
| Test.java:57:15:60:5 | { ... } | 2 | Test.java:58:10:58:10 | 0 |
| Test.java:57:15:60:5 | { ... } | 3 | Test.java:58:6:58:10 | ...=... |
| Test.java:57:15:60:5 | { ... } | 4 | Test.java:59:6:59:11 | break |
| Test.java:60:12:62:5 | { ... } | 0 | Test.java:60:12:62:5 | { ... } |
| Test.java:60:12:62:5 | { ... } | 1 | Test.java:61:6:61:12 | <Expr>; |
| Test.java:60:12:62:5 | { ... } | 2 | Test.java:61:10:61:11 | 20 |
| Test.java:60:12:62:5 | { ... } | 3 | Test.java:61:6:61:11 | ...=... |
| Test.java:60:12:62:5 | { ... } | 4 | Test.java:67:4:67:9 | <Expr>; |
| Test.java:60:12:62:5 | { ... } | 5 | Test.java:67:8:67:8 | 0 |
| Test.java:60:12:62:5 | { ... } | 6 | Test.java:67:4:67:8 | ...=... |
| Test.java:63:9:66:4 | { ... } | 0 | Test.java:63:9:66:4 | { ... } |
| Test.java:63:9:66:4 | { ... } | 1 | Test.java:64:5:64:11 | <Expr>; |
| Test.java:63:9:66:4 | { ... } | 2 | Test.java:64:9:64:10 | 10 |
| Test.java:63:9:66:4 | { ... } | 3 | Test.java:64:5:64:10 | ...=... |
| Test.java:63:9:66:4 | { ... } | 4 | Test.java:65:5:65:13 | continue |
| Test.java:70:3:70:9 | <Expr>; | 0 | Test.java:70:3:70:9 | <Expr>; |
| Test.java:70:3:70:9 | <Expr>; | 1 | Test.java:70:7:70:8 | 50 |
| Test.java:70:3:70:9 | <Expr>; | 2 | Test.java:70:3:70:8 | ...=... |
| Test.java:70:3:70:9 | <Expr>; | 3 | Test.java:74:3:74:9 | <Expr>; |
| Test.java:70:3:70:9 | <Expr>; | 4 | Test.java:74:7:74:8 | 40 |
| Test.java:70:3:70:9 | <Expr>; | 5 | Test.java:74:3:74:8 | ...=... |
| Test.java:70:3:70:9 | <Expr>; | 6 | Test.java:75:3:75:9 | return ... |
| Test.java:4:14:4:17 | Normal Exit | 1 | Test.java:4:14:4:17 | Exit |
| Test.java:11:3:11:12 | After if (...) | 0 | Test.java:11:3:11:12 | After if (...) |
| Test.java:11:3:11:12 | After if (...) | 1 | Test.java:18:3:18:8 | <Expr>; |
| Test.java:11:3:11:12 | After if (...) | 2 | Test.java:18:3:18:7 | Before ...=... |
| Test.java:11:3:11:12 | After if (...) | 3 | Test.java:18:3:18:3 | z |
| Test.java:11:3:11:12 | After if (...) | 4 | Test.java:18:7:18:7 | 0 |
| Test.java:11:3:11:12 | After if (...) | 5 | Test.java:18:3:18:7 | ...=... |
| Test.java:11:3:11:12 | After if (...) | 6 | Test.java:18:3:18:7 | After ...=... |
| Test.java:11:3:11:12 | After if (...) | 7 | Test.java:18:3:18:8 | After <Expr>; |
| Test.java:11:3:11:12 | After if (...) | 8 | Test.java:21:3:21:11 | if (...) |
| Test.java:11:3:11:12 | After if (...) | 9 | Test.java:21:6:21:10 | Before ... < ... |
| Test.java:11:3:11:12 | After if (...) | 10 | Test.java:21:6:21:6 | x |
| Test.java:11:3:11:12 | After if (...) | 11 | Test.java:21:10:21:10 | 0 |
| Test.java:11:3:11:12 | After if (...) | 12 | Test.java:21:6:21:10 | ... < ... |
| Test.java:11:7:11:11 | After ... > ... [false] | 0 | Test.java:11:7:11:11 | After ... > ... [false] |
| Test.java:11:7:11:11 | After ... > ... [false] | 1 | Test.java:14:10:16:3 | { ... } |
| Test.java:11:7:11:11 | After ... > ... [false] | 2 | Test.java:15:4:15:10 | <Expr>; |
| Test.java:11:7:11:11 | After ... > ... [false] | 3 | Test.java:15:4:15:9 | Before ...=... |
| Test.java:11:7:11:11 | After ... > ... [false] | 4 | Test.java:15:4:15:4 | y |
| Test.java:11:7:11:11 | After ... > ... [false] | 5 | Test.java:15:8:15:9 | 30 |
| Test.java:11:7:11:11 | After ... > ... [false] | 6 | Test.java:15:4:15:9 | ...=... |
| Test.java:11:7:11:11 | After ... > ... [false] | 7 | Test.java:15:4:15:9 | After ...=... |
| Test.java:11:7:11:11 | After ... > ... [false] | 8 | Test.java:15:4:15:10 | After <Expr>; |
| Test.java:11:7:11:11 | After ... > ... [false] | 9 | Test.java:14:10:16:3 | After { ... } |
| Test.java:11:7:11:11 | After ... > ... [true] | 0 | Test.java:11:7:11:11 | After ... > ... [true] |
| Test.java:11:7:11:11 | After ... > ... [true] | 1 | Test.java:11:14:14:3 | { ... } |
| Test.java:11:7:11:11 | After ... > ... [true] | 2 | Test.java:12:4:12:10 | <Expr>; |
| Test.java:11:7:11:11 | After ... > ... [true] | 3 | Test.java:12:4:12:9 | Before ...=... |
| Test.java:11:7:11:11 | After ... > ... [true] | 4 | Test.java:12:4:12:4 | y |
| Test.java:11:7:11:11 | After ... > ... [true] | 5 | Test.java:12:8:12:9 | 20 |
| Test.java:11:7:11:11 | After ... > ... [true] | 6 | Test.java:12:4:12:9 | ...=... |
| Test.java:11:7:11:11 | After ... > ... [true] | 7 | Test.java:12:4:12:9 | After ...=... |
| Test.java:11:7:11:11 | After ... > ... [true] | 8 | Test.java:12:4:12:10 | After <Expr>; |
| Test.java:11:7:11:11 | After ... > ... [true] | 9 | Test.java:13:4:13:10 | <Expr>; |
| Test.java:11:7:11:11 | After ... > ... [true] | 10 | Test.java:13:4:13:9 | Before ...=... |
| Test.java:11:7:11:11 | After ... > ... [true] | 11 | Test.java:13:4:13:4 | z |
| Test.java:11:7:11:11 | After ... > ... [true] | 12 | Test.java:13:8:13:9 | 10 |
| Test.java:11:7:11:11 | After ... > ... [true] | 13 | Test.java:13:4:13:9 | ...=... |
| Test.java:11:7:11:11 | After ... > ... [true] | 14 | Test.java:13:4:13:9 | After ...=... |
| Test.java:11:7:11:11 | After ... > ... [true] | 15 | Test.java:13:4:13:10 | After <Expr>; |
| Test.java:11:7:11:11 | After ... > ... [true] | 16 | Test.java:11:14:14:3 | After { ... } |
| Test.java:21:6:21:10 | After ... < ... [false] | 0 | Test.java:21:6:21:10 | After ... < ... [false] |
| Test.java:21:6:21:10 | After ... < ... [false] | 1 | Test.java:24:4:24:10 | Before return ... |
| Test.java:21:6:21:10 | After ... < ... [false] | 2 | Test.java:24:4:24:10 | return ... |
| Test.java:21:6:21:10 | After ... < ... [true] | 0 | Test.java:21:6:21:10 | After ... < ... [true] |
| Test.java:21:6:21:10 | After ... < ... [true] | 1 | Test.java:22:4:22:10 | <Expr>; |
| Test.java:21:6:21:10 | After ... < ... [true] | 2 | Test.java:22:4:22:9 | Before ...=... |
| Test.java:21:6:21:10 | After ... < ... [true] | 3 | Test.java:22:4:22:4 | y |
| Test.java:21:6:21:10 | After ... < ... [true] | 4 | Test.java:22:8:22:9 | 40 |
| Test.java:21:6:21:10 | After ... < ... [true] | 5 | Test.java:22:4:22:9 | ...=... |
| Test.java:21:6:21:10 | After ... < ... [true] | 6 | Test.java:22:4:22:9 | After ...=... |
| Test.java:21:6:21:10 | After ... < ... [true] | 7 | Test.java:22:4:22:10 | After <Expr>; |
| Test.java:21:6:21:10 | After ... < ... [true] | 8 | Test.java:21:3:21:11 | After if (...) |
| Test.java:21:6:21:10 | After ... < ... [true] | 9 | Test.java:27:3:27:9 | <Expr>; |
| Test.java:21:6:21:10 | After ... < ... [true] | 10 | Test.java:27:3:27:8 | Before ...=... |
| Test.java:21:6:21:10 | After ... < ... [true] | 11 | Test.java:27:3:27:3 | z |
| Test.java:21:6:21:10 | After ... < ... [true] | 12 | Test.java:27:7:27:8 | 10 |
| Test.java:21:6:21:10 | After ... < ... [true] | 13 | Test.java:27:3:27:8 | ...=... |
| Test.java:21:6:21:10 | After ... < ... [true] | 14 | Test.java:27:3:27:8 | After ...=... |
| Test.java:21:6:21:10 | After ... < ... [true] | 15 | Test.java:27:3:27:9 | After <Expr>; |
| Test.java:21:6:21:10 | After ... < ... [true] | 16 | Test.java:30:3:30:13 | if (...) |
| Test.java:21:6:21:10 | After ... < ... [true] | 17 | Test.java:30:7:30:12 | Before ... == ... |
| Test.java:21:6:21:10 | After ... < ... [true] | 18 | Test.java:30:7:30:7 | x |
| Test.java:21:6:21:10 | After ... < ... [true] | 19 | Test.java:30:12:30:12 | 0 |
| Test.java:21:6:21:10 | After ... < ... [true] | 20 | Test.java:30:7:30:12 | ... == ... |
| Test.java:30:3:30:13 | After if (...) | 0 | Test.java:30:3:30:13 | After if (...) |
| Test.java:30:3:30:13 | After if (...) | 1 | Test.java:35:3:35:9 | <Expr>; |
| Test.java:30:3:30:13 | After if (...) | 2 | Test.java:35:3:35:8 | Before ...=... |
| Test.java:30:3:30:13 | After if (...) | 3 | Test.java:35:3:35:3 | z |
| Test.java:30:3:30:13 | After if (...) | 4 | Test.java:35:7:35:8 | 20 |
| Test.java:30:3:30:13 | After if (...) | 5 | Test.java:35:3:35:8 | ...=... |
| Test.java:30:3:30:13 | After if (...) | 6 | Test.java:35:3:35:8 | After ...=... |
| Test.java:30:3:30:13 | After if (...) | 7 | Test.java:35:3:35:9 | After <Expr>; |
| Test.java:30:3:30:13 | After if (...) | 8 | Test.java:38:3:38:14 | while (...) |
| Test.java:30:7:30:12 | After ... == ... [false] | 0 | Test.java:30:7:30:12 | After ... == ... [false] |
| Test.java:30:7:30:12 | After ... == ... [true] | 0 | Test.java:30:7:30:12 | After ... == ... [true] |
| Test.java:30:7:30:12 | After ... == ... [true] | 1 | Test.java:30:15:33:3 | { ... } |
| Test.java:30:7:30:12 | After ... == ... [true] | 2 | Test.java:31:4:31:10 | <Expr>; |
| Test.java:30:7:30:12 | After ... == ... [true] | 3 | Test.java:31:4:31:9 | Before ...=... |
| Test.java:30:7:30:12 | After ... == ... [true] | 4 | Test.java:31:4:31:4 | y |
| Test.java:30:7:30:12 | After ... == ... [true] | 5 | Test.java:31:8:31:9 | 60 |
| Test.java:30:7:30:12 | After ... == ... [true] | 6 | Test.java:31:4:31:9 | ...=... |
| Test.java:30:7:30:12 | After ... == ... [true] | 7 | Test.java:31:4:31:9 | After ...=... |
| Test.java:30:7:30:12 | After ... == ... [true] | 8 | Test.java:31:4:31:10 | After <Expr>; |
| Test.java:30:7:30:12 | After ... == ... [true] | 9 | Test.java:32:4:32:10 | <Expr>; |
| Test.java:30:7:30:12 | After ... == ... [true] | 10 | Test.java:32:4:32:9 | Before ...=... |
| Test.java:30:7:30:12 | After ... == ... [true] | 11 | Test.java:32:4:32:4 | z |
| Test.java:30:7:30:12 | After ... == ... [true] | 12 | Test.java:32:8:32:9 | 10 |
| Test.java:30:7:30:12 | After ... == ... [true] | 13 | Test.java:32:4:32:9 | ...=... |
| Test.java:30:7:30:12 | After ... == ... [true] | 14 | Test.java:32:4:32:9 | After ...=... |
| Test.java:30:7:30:12 | After ... == ... [true] | 15 | Test.java:32:4:32:10 | After <Expr>; |
| Test.java:30:7:30:12 | After ... == ... [true] | 16 | Test.java:30:15:33:3 | After { ... } |
| Test.java:38:3:38:14 | [LoopHeader] while (...) | 0 | Test.java:38:3:38:14 | [LoopHeader] while (...) |
| Test.java:38:3:38:14 | [LoopHeader] while (...) | 1 | Test.java:38:9:38:13 | Before ... > ... |
| Test.java:38:3:38:14 | [LoopHeader] while (...) | 2 | Test.java:38:9:38:9 | x |
| Test.java:38:3:38:14 | [LoopHeader] while (...) | 3 | Test.java:38:13:38:13 | 0 |
| Test.java:38:3:38:14 | [LoopHeader] while (...) | 4 | Test.java:38:9:38:13 | ... > ... |
| Test.java:38:9:38:13 | After ... > ... [false] | 0 | Test.java:38:9:38:13 | After ... > ... [false] |
| Test.java:38:9:38:13 | After ... > ... [false] | 1 | Test.java:38:3:38:14 | After while (...) |
| Test.java:38:9:38:13 | After ... > ... [false] | 2 | Test.java:43:3:43:9 | <Expr>; |
| Test.java:38:9:38:13 | After ... > ... [false] | 3 | Test.java:43:3:43:8 | Before ...=... |
| Test.java:38:9:38:13 | After ... > ... [false] | 4 | Test.java:43:3:43:3 | z |
| Test.java:38:9:38:13 | After ... > ... [false] | 5 | Test.java:43:7:43:8 | 30 |
| Test.java:38:9:38:13 | After ... > ... [false] | 6 | Test.java:43:3:43:8 | ...=... |
| Test.java:38:9:38:13 | After ... > ... [false] | 7 | Test.java:43:3:43:8 | After ...=... |
| Test.java:38:9:38:13 | After ... > ... [false] | 8 | Test.java:43:3:43:9 | After <Expr>; |
| Test.java:38:9:38:13 | After ... > ... [false] | 9 | Test.java:46:3:46:29 | for (...;...;...) |
| Test.java:38:9:38:13 | After ... > ... [false] | 10 | Test.java:46:11:46:15 | Before j |
| Test.java:38:9:38:13 | After ... > ... [false] | 11 | Test.java:46:15:46:15 | 0 |
| Test.java:38:9:38:13 | After ... > ... [false] | 12 | Test.java:46:11:46:15 | j |
| Test.java:38:9:38:13 | After ... > ... [false] | 13 | Test.java:46:11:46:15 | After j |
| Test.java:38:9:38:13 | After ... > ... [true] | 0 | Test.java:38:9:38:13 | After ... > ... [true] |
| Test.java:38:9:38:13 | After ... > ... [true] | 1 | Test.java:38:16:41:3 | { ... } |
| Test.java:38:9:38:13 | After ... > ... [true] | 2 | Test.java:39:4:39:10 | <Expr>; |
| Test.java:38:9:38:13 | After ... > ... [true] | 3 | Test.java:39:4:39:9 | Before ...=... |
| Test.java:38:9:38:13 | After ... > ... [true] | 4 | Test.java:39:4:39:4 | y |
| Test.java:38:9:38:13 | After ... > ... [true] | 5 | Test.java:39:8:39:9 | 10 |
| Test.java:38:9:38:13 | After ... > ... [true] | 6 | Test.java:39:4:39:9 | ...=... |
| Test.java:38:9:38:13 | After ... > ... [true] | 7 | Test.java:39:4:39:9 | After ...=... |
| Test.java:38:9:38:13 | After ... > ... [true] | 8 | Test.java:39:4:39:10 | After <Expr>; |
| Test.java:38:9:38:13 | After ... > ... [true] | 9 | Test.java:40:4:40:7 | <Expr>; |
| Test.java:38:9:38:13 | After ... > ... [true] | 10 | Test.java:40:4:40:6 | Before ...-- |
| Test.java:38:9:38:13 | After ... > ... [true] | 11 | Test.java:40:4:40:4 | x |
| Test.java:38:9:38:13 | After ... > ... [true] | 12 | Test.java:40:4:40:6 | ...-- |
| Test.java:38:9:38:13 | After ... > ... [true] | 13 | Test.java:40:4:40:6 | After ...-- |
| Test.java:38:9:38:13 | After ... > ... [true] | 14 | Test.java:40:4:40:7 | After <Expr>; |
| Test.java:38:9:38:13 | After ... > ... [true] | 15 | Test.java:38:16:41:3 | After { ... } |
| Test.java:46:18:46:23 | After ... < ... [false] | 0 | Test.java:46:18:46:23 | After ... < ... [false] |
| Test.java:46:18:46:23 | After ... < ... [false] | 1 | Test.java:46:3:46:29 | After for (...;...;...) |
| Test.java:46:18:46:23 | After ... < ... [false] | 2 | Test.java:51:3:51:9 | <Expr>; |
| Test.java:46:18:46:23 | After ... < ... [false] | 3 | Test.java:51:3:51:8 | Before ...=... |
| Test.java:46:18:46:23 | After ... < ... [false] | 4 | Test.java:51:3:51:3 | z |
| Test.java:46:18:46:23 | After ... < ... [false] | 5 | Test.java:51:7:51:8 | 40 |
| Test.java:46:18:46:23 | After ... < ... [false] | 6 | Test.java:51:3:51:8 | ...=... |
| Test.java:46:18:46:23 | After ... < ... [false] | 7 | Test.java:51:3:51:8 | After ...=... |
| Test.java:46:18:46:23 | After ... < ... [false] | 8 | Test.java:51:3:51:9 | After <Expr>; |
| Test.java:46:18:46:23 | After ... < ... [false] | 9 | Test.java:54:3:54:29 | for (...;...;...) |
| Test.java:46:18:46:23 | After ... < ... [false] | 10 | Test.java:54:11:54:15 | Before j |
| Test.java:46:18:46:23 | After ... < ... [false] | 11 | Test.java:54:15:54:15 | 0 |
| Test.java:46:18:46:23 | After ... < ... [false] | 12 | Test.java:54:11:54:15 | j |
| Test.java:46:18:46:23 | After ... < ... [false] | 13 | Test.java:54:11:54:15 | After j |
| Test.java:46:18:46:23 | After ... < ... [true] | 0 | Test.java:46:18:46:23 | After ... < ... [true] |
| Test.java:46:18:46:23 | After ... < ... [true] | 1 | Test.java:46:31:49:3 | { ... } |
| Test.java:46:18:46:23 | After ... < ... [true] | 2 | Test.java:47:4:47:9 | <Expr>; |
| Test.java:46:18:46:23 | After ... < ... [true] | 3 | Test.java:47:4:47:8 | Before ...=... |
| Test.java:46:18:46:23 | After ... < ... [true] | 4 | Test.java:47:4:47:4 | y |
| Test.java:46:18:46:23 | After ... < ... [true] | 5 | Test.java:47:8:47:8 | 0 |
| Test.java:46:18:46:23 | After ... < ... [true] | 6 | Test.java:47:4:47:8 | ...=... |
| Test.java:46:18:46:23 | After ... < ... [true] | 7 | Test.java:47:4:47:8 | After ...=... |
| Test.java:46:18:46:23 | After ... < ... [true] | 8 | Test.java:47:4:47:9 | After <Expr>; |
| Test.java:46:18:46:23 | After ... < ... [true] | 9 | Test.java:48:4:48:10 | <Expr>; |
| Test.java:46:18:46:23 | After ... < ... [true] | 10 | Test.java:48:4:48:9 | Before ...=... |
| Test.java:46:18:46:23 | After ... < ... [true] | 11 | Test.java:48:4:48:4 | w |
| Test.java:46:18:46:23 | After ... < ... [true] | 12 | Test.java:48:8:48:9 | 10 |
| Test.java:46:18:46:23 | After ... < ... [true] | 13 | Test.java:48:4:48:9 | ...=... |
| Test.java:46:18:46:23 | After ... < ... [true] | 14 | Test.java:48:4:48:9 | After ...=... |
| Test.java:46:18:46:23 | After ... < ... [true] | 15 | Test.java:48:4:48:10 | After <Expr>; |
| Test.java:46:18:46:23 | After ... < ... [true] | 16 | Test.java:46:31:49:3 | After { ... } |
| Test.java:46:18:46:23 | After ... < ... [true] | 17 | Test.java:46:3:46:29 | [LoopHeader] for (...;...;...) |
| Test.java:46:18:46:23 | After ... < ... [true] | 18 | Test.java:46:26:46:28 | Before ...++ |
| Test.java:46:18:46:23 | After ... < ... [true] | 19 | Test.java:46:26:46:26 | j |
| Test.java:46:18:46:23 | After ... < ... [true] | 20 | Test.java:46:26:46:28 | ...++ |
| Test.java:46:18:46:23 | After ... < ... [true] | 21 | Test.java:46:26:46:28 | After ...++ |
| Test.java:46:18:46:23 | Before ... < ... | 0 | Test.java:46:18:46:23 | Before ... < ... |
| Test.java:46:18:46:23 | Before ... < ... | 1 | Test.java:46:18:46:18 | j |
| Test.java:46:18:46:23 | Before ... < ... | 2 | Test.java:46:22:46:23 | 10 |
| Test.java:46:18:46:23 | Before ... < ... | 3 | Test.java:46:18:46:23 | ... < ... |
| Test.java:54:3:54:29 | After for (...;...;...) | 0 | Test.java:54:3:54:29 | After for (...;...;...) |
| Test.java:54:3:54:29 | After for (...;...;...) | 1 | Test.java:70:3:70:9 | <Expr>; |
| Test.java:54:3:54:29 | After for (...;...;...) | 2 | Test.java:70:3:70:8 | Before ...=... |
| Test.java:54:3:54:29 | After for (...;...;...) | 3 | Test.java:70:3:70:3 | z |
| Test.java:54:3:54:29 | After for (...;...;...) | 4 | Test.java:70:7:70:8 | 50 |
| Test.java:54:3:54:29 | After for (...;...;...) | 5 | Test.java:70:3:70:8 | ...=... |
| Test.java:54:3:54:29 | After for (...;...;...) | 6 | Test.java:70:3:70:8 | After ...=... |
| Test.java:54:3:54:29 | After for (...;...;...) | 7 | Test.java:70:3:70:9 | After <Expr>; |
| Test.java:54:3:54:29 | After for (...;...;...) | 8 | Test.java:74:3:74:9 | <Expr>; |
| Test.java:54:3:54:29 | After for (...;...;...) | 9 | Test.java:74:3:74:8 | Before ...=... |
| Test.java:54:3:54:29 | After for (...;...;...) | 10 | Test.java:74:3:74:3 | w |
| Test.java:54:3:54:29 | After for (...;...;...) | 11 | Test.java:74:7:74:8 | 40 |
| Test.java:54:3:54:29 | After for (...;...;...) | 12 | Test.java:74:3:74:8 | ...=... |
| Test.java:54:3:54:29 | After for (...;...;...) | 13 | Test.java:74:3:74:8 | After ...=... |
| Test.java:54:3:54:29 | After for (...;...;...) | 14 | Test.java:74:3:74:9 | After <Expr>; |
| Test.java:54:3:54:29 | After for (...;...;...) | 15 | Test.java:75:3:75:9 | Before return ... |
| Test.java:54:3:54:29 | After for (...;...;...) | 16 | Test.java:75:3:75:9 | return ... |
| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 0 | Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) |
| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 1 | Test.java:54:26:54:28 | Before ...++ |
| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 2 | Test.java:54:26:54:26 | j |
| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 3 | Test.java:54:26:54:28 | ...++ |
| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 4 | Test.java:54:26:54:28 | After ...++ |
| Test.java:54:18:54:23 | After ... < ... [false] | 0 | Test.java:54:18:54:23 | After ... < ... [false] |
| Test.java:54:18:54:23 | After ... < ... [true] | 0 | Test.java:54:18:54:23 | After ... < ... [true] |
| Test.java:54:18:54:23 | After ... < ... [true] | 1 | Test.java:54:31:68:3 | { ... } |
| Test.java:54:18:54:23 | After ... < ... [true] | 2 | Test.java:55:4:55:10 | <Expr>; |
| Test.java:54:18:54:23 | After ... < ... [true] | 3 | Test.java:55:4:55:9 | Before ...=... |
| Test.java:54:18:54:23 | After ... < ... [true] | 4 | Test.java:55:4:55:4 | y |
| Test.java:54:18:54:23 | After ... < ... [true] | 5 | Test.java:55:8:55:9 | 30 |
| Test.java:54:18:54:23 | After ... < ... [true] | 6 | Test.java:55:4:55:9 | ...=... |
| Test.java:54:18:54:23 | After ... < ... [true] | 7 | Test.java:55:4:55:9 | After ...=... |
| Test.java:54:18:54:23 | After ... < ... [true] | 8 | Test.java:55:4:55:10 | After <Expr>; |
| Test.java:54:18:54:23 | After ... < ... [true] | 9 | Test.java:56:4:56:12 | if (...) |
| Test.java:54:18:54:23 | After ... < ... [true] | 10 | Test.java:56:7:56:11 | Before ... > ... |
| Test.java:54:18:54:23 | After ... < ... [true] | 11 | Test.java:56:7:56:7 | z |
| Test.java:54:18:54:23 | After ... < ... [true] | 12 | Test.java:56:11:56:11 | 0 |
| Test.java:54:18:54:23 | After ... < ... [true] | 13 | Test.java:56:7:56:11 | ... > ... |
| Test.java:54:18:54:23 | Before ... < ... | 0 | Test.java:54:18:54:23 | Before ... < ... |
| Test.java:54:18:54:23 | Before ... < ... | 1 | Test.java:54:18:54:18 | j |
| Test.java:54:18:54:23 | Before ... < ... | 2 | Test.java:54:22:54:23 | 10 |
| Test.java:54:18:54:23 | Before ... < ... | 3 | Test.java:54:18:54:23 | ... < ... |
| Test.java:56:7:56:11 | After ... > ... [false] | 0 | Test.java:56:7:56:11 | After ... > ... [false] |
| Test.java:56:7:56:11 | After ... > ... [false] | 1 | Test.java:63:9:66:4 | { ... } |
| Test.java:56:7:56:11 | After ... > ... [false] | 2 | Test.java:64:5:64:11 | <Expr>; |
| Test.java:56:7:56:11 | After ... > ... [false] | 3 | Test.java:64:5:64:10 | Before ...=... |
| Test.java:56:7:56:11 | After ... > ... [false] | 4 | Test.java:64:5:64:5 | w |
| Test.java:56:7:56:11 | After ... > ... [false] | 5 | Test.java:64:9:64:10 | 10 |
| Test.java:56:7:56:11 | After ... > ... [false] | 6 | Test.java:64:5:64:10 | ...=... |
| Test.java:56:7:56:11 | After ... > ... [false] | 7 | Test.java:64:5:64:10 | After ...=... |
| Test.java:56:7:56:11 | After ... > ... [false] | 8 | Test.java:64:5:64:11 | After <Expr>; |
| Test.java:56:7:56:11 | After ... > ... [false] | 9 | Test.java:65:5:65:13 | Before continue |
| Test.java:56:7:56:11 | After ... > ... [false] | 10 | Test.java:65:5:65:13 | continue |
| Test.java:56:7:56:11 | After ... > ... [true] | 0 | Test.java:56:7:56:11 | After ... > ... [true] |
| Test.java:56:7:56:11 | After ... > ... [true] | 1 | Test.java:57:5:57:13 | if (...) |
| Test.java:56:7:56:11 | After ... > ... [true] | 2 | Test.java:57:8:57:12 | Before ... > ... |
| Test.java:56:7:56:11 | After ... > ... [true] | 3 | Test.java:57:8:57:8 | y |
| Test.java:56:7:56:11 | After ... > ... [true] | 4 | Test.java:57:12:57:12 | 0 |
| Test.java:56:7:56:11 | After ... > ... [true] | 5 | Test.java:57:8:57:12 | ... > ... |
| Test.java:57:8:57:12 | After ... > ... [false] | 0 | Test.java:57:8:57:12 | After ... > ... [false] |
| Test.java:57:8:57:12 | After ... > ... [false] | 1 | Test.java:60:12:62:5 | { ... } |
| Test.java:57:8:57:12 | After ... > ... [false] | 2 | Test.java:61:6:61:12 | <Expr>; |
| Test.java:57:8:57:12 | After ... > ... [false] | 3 | Test.java:61:6:61:11 | Before ...=... |
| Test.java:57:8:57:12 | After ... > ... [false] | 4 | Test.java:61:6:61:6 | w |
| Test.java:57:8:57:12 | After ... > ... [false] | 5 | Test.java:61:10:61:11 | 20 |
| Test.java:57:8:57:12 | After ... > ... [false] | 6 | Test.java:61:6:61:11 | ...=... |
| Test.java:57:8:57:12 | After ... > ... [false] | 7 | Test.java:61:6:61:11 | After ...=... |
| Test.java:57:8:57:12 | After ... > ... [false] | 8 | Test.java:61:6:61:12 | After <Expr>; |
| Test.java:57:8:57:12 | After ... > ... [false] | 9 | Test.java:60:12:62:5 | After { ... } |
| Test.java:57:8:57:12 | After ... > ... [false] | 10 | Test.java:57:5:57:13 | After if (...) |
| Test.java:57:8:57:12 | After ... > ... [false] | 11 | Test.java:56:4:56:12 | After if (...) |
| Test.java:57:8:57:12 | After ... > ... [false] | 12 | Test.java:67:4:67:9 | <Expr>; |
| Test.java:57:8:57:12 | After ... > ... [false] | 13 | Test.java:67:4:67:8 | Before ...=... |
| Test.java:57:8:57:12 | After ... > ... [false] | 14 | Test.java:67:4:67:4 | x |
| Test.java:57:8:57:12 | After ... > ... [false] | 15 | Test.java:67:8:67:8 | 0 |
| Test.java:57:8:57:12 | After ... > ... [false] | 16 | Test.java:67:4:67:8 | ...=... |
| Test.java:57:8:57:12 | After ... > ... [false] | 17 | Test.java:67:4:67:8 | After ...=... |
| Test.java:57:8:57:12 | After ... > ... [false] | 18 | Test.java:67:4:67:9 | After <Expr>; |
| Test.java:57:8:57:12 | After ... > ... [false] | 19 | Test.java:54:31:68:3 | After { ... } |
| Test.java:57:8:57:12 | After ... > ... [true] | 0 | Test.java:57:8:57:12 | After ... > ... [true] |
| Test.java:57:8:57:12 | After ... > ... [true] | 1 | Test.java:57:15:60:5 | { ... } |
| Test.java:57:8:57:12 | After ... > ... [true] | 2 | Test.java:58:6:58:11 | <Expr>; |
| Test.java:57:8:57:12 | After ... > ... [true] | 3 | Test.java:58:6:58:10 | Before ...=... |
| Test.java:57:8:57:12 | After ... > ... [true] | 4 | Test.java:58:6:58:6 | w |
| Test.java:57:8:57:12 | After ... > ... [true] | 5 | Test.java:58:10:58:10 | 0 |
| Test.java:57:8:57:12 | After ... > ... [true] | 6 | Test.java:58:6:58:10 | ...=... |
| Test.java:57:8:57:12 | After ... > ... [true] | 7 | Test.java:58:6:58:10 | After ...=... |
| Test.java:57:8:57:12 | After ... > ... [true] | 8 | Test.java:58:6:58:11 | After <Expr>; |
| Test.java:57:8:57:12 | After ... > ... [true] | 9 | Test.java:59:6:59:11 | Before break |
| Test.java:57:8:57:12 | After ... > ... [true] | 10 | Test.java:59:6:59:11 | break |

View File

@@ -1,6 +1,3 @@
| Test.java:3:14:3:17 | { ... } | Test.java:3:14:3:17 | Exit |
| Test.java:4:14:4:17 | Normal Exit | Test.java:4:14:4:17 | Exit |
| Test.java:4:21:76:2 | { ... } | Test.java:4:14:4:17 | Exit |
| Test.java:4:21:76:2 | { ... } | Test.java:4:14:4:17 | Normal Exit |
| Test.java:4:21:76:2 | { ... } | Test.java:11:14:14:3 | { ... } |
| Test.java:4:21:76:2 | { ... } | Test.java:14:10:16:3 | { ... } |
@@ -23,7 +20,6 @@
| Test.java:4:21:76:2 | { ... } | Test.java:60:12:62:5 | { ... } |
| Test.java:4:21:76:2 | { ... } | Test.java:63:9:66:4 | { ... } |
| Test.java:4:21:76:2 | { ... } | Test.java:70:3:70:9 | <Expr>; |
| Test.java:18:3:18:8 | <Expr>; | Test.java:4:14:4:17 | Exit |
| Test.java:18:3:18:8 | <Expr>; | Test.java:4:14:4:17 | Normal Exit |
| Test.java:18:3:18:8 | <Expr>; | Test.java:22:4:22:10 | <Expr>; |
| Test.java:18:3:18:8 | <Expr>; | Test.java:24:4:24:10 | return ... |

View File

@@ -1,6 +1,7 @@
import java
import semmle.code.java.controlflow.Dominance
import utils.test.BasicBlock
from BasicBlock b, BasicBlock b2
where b.strictlyDominates(b2)
select b, b2
select getFirstAstNode(b), getFirstAstNode(b2)

View File

@@ -1,16 +1,13 @@
| Test.java:3:14:3:17 | Exceptional Exit | Test.java:3:14:3:17 | Exit |
| Test.java:3:14:3:17 | { ... } | Test.java:3:14:3:17 | Exit |
| Test.java:4:14:4:17 | Exceptional Exit | Test.java:4:14:4:17 | Exit |
| Test.java:4:14:4:17 | Normal Exit | Test.java:4:14:4:17 | Exit |
| Test.java:4:21:76:2 | { ... } | Test.java:11:14:14:3 | { ... } |
| Test.java:4:21:76:2 | { ... } | Test.java:14:10:16:3 | { ... } |
| Test.java:11:14:14:3 | { ... } | Test.java:18:3:18:8 | <Expr>; |
| Test.java:14:10:16:3 | { ... } | Test.java:18:3:18:8 | <Expr>; |
| Test.java:18:3:18:8 | <Expr>; | Test.java:22:4:22:10 | <Expr>; |
| Test.java:18:3:18:8 | <Expr>; | Test.java:24:4:24:10 | return ... |
| Test.java:22:4:22:10 | <Expr>; | Test.java:30:7:30:12 | After ... == ... [false] |
| Test.java:22:4:22:10 | <Expr>; | Test.java:30:15:33:3 | { ... } |
| Test.java:22:4:22:10 | <Expr>; | Test.java:35:3:35:9 | <Expr>; |
| Test.java:24:4:24:10 | return ... | Test.java:4:14:4:17 | Normal Exit |
| Test.java:30:7:30:12 | After ... == ... [false] | Test.java:35:3:35:9 | <Expr>; |
| Test.java:30:15:33:3 | { ... } | Test.java:35:3:35:9 | <Expr>; |
| Test.java:35:3:35:9 | <Expr>; | Test.java:38:9:38:9 | x |
| Test.java:38:9:38:9 | x | Test.java:38:16:41:3 | { ... } |
@@ -21,8 +18,9 @@
| Test.java:46:18:46:18 | j | Test.java:51:3:51:9 | <Expr>; |
| Test.java:46:31:49:3 | { ... } | Test.java:46:18:46:18 | j |
| Test.java:51:3:51:9 | <Expr>; | Test.java:54:18:54:18 | j |
| Test.java:54:18:54:18 | j | Test.java:54:18:54:23 | After ... < ... [false] |
| Test.java:54:18:54:18 | j | Test.java:54:31:68:3 | { ... } |
| Test.java:54:18:54:18 | j | Test.java:70:3:70:9 | <Expr>; |
| Test.java:54:18:54:23 | After ... < ... [false] | Test.java:70:3:70:9 | <Expr>; |
| Test.java:54:26:54:26 | j | Test.java:54:18:54:18 | j |
| Test.java:54:31:68:3 | { ... } | Test.java:57:5:57:13 | if (...) |
| Test.java:54:31:68:3 | { ... } | Test.java:63:9:66:4 | { ... } |

View File

@@ -1,5 +1,6 @@
import java
import utils.test.BasicBlock
from BasicBlock b, BasicBlock b2
where b.getASuccessor() = b2
select b, b2
select getFirstAstNodeOrSynth(b), getFirstAstNodeOrSynth(b2)

View File

@@ -17,5 +17,6 @@ predicate dominanceCounterExample(ControlFlowNode entry, ControlFlowNode dom, Co
from Callable c, ControlFlowNode dom, ControlFlowNode node
where
strictlyDominates(dom, node) and
dominanceCounterExample(c.getBody().getControlFlowNode(), dom, node)
dominanceCounterExample(any(ControlFlow::EntryNode entry | entry.getEnclosingCallable() = c), dom,
node)
select c, dom, node

View File

@@ -1,176 +1,33 @@
| Test.java:2:32:72:2 | { ... } | Test.java:3:3:3:8 | var ...; |
| Test.java:3:3:3:8 | var ...; | Test.java:3:7:3:7 | j |
| Test.java:3:7:3:7 | j | Test.java:4:3:4:14 | var ...; |
| Test.java:4:3:4:14 | var ...; | Test.java:4:12:4:13 | 50 |
| Test.java:4:8:4:13 | y | Test.java:7:3:7:12 | if (...) |
| Test.java:4:12:4:13 | 50 | Test.java:4:8:4:13 | y |
| Test.java:7:3:7:12 | if (...) | Test.java:7:7:7:7 | x |
| Test.java:7:7:7:7 | x | Test.java:7:11:7:11 | 0 |
| Test.java:7:7:7:11 | ... > ... | Test.java:7:14:10:3 | { ... } |
| Test.java:7:7:7:11 | ... > ... | Test.java:10:10:12:3 | { ... } |
| Test.java:7:7:7:11 | ... > ... | Test.java:14:3:14:20 | <Expr>; |
| Test.java:7:11:7:11 | 0 | Test.java:7:7:7:11 | ... > ... |
| Test.java:7:14:10:3 | { ... } | Test.java:8:4:8:10 | <Expr>; |
| Test.java:8:4:8:9 | ...=... | Test.java:9:4:9:10 | <Expr>; |
| Test.java:8:4:8:10 | <Expr>; | Test.java:8:8:8:9 | 20 |
| Test.java:8:8:8:9 | 20 | Test.java:8:4:8:9 | ...=... |
| Test.java:9:4:9:10 | <Expr>; | Test.java:9:8:9:9 | 10 |
| Test.java:9:8:9:9 | 10 | Test.java:9:4:9:9 | ...=... |
| Test.java:10:10:12:3 | { ... } | Test.java:11:4:11:10 | <Expr>; |
| Test.java:11:4:11:10 | <Expr>; | Test.java:11:8:11:9 | 30 |
| Test.java:11:8:11:9 | 30 | Test.java:11:4:11:9 | ...=... |
| Test.java:14:3:14:19 | ...=... | Test.java:17:3:17:12 | if (...) |
| Test.java:14:3:14:20 | <Expr>; | Test.java:14:14:14:14 | x |
| Test.java:14:7:14:19 | (...)... | Test.java:14:3:14:19 | ...=... |
| Test.java:14:14:14:14 | x | Test.java:14:18:14:18 | y |
| Test.java:14:14:14:18 | ... + ... | Test.java:14:7:14:19 | (...)... |
| Test.java:14:18:14:18 | y | Test.java:14:14:14:18 | ... + ... |
| Test.java:17:3:17:12 | if (...) | Test.java:17:7:17:7 | x |
| Test.java:17:7:17:7 | x | Test.java:17:11:17:11 | 0 |
| Test.java:17:7:17:11 | ... < ... | Test.java:2:6:2:9 | Normal Exit |
| Test.java:17:7:17:11 | ... < ... | Test.java:18:4:18:10 | <Expr>; |
| Test.java:17:7:17:11 | ... < ... | Test.java:20:11:20:11 | z |
| Test.java:17:11:17:11 | 0 | Test.java:17:7:17:11 | ... < ... |
| Test.java:18:4:18:9 | ...=... | Test.java:23:3:23:9 | <Expr>; |
| Test.java:18:4:18:10 | <Expr>; | Test.java:18:8:18:9 | 40 |
| Test.java:18:8:18:9 | 40 | Test.java:18:4:18:9 | ...=... |
| Test.java:20:11:20:11 | z | Test.java:20:4:20:12 | return ... |
| Test.java:23:3:23:8 | ...=... | Test.java:26:3:26:13 | if (...) |
| Test.java:23:3:23:9 | <Expr>; | Test.java:23:7:23:8 | 10 |
| Test.java:23:7:23:8 | 10 | Test.java:23:3:23:8 | ...=... |
| Test.java:26:3:26:13 | if (...) | Test.java:26:7:26:7 | x |
| Test.java:26:7:26:7 | x | Test.java:26:12:26:12 | 0 |
| Test.java:26:7:26:12 | ... == ... | Test.java:26:15:29:3 | { ... } |
| Test.java:26:7:26:12 | ... == ... | Test.java:31:3:31:9 | <Expr>; |
| Test.java:26:12:26:12 | 0 | Test.java:26:7:26:12 | ... == ... |
| Test.java:26:15:29:3 | { ... } | Test.java:27:4:27:10 | <Expr>; |
| Test.java:27:4:27:9 | ...=... | Test.java:28:4:28:10 | <Expr>; |
| Test.java:27:4:27:10 | <Expr>; | Test.java:27:8:27:9 | 60 |
| Test.java:27:8:27:9 | 60 | Test.java:27:4:27:9 | ...=... |
| Test.java:28:4:28:10 | <Expr>; | Test.java:28:8:28:9 | 10 |
| Test.java:28:8:28:9 | 10 | Test.java:28:4:28:9 | ...=... |
| Test.java:31:3:31:3 | z | Test.java:31:8:31:8 | x |
| Test.java:31:3:31:8 | ...+=... | Test.java:34:3:34:15 | while (...) |
| Test.java:31:3:31:9 | <Expr>; | Test.java:31:3:31:3 | z |
| Test.java:31:8:31:8 | x | Test.java:31:3:31:8 | ...+=... |
| Test.java:34:3:34:15 | while (...) | Test.java:34:10:34:10 | x |
| Test.java:34:10:34:10 | x | Test.java:34:14:34:14 | 0 |
| Test.java:34:10:34:14 | ... > ... | Test.java:34:17:37:3 | { ... } |
| Test.java:34:10:34:14 | ... > ... | Test.java:39:3:39:9 | <Expr>; |
| Test.java:34:14:34:14 | 0 | Test.java:34:10:34:14 | ... > ... |
| Test.java:34:17:37:3 | { ... } | Test.java:35:4:35:10 | <Expr>; |
| Test.java:35:4:35:9 | ...=... | Test.java:36:4:36:7 | <Expr>; |
| Test.java:35:4:35:10 | <Expr>; | Test.java:35:8:35:9 | 10 |
| Test.java:35:8:35:9 | 10 | Test.java:35:4:35:9 | ...=... |
| Test.java:36:4:36:4 | x | Test.java:36:4:36:6 | ...-- |
| Test.java:36:4:36:7 | <Expr>; | Test.java:36:4:36:4 | x |
| Test.java:39:3:39:3 | z | Test.java:39:8:39:8 | y |
| Test.java:39:3:39:8 | ...+=... | Test.java:42:3:42:26 | for (...;...;...) |
| Test.java:39:3:39:9 | <Expr>; | Test.java:39:3:39:3 | z |
| Test.java:39:8:39:8 | y | Test.java:39:3:39:8 | ...+=... |
| Test.java:42:3:42:26 | for (...;...;...) | Test.java:42:12:42:12 | 0 |
| Test.java:42:8:42:12 | ...=... | Test.java:42:15:42:15 | j |
| Test.java:42:12:42:12 | 0 | Test.java:42:8:42:12 | ...=... |
| Test.java:42:15:42:15 | j | Test.java:42:19:42:20 | 10 |
| Test.java:42:15:42:20 | ... < ... | Test.java:42:28:45:3 | { ... } |
| Test.java:42:15:42:20 | ... < ... | Test.java:47:3:47:9 | <Expr>; |
| Test.java:42:19:42:20 | 10 | Test.java:42:15:42:20 | ... < ... |
| Test.java:42:23:42:23 | j | Test.java:42:23:42:25 | ...++ |
| Test.java:42:28:45:3 | { ... } | Test.java:43:4:43:9 | <Expr>; |
| Test.java:43:4:43:8 | ...=... | Test.java:44:4:44:10 | <Expr>; |
| Test.java:43:4:43:9 | <Expr>; | Test.java:43:8:43:8 | 0 |
| Test.java:43:8:43:8 | 0 | Test.java:43:4:43:8 | ...=... |
| Test.java:44:4:44:9 | ...=... | Test.java:42:23:42:23 | j |
| Test.java:44:4:44:10 | <Expr>; | Test.java:44:8:44:9 | 10 |
| Test.java:44:8:44:9 | 10 | Test.java:44:4:44:9 | ...=... |
| Test.java:47:3:47:3 | z | Test.java:47:8:47:8 | w |
| Test.java:47:3:47:8 | ...+=... | Test.java:50:3:50:26 | for (...;...;...) |
| Test.java:47:3:47:9 | <Expr>; | Test.java:47:3:47:3 | z |
| Test.java:47:8:47:8 | w | Test.java:47:3:47:8 | ...+=... |
| Test.java:50:3:50:26 | for (...;...;...) | Test.java:50:12:50:12 | 0 |
| Test.java:50:8:50:12 | ...=... | Test.java:50:15:50:15 | j |
| Test.java:50:12:50:12 | 0 | Test.java:50:8:50:12 | ...=... |
| Test.java:50:15:50:15 | j | Test.java:50:19:50:20 | 10 |
| Test.java:50:15:50:20 | ... < ... | Test.java:50:28:64:3 | { ... } |
| Test.java:50:15:50:20 | ... < ... | Test.java:66:3:66:17 | <Expr>; |
| Test.java:50:19:50:20 | 10 | Test.java:50:15:50:20 | ... < ... |
| Test.java:50:23:50:23 | j | Test.java:50:23:50:25 | ...++ |
| Test.java:50:28:64:3 | { ... } | Test.java:51:4:51:10 | <Expr>; |
| Test.java:51:4:51:9 | ...=... | Test.java:52:4:52:13 | if (...) |
| Test.java:51:4:51:10 | <Expr>; | Test.java:51:8:51:9 | 30 |
| Test.java:51:8:51:9 | 30 | Test.java:51:4:51:9 | ...=... |
| Test.java:52:4:52:13 | if (...) | Test.java:52:8:52:8 | z |
| Test.java:52:8:52:8 | z | Test.java:52:12:52:12 | 0 |
| Test.java:52:8:52:12 | ... > ... | Test.java:50:23:50:23 | j |
| Test.java:52:8:52:12 | ... > ... | Test.java:53:5:53:14 | if (...) |
| Test.java:52:8:52:12 | ... > ... | Test.java:59:9:62:4 | { ... } |
| Test.java:52:12:52:12 | 0 | Test.java:52:8:52:12 | ... > ... |
| Test.java:53:5:53:14 | if (...) | Test.java:53:9:53:9 | y |
| Test.java:53:9:53:9 | y | Test.java:53:13:53:13 | 0 |
| Test.java:53:9:53:13 | ... > ... | Test.java:53:16:56:5 | { ... } |
| Test.java:53:9:53:13 | ... > ... | Test.java:56:12:58:5 | { ... } |
| Test.java:53:13:53:13 | 0 | Test.java:53:9:53:13 | ... > ... |
| Test.java:53:16:56:5 | { ... } | Test.java:54:6:54:11 | <Expr>; |
| Test.java:54:6:54:10 | ...=... | Test.java:55:6:55:11 | break |
| Test.java:54:6:54:11 | <Expr>; | Test.java:54:10:54:10 | 0 |
| Test.java:54:10:54:10 | 0 | Test.java:54:6:54:10 | ...=... |
| Test.java:56:12:58:5 | { ... } | Test.java:57:6:57:12 | <Expr>; |
| Test.java:57:6:57:11 | ...=... | Test.java:63:4:63:9 | <Expr>; |
| Test.java:57:6:57:12 | <Expr>; | Test.java:57:10:57:11 | 20 |
| Test.java:57:10:57:11 | 20 | Test.java:57:6:57:11 | ...=... |
| Test.java:59:9:62:4 | { ... } | Test.java:60:5:60:11 | <Expr>; |
| Test.java:60:5:60:10 | ...=... | Test.java:61:5:61:13 | continue |
| Test.java:60:5:60:11 | <Expr>; | Test.java:60:9:60:10 | 10 |
| Test.java:60:9:60:10 | 10 | Test.java:60:5:60:10 | ...=... |
| Test.java:63:4:63:9 | <Expr>; | Test.java:63:8:63:8 | 0 |
| Test.java:63:8:63:8 | 0 | Test.java:63:4:63:8 | ...=... |
| Test.java:66:3:66:3 | z | Test.java:66:8:66:8 | x |
| Test.java:66:3:66:16 | ...+=... | Test.java:70:3:70:9 | <Expr>; |
| Test.java:66:3:66:17 | <Expr>; | Test.java:66:3:66:3 | z |
| Test.java:66:8:66:8 | x | Test.java:66:12:66:12 | y |
| Test.java:66:8:66:12 | ... + ... | Test.java:66:16:66:16 | w |
| Test.java:66:8:66:16 | ... + ... | Test.java:66:3:66:16 | ...+=... |
| Test.java:66:12:66:12 | y | Test.java:66:8:66:12 | ... + ... |
| Test.java:66:16:66:16 | w | Test.java:66:8:66:16 | ... + ... |
| Test.java:70:3:70:8 | ...=... | Test.java:71:10:71:10 | w |
| Test.java:70:3:70:9 | <Expr>; | Test.java:70:7:70:8 | 40 |
| Test.java:70:7:70:8 | 40 | Test.java:70:3:70:8 | ...=... |
| Test.java:71:10:71:10 | w | Test.java:71:3:71:11 | return ... |
| Test.java:74:19:91:2 | { ... } | Test.java:76:3:76:8 | var ...; |
| Test.java:76:3:76:8 | var ...; | Test.java:76:7:76:7 | b |
| Test.java:76:7:76:7 | b | Test.java:77:3:77:8 | var ...; |
| Test.java:77:3:77:8 | var ...; | Test.java:77:7:77:7 | c |
| Test.java:77:7:77:7 | c | Test.java:78:3:78:8 | <Expr>; |
| Test.java:78:3:78:7 | ...=... | Test.java:79:3:79:13 | while (...) |
| Test.java:78:3:78:8 | <Expr>; | Test.java:78:7:78:7 | 0 |
| Test.java:78:7:78:7 | 0 | Test.java:78:3:78:7 | ...=... |
| Test.java:79:3:79:13 | while (...) | Test.java:79:9:79:12 | true |
| Test.java:79:9:79:12 | true | Test.java:79:15:89:3 | { ... } |
| Test.java:79:15:89:3 | { ... } | Test.java:80:4:80:10 | <Expr>; |
| Test.java:80:4:80:9 | ...=... | Test.java:81:4:81:15 | if (...) |
| Test.java:80:4:80:10 | <Expr>; | Test.java:80:8:80:9 | 10 |
| Test.java:80:8:80:9 | 10 | Test.java:80:4:80:9 | ...=... |
| Test.java:81:4:81:15 | if (...) | Test.java:81:8:81:8 | a |
| Test.java:81:8:81:8 | a | Test.java:81:12:81:14 | 100 |
| Test.java:81:8:81:14 | ... > ... | Test.java:81:17:84:4 | { ... } |
| Test.java:81:8:81:14 | ... > ... | Test.java:85:4:85:15 | if (...) |
| Test.java:81:12:81:14 | 100 | Test.java:81:8:81:14 | ... > ... |
| Test.java:81:17:84:4 | { ... } | Test.java:82:5:82:11 | <Expr>; |
| Test.java:82:5:82:10 | ...=... | Test.java:83:5:83:10 | <Expr>; |
| Test.java:82:5:82:11 | <Expr>; | Test.java:82:9:82:10 | 10 |
| Test.java:82:9:82:10 | 10 | Test.java:82:5:82:10 | ...=... |
| Test.java:83:5:83:10 | <Expr>; | Test.java:83:9:83:9 | c |
| Test.java:83:9:83:9 | c | Test.java:83:5:83:9 | ...=... |
| Test.java:85:4:85:15 | if (...) | Test.java:85:8:85:8 | a |
| Test.java:85:8:85:8 | a | Test.java:85:13:85:14 | 10 |
| Test.java:85:8:85:14 | ... == ... | Test.java:74:6:74:10 | Normal Exit |
| Test.java:85:8:85:14 | ... == ... | Test.java:86:5:86:10 | break |
| Test.java:85:8:85:14 | ... == ... | Test.java:87:4:87:15 | if (...) |
| Test.java:85:13:85:14 | 10 | Test.java:85:8:85:14 | ... == ... |
| Test.java:86:5:86:10 | break | Test.java:90:10:90:10 | b |
| Test.java:87:4:87:15 | if (...) | Test.java:87:8:87:8 | a |
| Test.java:87:8:87:8 | a | Test.java:87:13:87:14 | 20 |
| Test.java:87:8:87:14 | ... == ... | Test.java:88:12:88:12 | c |
| Test.java:87:13:87:14 | 20 | Test.java:87:8:87:14 | ... == ... |
| Test.java:88:12:88:12 | c | Test.java:88:5:88:13 | return ... |
| Test.java:90:10:90:10 | b | Test.java:90:3:90:11 | return ... |
| Test.java:2:32:72:2 | { ... } | Test.java:7:14:10:3 | { ... } |
| Test.java:2:32:72:2 | { ... } | Test.java:10:10:12:3 | { ... } |
| Test.java:2:32:72:2 | { ... } | Test.java:14:3:14:20 | <Expr>; |
| Test.java:14:3:14:20 | <Expr>; | Test.java:2:6:2:9 | Normal Exit |
| Test.java:14:3:14:20 | <Expr>; | Test.java:18:4:18:10 | <Expr>; |
| Test.java:14:3:14:20 | <Expr>; | Test.java:20:11:20:11 | z |
| Test.java:18:4:18:10 | <Expr>; | Test.java:26:7:26:12 | After ... == ... [false] |
| Test.java:18:4:18:10 | <Expr>; | Test.java:26:15:29:3 | { ... } |
| Test.java:18:4:18:10 | <Expr>; | Test.java:31:3:31:9 | <Expr>; |
| Test.java:31:3:31:9 | <Expr>; | Test.java:34:10:34:10 | x |
| Test.java:34:10:34:10 | x | Test.java:34:17:37:3 | { ... } |
| Test.java:34:10:34:10 | x | Test.java:39:3:39:9 | <Expr>; |
| Test.java:39:3:39:9 | <Expr>; | Test.java:42:15:42:15 | j |
| Test.java:42:15:42:15 | j | Test.java:42:28:45:3 | { ... } |
| Test.java:42:15:42:15 | j | Test.java:47:3:47:9 | <Expr>; |
| Test.java:47:3:47:9 | <Expr>; | Test.java:50:15:50:15 | j |
| Test.java:50:15:50:15 | j | Test.java:50:15:50:20 | After ... < ... [false] |
| Test.java:50:15:50:15 | j | Test.java:50:28:64:3 | { ... } |
| Test.java:50:15:50:15 | j | Test.java:66:3:66:17 | <Expr>; |
| Test.java:50:28:64:3 | { ... } | Test.java:50:23:50:23 | j |
| Test.java:50:28:64:3 | { ... } | Test.java:53:5:53:14 | if (...) |
| Test.java:50:28:64:3 | { ... } | Test.java:59:9:62:4 | { ... } |
| Test.java:53:5:53:14 | if (...) | Test.java:53:16:56:5 | { ... } |
| Test.java:53:5:53:14 | if (...) | Test.java:56:12:58:5 | { ... } |
| Test.java:74:19:91:2 | { ... } | Test.java:79:9:79:12 | true |
| Test.java:79:9:79:12 | true | Test.java:81:8:81:14 | After ... > ... [false] |
| Test.java:79:9:79:12 | true | Test.java:81:17:84:4 | { ... } |
| Test.java:79:9:79:12 | true | Test.java:85:4:85:15 | if (...) |
| Test.java:85:4:85:15 | if (...) | Test.java:74:6:74:10 | Normal Exit |
| Test.java:85:4:85:15 | if (...) | Test.java:86:5:86:10 | break |
| Test.java:85:4:85:15 | if (...) | Test.java:87:4:87:15 | if (...) |
| Test.java:87:4:87:15 | if (...) | Test.java:87:8:87:14 | After ... == ... [false] |
| Test.java:87:4:87:15 | if (...) | Test.java:88:12:88:12 | c |

View File

@@ -1,9 +1,9 @@
import default
import semmle.code.java.controlflow.Dominance
import java
import utils.test.BasicBlock
from Method func, ControlFlowNode dominator, ControlFlowNode node
from Method func, BasicBlock dominator, BasicBlock bb
where
iDominates(dominator, node) and
dominator.getEnclosingStmt().getEnclosingCallable() = func and
dominator.immediatelyDominates(bb) and
dominator.getEnclosingCallable() = func and
func.getDeclaringType().hasName("Test")
select dominator, node
select getFirstAstNodeOrSynth(dominator), getFirstAstNodeOrSynth(bb)

View File

@@ -7,5 +7,5 @@ where
iDominates(dom1, node) and
iDominates(dom2, node) and
dom1 != dom2 and
func = node.getEnclosingStmt().getEnclosingCallable()
func = node.getEnclosingCallable()
select func, node, dom1, dom2

View File

@@ -16,8 +16,8 @@
| A.java:21:11:21:13 | "B" : String | A.java:14:11:14:20 | f2(...) : new A(...) { ... } [String s] |
| A.java:21:11:21:13 | "B" : String | A.java:15:16:15:16 | a : new A(...) { ... } [String s] |
| A.java:21:11:21:13 | "B" : String | A.java:15:16:15:22 | get(...) : String |
| A.java:21:11:21:13 | "B" : String | A.java:20:5:20:15 | SSA phi(s) : String |
| A.java:21:11:21:13 | "B" : String | A.java:21:7:21:13 | ...=... : String |
| A.java:21:11:21:13 | "B" : String | A.java:25:5:25:26 | SSA phi(s) : String |
| A.java:21:11:21:13 | "B" : String | A.java:28:11:38:5 | String s : String |
| A.java:21:11:21:13 | "B" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [String s] |
| A.java:21:11:21:13 | "B" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [String s] |
@@ -32,8 +32,8 @@
| A.java:23:11:23:13 | "C" : String | A.java:14:11:14:20 | f2(...) : new A(...) { ... } [String s] |
| A.java:23:11:23:13 | "C" : String | A.java:15:16:15:16 | a : new A(...) { ... } [String s] |
| A.java:23:11:23:13 | "C" : String | A.java:15:16:15:22 | get(...) : String |
| A.java:23:11:23:13 | "C" : String | A.java:20:5:20:15 | SSA phi(s) : String |
| A.java:23:11:23:13 | "C" : String | A.java:23:7:23:13 | ...=... : String |
| A.java:23:11:23:13 | "C" : String | A.java:25:5:25:26 | SSA phi(s) : String |
| A.java:23:11:23:13 | "C" : String | A.java:28:11:38:5 | String s : String |
| A.java:23:11:23:13 | "C" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [String s] |
| A.java:23:11:23:13 | "C" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [String s] |

View File

@@ -1,7 +0,0 @@
| FlexibleConstructors.java:10:15:10:17 | msg | FlexibleConstructors.java:10:9:10:19 | super(...) | predecessor of explicit super() |
| FlexibleConstructors.java:18:13:18:17 | ... < ... | FlexibleConstructors.java:19:9:19:16 | super(...) | predecessor of explicit super() |
| FlexibleConstructors.java:38:17:38:48 | combined | FlexibleConstructors.java:39:13:39:20 | super(...) | predecessor of explicit super() |
| FlexibleConstructors.java:52:9:52:40 | ...=... | FlexibleConstructors.java:53:9:53:16 | super(...) | predecessor of explicit super() |
| FlexibleConstructors.java:65:15:65:18 | temp | FlexibleConstructors.java:65:9:65:20 | super(...) | predecessor of explicit super() |
| FlexibleConstructors.java:77:9:77:24 | ...=... | FlexibleConstructors.java:78:9:78:16 | super(...) | predecessor of explicit super() |
| FlexibleConstructors.java:91:13:91:41 | string | FlexibleConstructors.java:92:9:92:16 | super(...) | predecessor of explicit super() |

View File

@@ -1,11 +0,0 @@
import java
from ControlFlowNode pred, ControlFlowNode supNode, SuperConstructorInvocationStmt sc
where
supNode.asStmt() = sc and
pred.getASuccessor() = supNode and
pred != supNode and
not pred.asStmt() instanceof BlockStmt and
exists(sc.getEnclosingCallable().getFile().getRelativePath()) and
sc.getLocation().getEndColumn() > sc.getLocation().getStartColumn()
select pred, sc, "predecessor of explicit super()"

View File

@@ -39,10 +39,10 @@ public class Guards {
chk(); // $ guarded='s:match "bar"' guarded='s:bar'
break;
case "foo":
chk(); // $ guarded='s:match "foo"' guarded='s:foo' guarded=g(3):false
chk(); // $ guarded='s:non-match "bar"' guarded='s:not bar' guarded='s:match "foo"' guarded='s:foo' guarded=g(3):false
break;
default:
chk(); // $ guarded='s:non-match "bar"' guarded='s:non-match "foo"' guarded='s:not bar' guarded='s:not foo' guarded='s:match default' guarded=g(3):false
chk(); // $ guarded='s:non-match "bar"' guarded='s:non-match "foo"' guarded='s:not bar' guarded='s:not foo' guarded=g(3):false
break;
}
@@ -92,10 +92,10 @@ public class Guards {
chk(); // $ guarded='x:match E1' guarded='x:E1' guarded=g(1):true guarded=g(2):false guarded=g(Alt2):false guarded=g(3):false
break;
case E2:
chk(); // $ guarded='x:match E2' guarded='x:E2' guarded=g(3):false
chk(); // $ guarded='x:non-match E1' guarded='x:not E1' guarded='x:match E2' guarded='x:E2' guarded=g(3):false
break;
case E3:
chk(); // $ guarded='x:match E3' guarded='x:E3' guarded=g(3):true
chk(); // $ guarded='x:non-match E1' guarded='x:non-match E2' guarded='x:not E1' guarded='x:not E2' guarded='x:match E3' guarded='x:E3' guarded=g(3):true
break;
}
Object o = g(4) ? new Object() : null;
@@ -198,7 +198,7 @@ public class Guards {
chk(); // $ guarded='testEnumWrapper(...):SUCCESS' guarded='testEnumWrapper(...):match SUCCESS' guarded=g(1):true
break;
case FAILURE:
chk(); // $ guarded='testEnumWrapper(...):FAILURE' guarded='testEnumWrapper(...):match FAILURE' guarded=g(1):false
chk(); // $ guarded='testEnumWrapper(...):not SUCCESS' guarded='testEnumWrapper(...):non-match SUCCESS' guarded='testEnumWrapper(...):FAILURE' guarded='testEnumWrapper(...):match FAILURE' guarded=g(1):false
break;
}
}

View File

@@ -18,8 +18,9 @@
| Guards.java:39:9:39:13 | chk(...) | 's:match "bar"' |
| Guards.java:42:9:42:13 | chk(...) | 's:foo' |
| Guards.java:42:9:42:13 | chk(...) | 's:match "foo"' |
| Guards.java:42:9:42:13 | chk(...) | 's:non-match "bar"' |
| Guards.java:42:9:42:13 | chk(...) | 's:not bar' |
| Guards.java:42:9:42:13 | chk(...) | g(3):false |
| Guards.java:45:9:45:13 | chk(...) | 's:match default' |
| Guards.java:45:9:45:13 | chk(...) | 's:non-match "bar"' |
| Guards.java:45:9:45:13 | chk(...) | 's:non-match "foo"' |
| Guards.java:45:9:45:13 | chk(...) | 's:not bar' |
@@ -61,9 +62,15 @@
| Guards.java:92:9:92:13 | chk(...) | g(Alt2):false |
| Guards.java:95:9:95:13 | chk(...) | 'x:E2' |
| Guards.java:95:9:95:13 | chk(...) | 'x:match E2' |
| Guards.java:95:9:95:13 | chk(...) | 'x:non-match E1' |
| Guards.java:95:9:95:13 | chk(...) | 'x:not E1' |
| Guards.java:95:9:95:13 | chk(...) | g(3):false |
| Guards.java:98:9:98:13 | chk(...) | 'x:E3' |
| Guards.java:98:9:98:13 | chk(...) | 'x:match E3' |
| Guards.java:98:9:98:13 | chk(...) | 'x:non-match E1' |
| Guards.java:98:9:98:13 | chk(...) | 'x:non-match E2' |
| Guards.java:98:9:98:13 | chk(...) | 'x:not E1' |
| Guards.java:98:9:98:13 | chk(...) | 'x:not E2' |
| Guards.java:98:9:98:13 | chk(...) | g(3):true |
| Guards.java:103:7:103:11 | chk(...) | '...?...:...:null' |
| Guards.java:103:7:103:11 | chk(...) | 'o == null:true' |
@@ -113,6 +120,8 @@
| Guards.java:198:9:198:13 | chk(...) | g(1):true |
| Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):FAILURE' |
| Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):match FAILURE' |
| Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):non-match SUCCESS' |
| Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):not SUCCESS' |
| Guards.java:201:9:201:13 | chk(...) | g(1):false |
| Guards.java:213:5:213:9 | chk(...) | 'ensureNotNull(...):no exception' |
| Guards.java:213:5:213:9 | chk(...) | 's:not null' |

View File

@@ -1,8 +1,9 @@
import java
import semmle.code.java.controlflow.Guards
import utils.test.BasicBlock
from ConditionBlock cb, boolean testIsTrue, BasicBlock controlled
where
cb.controls(controlled, testIsTrue) and
cb.getEnclosingCallable().getDeclaringType().hasName("Test")
select cb.getCondition(), testIsTrue, controlled
select cb.getCondition(), testIsTrue, getFirstAstNode(controlled)

View File

@@ -19,13 +19,15 @@
| Logic.java:17:11:17:15 | ... > ... | false | Logic.java:15:29:15:29 | i |
| Logic.java:17:11:17:15 | ... > ... | true | Logic.java:17:18:17:23 | break |
| Logic.java:19:9:19:12 | g(...) | false | Logic.java:24:7:24:17 | case ... |
| Logic.java:19:9:19:12 | g(...) | false | Logic.java:24:12:24:16 | "foo" |
| Logic.java:19:9:19:12 | g(...) | false | Logic.java:26:7:26:14 | default |
| Logic.java:19:9:19:12 | g(...) | true | Logic.java:20:7:20:16 | <Expr>; |
| Logic.java:22:7:22:17 | case ... | false | Logic.java:24:7:24:17 | case ... |
| Logic.java:22:7:22:17 | case ... | false | Logic.java:24:12:24:16 | "foo" |
| Logic.java:22:7:22:17 | case ... | false | Logic.java:26:7:26:14 | default |
| Logic.java:22:7:22:17 | case ... | true | Logic.java:22:7:22:17 | case ... |
| Logic.java:22:7:22:17 | case ... | true | Logic.java:22:12:22:16 | "bar" |
| Logic.java:24:7:24:17 | case ... | false | Logic.java:26:7:26:14 | default |
| Logic.java:24:7:24:17 | case ... | true | Logic.java:24:7:24:17 | case ... |
| Logic.java:26:7:26:14 | default | true | Logic.java:26:7:26:14 | default |
| Logic.java:24:7:24:17 | case ... | true | Logic.java:24:12:24:16 | "foo" |
| Logic.java:29:16:29:19 | g(...) | false | Logic.java:29:30:29:30 | s |
| Logic.java:29:16:29:19 | g(...) | false | Logic.java:30:30:31:5 | { ... } |
| Logic.java:29:16:29:19 | g(...) | true | Logic.java:29:23:29:26 | null |

View File

@@ -1,9 +1,10 @@
import java
import semmle.code.java.controlflow.Guards
import utils.test.BasicBlock
from Guard g, BasicBlock bb, GuardValue gv
where
g.valueControls(bb, gv) and
g.getEnclosingCallable().getDeclaringType().hasName("Logic") and
(exists(gv.asBooleanValue()) or gv.isThrowsException() or gv.getDualValue().isThrowsException())
select g, gv, bb
select g, gv, getFirstAstNode(bb)

View File

@@ -1,9 +1,10 @@
import java
import semmle.code.java.controlflow.Guards
import utils.test.BasicBlock
from Guard g, BasicBlock bb, GuardValue gv
where
g.valueControls(bb, gv) and
g.getEnclosingCallable().getDeclaringType().hasName("Preconditions") and
(gv.isThrowsException() or gv.getDualValue().isThrowsException())
select g, gv, bb
select g, gv, getFirstAstNode(bb)

View File

@@ -1,55 +1,78 @@
hasBranchEdge
| Test.java:4:7:4:22 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:4:7:4:22 | case ... | true |
| Test.java:5:7:5:17 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:5:7:5:17 | case ... | true |
| Test.java:6:7:6:17 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:6:7:6:17 | case ... | true |
| Test.java:7:7:7:16 | default | Test.java:2:39:36:3 | { ... } | Test.java:7:7:7:16 | default | true |
| Test.java:10:7:10:22 | case ... | Test.java:3:9:3:21 | x | Test.java:10:7:10:22 | case ... | true |
| Test.java:11:7:11:17 | case ... | Test.java:3:9:3:21 | x | Test.java:11:7:11:17 | case ... | true |
| Test.java:12:7:12:17 | case ... | Test.java:3:9:3:21 | x | Test.java:12:7:12:17 | case ... | true |
| Test.java:13:7:13:16 | default | Test.java:3:9:3:21 | x | Test.java:13:7:13:16 | default | true |
| Test.java:4:7:4:22 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:4:7:4:22 | After case ... [match] | true |
| Test.java:4:7:4:22 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:5:7:5:17 | case ... | false |
| Test.java:5:7:5:17 | case ... | Test.java:5:7:5:17 | case ... | Test.java:5:12:5:14 | "c" | true |
| Test.java:5:7:5:17 | case ... | Test.java:5:7:5:17 | case ... | Test.java:6:7:6:17 | case ... | false |
| Test.java:6:7:6:17 | case ... | Test.java:6:7:6:17 | case ... | Test.java:6:12:6:14 | "d" | true |
| Test.java:6:7:6:17 | case ... | Test.java:6:7:6:17 | case ... | Test.java:7:7:7:16 | default | false |
| Test.java:10:7:10:22 | case ... | Test.java:3:9:3:21 | x | Test.java:10:7:10:22 | After case ... [match] | true |
| Test.java:10:7:10:22 | case ... | Test.java:3:9:3:21 | x | Test.java:11:7:11:17 | case ... | false |
| Test.java:11:7:11:17 | case ... | Test.java:11:7:11:17 | case ... | Test.java:11:12:11:14 | "c" | true |
| Test.java:11:7:11:17 | case ... | Test.java:11:7:11:17 | case ... | Test.java:12:7:12:17 | case ... | false |
| Test.java:12:7:12:17 | case ... | Test.java:12:7:12:17 | case ... | Test.java:12:12:12:14 | "d" | true |
| Test.java:12:7:12:17 | case ... | Test.java:12:7:12:17 | case ... | Test.java:13:7:13:16 | default | false |
| Test.java:17:7:17:36 | case <Pattern> | Test.java:15:5:15:25 | var ...; | Test.java:17:19:17:19 | <anonymous local variable> | true |
| Test.java:17:7:17:36 | case <Pattern> | Test.java:15:5:15:25 | var ...; | Test.java:18:7:18:17 | case ... | false |
| Test.java:17:7:17:36 | case <Pattern> | Test.java:15:5:15:25 | var ...; | Test.java:19:7:19:16 | default | false |
| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | <anonymous local variable> | Test.java:17:26:17:33 | After ... == ... [false] | false |
| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | <anonymous local variable> | Test.java:17:38:17:40 | { ... } | true |
| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | <anonymous local variable> | Test.java:18:7:18:17 | case ... | false |
| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | <anonymous local variable> | Test.java:19:7:19:16 | default | false |
| Test.java:18:7:18:17 | case ... | Test.java:15:5:15:25 | var ...; | Test.java:18:7:18:17 | case ... | true |
| Test.java:18:7:18:17 | case ... | Test.java:17:19:17:19 | <anonymous local variable> | Test.java:18:7:18:17 | case ... | true |
| Test.java:19:7:19:16 | default | Test.java:15:5:15:25 | var ...; | Test.java:19:7:19:16 | default | true |
| Test.java:19:7:19:16 | default | Test.java:17:19:17:19 | <anonymous local variable> | Test.java:19:7:19:16 | default | true |
| Test.java:18:7:18:17 | case ... | Test.java:18:7:18:17 | case ... | Test.java:18:12:18:14 | "e" | true |
| Test.java:18:7:18:17 | case ... | Test.java:18:7:18:17 | case ... | Test.java:19:7:19:16 | default | false |
| Test.java:21:13:21:19 | unknown | Test.java:21:5:21:42 | switch (...) | Test.java:21:23:21:23 | s | true |
| Test.java:21:13:21:19 | unknown | Test.java:21:5:21:42 | switch (...) | Test.java:21:27:21:27 | s | false |
| Test.java:22:7:22:17 | case ... | Test.java:21:23:21:23 | s | Test.java:22:7:22:17 | case ... | true |
| Test.java:22:7:22:17 | case ... | Test.java:21:27:21:27 | s | Test.java:22:7:22:17 | case ... | true |
| Test.java:22:7:22:17 | case ... | Test.java:22:7:22:17 | case ... | Test.java:22:12:22:14 | "f" | true |
| Test.java:22:7:22:17 | case ... | Test.java:22:7:22:17 | case ... | Test.java:23:7:23:37 | case <Pattern> | false |
| Test.java:23:7:23:37 | case <Pattern> | Test.java:23:7:23:37 | case <Pattern> | Test.java:23:19:23:20 | s2 | true |
| Test.java:23:7:23:37 | case <Pattern> | Test.java:23:7:23:37 | case <Pattern> | Test.java:24:7:24:17 | case ... | false |
| Test.java:23:7:23:37 | case <Pattern> | Test.java:23:7:23:37 | case <Pattern> | Test.java:25:7:25:16 | default | false |
| Test.java:23:27:23:34 | ... == ... | Test.java:23:19:23:20 | s2 | Test.java:23:27:23:34 | After ... == ... [false] | false |
| Test.java:23:27:23:34 | ... == ... | Test.java:23:19:23:20 | s2 | Test.java:23:39:23:41 | { ... } | true |
| Test.java:23:27:23:34 | ... == ... | Test.java:23:19:23:20 | s2 | Test.java:24:7:24:17 | case ... | false |
| Test.java:23:27:23:34 | ... == ... | Test.java:23:19:23:20 | s2 | Test.java:25:7:25:16 | default | false |
| Test.java:24:7:24:17 | case ... | Test.java:23:7:23:37 | case <Pattern> | Test.java:24:7:24:17 | case ... | true |
| Test.java:24:7:24:17 | case ... | Test.java:23:19:23:20 | s2 | Test.java:24:7:24:17 | case ... | true |
| Test.java:25:7:25:16 | default | Test.java:23:7:23:37 | case <Pattern> | Test.java:25:7:25:16 | default | true |
| Test.java:25:7:25:16 | default | Test.java:23:19:23:20 | s2 | Test.java:25:7:25:16 | default | true |
| Test.java:28:7:28:15 | case ... | Test.java:27:5:27:14 | switch (...) | Test.java:28:7:28:15 | case ... | true |
| Test.java:24:7:24:17 | case ... | Test.java:24:7:24:17 | case ... | Test.java:24:12:24:14 | "g" | true |
| Test.java:24:7:24:17 | case ... | Test.java:24:7:24:17 | case ... | Test.java:25:7:25:16 | default | false |
| Test.java:28:7:28:15 | case ... | Test.java:27:5:27:14 | switch (...) | Test.java:28:12:28:14 | "h" | true |
| Test.java:28:7:28:15 | case ... | Test.java:27:5:27:14 | switch (...) | Test.java:29:7:29:34 | case <Pattern> | false |
| Test.java:29:7:29:34 | case <Pattern> | Test.java:29:7:29:34 | case <Pattern> | Test.java:29:19:29:19 | <anonymous local variable> | true |
| Test.java:29:7:29:34 | case <Pattern> | Test.java:29:7:29:34 | case <Pattern> | Test.java:30:7:30:15 | case ... | false |
| Test.java:29:7:29:34 | case <Pattern> | Test.java:29:7:29:34 | case <Pattern> | Test.java:33:7:33:14 | default | false |
| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | <anonymous local variable> | Test.java:30:7:30:15 | case ... | false |
| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | <anonymous local variable> | Test.java:30:7:30:15 | case ... | true |
| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | <anonymous local variable> | Test.java:33:7:33:14 | default | false |
| Test.java:30:7:30:15 | case ... | Test.java:29:7:29:34 | case <Pattern> | Test.java:30:7:30:15 | case ... | true |
| Test.java:33:7:33:14 | default | Test.java:29:7:29:34 | case <Pattern> | Test.java:33:7:33:14 | default | true |
| Test.java:33:7:33:14 | default | Test.java:29:19:29:19 | <anonymous local variable> | Test.java:33:7:33:14 | default | true |
| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | <anonymous local variable> | Test.java:29:26:29:33 | After ... == ... [false] | false |
| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | <anonymous local variable> | Test.java:29:26:29:33 | After ... == ... [true] | true |
| Test.java:30:7:30:15 | case ... | Test.java:30:7:30:15 | case ... | Test.java:30:12:30:14 | "i" | true |
| Test.java:30:7:30:15 | case ... | Test.java:30:7:30:15 | case ... | Test.java:33:7:33:14 | default | false |
#select
| Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | false | Test.java:6:7:6:17 | case ... |
| Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | false | Test.java:6:12:6:14 | "d" |
| Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | false | Test.java:7:7:7:16 | default |
| Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | true | Test.java:5:7:5:17 | case ... |
| Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | true | Test.java:5:12:5:14 | "c" |
| Test.java:6:7:6:17 | case ... | Test.java:3:20:3:20 | s | Test.java:6:12:6:14 | "d" | true | false | Test.java:7:7:7:16 | default |
| Test.java:6:7:6:17 | case ... | Test.java:3:20:3:20 | s | Test.java:6:12:6:14 | "d" | true | true | Test.java:6:7:6:17 | case ... |
| Test.java:6:7:6:17 | case ... | Test.java:3:20:3:20 | s | Test.java:6:12:6:14 | "d" | true | true | Test.java:6:12:6:14 | "d" |
| Test.java:11:7:11:17 | case ... | Test.java:9:13:9:13 | s | Test.java:11:12:11:14 | "c" | true | false | Test.java:12:7:12:17 | case ... |
| Test.java:11:7:11:17 | case ... | Test.java:9:13:9:13 | s | Test.java:11:12:11:14 | "c" | true | false | Test.java:12:12:12:14 | "d" |
| Test.java:11:7:11:17 | case ... | Test.java:9:13:9:13 | s | Test.java:11:12:11:14 | "c" | true | false | Test.java:13:7:13:16 | default |
| Test.java:11:7:11:17 | case ... | Test.java:9:13:9:13 | s | Test.java:11:12:11:14 | "c" | true | true | Test.java:11:7:11:17 | case ... |
| Test.java:11:7:11:17 | case ... | Test.java:9:13:9:13 | s | Test.java:11:12:11:14 | "c" | true | true | Test.java:11:12:11:14 | "c" |
| Test.java:12:7:12:17 | case ... | Test.java:9:13:9:13 | s | Test.java:12:12:12:14 | "d" | true | false | Test.java:13:7:13:16 | default |
| Test.java:12:7:12:17 | case ... | Test.java:9:13:9:13 | s | Test.java:12:12:12:14 | "d" | true | true | Test.java:12:7:12:17 | case ... |
| Test.java:12:7:12:17 | case ... | Test.java:9:13:9:13 | s | Test.java:12:12:12:14 | "d" | true | true | Test.java:12:12:12:14 | "d" |
| Test.java:17:26:17:33 | ... == ... | Test.java:17:26:17:28 | len | Test.java:17:33:17:33 | 4 | true | false | Test.java:17:26:17:33 | After ... == ... [false] |
| Test.java:17:26:17:33 | ... == ... | Test.java:17:26:17:28 | len | Test.java:17:33:17:33 | 4 | true | true | Test.java:17:38:17:40 | { ... } |
| Test.java:18:7:18:17 | case ... | Test.java:16:13:16:13 | s | Test.java:18:12:18:14 | "e" | true | false | Test.java:19:7:19:16 | default |
| Test.java:18:7:18:17 | case ... | Test.java:16:13:16:13 | s | Test.java:18:12:18:14 | "e" | true | true | Test.java:18:12:18:14 | "e" |
| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:23:7:23:37 | case <Pattern> |
| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:23:19:23:20 | s2 |
| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:23:27:23:34 | After ... == ... [false] |
| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:23:39:23:41 | { ... } |
| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:24:7:24:17 | case ... |
| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:24:12:24:14 | "g" |
| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:25:7:25:16 | default |
| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | true | Test.java:22:12:22:14 | "f" |
| Test.java:23:27:23:34 | ... == ... | Test.java:23:27:23:29 | len | Test.java:23:34:23:34 | 4 | true | false | Test.java:23:27:23:34 | After ... == ... [false] |
| Test.java:23:27:23:34 | ... == ... | Test.java:23:27:23:29 | len | Test.java:23:34:23:34 | 4 | true | true | Test.java:23:39:23:41 | { ... } |
| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | true | Test.java:28:7:28:15 | case ... |
| Test.java:24:7:24:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:24:12:24:14 | "g" | true | false | Test.java:25:7:25:16 | default |
| Test.java:24:7:24:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:24:12:24:14 | "g" | true | true | Test.java:24:12:24:14 | "g" |
| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:29:7:29:34 | case <Pattern> |
| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:29:19:29:19 | <anonymous local variable> |
| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:29:26:29:33 | After ... == ... [false] |
| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:29:26:29:33 | After ... == ... [true] |
| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:30:7:30:15 | case ... |
| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:30:12:30:14 | "i" |
| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:33:7:33:14 | default |
| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | true | Test.java:28:12:28:14 | "h" |
| Test.java:29:26:29:33 | ... == ... | Test.java:29:26:29:28 | len | Test.java:29:33:29:33 | 4 | true | false | Test.java:29:26:29:33 | After ... == ... [false] |
| Test.java:29:26:29:33 | ... == ... | Test.java:29:26:29:28 | len | Test.java:29:33:29:33 | 4 | true | true | Test.java:29:26:29:33 | After ... == ... [true] |
| Test.java:30:7:30:15 | case ... | Test.java:27:13:27:13 | s | Test.java:30:12:30:14 | "i" | true | false | Test.java:33:7:33:14 | default |
| Test.java:30:7:30:15 | case ... | Test.java:27:13:27:13 | s | Test.java:30:12:30:14 | "i" | true | true | Test.java:30:12:30:14 | "i" |

View File

@@ -1,8 +1,15 @@
import java
import semmle.code.java.controlflow.Guards
import utils.test.BasicBlock
query predicate hasBranchEdge(Guard g, BasicBlock bb1, BasicBlock bb2, GuardValue branch) {
g.hasValueBranchEdge(bb1, bb2, branch)
query predicate hasBranchEdge(
Guard g, ControlFlowNode bb1ref, ControlFlowNode bb2ref, GuardValue branch
) {
exists(BasicBlock bb1, BasicBlock bb2 |
getFirstAstNodeOrSynth(bb1) = bb1ref and
getFirstAstNodeOrSynth(bb2) = bb2ref and
g.hasValueBranchEdge(bb1, bb2, branch)
)
}
from Guard g, BasicBlock bb, boolean branch, Expr e1, Expr e2, boolean pol
@@ -10,4 +17,4 @@ where
g.controls(bb, branch) and
g.isEquality(e1, e2, pol) and
not e1 instanceof Literal
select g, e1, e2, pol, branch, bb
select g, e1, e2, pol, branch, getFirstAstNodeOrSynth(bb)

View File

@@ -1,5 +1,9 @@
| MultiCatch.java:6:14:6:23 | Entry | MultiCatch.java:6:14:6:23 | { ... } |
| MultiCatch.java:6:14:6:23 | Normal Exit | MultiCatch.java:6:14:6:23 | Exit |
| MultiCatch.java:6:14:6:23 | super(...) | MultiCatch.java:6:14:6:23 | Normal Exit |
| MultiCatch.java:6:14:6:23 | { ... } | MultiCatch.java:6:14:6:23 | super(...) |
| MultiCatch.java:7:14:7:23 | Entry | MultiCatch.java:8:2:20:2 | { ... } |
| MultiCatch.java:7:14:7:23 | Exceptional Exit | MultiCatch.java:7:14:7:23 | Exit |
| MultiCatch.java:8:2:20:2 | { ... } | MultiCatch.java:9:3:19:3 | try ... |
| MultiCatch.java:9:3:19:3 | try ... | MultiCatch.java:10:3:15:3 | { ... } |
| MultiCatch.java:10:3:15:3 | { ... } | MultiCatch.java:11:4:11:8 | if (...) |
@@ -10,6 +14,7 @@
| MultiCatch.java:12:11:12:27 | new IOException(...) | MultiCatch.java:12:5:12:28 | throw ... |
| MultiCatch.java:14:5:14:29 | throw ... | MultiCatch.java:15:5:15:37 | catch (...) |
| MultiCatch.java:14:11:14:28 | new SQLException(...) | MultiCatch.java:14:5:14:29 | throw ... |
| MultiCatch.java:15:5:15:37 | catch (...) | MultiCatch.java:7:14:7:23 | Exceptional Exit |
| MultiCatch.java:15:5:15:37 | catch (...) | MultiCatch.java:15:36:15:36 | e |
| MultiCatch.java:15:36:15:36 | e | MultiCatch.java:16:3:19:3 | { ... } |
| MultiCatch.java:16:3:19:3 | { ... } | MultiCatch.java:17:4:17:23 | <Expr>; |
@@ -18,6 +23,9 @@
| MultiCatch.java:17:4:17:23 | <Expr>; | MultiCatch.java:17:4:17:4 | e |
| MultiCatch.java:18:4:18:11 | throw ... | MultiCatch.java:7:14:7:23 | Exceptional Exit |
| MultiCatch.java:18:10:18:10 | e | MultiCatch.java:18:4:18:11 | throw ... |
| MultiCatch.java:22:14:22:24 | Entry | MultiCatch.java:23:2:33:2 | { ... } |
| MultiCatch.java:22:14:22:24 | Exceptional Exit | MultiCatch.java:22:14:22:24 | Exit |
| MultiCatch.java:22:14:22:24 | Normal Exit | MultiCatch.java:22:14:22:24 | Exit |
| MultiCatch.java:23:2:33:2 | { ... } | MultiCatch.java:24:3:32:4 | try ... |
| MultiCatch.java:24:3:32:4 | try ... | MultiCatch.java:25:3:31:3 | { ... } |
| MultiCatch.java:25:3:31:3 | { ... } | MultiCatch.java:26:4:26:8 | if (...) |
@@ -31,12 +39,14 @@
| MultiCatch.java:28:12:28:12 | c | MultiCatch.java:30:10:30:24 | new Exception(...) |
| MultiCatch.java:29:5:29:29 | throw ... | MultiCatch.java:31:5:31:37 | catch (...) |
| MultiCatch.java:29:11:29:28 | new SQLException(...) | MultiCatch.java:29:5:29:29 | throw ... |
| MultiCatch.java:30:4:30:25 | throw ... | MultiCatch.java:22:14:22:24 | Exceptional Exit |
| MultiCatch.java:30:4:30:25 | throw ... | MultiCatch.java:31:5:31:37 | catch (...) |
| MultiCatch.java:30:10:30:24 | new Exception(...) | MultiCatch.java:30:4:30:25 | throw ... |
| MultiCatch.java:31:5:31:37 | catch (...) | MultiCatch.java:22:14:22:24 | Exceptional Exit |
| MultiCatch.java:31:5:31:37 | catch (...) | MultiCatch.java:31:36:31:36 | e |
| MultiCatch.java:31:36:31:36 | e | MultiCatch.java:32:3:32:4 | { ... } |
| MultiCatch.java:32:3:32:4 | { ... } | MultiCatch.java:22:14:22:24 | Normal Exit |
| MultiCatch.java:35:14:35:26 | Entry | MultiCatch.java:36:2:42:2 | { ... } |
| MultiCatch.java:35:14:35:26 | Normal Exit | MultiCatch.java:35:14:35:26 | Exit |
| MultiCatch.java:36:2:42:2 | { ... } | MultiCatch.java:37:3:41:4 | try ... |
| MultiCatch.java:37:3:41:4 | try ... | MultiCatch.java:38:3:40:3 | { ... } |
| MultiCatch.java:38:3:40:3 | { ... } | MultiCatch.java:39:10:39:26 | new IOException(...) |

View File

@@ -1,5 +1,6 @@
import default
import utils.test.AstCfg
from ControlFlowNode n
where n.getEnclosingStmt().getCompilationUnit().fromSource()
select n, n.getASuccessor()
where n.getEnclosingCallable().getCompilationUnit().fromSource()
select n, getAnAstSuccessor(n)

View File

@@ -1,8 +1,8 @@
| Test.java:1:14:1:17 | Exceptional Exit | Test.java:1:14:1:17 | Exit |
| Test.java:1:14:1:17 | Entry | Test.java:1:14:1:17 | { ... } |
| Test.java:1:14:1:17 | Normal Exit | Test.java:1:14:1:17 | Exit |
| Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Normal Exit |
| Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) |
| Test.java:3:22:3:25 | Exceptional Exit | Test.java:3:22:3:25 | Exit |
| Test.java:3:22:3:25 | Entry | Test.java:3:40:20:3 | { ... } |
| Test.java:3:22:3:25 | Normal Exit | Test.java:3:22:3:25 | Exit |
| Test.java:3:40:20:3 | { ... } | Test.java:5:5:5:34 | var ...; |
| Test.java:5:5:5:34 | var ...; | Test.java:5:26:5:33 | source(...) |
@@ -50,35 +50,39 @@
| Test.java:17:7:17:26 | sink(...) | Test.java:3:22:3:25 | Normal Exit |
| Test.java:17:7:17:27 | <Expr>; | Test.java:17:12:17:25 | alsoNotTainted |
| Test.java:17:12:17:25 | alsoNotTainted | Test.java:17:7:17:26 | sink(...) |
| Test.java:22:24:22:29 | Exceptional Exit | Test.java:22:24:22:29 | Exit |
| Test.java:22:24:22:29 | Entry | Test.java:22:33:22:53 | { ... } |
| Test.java:22:24:22:29 | Normal Exit | Test.java:22:24:22:29 | Exit |
| Test.java:22:33:22:53 | { ... } | Test.java:22:42:22:50 | "tainted" |
| Test.java:22:35:22:51 | return ... | Test.java:22:24:22:29 | Normal Exit |
| Test.java:22:42:22:50 | "tainted" | Test.java:22:35:22:51 | return ... |
| Test.java:23:22:23:25 | Exceptional Exit | Test.java:23:22:23:25 | Exit |
| Test.java:23:22:23:25 | Entry | Test.java:23:40:23:42 | { ... } |
| Test.java:23:22:23:25 | Normal Exit | Test.java:23:22:23:25 | Exit |
| Test.java:23:40:23:42 | { ... } | Test.java:23:22:23:25 | Normal Exit |
| Test.java:27:8:27:12 | ...=... | Test.java:27:8:27:12 | <Expr>; |
| Test.java:27:8:27:12 | ...=... | Test.java:27:8:27:12 | Normal Exit |
| Test.java:27:8:27:12 | <Expr>; | Test.java:27:8:27:12 | this |
| Test.java:27:8:27:12 | <Expr>; | Test.java:27:8:27:12 | this |
| Test.java:27:8:27:12 | Exceptional Exit | Test.java:27:8:27:12 | Exit |
| Test.java:27:8:27:12 | Entry | Test.java:27:8:27:12 | { ... } |
| Test.java:27:8:27:12 | Normal Exit | Test.java:27:8:27:12 | Exit |
| Test.java:27:8:27:12 | i | Test.java:27:8:27:12 | ...=... |
| Test.java:27:8:27:12 | otherField | Test.java:27:8:27:12 | ...=... |
| Test.java:27:8:27:12 | super(...) | Test.java:27:8:27:12 | <Expr>; |
| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | i |
| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | otherField |
| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | this.i |
| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | this.otherField |
| Test.java:27:8:27:12 | this.i | Test.java:27:8:27:12 | i |
| Test.java:27:8:27:12 | this.otherField | Test.java:27:8:27:12 | otherField |
| Test.java:27:8:27:12 | { ... } | Test.java:27:8:27:12 | super(...) |
| Test.java:28:8:28:12 | ...=... | Test.java:28:8:28:12 | <Expr>; |
| Test.java:28:8:28:12 | ...=... | Test.java:28:8:28:12 | Normal Exit |
| Test.java:28:8:28:12 | <Expr>; | Test.java:28:8:28:12 | this |
| Test.java:28:8:28:12 | <Expr>; | Test.java:28:8:28:12 | this |
| Test.java:28:8:28:12 | Exceptional Exit | Test.java:28:8:28:12 | Exit |
| Test.java:28:8:28:12 | Entry | Test.java:28:8:28:12 | { ... } |
| Test.java:28:8:28:12 | Normal Exit | Test.java:28:8:28:12 | Exit |
| Test.java:28:8:28:12 | nonTaintedField | Test.java:28:8:28:12 | ...=... |
| Test.java:28:8:28:12 | super(...) | Test.java:28:8:28:12 | <Expr>; |
| Test.java:28:8:28:12 | taintedField | Test.java:28:8:28:12 | ...=... |
| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | nonTaintedField |
| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | taintedField |
| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | this.nonTaintedField |
| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | this.taintedField |
| Test.java:28:8:28:12 | this.nonTaintedField | Test.java:28:8:28:12 | nonTaintedField |
| Test.java:28:8:28:12 | this.taintedField | Test.java:28:8:28:12 | taintedField |
| Test.java:28:8:28:12 | { ... } | Test.java:28:8:28:12 | super(...) |

View File

@@ -1,5 +1,6 @@
import java
import utils.test.AstCfg
from ControlFlowNode cn
where cn.getLocation().getFile().getBaseName() = "Test.java"
select cn, cn.getASuccessor()
select cn, getAnAstSuccessor(cn)

View File

@@ -1,32 +1,35 @@
| Exhaustive.java:1:14:1:23 | Exceptional Exit | Exhaustive.java:1:14:1:23 | Exit |
| Exhaustive.java:1:14:1:23 | Entry | Exhaustive.java:1:14:1:23 | { ... } |
| Exhaustive.java:1:14:1:23 | Normal Exit | Exhaustive.java:1:14:1:23 | Exit |
| Exhaustive.java:1:14:1:23 | super(...) | Exhaustive.java:1:14:1:23 | Normal Exit |
| Exhaustive.java:1:14:1:23 | { ... } | Exhaustive.java:1:14:1:23 | super(...) |
| Exhaustive.java:3:8:3:8 | Exceptional Exit | Exhaustive.java:3:8:3:8 | Exit |
| Exhaustive.java:3:8:3:8 | Exceptional Exit | Exhaustive.java:3:8:3:8 | Exit |
| Exhaustive.java:3:8:3:8 | Entry | Exhaustive.java:3:8:3:8 | { ... } |
| Exhaustive.java:3:8:3:8 | Entry | Exhaustive.java:3:8:3:8 | { ... } |
| Exhaustive.java:3:8:3:8 | Normal Exit | Exhaustive.java:3:8:3:8 | Exit |
| Exhaustive.java:3:8:3:8 | Normal Exit | Exhaustive.java:3:8:3:8 | Exit |
| Exhaustive.java:3:8:3:8 | super(...) | Exhaustive.java:3:8:3:8 | Normal Exit |
| Exhaustive.java:3:8:3:8 | { ... } | Exhaustive.java:3:8:3:8 | super(...) |
| Exhaustive.java:3:8:3:8 | { ... } | Exhaustive.java:3:12:3:12 | <Expr>; |
| Exhaustive.java:3:12:3:12 | ...=... | Exhaustive.java:3:15:3:15 | <Expr>; |
| Exhaustive.java:3:12:3:12 | <Expr>; | Exhaustive.java:3:12:3:12 | new E(...) |
| Exhaustive.java:3:12:3:12 | <Expr>; | Exhaustive.java:3:12:3:12 | A |
| Exhaustive.java:3:12:3:12 | A | Exhaustive.java:3:12:3:12 | new E(...) |
| Exhaustive.java:3:12:3:12 | new E(...) | Exhaustive.java:3:12:3:12 | ...=... |
| Exhaustive.java:3:15:3:15 | ...=... | Exhaustive.java:3:18:3:18 | <Expr>; |
| Exhaustive.java:3:15:3:15 | <Expr>; | Exhaustive.java:3:15:3:15 | new E(...) |
| Exhaustive.java:3:15:3:15 | <Expr>; | Exhaustive.java:3:15:3:15 | B |
| Exhaustive.java:3:15:3:15 | B | Exhaustive.java:3:15:3:15 | new E(...) |
| Exhaustive.java:3:15:3:15 | new E(...) | Exhaustive.java:3:15:3:15 | ...=... |
| Exhaustive.java:3:18:3:18 | ...=... | Exhaustive.java:3:8:3:8 | Normal Exit |
| Exhaustive.java:3:18:3:18 | <Expr>; | Exhaustive.java:3:18:3:18 | new E(...) |
| Exhaustive.java:3:18:3:18 | <Expr>; | Exhaustive.java:3:18:3:18 | C |
| Exhaustive.java:3:18:3:18 | C | Exhaustive.java:3:18:3:18 | new E(...) |
| Exhaustive.java:3:18:3:18 | new E(...) | Exhaustive.java:3:18:3:18 | ...=... |
| Exhaustive.java:5:15:5:15 | Exceptional Exit | Exhaustive.java:5:15:5:15 | Exit |
| Exhaustive.java:5:15:5:15 | Entry | Exhaustive.java:5:15:5:15 | { ... } |
| Exhaustive.java:5:15:5:15 | Normal Exit | Exhaustive.java:5:15:5:15 | Exit |
| Exhaustive.java:5:15:5:15 | super(...) | Exhaustive.java:5:15:5:15 | Normal Exit |
| Exhaustive.java:5:15:5:15 | { ... } | Exhaustive.java:5:15:5:15 | super(...) |
| Exhaustive.java:6:15:6:15 | Exceptional Exit | Exhaustive.java:6:15:6:15 | Exit |
| Exhaustive.java:6:15:6:15 | Entry | Exhaustive.java:6:15:6:15 | { ... } |
| Exhaustive.java:6:15:6:15 | Normal Exit | Exhaustive.java:6:15:6:15 | Exit |
| Exhaustive.java:6:15:6:15 | super(...) | Exhaustive.java:6:15:6:15 | Normal Exit |
| Exhaustive.java:6:15:6:15 | { ... } | Exhaustive.java:6:15:6:15 | super(...) |
| Exhaustive.java:8:22:8:25 | Exceptional Exit | Exhaustive.java:8:22:8:25 | Exit |
| Exhaustive.java:8:22:8:25 | Entry | Exhaustive.java:8:47:35:3 | { ... } |
| Exhaustive.java:8:22:8:25 | Normal Exit | Exhaustive.java:8:22:8:25 | Exit |
| Exhaustive.java:8:47:35:3 | { ... } | Exhaustive.java:11:5:11:14 | switch (...) |
| Exhaustive.java:11:5:11:14 | switch (...) | Exhaustive.java:11:13:11:13 | o |
@@ -40,14 +43,17 @@
| Exhaustive.java:13:25:13:27 | { ... } | Exhaustive.java:18:5:18:14 | switch (...) |
| Exhaustive.java:18:5:18:14 | switch (...) | Exhaustive.java:18:13:18:13 | e |
| Exhaustive.java:18:13:18:13 | e | Exhaustive.java:19:7:19:15 | case ... |
| Exhaustive.java:18:13:18:13 | e | Exhaustive.java:20:7:20:15 | case ... |
| Exhaustive.java:18:13:18:13 | e | Exhaustive.java:21:7:21:15 | case ... |
| Exhaustive.java:18:13:18:13 | e | Exhaustive.java:24:5:24:14 | switch (...) |
| Exhaustive.java:19:7:19:15 | case ... | Exhaustive.java:19:17:19:19 | { ... } |
| Exhaustive.java:19:7:19:15 | case ... | Exhaustive.java:19:12:19:12 | A |
| Exhaustive.java:19:7:19:15 | case ... | Exhaustive.java:20:7:20:15 | case ... |
| Exhaustive.java:19:12:19:12 | A | Exhaustive.java:19:17:19:19 | { ... } |
| Exhaustive.java:19:17:19:19 | { ... } | Exhaustive.java:24:5:24:14 | switch (...) |
| Exhaustive.java:20:7:20:15 | case ... | Exhaustive.java:20:17:20:19 | { ... } |
| Exhaustive.java:20:7:20:15 | case ... | Exhaustive.java:20:12:20:12 | B |
| Exhaustive.java:20:7:20:15 | case ... | Exhaustive.java:21:7:21:15 | case ... |
| Exhaustive.java:20:12:20:12 | B | Exhaustive.java:20:17:20:19 | { ... } |
| Exhaustive.java:20:17:20:19 | { ... } | Exhaustive.java:24:5:24:14 | switch (...) |
| Exhaustive.java:21:7:21:15 | case ... | Exhaustive.java:21:17:21:19 | { ... } |
| Exhaustive.java:21:7:21:15 | case ... | Exhaustive.java:21:12:21:12 | C |
| Exhaustive.java:21:7:21:15 | case ... | Exhaustive.java:24:5:24:14 | switch (...) |
| Exhaustive.java:21:12:21:12 | C | Exhaustive.java:21:17:21:19 | { ... } |
| Exhaustive.java:21:17:21:19 | { ... } | Exhaustive.java:24:5:24:14 | switch (...) |
| Exhaustive.java:24:5:24:14 | switch (...) | Exhaustive.java:24:13:24:13 | i |
| Exhaustive.java:24:13:24:13 | i | Exhaustive.java:25:7:25:17 | case <Pattern> |
@@ -65,11 +71,11 @@
| Exhaustive.java:31:14:31:14 | <anonymous local variable> | Exhaustive.java:8:22:8:25 | Normal Exit |
| Exhaustive.java:32:7:32:15 | case <Pattern> | Exhaustive.java:32:14:32:14 | <anonymous local variable> |
| Exhaustive.java:32:14:32:14 | <anonymous local variable> | Exhaustive.java:8:22:8:25 | Normal Exit |
| Test.java:1:14:1:17 | Exceptional Exit | Test.java:1:14:1:17 | Exit |
| Test.java:1:14:1:17 | Entry | Test.java:1:14:1:17 | { ... } |
| Test.java:1:14:1:17 | Normal Exit | Test.java:1:14:1:17 | Exit |
| Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Normal Exit |
| Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) |
| Test.java:3:22:3:25 | Exceptional Exit | Test.java:3:22:3:25 | Exit |
| Test.java:3:22:3:25 | Entry | Test.java:3:41:134:3 | { ... } |
| Test.java:3:22:3:25 | Normal Exit | Test.java:3:22:3:25 | Exit |
| Test.java:3:41:134:3 | { ... } | Test.java:5:6:5:19 | switch (...) |
| Test.java:5:6:5:19 | switch (...) | Test.java:5:14:5:18 | thing |
@@ -79,14 +85,12 @@
| Test.java:6:20:6:20 | s | Test.java:6:25:6:34 | System.out |
| Test.java:6:25:6:34 | System.out | Test.java:6:44:6:44 | s |
| Test.java:6:25:6:45 | println(...) | Test.java:11:6:11:19 | switch (...) |
| Test.java:6:25:6:46 | <Expr>; | Test.java:6:25:6:34 | System.out |
| Test.java:6:44:6:44 | s | Test.java:6:25:6:45 | println(...) |
| Test.java:7:8:7:24 | case <Pattern> | Test.java:7:21:7:21 | i |
| Test.java:7:8:7:24 | case <Pattern> | Test.java:8:8:8:17 | default |
| Test.java:7:21:7:21 | i | Test.java:7:26:7:35 | System.out |
| Test.java:7:26:7:35 | System.out | Test.java:7:45:7:58 | "An integer: " |
| Test.java:7:26:7:63 | println(...) | Test.java:11:6:11:19 | switch (...) |
| Test.java:7:26:7:64 | <Expr>; | Test.java:7:26:7:35 | System.out |
| Test.java:7:45:7:58 | "An integer: " | Test.java:7:62:7:62 | i |
| Test.java:7:45:7:62 | ... + ... | Test.java:7:26:7:63 | println(...) |
| Test.java:7:62:7:62 | i | Test.java:7:45:7:62 | ... + ... |
@@ -136,19 +140,19 @@
| Test.java:28:34:28:38 | thing | Test.java:29:8:29:21 | case <Pattern> |
| Test.java:29:8:29:21 | case <Pattern> | Test.java:29:20:29:20 | s |
| Test.java:29:8:29:21 | case <Pattern> | Test.java:31:8:31:22 | case <Pattern> |
| Test.java:29:20:29:20 | s | Test.java:30:10:30:17 | yield ... |
| Test.java:30:10:30:17 | yield ... | Test.java:30:16:30:16 | s |
| Test.java:30:16:30:16 | s | Test.java:28:10:28:39 | thingAsString2 |
| Test.java:29:20:29:20 | s | Test.java:30:16:30:16 | s |
| Test.java:30:10:30:17 | yield ... | Test.java:28:10:28:39 | thingAsString2 |
| Test.java:30:16:30:16 | s | Test.java:30:10:30:17 | yield ... |
| Test.java:31:8:31:22 | case <Pattern> | Test.java:31:21:31:21 | i |
| Test.java:31:8:31:22 | case <Pattern> | Test.java:33:8:33:15 | default |
| Test.java:31:21:31:21 | i | Test.java:32:10:32:34 | yield ... |
| Test.java:32:10:32:34 | yield ... | Test.java:32:16:32:29 | "An integer: " |
| Test.java:31:21:31:21 | i | Test.java:32:16:32:29 | "An integer: " |
| Test.java:32:10:32:34 | yield ... | Test.java:28:10:28:39 | thingAsString2 |
| Test.java:32:16:32:29 | "An integer: " | Test.java:32:33:32:33 | i |
| Test.java:32:16:32:33 | ... + ... | Test.java:28:10:28:39 | thingAsString2 |
| Test.java:32:16:32:33 | ... + ... | Test.java:32:10:32:34 | yield ... |
| Test.java:32:33:32:33 | i | Test.java:32:16:32:33 | ... + ... |
| Test.java:33:8:33:15 | default | Test.java:34:10:34:32 | yield ... |
| Test.java:34:10:34:32 | yield ... | Test.java:34:16:34:31 | "Something else" |
| Test.java:34:16:34:31 | "Something else" | Test.java:28:10:28:39 | thingAsString2 |
| Test.java:33:8:33:15 | default | Test.java:34:16:34:31 | "Something else" |
| Test.java:34:10:34:32 | yield ... | Test.java:28:10:28:39 | thingAsString2 |
| Test.java:34:16:34:31 | "Something else" | Test.java:34:10:34:32 | yield ... |
| Test.java:37:6:37:18 | switch (...) | Test.java:37:13:37:17 | thing |
| Test.java:37:13:37:17 | thing | Test.java:38:8:38:42 | case <Pattern> |
| Test.java:38:8:38:42 | case <Pattern> | Test.java:38:20:38:20 | s |
@@ -195,7 +199,6 @@
| Test.java:50:41:50:41 | 3 | Test.java:50:27:50:41 | ... == ... |
| Test.java:50:46:50:55 | System.out | Test.java:50:65:50:74 | "Length 3" |
| Test.java:50:46:50:75 | println(...) | Test.java:55:6:55:26 | switch (...) |
| Test.java:50:46:50:76 | <Expr>; | Test.java:50:46:50:55 | System.out |
| Test.java:50:65:50:74 | "Length 3" | Test.java:50:46:50:75 | println(...) |
| Test.java:51:8:51:44 | case <Pattern> | Test.java:51:20:51:20 | s |
| Test.java:51:8:51:44 | case <Pattern> | Test.java:52:8:52:17 | default |
@@ -207,22 +210,22 @@
| Test.java:51:41:51:41 | 5 | Test.java:51:27:51:41 | ... == ... |
| Test.java:51:46:51:55 | System.out | Test.java:51:65:51:74 | "Length 5" |
| Test.java:51:46:51:75 | println(...) | Test.java:55:6:55:26 | switch (...) |
| Test.java:51:46:51:76 | <Expr>; | Test.java:51:46:51:55 | System.out |
| Test.java:51:65:51:74 | "Length 5" | Test.java:51:46:51:75 | println(...) |
| Test.java:52:8:52:17 | default | Test.java:52:19:52:21 | { ... } |
| Test.java:52:19:52:21 | { ... } | Test.java:55:6:55:26 | switch (...) |
| Test.java:55:6:55:26 | switch (...) | Test.java:55:21:55:25 | thing |
| Test.java:55:13:55:25 | (...)... | Test.java:56:8:56:21 | case ... |
| Test.java:55:13:55:25 | (...)... | Test.java:58:8:58:21 | case ... |
| Test.java:55:13:55:25 | (...)... | Test.java:61:8:61:42 | case <Pattern> |
| Test.java:55:13:55:25 | (...)... | Test.java:69:8:69:26 | case null, default |
| Test.java:55:21:55:25 | thing | Test.java:55:13:55:25 | (...)... |
| Test.java:56:8:56:21 | case ... | Test.java:57:10:57:44 | <Expr>; |
| Test.java:56:8:56:21 | case ... | Test.java:56:13:56:20 | "Const1" |
| Test.java:56:8:56:21 | case ... | Test.java:58:8:58:21 | case ... |
| Test.java:56:13:56:20 | "Const1" | Test.java:57:10:57:44 | <Expr>; |
| Test.java:57:10:57:19 | System.out | Test.java:57:29:57:42 | "It's Const1!" |
| Test.java:57:10:57:43 | println(...) | Test.java:58:8:58:21 | case ... |
| Test.java:57:10:57:43 | println(...) | Test.java:59:10:59:54 | <Expr>; |
| Test.java:57:10:57:44 | <Expr>; | Test.java:57:10:57:19 | System.out |
| Test.java:57:29:57:42 | "It's Const1!" | Test.java:57:10:57:43 | println(...) |
| Test.java:58:8:58:21 | case ... | Test.java:59:10:59:54 | <Expr>; |
| Test.java:58:8:58:21 | case ... | Test.java:58:13:58:20 | "Const2" |
| Test.java:58:8:58:21 | case ... | Test.java:61:8:61:42 | case <Pattern> |
| Test.java:58:13:58:20 | "Const2" | Test.java:59:10:59:54 | <Expr>; |
| Test.java:59:10:59:19 | System.out | Test.java:59:29:59:52 | "It's Const1 or Const2!" |
| Test.java:59:10:59:53 | println(...) | Test.java:60:10:60:15 | break |
| Test.java:59:10:59:54 | <Expr>; | Test.java:59:10:59:19 | System.out |
@@ -230,27 +233,27 @@
| Test.java:60:10:60:15 | break | Test.java:73:6:73:18 | switch (...) |
| Test.java:61:8:61:42 | case <Pattern> | Test.java:61:20:61:20 | s |
| Test.java:61:8:61:42 | case <Pattern> | Test.java:63:8:63:21 | case ... |
| Test.java:61:8:61:42 | case <Pattern> | Test.java:66:8:66:22 | case ... |
| Test.java:61:8:61:42 | case <Pattern> | Test.java:69:8:69:26 | case null, default |
| Test.java:61:20:61:20 | s | Test.java:61:27:61:27 | s |
| Test.java:61:27:61:27 | s | Test.java:61:27:61:36 | length(...) |
| Test.java:61:27:61:36 | length(...) | Test.java:61:41:61:41 | 6 |
| Test.java:61:27:61:41 | ... <= ... | Test.java:62:10:62:83 | <Expr>; |
| Test.java:61:27:61:41 | ... <= ... | Test.java:63:8:63:21 | case ... |
| Test.java:61:27:61:41 | ... <= ... | Test.java:66:8:66:22 | case ... |
| Test.java:61:27:61:41 | ... <= ... | Test.java:69:8:69:26 | case null, default |
| Test.java:61:41:61:41 | 6 | Test.java:61:27:61:41 | ... <= ... |
| Test.java:62:10:62:19 | System.out | Test.java:62:29:62:81 | "It's <= 6 chars long, and neither Const1 nor Const2" |
| Test.java:62:10:62:82 | println(...) | Test.java:63:8:63:21 | case ... |
| Test.java:62:10:62:82 | println(...) | Test.java:64:10:64:96 | <Expr>; |
| Test.java:62:10:62:83 | <Expr>; | Test.java:62:10:62:19 | System.out |
| Test.java:62:29:62:81 | "It's <= 6 chars long, and neither Const1 nor Const2" | Test.java:62:10:62:82 | println(...) |
| Test.java:63:8:63:21 | case ... | Test.java:64:10:64:96 | <Expr>; |
| Test.java:63:8:63:21 | case ... | Test.java:63:13:63:20 | "Const3" |
| Test.java:63:8:63:21 | case ... | Test.java:66:8:66:22 | case ... |
| Test.java:63:13:63:20 | "Const3" | Test.java:64:10:64:96 | <Expr>; |
| Test.java:64:10:64:19 | System.out | Test.java:64:29:64:94 | "It's (<= 6 chars long, and neither Const1 nor Const2), or Const3" |
| Test.java:64:10:64:95 | println(...) | Test.java:65:10:65:15 | break |
| Test.java:64:10:64:96 | <Expr>; | Test.java:64:10:64:19 | System.out |
| Test.java:64:29:64:94 | "It's (<= 6 chars long, and neither Const1 nor Const2), or Const3" | Test.java:64:10:64:95 | println(...) |
| Test.java:65:10:65:15 | break | Test.java:73:6:73:18 | switch (...) |
| Test.java:66:8:66:22 | case ... | Test.java:67:10:67:44 | <Expr>; |
| Test.java:66:8:66:22 | case ... | Test.java:66:13:66:21 | "Const30" |
| Test.java:66:8:66:22 | case ... | Test.java:69:8:69:26 | case null, default |
| Test.java:66:13:66:21 | "Const30" | Test.java:67:10:67:44 | <Expr>; |
| Test.java:67:10:67:19 | System.out | Test.java:67:29:67:42 | "It's Const30" |
| Test.java:67:10:67:43 | println(...) | Test.java:68:10:68:15 | break |
| Test.java:67:10:67:44 | <Expr>; | Test.java:67:10:67:19 | System.out |
@@ -263,16 +266,17 @@
| Test.java:70:29:70:58 | "It's null, or something else" | Test.java:70:10:70:59 | println(...) |
| Test.java:73:6:73:18 | switch (...) | Test.java:73:13:73:17 | thing |
| Test.java:73:13:73:17 | thing | Test.java:74:8:74:21 | case <Pattern> |
| Test.java:73:13:73:17 | thing | Test.java:77:8:77:17 | case ... |
| Test.java:74:8:74:21 | case <Pattern> | Test.java:74:20:74:20 | s |
| Test.java:74:8:74:21 | case <Pattern> | Test.java:80:8:80:22 | case <Pattern> |
| Test.java:74:8:74:21 | case <Pattern> | Test.java:77:8:77:17 | case ... |
| Test.java:74:20:74:20 | s | Test.java:75:10:75:31 | <Expr>; |
| Test.java:75:10:75:19 | System.out | Test.java:75:29:75:29 | s |
| Test.java:75:10:75:30 | println(...) | Test.java:76:10:76:15 | break |
| Test.java:75:10:75:31 | <Expr>; | Test.java:75:10:75:19 | System.out |
| Test.java:75:29:75:29 | s | Test.java:75:10:75:30 | println(...) |
| Test.java:76:10:76:15 | break | Test.java:87:6:87:18 | switch (...) |
| Test.java:77:8:77:17 | case ... | Test.java:78:10:78:41 | <Expr>; |
| Test.java:77:8:77:17 | case ... | Test.java:77:13:77:16 | null |
| Test.java:77:8:77:17 | case ... | Test.java:80:8:80:22 | case <Pattern> |
| Test.java:77:13:77:16 | null | Test.java:78:10:78:41 | <Expr>; |
| Test.java:78:10:78:19 | System.out | Test.java:78:29:78:39 | "It's null" |
| Test.java:78:10:78:40 | println(...) | Test.java:79:10:79:15 | break |
| Test.java:78:10:78:41 | <Expr>; | Test.java:78:10:78:19 | System.out |
@@ -347,7 +351,7 @@
| Test.java:110:26:110:30 | thing | Test.java:111:8:111:20 | case <Pattern> |
| Test.java:111:8:111:20 | case <Pattern> | Test.java:111:15:111:15 | <anonymous local variable> |
| Test.java:111:8:111:20 | case <Pattern> | Test.java:112:8:112:77 | case <Pattern> |
| Test.java:111:13:111:19 | B(...) | Test.java:114:10:114:17 | yield ... |
| Test.java:111:13:111:19 | B(...) | Test.java:114:16:114:16 | 1 |
| Test.java:111:15:111:15 | <anonymous local variable> | Test.java:111:18:111:18 | <anonymous local variable> |
| Test.java:111:18:111:18 | <anonymous local variable> | Test.java:111:13:111:19 | B(...) |
| Test.java:112:8:112:77 | case <Pattern> | Test.java:112:21:112:21 | <anonymous local variable> |
@@ -362,32 +366,34 @@
| Test.java:112:47:112:51 | thing | Test.java:112:47:112:62 | toString(...) |
| Test.java:112:47:112:62 | toString(...) | Test.java:112:71:112:75 | "abc" |
| Test.java:112:47:112:76 | equals(...) | Test.java:113:8:113:20 | case <Pattern> |
| Test.java:112:47:112:76 | equals(...) | Test.java:114:10:114:17 | yield ... |
| Test.java:112:47:112:76 | equals(...) | Test.java:114:16:114:16 | 1 |
| Test.java:112:71:112:75 | "abc" | Test.java:112:47:112:76 | equals(...) |
| Test.java:113:8:113:20 | case <Pattern> | Test.java:113:19:113:19 | <anonymous local variable> |
| Test.java:113:8:113:20 | case <Pattern> | Test.java:115:8:115:15 | default |
| Test.java:113:19:113:19 | <anonymous local variable> | Test.java:114:10:114:17 | yield ... |
| Test.java:114:10:114:17 | yield ... | Test.java:114:16:114:16 | 1 |
| Test.java:114:16:114:16 | 1 | Test.java:110:10:110:31 | result |
| Test.java:115:8:115:15 | default | Test.java:116:10:116:17 | yield ... |
| Test.java:116:10:116:17 | yield ... | Test.java:116:16:116:16 | 2 |
| Test.java:116:16:116:16 | 2 | Test.java:110:10:110:31 | result |
| Test.java:113:19:113:19 | <anonymous local variable> | Test.java:114:16:114:16 | 1 |
| Test.java:114:10:114:17 | yield ... | Test.java:110:10:110:31 | result |
| Test.java:114:16:114:16 | 1 | Test.java:114:10:114:17 | yield ... |
| Test.java:115:8:115:15 | default | Test.java:116:16:116:16 | 2 |
| Test.java:116:10:116:17 | yield ... | Test.java:110:10:110:31 | result |
| Test.java:116:16:116:16 | 2 | Test.java:116:10:116:17 | yield ... |
| Test.java:119:6:119:27 | switch (...) | Test.java:119:22:119:26 | thing |
| Test.java:119:14:119:26 | (...)... | Test.java:120:8:120:16 | case ... |
| Test.java:119:14:119:26 | (...)... | Test.java:121:8:121:56 | case <Pattern> |
| Test.java:119:22:119:26 | thing | Test.java:119:14:119:26 | (...)... |
| Test.java:120:8:120:16 | case ... | Test.java:122:8:122:16 | case ... |
| Test.java:120:8:120:16 | case ... | Test.java:120:13:120:15 | "a" |
| Test.java:120:8:120:16 | case ... | Test.java:121:8:121:56 | case <Pattern> |
| Test.java:120:13:120:15 | "a" | Test.java:123:10:123:15 | break |
| Test.java:121:8:121:56 | case <Pattern> | Test.java:121:20:121:20 | <anonymous local variable> |
| Test.java:121:8:121:56 | case <Pattern> | Test.java:122:8:122:16 | case ... |
| Test.java:121:8:121:56 | case <Pattern> | Test.java:124:8:124:15 | default |
| Test.java:121:20:121:20 | <anonymous local variable> | Test.java:121:36:121:40 | thing |
| Test.java:121:27:121:50 | length(...) | Test.java:121:55:121:55 | 5 |
| Test.java:121:27:121:55 | ... == ... | Test.java:122:8:122:16 | case ... |
| Test.java:121:27:121:55 | ... == ... | Test.java:124:8:124:15 | default |
| Test.java:121:27:121:55 | ... == ... | Test.java:123:10:123:15 | break |
| Test.java:121:28:121:40 | (...)... | Test.java:121:27:121:50 | length(...) |
| Test.java:121:36:121:40 | thing | Test.java:121:28:121:40 | (...)... |
| Test.java:121:55:121:55 | 5 | Test.java:121:27:121:55 | ... == ... |
| Test.java:122:8:122:16 | case ... | Test.java:123:10:123:15 | break |
| Test.java:122:8:122:16 | case ... | Test.java:122:13:122:15 | "b" |
| Test.java:122:8:122:16 | case ... | Test.java:124:8:124:15 | default |
| Test.java:122:13:122:15 | "b" | Test.java:123:10:123:15 | break |
| Test.java:123:10:123:15 | break | Test.java:129:6:129:18 | switch (...) |
| Test.java:124:8:124:15 | default | Test.java:125:10:125:15 | break |
| Test.java:125:10:125:15 | break | Test.java:129:6:129:18 | switch (...) |
@@ -395,29 +401,33 @@
| Test.java:129:13:129:17 | thing | Test.java:130:8:130:21 | case <Pattern> |
| Test.java:130:8:130:21 | case <Pattern> | Test.java:130:20:130:20 | <anonymous local variable> |
| Test.java:130:8:130:21 | case <Pattern> | Test.java:131:8:131:15 | default |
| Test.java:130:20:130:20 | <anonymous local variable> | Test.java:131:8:131:15 | default |
| Test.java:130:20:130:20 | <anonymous local variable> | Test.java:3:22:3:25 | Normal Exit |
| Test.java:131:8:131:15 | default | Test.java:3:22:3:25 | Normal Exit |
| Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | <Expr>; |
| Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | Normal Exit |
| Test.java:138:8:138:8 | <Expr>; | Test.java:138:8:138:8 | this |
| Test.java:138:8:138:8 | <Expr>; | Test.java:138:8:138:8 | this |
| Test.java:138:8:138:8 | Exceptional Exit | Test.java:138:8:138:8 | Exit |
| Test.java:138:8:138:8 | Entry | Test.java:138:8:138:8 | { ... } |
| Test.java:138:8:138:8 | Normal Exit | Test.java:138:8:138:8 | Exit |
| Test.java:138:8:138:8 | b | Test.java:138:8:138:8 | ...=... |
| Test.java:138:8:138:8 | field3 | Test.java:138:8:138:8 | ...=... |
| Test.java:138:8:138:8 | super(...) | Test.java:138:8:138:8 | <Expr>; |
| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | b |
| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | field3 |
| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | this.b |
| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | this.field3 |
| Test.java:138:8:138:8 | this.b | Test.java:138:8:138:8 | b |
| Test.java:138:8:138:8 | this.field3 | Test.java:138:8:138:8 | field3 |
| Test.java:138:8:138:8 | { ... } | Test.java:138:8:138:8 | super(...) |
| Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | <Expr>; |
| Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | Normal Exit |
| Test.java:139:8:139:8 | <Expr>; | Test.java:139:8:139:8 | this |
| Test.java:139:8:139:8 | <Expr>; | Test.java:139:8:139:8 | this |
| Test.java:139:8:139:8 | Exceptional Exit | Test.java:139:8:139:8 | Exit |
| Test.java:139:8:139:8 | Entry | Test.java:139:8:139:8 | { ... } |
| Test.java:139:8:139:8 | Normal Exit | Test.java:139:8:139:8 | Exit |
| Test.java:139:8:139:8 | field1 | Test.java:139:8:139:8 | ...=... |
| Test.java:139:8:139:8 | field2 | Test.java:139:8:139:8 | ...=... |
| Test.java:139:8:139:8 | super(...) | Test.java:139:8:139:8 | <Expr>; |
| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field1 |
| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field2 |
| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | this.field1 |
| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | this.field2 |
| Test.java:139:8:139:8 | this.field1 | Test.java:139:8:139:8 | field1 |
| Test.java:139:8:139:8 | this.field2 | Test.java:139:8:139:8 | field2 |
| Test.java:139:8:139:8 | { ... } | Test.java:139:8:139:8 | super(...) |

View File

@@ -1,5 +1,6 @@
import java
import utils.test.AstCfg
from ControlFlowNode cn
where cn.getLocation().getFile().getBaseName() = ["Test.java", "Exhaustive.java"]
select cn, cn.getASuccessor()
select cn, getAnAstSuccessor(cn)

View File

@@ -1,9 +1,9 @@
| Nested.java:8:29:8:57 | SSA capture def(next(..).p1) | Nested.java:4:34:10:3 | SSA param(p1) |
| Nested.java:8:29:8:57 | SSA capture def(next(..).x1) | Nested.java:5:9:5:14 | SSA def(x1) |
| Nested.java:8:22:8:25 | SSA capture def(next(..).p1) | Nested.java:4:21:4:24 | SSA param(p1) |
| Nested.java:8:22:8:25 | SSA capture def(next(..).x1) | Nested.java:5:9:5:14 | SSA def(x1) |
| Nested.java:16:22:16:34 | SSA capture def(getInt(..).obj) | Nested.java:15:12:15:29 | SSA def(obj) |
| Nested.java:19:27:22:7 | SSA capture def(getInt(..).hash) | Nested.java:16:15:16:34 | SSA def(hash) |
| Nested.java:19:27:22:7 | SSA capture def(getInt(..).x2) | Nested.java:17:9:17:15 | SSA def(x2) |
| Nested.java:19:18:19:23 | SSA capture def(getInt(..).hash) | Nested.java:16:15:16:34 | SSA def(hash) |
| Nested.java:19:18:19:23 | SSA capture def(getInt(..).x2) | Nested.java:17:9:17:15 | SSA def(x2) |
| Nested.java:20:27:20:39 | SSA capture def(getInt(..).obj) | Nested.java:15:12:15:29 | SSA def(obj) |
| Nested.java:30:23:30:36 | SSA capture def(getInt(..).obj2) | Nested.java:30:5:30:37 | SSA phi(obj2) |
| Nested.java:37:20:37:25 | SSA capture def(getInt(..).x3) | Nested.java:36:7:36:12 | SSA def(x3) |
| Nested.java:40:20:40:25 | SSA capture def(getInt(..).x3) | Nested.java:39:7:39:12 | SSA def(x3) |
| Nested.java:30:23:30:36 | SSA capture def(getInt(..).obj2) | Nested.java:25:5:25:24 | SSA phi(obj2) |
| Nested.java:37:14:37:25 | SSA capture def(getInt(..).x3) | Nested.java:36:7:36:12 | SSA def(x3) |
| Nested.java:40:14:40:25 | SSA capture def(getInt(..).x3) | Nested.java:39:7:39:12 | SSA def(x3) |

View File

@@ -1,11 +1,11 @@
| Fields.java:12:19:21:3 | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs |
| Fields.java:12:15:12:15 | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs |
| Fields.java:14:5:14:9 | SSA call def(this.xs) | Fields.java:15:9:15:10 | xs |
| Fields.java:15:5:15:10 | SSA def(x) | Fields.java:16:9:16:9 | x |
| Fields.java:16:5:16:17 | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs |
| Fields.java:17:7:17:11 | SSA call def(this.xs) | Fields.java:18:9:18:15 | this.xs |
| Fields.java:18:5:18:16 | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs |
| Fields.java:19:5:19:19 | SSA def(this.xs) | Fields.java:20:9:20:10 | xs |
| Fields.java:23:19:49:3 | SSA entry def(Fields.stat) | Fields.java:27:15:27:18 | stat |
| Fields.java:23:19:49:3 | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs |
| Fields.java:23:15:23:15 | SSA entry def(Fields.stat) | Fields.java:27:15:27:18 | stat |
| Fields.java:23:15:23:15 | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs |
| Fields.java:24:12:24:27 | SSA def(f) | Fields.java:25:15:25:15 | f |
| Fields.java:24:12:24:27 | SSA qualifier def(f.xs) | Fields.java:25:15:25:18 | f.xs |
| Fields.java:24:16:24:27 | SSA call def(Fields.stat) | Fields.java:27:15:27:18 | stat |
@@ -18,52 +18,52 @@
| Fields.java:36:5:36:19 | SSA def(this.xs) | Fields.java:38:9:38:10 | xs |
| Fields.java:39:5:39:21 | SSA def(f.xs) | Fields.java:40:9:40:12 | f.xs |
| Fields.java:41:5:41:10 | SSA def(z) | Fields.java:42:9:42:9 | z |
| Fields.java:42:5:42:17 | SSA phi(Fields.stat) | Fields.java:48:9:48:12 | stat |
| Fields.java:42:5:42:17 | SSA phi(f) | Fields.java:44:9:44:9 | f |
| Fields.java:42:5:42:17 | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs |
| Fields.java:43:7:43:22 | SSA def(f) | Fields.java:44:9:44:9 | f |
| Fields.java:43:7:43:22 | SSA qualifier def(f.xs) | Fields.java:44:9:44:12 | f.xs |
| Fields.java:43:11:43:22 | SSA call def(Fields.stat) | Fields.java:48:9:48:12 | stat |
| Fields.java:44:5:44:13 | SSA phi(Fields.stat) | Fields.java:48:9:48:12 | stat |
| Fields.java:44:5:44:13 | SSA phi(f) | Fields.java:44:9:44:9 | f |
| Fields.java:44:5:44:13 | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs |
| Fields.java:45:5:45:16 | SSA call def(Fields.stat) | Fields.java:48:9:48:12 | stat |
| Nested.java:8:29:8:57 | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 |
| Nested.java:8:29:8:57 | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 |
| Nested.java:8:22:8:25 | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 |
| Nested.java:8:22:8:25 | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 |
| Nested.java:16:22:16:34 | SSA capture def(getInt(..).obj) | Nested.java:16:22:16:24 | obj |
| Nested.java:18:15:23:5 | SSA def(h2) | Nested.java:25:9:25:10 | h2 |
| Nested.java:19:27:22:7 | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash |
| Nested.java:19:27:22:7 | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 |
| Nested.java:19:18:19:23 | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash |
| Nested.java:19:18:19:23 | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 |
| Nested.java:20:19:20:39 | SSA def(hnest) | Nested.java:21:37:21:41 | hnest |
| Nested.java:20:27:20:39 | SSA capture def(getInt(..).obj) | Nested.java:20:27:20:29 | obj |
| Nested.java:30:23:30:36 | SSA capture def(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 |
| Nested.java:33:29:42:3 | SSA param(p3) | Nested.java:35:9:35:10 | p3 |
| Nested.java:37:20:37:25 | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 |
| Nested.java:40:20:40:25 | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 |
| Test.java:4:19:32:2 | SSA param(param) | Test.java:9:7:9:11 | param |
| Nested.java:33:13:33:19 | SSA param(p3) | Nested.java:35:9:35:10 | p3 |
| Nested.java:37:14:37:25 | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 |
| Nested.java:40:14:40:25 | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 |
| Test.java:4:6:4:6 | SSA param(param) | Test.java:9:7:9:11 | param |
| Test.java:6:7:6:11 | SSA def(x) | Test.java:10:4:10:4 | x |
| Test.java:6:7:6:11 | SSA def(x) | Test.java:20:10:20:10 | x |
| Test.java:9:3:9:16 | SSA phi(x) | Test.java:20:10:20:10 | x |
| Test.java:9:3:9:16 | SSA phi(y) | Test.java:20:14:20:14 | y |
| Test.java:10:4:10:6 | SSA def(x) | Test.java:11:10:11:10 | x |
| Test.java:11:4:11:10 | SSA def(y) | Test.java:20:14:20:14 | y |
| Test.java:11:8:11:10 | SSA def(x) | Test.java:20:10:20:10 | x |
| Test.java:14:4:14:8 | SSA def(y) | Test.java:15:4:15:4 | y |
| Test.java:15:4:15:9 | SSA def(y) | Test.java:20:14:20:14 | y |
| Test.java:19:3:19:3 | SSA phi(x) | Test.java:20:10:20:10 | x |
| Test.java:19:3:19:3 | SSA phi(y) | Test.java:20:14:20:14 | y |
| Test.java:20:10:20:10 | SSA phi(param) | Test.java:21:8:21:12 | param |
| Test.java:20:10:20:10 | SSA phi(y) | Test.java:20:14:20:14 | y |
| Test.java:20:3:20:15 | SSA phi(param) | Test.java:21:8:21:12 | param |
| Test.java:20:3:20:15 | SSA phi(y) | Test.java:20:14:20:14 | y |
| Test.java:21:8:21:14 | SSA def(param) | Test.java:21:8:21:12 | param |
| Test.java:24:4:24:9 | SSA def(y) | Test.java:20:14:20:14 | y |
| Test.java:27:12:27:16 | SSA def(i) | Test.java:27:19:27:19 | i |
| Test.java:27:19:27:19 | SSA phi(i) | Test.java:27:19:27:19 | i |
| Test.java:27:19:27:19 | SSA phi(x) | Test.java:28:4:28:4 | x |
| Test.java:27:19:27:19 | SSA phi(x) | Test.java:31:10:31:10 | x |
| Test.java:27:19:27:22 | SSA phi(i) | Test.java:27:19:27:19 | i |
| Test.java:27:19:27:22 | SSA phi(x) | Test.java:28:4:28:4 | x |
| Test.java:27:19:27:22 | SSA phi(x) | Test.java:31:10:31:10 | x |
| Test.java:27:25:27:27 | SSA def(i) | Test.java:27:19:27:19 | i |
| Test.java:28:4:28:9 | SSA def(x) | Test.java:28:4:28:4 | x |
| Test.java:28:4:28:9 | SSA def(x) | Test.java:31:10:31:10 | x |
| TestInstanceOfPattern.java:3:24:9:2 | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj |
| TestInstanceOfPattern.java:3:7:3:10 | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj |
| TestInstanceOfPattern.java:4:29:4:29 | SSA def(s) | TestInstanceOfPattern.java:5:8:5:8 | s |
| TestInstanceOfPattern.java:10:25:16:2 | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj |
| TestInstanceOfPattern.java:10:7:10:11 | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj |
| TestInstanceOfPattern.java:11:31:11:31 | SSA def(s) | TestInstanceOfPattern.java:14:8:14:8 | s |
| TestInstanceOfPattern.java:17:25:23:2 | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj |
| TestInstanceOfPattern.java:17:7:17:11 | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj |
| TestInstanceOfPattern.java:18:29:18:29 | SSA def(s) | TestInstanceOfPattern.java:18:34:18:34 | s |
| TestInstanceOfPattern.java:24:25:30:2 | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s |
| TestInstanceOfPattern.java:24:25:30:2 | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s |
| TestInstanceOfPattern.java:24:25:30:2 | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj |
| TestInstanceOfPattern.java:24:7:24:11 | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s |
| TestInstanceOfPattern.java:24:7:24:11 | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s |
| TestInstanceOfPattern.java:24:7:24:11 | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj |

View File

@@ -1,75 +1,75 @@
| Fields.java:13:5:13:17 | x | Fields.java:15:5:15:10 | ...=... | SSA def(x) |
| Fields.java:13:15:13:16 | this.xs | Fields.java:12:19:21:3 | { ... } | SSA entry def(this.xs) |
| Fields.java:13:15:13:16 | this.xs | Fields.java:12:15:12:15 | Entry | SSA entry def(this.xs) |
| Fields.java:13:15:13:16 | this.xs | Fields.java:14:5:14:9 | upd(...) | SSA call def(this.xs) |
| Fields.java:13:15:13:16 | this.xs | Fields.java:16:5:16:17 | After if (...) | SSA phi(this.xs) |
| Fields.java:13:15:13:16 | this.xs | Fields.java:17:7:17:11 | upd(...) | SSA call def(this.xs) |
| Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | <Expr>; | SSA phi(this.xs) |
| Fields.java:13:15:13:16 | this.xs | Fields.java:19:5:19:19 | ...=... | SSA def(this.xs) |
| Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) |
| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | SSA phi(f) |
| Fields.java:24:5:24:28 | f | Fields.java:43:7:43:22 | ...=... | SSA def(f) |
| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | <Expr>; | SSA phi(f) |
| Fields.java:25:15:25:18 | f.xs | Fields.java:24:12:24:27 | f | SSA qualifier def(f.xs) |
| Fields.java:25:15:25:18 | f.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(f.xs) |
| Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(f.xs) |
| Fields.java:25:15:25:18 | f.xs | Fields.java:39:5:39:21 | ...=... | SSA def(f.xs) |
| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | SSA phi(f.xs) |
| Fields.java:25:15:25:18 | f.xs | Fields.java:43:7:43:22 | ...=... | SSA qualifier def(f.xs) |
| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | <Expr>; | SSA phi(f.xs) |
| Fields.java:26:5:26:17 | z | Fields.java:41:5:41:10 | ...=... | SSA def(z) |
| Fields.java:26:15:26:16 | this.xs | Fields.java:23:19:49:3 | { ... } | SSA entry def(this.xs) |
| Fields.java:26:15:26:16 | this.xs | Fields.java:23:15:23:15 | Entry | SSA entry def(this.xs) |
| Fields.java:26:15:26:16 | this.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(this.xs) |
| Fields.java:26:15:26:16 | this.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(this.xs) |
| Fields.java:26:15:26:16 | this.xs | Fields.java:36:5:36:19 | ...=... | SSA def(this.xs) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:23:19:49:3 | { ... } | SSA entry def(Fields.stat) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:23:15:23:15 | Entry | SSA entry def(Fields.stat) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:24:16:24:27 | new Fields(...) | SSA call def(Fields.stat) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:28:5:28:12 | f(...) | SSA call def(Fields.stat) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:32:5:32:9 | f(...) | SSA call def(Fields.stat) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:42:5:42:17 | After if (...) | SSA phi(Fields.stat) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:43:11:43:22 | new Fields(...) | SSA call def(Fields.stat) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:44:5:44:13 | <Expr>; | SSA phi(Fields.stat) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:45:5:45:16 | new Fields(...) | SSA call def(Fields.stat) |
| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).p1) |
| Nested.java:4:26:4:31 | p1 | Nested.java:4:34:10:3 | { ... } | SSA param(p1) |
| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) |
| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).p1) |
| Nested.java:4:26:4:31 | p1 | Nested.java:4:21:4:24 | Entry | SSA param(p1) |
| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).x1) |
| Nested.java:5:5:5:15 | x1 | Nested.java:5:9:5:14 | x1 | SSA def(x1) |
| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | { ... } | SSA capture def(getInt(..).obj) |
| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | { ... } | SSA capture def(getInt(..).obj) |
| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | Entry | SSA capture def(getInt(..).obj) |
| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | Entry | SSA capture def(getInt(..).obj) |
| Nested.java:15:5:15:30 | obj | Nested.java:15:12:15:29 | obj | SSA def(obj) |
| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).hash) |
| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:18:19:23 | Entry | SSA capture def(getInt(..).hash) |
| Nested.java:16:5:16:35 | hash | Nested.java:16:15:16:34 | hash | SSA def(hash) |
| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).x2) |
| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:18:19:23 | Entry | SSA capture def(getInt(..).x2) |
| Nested.java:17:5:17:16 | x2 | Nested.java:17:9:17:15 | x2 | SSA def(x2) |
| Nested.java:18:5:23:6 | h2 | Nested.java:18:15:23:5 | h2 | SSA def(h2) |
| Nested.java:20:9:20:40 | hnest | Nested.java:20:19:20:39 | hnest | SSA def(hnest) |
| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | { ... } | SSA capture def(getInt(..).obj2) |
| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | Entry | SSA capture def(getInt(..).obj2) |
| Nested.java:24:5:24:31 | obj2 | Nested.java:25:5:25:24 | After if (...) | SSA phi(obj2) |
| Nested.java:24:5:24:31 | obj2 | Nested.java:26:7:26:25 | ...=... | SSA def(obj2) |
| Nested.java:24:5:24:31 | obj2 | Nested.java:28:7:28:25 | ...=... | SSA def(obj2) |
| Nested.java:24:5:24:31 | obj2 | Nested.java:30:5:30:37 | var ...; | SSA phi(obj2) |
| Nested.java:33:21:33:26 | p3 | Nested.java:33:29:42:3 | { ... } | SSA param(p3) |
| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:20:37:25 | { ... } | SSA capture def(getInt(..).x3) |
| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:20:40:25 | { ... } | SSA capture def(getInt(..).x3) |
| Nested.java:33:21:33:26 | p3 | Nested.java:33:13:33:19 | Entry | SSA param(p3) |
| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:14:37:25 | Entry | SSA capture def(getInt(..).x3) |
| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:14:40:25 | Entry | SSA capture def(getInt(..).x3) |
| Nested.java:34:5:34:11 | x3 | Nested.java:36:7:36:12 | ...=... | SSA def(x3) |
| Nested.java:34:5:34:11 | x3 | Nested.java:39:7:39:12 | ...=... | SSA def(x3) |
| Test.java:4:8:4:16 | param | Test.java:4:19:32:2 | { ... } | SSA param(param) |
| Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | SSA phi(param) |
| Test.java:4:8:4:16 | param | Test.java:4:6:4:6 | Entry | SSA param(param) |
| Test.java:4:8:4:16 | param | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(param) |
| Test.java:4:8:4:16 | param | Test.java:21:8:21:14 | ...++ | SSA def(param) |
| Test.java:6:3:6:12 | x | Test.java:6:7:6:11 | x | SSA def(x) |
| Test.java:6:3:6:12 | x | Test.java:9:3:9:16 | After if (...) | SSA phi(x) |
| Test.java:6:3:6:12 | x | Test.java:10:4:10:6 | ...++ | SSA def(x) |
| Test.java:6:3:6:12 | x | Test.java:11:8:11:10 | ++... | SSA def(x) |
| Test.java:6:3:6:12 | x | Test.java:19:3:19:3 | ; | SSA phi(x) |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | SSA phi(x) |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | SSA phi(x) |
| Test.java:6:3:6:12 | x | Test.java:28:4:28:9 | ...+=... | SSA def(x) |
| Test.java:7:3:7:8 | y | Test.java:9:3:9:16 | After if (...) | SSA phi(y) |
| Test.java:7:3:7:8 | y | Test.java:11:4:11:10 | ...=... | SSA def(y) |
| Test.java:7:3:7:8 | y | Test.java:14:4:14:8 | ...=... | SSA def(y) |
| Test.java:7:3:7:8 | y | Test.java:15:4:15:9 | ...+=... | SSA def(y) |
| Test.java:7:3:7:8 | y | Test.java:19:3:19:3 | ; | SSA phi(y) |
| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | SSA phi(y) |
| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(y) |
| Test.java:7:3:7:8 | y | Test.java:24:4:24:9 | ...-=... | SSA def(y) |
| Test.java:27:8:27:16 | i | Test.java:27:12:27:16 | i | SSA def(i) |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | SSA phi(i) |
| Test.java:27:8:27:16 | i | Test.java:27:25:27:27 | ...++ | SSA def(i) |
| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA param(obj) |
| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:7:3:10 | Entry | SSA param(obj) |
| TestInstanceOfPattern.java:4:22:4:29 | s | TestInstanceOfPattern.java:4:29:4:29 | s | SSA def(s) |
| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA param(obj) |
| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:7:10:11 | Entry | SSA param(obj) |
| TestInstanceOfPattern.java:11:24:11:31 | s | TestInstanceOfPattern.java:11:31:11:31 | s | SSA def(s) |
| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA param(obj) |
| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:7:17:11 | Entry | SSA param(obj) |
| TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) |
| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA param(obj) |
| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) |
| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA param(obj) |
| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA entry def(this.s) |

View File

@@ -1,22 +1,22 @@
| Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | <Expr>; | Fields.java:14:5:14:9 | upd(...) |
| Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | <Expr>; | Fields.java:17:7:17:11 | upd(...) |
| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | <Expr>; | Fields.java:24:12:24:27 | f |
| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | <Expr>; | Fields.java:43:7:43:22 | ...=... |
| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | <Expr>; | Fields.java:39:5:39:21 | ...=... |
| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | <Expr>; | Fields.java:43:7:43:22 | ...=... |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:44:5:44:13 | <Expr>; | Fields.java:32:5:32:9 | f(...) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:44:5:44:13 | <Expr>; | Fields.java:43:11:43:22 | new Fields(...) |
| Nested.java:24:5:24:31 | obj2 | Nested.java:30:5:30:37 | var ...; | Nested.java:26:7:26:25 | ...=... |
| Nested.java:24:5:24:31 | obj2 | Nested.java:30:5:30:37 | var ...; | Nested.java:28:7:28:25 | ...=... |
| Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | Test.java:4:19:32:2 | { ... } |
| Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | Test.java:21:8:21:14 | ...++ |
| Test.java:6:3:6:12 | x | Test.java:19:3:19:3 | ; | Test.java:6:7:6:11 | x |
| Test.java:6:3:6:12 | x | Test.java:19:3:19:3 | ; | Test.java:11:8:11:10 | ++... |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | Test.java:19:3:19:3 | ; |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | Test.java:28:4:28:9 | ...+=... |
| Test.java:7:3:7:8 | y | Test.java:19:3:19:3 | ; | Test.java:11:4:11:10 | ...=... |
| Test.java:7:3:7:8 | y | Test.java:19:3:19:3 | ; | Test.java:15:4:15:9 | ...+=... |
| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | Test.java:19:3:19:3 | ; |
| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | Test.java:24:4:24:9 | ...-=... |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | Test.java:27:12:27:16 | i |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | Test.java:27:25:27:27 | ...++ |
| Fields.java:13:15:13:16 | this.xs | Fields.java:16:5:16:17 | After if (...) | Fields.java:14:5:14:9 | upd(...) |
| Fields.java:13:15:13:16 | this.xs | Fields.java:16:5:16:17 | After if (...) | Fields.java:17:7:17:11 | upd(...) |
| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | Fields.java:24:12:24:27 | f |
| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | Fields.java:43:7:43:22 | ...=... |
| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | Fields.java:39:5:39:21 | ...=... |
| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | Fields.java:43:7:43:22 | ...=... |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:42:5:42:17 | After if (...) | Fields.java:32:5:32:9 | f(...) |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:42:5:42:17 | After if (...) | Fields.java:43:11:43:22 | new Fields(...) |
| Nested.java:24:5:24:31 | obj2 | Nested.java:25:5:25:24 | After if (...) | Nested.java:26:7:26:25 | ...=... |
| Nested.java:24:5:24:31 | obj2 | Nested.java:25:5:25:24 | After if (...) | Nested.java:28:7:28:25 | ...=... |
| Test.java:4:8:4:16 | param | Test.java:20:3:20:15 | [LoopHeader] while (...) | Test.java:4:6:4:6 | Entry |
| Test.java:4:8:4:16 | param | Test.java:20:3:20:15 | [LoopHeader] while (...) | Test.java:21:8:21:14 | ...++ |
| Test.java:6:3:6:12 | x | Test.java:9:3:9:16 | After if (...) | Test.java:6:7:6:11 | x |
| Test.java:6:3:6:12 | x | Test.java:9:3:9:16 | After if (...) | Test.java:11:8:11:10 | ++... |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | Test.java:9:3:9:16 | After if (...) |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | Test.java:28:4:28:9 | ...+=... |
| Test.java:7:3:7:8 | y | Test.java:9:3:9:16 | After if (...) | Test.java:11:4:11:10 | ...=... |
| Test.java:7:3:7:8 | y | Test.java:9:3:9:16 | After if (...) | Test.java:15:4:15:9 | ...+=... |
| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | Test.java:9:3:9:16 | After if (...) |
| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | Test.java:24:4:24:9 | ...-=... |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | Test.java:27:12:27:16 | i |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | Test.java:27:25:27:27 | ...++ |

View File

@@ -1,7 +1,7 @@
| Fields.java:13:5:13:17 | x | Fields.java:15:5:15:10 | ...=... | SSA def(x) | Fields.java:16:9:16:9 | x |
| Fields.java:13:15:13:16 | this.xs | Fields.java:12:19:21:3 | { ... } | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs |
| Fields.java:13:15:13:16 | this.xs | Fields.java:12:15:12:15 | Entry | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs |
| Fields.java:13:15:13:16 | this.xs | Fields.java:14:5:14:9 | upd(...) | SSA call def(this.xs) | Fields.java:15:9:15:10 | xs |
| Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | <Expr>; | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs |
| Fields.java:13:15:13:16 | this.xs | Fields.java:16:5:16:17 | After if (...) | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs |
| Fields.java:13:15:13:16 | this.xs | Fields.java:19:5:19:19 | ...=... | SSA def(this.xs) | Fields.java:20:9:20:10 | xs |
| Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:25:15:25:15 | f |
| Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:29:9:29:9 | f |
@@ -10,17 +10,17 @@
| Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:37:9:37:9 | f |
| Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:39:5:39:5 | f |
| Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:40:9:40:9 | f |
| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | <Expr>; | SSA phi(f) | Fields.java:44:9:44:9 | f |
| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | <Expr>; | SSA phi(f) | Fields.java:46:9:46:9 | f |
| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | SSA phi(f) | Fields.java:44:9:44:9 | f |
| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | SSA phi(f) | Fields.java:46:9:46:9 | f |
| Fields.java:25:15:25:18 | f.xs | Fields.java:24:12:24:27 | f | SSA qualifier def(f.xs) | Fields.java:25:15:25:18 | f.xs |
| Fields.java:25:15:25:18 | f.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(f.xs) | Fields.java:29:9:29:12 | f.xs |
| Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(f.xs) | Fields.java:33:9:33:12 | f.xs |
| Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(f.xs) | Fields.java:37:9:37:12 | f.xs |
| Fields.java:25:15:25:18 | f.xs | Fields.java:39:5:39:21 | ...=... | SSA def(f.xs) | Fields.java:40:9:40:12 | f.xs |
| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | <Expr>; | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs |
| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | <Expr>; | SSA phi(f.xs) | Fields.java:46:9:46:12 | f.xs |
| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs |
| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | SSA phi(f.xs) | Fields.java:46:9:46:12 | f.xs |
| Fields.java:26:5:26:17 | z | Fields.java:41:5:41:10 | ...=... | SSA def(z) | Fields.java:42:9:42:9 | z |
| Fields.java:26:15:26:16 | this.xs | Fields.java:23:19:49:3 | { ... } | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs |
| Fields.java:26:15:26:16 | this.xs | Fields.java:23:15:23:15 | Entry | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs |
| Fields.java:26:15:26:16 | this.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(this.xs) | Fields.java:30:9:30:10 | xs |
| Fields.java:26:15:26:16 | this.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(this.xs) | Fields.java:34:9:34:10 | xs |
| Fields.java:26:15:26:16 | this.xs | Fields.java:36:5:36:19 | ...=... | SSA def(this.xs) | Fields.java:38:9:38:10 | xs |
@@ -30,42 +30,42 @@
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:28:5:28:12 | f(...) | SSA call def(Fields.stat) | Fields.java:31:9:31:12 | stat |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:32:5:32:9 | f(...) | SSA call def(Fields.stat) | Fields.java:35:9:35:12 | stat |
| Fields.java:27:15:27:18 | Fields.stat | Fields.java:45:5:45:16 | new Fields(...) | SSA call def(Fields.stat) | Fields.java:48:9:48:12 | stat |
| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 |
| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 |
| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | Nested.java:8:48:8:49 | x1 |
| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | Nested.java:8:53:8:54 | x1 |
| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | { ... } | SSA capture def(getInt(..).obj) | Nested.java:16:22:16:24 | obj |
| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | { ... } | SSA capture def(getInt(..).obj) | Nested.java:20:27:20:29 | obj |
| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash |
| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 |
| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 |
| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 |
| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).x1) | Nested.java:8:48:8:49 | x1 |
| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).x1) | Nested.java:8:53:8:54 | x1 |
| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | Entry | SSA capture def(getInt(..).obj) | Nested.java:16:22:16:24 | obj |
| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | Entry | SSA capture def(getInt(..).obj) | Nested.java:20:27:20:29 | obj |
| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:18:19:23 | Entry | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash |
| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:18:19:23 | Entry | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 |
| Nested.java:18:5:23:6 | h2 | Nested.java:18:15:23:5 | h2 | SSA def(h2) | Nested.java:25:9:25:10 | h2 |
| Nested.java:20:9:20:40 | hnest | Nested.java:20:19:20:39 | hnest | SSA def(hnest) | Nested.java:21:37:21:41 | hnest |
| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | { ... } | SSA capture def(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 |
| Nested.java:33:21:33:26 | p3 | Nested.java:33:29:42:3 | { ... } | SSA param(p3) | Nested.java:35:9:35:10 | p3 |
| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:20:37:25 | { ... } | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 |
| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:20:40:25 | { ... } | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 |
| Test.java:4:8:4:16 | param | Test.java:4:19:32:2 | { ... } | SSA param(param) | Test.java:9:7:9:11 | param |
| Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | SSA phi(param) | Test.java:21:8:21:12 | param |
| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | Entry | SSA capture def(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 |
| Nested.java:33:21:33:26 | p3 | Nested.java:33:13:33:19 | Entry | SSA param(p3) | Nested.java:35:9:35:10 | p3 |
| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:14:37:25 | Entry | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 |
| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:14:40:25 | Entry | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 |
| Test.java:4:8:4:16 | param | Test.java:4:6:4:6 | Entry | SSA param(param) | Test.java:9:7:9:11 | param |
| Test.java:4:8:4:16 | param | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(param) | Test.java:21:8:21:12 | param |
| Test.java:6:3:6:12 | x | Test.java:6:7:6:11 | x | SSA def(x) | Test.java:10:4:10:4 | x |
| Test.java:6:3:6:12 | x | Test.java:9:3:9:16 | After if (...) | SSA phi(x) | Test.java:20:10:20:10 | x |
| Test.java:6:3:6:12 | x | Test.java:10:4:10:6 | ...++ | SSA def(x) | Test.java:11:10:11:10 | x |
| Test.java:6:3:6:12 | x | Test.java:19:3:19:3 | ; | SSA phi(x) | Test.java:20:10:20:10 | x |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | SSA phi(x) | Test.java:28:4:28:4 | x |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | SSA phi(x) | Test.java:31:10:31:10 | x |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | SSA phi(x) | Test.java:28:4:28:4 | x |
| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | SSA phi(x) | Test.java:31:10:31:10 | x |
| Test.java:7:3:7:8 | y | Test.java:14:4:14:8 | ...=... | SSA def(y) | Test.java:15:4:15:4 | y |
| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | SSA phi(y) | Test.java:20:14:20:14 | y |
| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | SSA phi(y) | Test.java:24:4:24:4 | y |
| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | SSA phi(y) | Test.java:31:14:31:14 | y |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:27:19:27:19 | i |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:27:25:27:25 | i |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:28:9:28:9 | i |
| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj |
| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(y) | Test.java:20:14:20:14 | y |
| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(y) | Test.java:24:4:24:4 | y |
| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(y) | Test.java:31:14:31:14 | y |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | SSA phi(i) | Test.java:27:19:27:19 | i |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | SSA phi(i) | Test.java:27:25:27:25 | i |
| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | SSA phi(i) | Test.java:28:9:28:9 | i |
| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:7:3:10 | Entry | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj |
| TestInstanceOfPattern.java:4:22:4:29 | s | TestInstanceOfPattern.java:4:29:4:29 | s | SSA def(s) | TestInstanceOfPattern.java:5:8:5:8 | s |
| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj |
| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:7:10:11 | Entry | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj |
| TestInstanceOfPattern.java:11:24:11:31 | s | TestInstanceOfPattern.java:11:31:11:31 | s | SSA def(s) | TestInstanceOfPattern.java:14:8:14:8 | s |
| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj |
| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:7:17:11 | Entry | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj |
| TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | TestInstanceOfPattern.java:18:34:18:34 | s |
| TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | TestInstanceOfPattern.java:19:8:19:8 | s |
| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj |
| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s |
| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s |
| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:28:8:28:8 | s |
| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj |
| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s |
| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s |
| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA entry def(this.s) | TestInstanceOfPattern.java:28:8:28:8 | s |

View File

@@ -1,4 +0,0 @@
import java
from ConditionNode c
select c, c.getAFalseSuccessor()

View File

@@ -1,7 +1,8 @@
| CloseReaderTest.java:8:14:8:28 | Exceptional Exit | CloseReaderTest.java:8:14:8:28 | Exit |
| CloseReaderTest.java:8:14:8:28 | Entry | CloseReaderTest.java:8:14:8:28 | { ... } |
| CloseReaderTest.java:8:14:8:28 | Normal Exit | CloseReaderTest.java:8:14:8:28 | Exit |
| CloseReaderTest.java:8:14:8:28 | super(...) | CloseReaderTest.java:8:14:8:28 | Normal Exit |
| CloseReaderTest.java:8:14:8:28 | { ... } | CloseReaderTest.java:8:14:8:28 | super(...) |
| CloseReaderTest.java:9:23:9:34 | Entry | CloseReaderTest.java:10:2:24:2 | { ... } |
| CloseReaderTest.java:9:23:9:34 | Exceptional Exit | CloseReaderTest.java:9:23:9:34 | Exit |
| CloseReaderTest.java:9:23:9:34 | Normal Exit | CloseReaderTest.java:9:23:9:34 | Exit |
| CloseReaderTest.java:10:2:24:2 | { ... } | CloseReaderTest.java:12:3:13:42 | <Expr>; |
@@ -27,6 +28,7 @@
| CloseReaderTest.java:19:11:19:15 | stdin | CloseReaderTest.java:19:11:19:26 | readLine(...) |
| CloseReaderTest.java:19:11:19:26 | readLine(...) | CloseReaderTest.java:19:4:19:27 | return ... |
| CloseReaderTest.java:19:11:19:26 | readLine(...) | CloseReaderTest.java:20:5:20:26 | catch (...) |
| CloseReaderTest.java:20:5:20:26 | catch (...) | CloseReaderTest.java:9:23:9:34 | Exceptional Exit |
| CloseReaderTest.java:20:5:20:26 | catch (...) | CloseReaderTest.java:20:24:20:25 | ex |
| CloseReaderTest.java:20:24:20:25 | ex | CloseReaderTest.java:21:3:23:3 | { ... } |
| CloseReaderTest.java:21:3:23:3 | { ... } | CloseReaderTest.java:22:11:22:14 | null |

View File

@@ -1,8 +1,9 @@
import java
import utils.test.AstCfg
from ControlFlowNode n, ControlFlowNode succ
where
succ = n.getASuccessor() and
succ = getAnAstSuccessor(n) and
n.getLocation().getFile().getExtension() = "java" and
not n.getLocation().getFile().getStem() = "PopulateRuntimeException"
select n, succ

View File

@@ -1 +0,0 @@
| LoopVarReadTest.java:7:19:7:24 | ... < ... | LoopVarReadTest.java:12:3:12:13 | var ...; |

View File

@@ -1,4 +0,0 @@
import java
from ConditionNode c
select c, c.getAFalseSuccessor()

View File

@@ -1,8 +1,8 @@
| LoopVarReadTest.java:3:14:3:28 | Exceptional Exit | LoopVarReadTest.java:3:14:3:28 | Exit |
| LoopVarReadTest.java:3:14:3:28 | Entry | LoopVarReadTest.java:3:14:3:28 | { ... } |
| LoopVarReadTest.java:3:14:3:28 | Normal Exit | LoopVarReadTest.java:3:14:3:28 | Exit |
| LoopVarReadTest.java:3:14:3:28 | super(...) | LoopVarReadTest.java:3:14:3:28 | Normal Exit |
| LoopVarReadTest.java:3:14:3:28 | { ... } | LoopVarReadTest.java:3:14:3:28 | super(...) |
| LoopVarReadTest.java:4:21:4:28 | Exceptional Exit | LoopVarReadTest.java:4:21:4:28 | Exit |
| LoopVarReadTest.java:4:21:4:28 | Entry | LoopVarReadTest.java:5:2:15:2 | { ... } |
| LoopVarReadTest.java:4:21:4:28 | Normal Exit | LoopVarReadTest.java:4:21:4:28 | Exit |
| LoopVarReadTest.java:5:2:15:2 | { ... } | LoopVarReadTest.java:6:3:6:12 | var ...; |
| LoopVarReadTest.java:6:3:6:12 | var ...; | LoopVarReadTest.java:6:11:6:11 | 2 |

View File

@@ -1,8 +1,9 @@
import java
import utils.test.AstCfg
from ControlFlowNode n, ControlFlowNode succ
where
succ = n.getASuccessor() and
succ = getAnAstSuccessor(n) and
n.getLocation().getFile().getExtension() = "java" and
not n.getLocation().getFile().getStem() = "PopulateRuntimeException"
select n, succ

View File

@@ -1,2 +0,0 @@
| SaveFileTest.java:18:7:18:26 | startsWith(...) | SaveFileTest.java:24:3:24:33 | var ...; |
| SaveFileTest.java:34:11:34:54 | ... != ... | SaveFileTest.java:39:4:40:41 | <Expr>; |

View File

@@ -1,4 +0,0 @@
import java
from ConditionNode c
select c, c.getAFalseSuccessor()

View File

@@ -1,7 +1,8 @@
| SaveFileTest.java:11:14:11:25 | Exceptional Exit | SaveFileTest.java:11:14:11:25 | Exit |
| SaveFileTest.java:11:14:11:25 | Entry | SaveFileTest.java:11:14:11:25 | { ... } |
| SaveFileTest.java:11:14:11:25 | Normal Exit | SaveFileTest.java:11:14:11:25 | Exit |
| SaveFileTest.java:11:14:11:25 | super(...) | SaveFileTest.java:11:14:11:25 | Normal Exit |
| SaveFileTest.java:11:14:11:25 | { ... } | SaveFileTest.java:11:14:11:25 | super(...) |
| SaveFileTest.java:12:14:12:21 | Entry | SaveFileTest.java:15:2:55:2 | { ... } |
| SaveFileTest.java:12:14:12:21 | Exceptional Exit | SaveFileTest.java:12:14:12:21 | Exit |
| SaveFileTest.java:12:14:12:21 | Normal Exit | SaveFileTest.java:12:14:12:21 | Exit |
| SaveFileTest.java:15:2:55:2 | { ... } | SaveFileTest.java:17:3:17:25 | var ...; |
@@ -14,8 +15,9 @@
| SaveFileTest.java:18:7:18:26 | startsWith(...) | SaveFileTest.java:24:3:24:33 | var ...; |
| SaveFileTest.java:18:23:18:25 | "/" | SaveFileTest.java:18:7:18:26 | startsWith(...) |
| SaveFileTest.java:19:3:21:3 | { ... } | SaveFileTest.java:20:4:20:32 | <Expr>; |
| SaveFileTest.java:20:4:20:11 | savePath | SaveFileTest.java:20:15:20:18 | path |
| SaveFileTest.java:20:4:20:31 | ...=... | SaveFileTest.java:24:3:24:33 | var ...; |
| SaveFileTest.java:20:4:20:32 | <Expr>; | SaveFileTest.java:20:15:20:18 | path |
| SaveFileTest.java:20:4:20:32 | <Expr>; | SaveFileTest.java:20:4:20:11 | savePath |
| SaveFileTest.java:20:15:20:18 | path | SaveFileTest.java:20:30:20:30 | 1 |
| SaveFileTest.java:20:15:20:31 | substring(...) | SaveFileTest.java:20:4:20:31 | ...=... |
| SaveFileTest.java:20:30:20:30 | 1 | SaveFileTest.java:20:15:20:31 | substring(...) |
@@ -44,20 +46,20 @@
| SaveFileTest.java:30:22:30:25 | null | SaveFileTest.java:30:16:30:25 | bos |
| SaveFileTest.java:31:3:53:3 | try ... | SaveFileTest.java:32:3:41:3 | { ... } |
| SaveFileTest.java:32:3:41:3 | { ... } | SaveFileTest.java:33:4:33:40 | <Expr>; |
| SaveFileTest.java:33:4:33:6 | bos | SaveFileTest.java:33:31:33:38 | saveFile |
| SaveFileTest.java:33:4:33:39 | ...=... | SaveFileTest.java:34:4:34:55 | while (...) |
| SaveFileTest.java:33:4:33:40 | <Expr>; | SaveFileTest.java:33:31:33:38 | saveFile |
| SaveFileTest.java:33:4:33:40 | <Expr>; | SaveFileTest.java:33:4:33:6 | bos |
| SaveFileTest.java:33:10:33:39 | new FileOutputStream(...) | SaveFileTest.java:33:4:33:39 | ...=... |
| SaveFileTest.java:33:10:33:39 | new FileOutputStream(...) | SaveFileTest.java:41:5:41:23 | catch (...) |
| SaveFileTest.java:33:10:33:39 | new FileOutputStream(...) | SaveFileTest.java:45:3:53:3 | { ... } |
| SaveFileTest.java:33:31:33:38 | saveFile | SaveFileTest.java:33:10:33:39 | new FileOutputStream(...) |
| SaveFileTest.java:34:4:34:55 | while (...) | SaveFileTest.java:34:24:34:25 | is |
| SaveFileTest.java:34:4:34:55 | while (...) | SaveFileTest.java:34:12:34:20 | bytesRead |
| SaveFileTest.java:34:11:34:54 | ... != ... | SaveFileTest.java:35:4:37:4 | { ... } |
| SaveFileTest.java:34:11:34:54 | ... != ... | SaveFileTest.java:39:4:40:41 | <Expr>; |
| SaveFileTest.java:34:12:34:20 | bytesRead | SaveFileTest.java:34:24:34:25 | is |
| SaveFileTest.java:34:12:34:47 | ...=... | SaveFileTest.java:34:54:34:54 | 1 |
| SaveFileTest.java:34:24:34:25 | is | SaveFileTest.java:34:32:34:37 | buffer |
| SaveFileTest.java:34:24:34:47 | read(...) | SaveFileTest.java:34:12:34:47 | ...=... |
| SaveFileTest.java:34:24:34:47 | read(...) | SaveFileTest.java:41:5:41:23 | catch (...) |
| SaveFileTest.java:34:24:34:47 | read(...) | SaveFileTest.java:45:3:53:3 | { ... } |
| SaveFileTest.java:34:32:34:37 | buffer | SaveFileTest.java:34:40:34:40 | 0 |
| SaveFileTest.java:34:40:34:40 | 0 | SaveFileTest.java:34:43:34:46 | 8192 |
| SaveFileTest.java:34:43:34:46 | 8192 | SaveFileTest.java:34:24:34:47 | read(...) |
@@ -65,9 +67,8 @@
| SaveFileTest.java:34:54:34:54 | 1 | SaveFileTest.java:34:53:34:54 | -... |
| SaveFileTest.java:35:4:37:4 | { ... } | SaveFileTest.java:36:5:36:36 | <Expr>; |
| SaveFileTest.java:36:5:36:7 | bos | SaveFileTest.java:36:15:36:20 | buffer |
| SaveFileTest.java:36:5:36:35 | write(...) | SaveFileTest.java:34:24:34:25 | is |
| SaveFileTest.java:36:5:36:35 | write(...) | SaveFileTest.java:34:12:34:20 | bytesRead |
| SaveFileTest.java:36:5:36:35 | write(...) | SaveFileTest.java:41:5:41:23 | catch (...) |
| SaveFileTest.java:36:5:36:35 | write(...) | SaveFileTest.java:45:3:53:3 | { ... } |
| SaveFileTest.java:36:5:36:36 | <Expr>; | SaveFileTest.java:36:5:36:7 | bos |
| SaveFileTest.java:36:15:36:20 | buffer | SaveFileTest.java:36:23:36:23 | 0 |
| SaveFileTest.java:36:23:36:23 | 0 | SaveFileTest.java:36:26:36:34 | bytesRead |
@@ -82,7 +83,6 @@
| SaveFileTest.java:40:8:40:15 | saveFile | SaveFileTest.java:40:8:40:33 | getAbsolutePath(...) |
| SaveFileTest.java:40:8:40:33 | getAbsolutePath(...) | SaveFileTest.java:39:23:40:33 | ... + ... |
| SaveFileTest.java:40:8:40:33 | getAbsolutePath(...) | SaveFileTest.java:41:5:41:23 | catch (...) |
| SaveFileTest.java:40:8:40:33 | getAbsolutePath(...) | SaveFileTest.java:45:3:53:3 | { ... } |
| SaveFileTest.java:40:37:40:39 | "]" | SaveFileTest.java:39:23:40:39 | ... + ... |
| SaveFileTest.java:41:5:41:23 | catch (...) | SaveFileTest.java:41:22:41:22 | e |
| SaveFileTest.java:41:22:41:22 | e | SaveFileTest.java:42:3:44:3 | { ... } |

View File

@@ -1,8 +1,9 @@
import java
import utils.test.AstCfg
from ControlFlowNode n, ControlFlowNode succ
where
succ = n.getASuccessor() and
succ = getAnAstSuccessor(n) and
n.getLocation().getFile().getExtension() = "java" and
not n.getLocation().getFile().getStem() = "PopulateRuntimeException"
select n, succ

View File

@@ -1,6 +0,0 @@
| SchackTest.java:8:9:8:12 | ... == ... | SchackTest.java:10:5:10:13 | if (...) |
| SchackTest.java:10:9:10:12 | ... == ... | SchackTest.java:12:14:15:4 | { ... } |
| SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:16:4:16:41 | <Expr>; |
| SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:17:5:17:17 | catch (...) |
| SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:21:13:23:3 | { ... } |
| SchackTest.java:27:7:27:24 | ... > ... | SchackTest.java:29:10:29:22 | random(...) |

View File

@@ -1,4 +0,0 @@
import java
from ConditionNode c
select c, c.getAFalseSuccessor()

View File

@@ -1,15 +1,16 @@
| SchackTest.java:1:14:1:23 | Exceptional Exit | SchackTest.java:1:14:1:23 | Exit |
| SchackTest.java:1:14:1:23 | Entry | SchackTest.java:1:14:1:23 | { ... } |
| SchackTest.java:1:14:1:23 | Normal Exit | SchackTest.java:1:14:1:23 | Exit |
| SchackTest.java:1:14:1:23 | super(...) | SchackTest.java:1:14:1:23 | Normal Exit |
| SchackTest.java:1:14:1:23 | { ... } | SchackTest.java:1:14:1:23 | super(...) |
| SchackTest.java:2:8:2:10 | Exceptional Exit | SchackTest.java:2:8:2:10 | Exit |
| SchackTest.java:2:8:2:10 | Entry | SchackTest.java:2:8:2:10 | { ... } |
| SchackTest.java:2:8:2:10 | Normal Exit | SchackTest.java:2:8:2:10 | Exit |
| SchackTest.java:2:8:2:10 | super(...) | SchackTest.java:2:8:2:10 | Normal Exit |
| SchackTest.java:2:8:2:10 | { ... } | SchackTest.java:2:8:2:10 | super(...) |
| SchackTest.java:3:8:3:10 | Exceptional Exit | SchackTest.java:3:8:3:10 | Exit |
| SchackTest.java:3:8:3:10 | Entry | SchackTest.java:3:8:3:10 | { ... } |
| SchackTest.java:3:8:3:10 | Normal Exit | SchackTest.java:3:8:3:10 | Exit |
| SchackTest.java:3:8:3:10 | super(...) | SchackTest.java:3:8:3:10 | Normal Exit |
| SchackTest.java:3:8:3:10 | { ... } | SchackTest.java:3:8:3:10 | super(...) |
| SchackTest.java:5:7:5:9 | Entry | SchackTest.java:5:18:24:2 | { ... } |
| SchackTest.java:5:7:5:9 | Exceptional Exit | SchackTest.java:5:7:5:9 | Exit |
| SchackTest.java:5:7:5:9 | Normal Exit | SchackTest.java:5:7:5:9 | Exit |
| SchackTest.java:5:18:24:2 | { ... } | SchackTest.java:6:3:23:3 | try ... |
@@ -36,7 +37,6 @@
| SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:14:6:14:42 | <Expr>; |
| SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:16:4:16:41 | <Expr>; |
| SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:17:5:17:17 | catch (...) |
| SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:19:5:19:17 | catch (...) |
| SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:21:13:23:3 | { ... } |
| SchackTest.java:14:6:14:15 | System.out | SchackTest.java:14:25:14:40 | "true successor" |
| SchackTest.java:14:6:14:41 | println(...) | SchackTest.java:16:4:16:41 | <Expr>; |
@@ -45,10 +45,12 @@
| SchackTest.java:14:6:14:42 | <Expr>; | SchackTest.java:14:6:14:15 | System.out |
| SchackTest.java:14:25:14:40 | "true successor" | SchackTest.java:14:6:14:41 | println(...) |
| SchackTest.java:16:4:16:13 | System.out | SchackTest.java:16:23:16:39 | "false successor" |
| SchackTest.java:16:4:16:40 | println(...) | SchackTest.java:17:5:17:17 | catch (...) |
| SchackTest.java:16:4:16:40 | println(...) | SchackTest.java:21:13:23:3 | { ... } |
| SchackTest.java:16:4:16:41 | <Expr>; | SchackTest.java:16:4:16:13 | System.out |
| SchackTest.java:16:23:16:39 | "false successor" | SchackTest.java:16:4:16:40 | println(...) |
| SchackTest.java:17:5:17:17 | catch (...) | SchackTest.java:17:16:17:16 | e |
| SchackTest.java:17:5:17:17 | catch (...) | SchackTest.java:19:5:19:17 | catch (...) |
| SchackTest.java:17:16:17:16 | e | SchackTest.java:17:19:19:3 | { ... } |
| SchackTest.java:17:19:19:3 | { ... } | SchackTest.java:18:4:18:41 | <Expr>; |
| SchackTest.java:18:4:18:13 | System.out | SchackTest.java:18:23:18:39 | "false successor" |
@@ -56,6 +58,7 @@
| SchackTest.java:18:4:18:41 | <Expr>; | SchackTest.java:18:4:18:13 | System.out |
| SchackTest.java:18:23:18:39 | "false successor" | SchackTest.java:18:4:18:40 | println(...) |
| SchackTest.java:19:5:19:17 | catch (...) | SchackTest.java:19:16:19:16 | e |
| SchackTest.java:19:5:19:17 | catch (...) | SchackTest.java:21:13:23:3 | { ... } |
| SchackTest.java:19:16:19:16 | e | SchackTest.java:19:19:21:3 | { ... } |
| SchackTest.java:19:19:21:3 | { ... } | SchackTest.java:20:4:20:74 | <Expr>; |
| SchackTest.java:20:4:20:13 | System.out | SchackTest.java:20:23:20:72 | "successor (but neither true nor false successor)" |
@@ -68,6 +71,7 @@
| SchackTest.java:22:4:22:40 | println(...) | SchackTest.java:5:7:5:9 | Normal Exit |
| SchackTest.java:22:4:22:41 | <Expr>; | SchackTest.java:22:4:22:13 | System.out |
| SchackTest.java:22:23:22:39 | "false successor" | SchackTest.java:22:4:22:40 | println(...) |
| SchackTest.java:26:18:26:20 | Entry | SchackTest.java:26:35:30:2 | { ... } |
| SchackTest.java:26:18:26:20 | Exceptional Exit | SchackTest.java:26:18:26:20 | Exit |
| SchackTest.java:26:18:26:20 | Normal Exit | SchackTest.java:26:18:26:20 | Exit |
| SchackTest.java:26:35:30:2 | { ... } | SchackTest.java:27:3:27:25 | if (...) |

View File

@@ -1,8 +1,9 @@
import java
import utils.test.AstCfg
from ControlFlowNode n, ControlFlowNode succ
where
succ = n.getASuccessor() and
succ = getAnAstSuccessor(n) and
n.getLocation().getFile().getExtension() = "java" and
not n.getLocation().getFile().getStem() = "PopulateRuntimeException"
select n, succ

View File

@@ -1,5 +0,0 @@
| TestBreak.java:12:9:12:14 | ... == ... | TestBreak.java:16:5:27:5 | { ... } |
| TestBreak.java:19:11:19:16 | ... == ... | TestBreak.java:23:7:25:7 | { ... } |
| TestBreak.java:32:8:32:13 | ... == ... | TestBreak.java:36:4:46:4 | { ... } |
| TestBreak.java:39:10:39:15 | ... == ... | TestBreak.java:43:6:43:15 | <Expr>; |
| TestBreak.java:44:14:44:19 | ... == ... | TestBreak.java:45:5:45:11 | <Expr>; |

View File

@@ -1,4 +0,0 @@
import java
from ConditionNode c
select c, c.getAFalseSuccessor()

View File

@@ -1,8 +1,8 @@
| TestBreak.java:3:14:3:22 | Exceptional Exit | TestBreak.java:3:14:3:22 | Exit |
| TestBreak.java:3:14:3:22 | Entry | TestBreak.java:3:14:3:22 | { ... } |
| TestBreak.java:3:14:3:22 | Normal Exit | TestBreak.java:3:14:3:22 | Exit |
| TestBreak.java:3:14:3:22 | super(...) | TestBreak.java:3:14:3:22 | Normal Exit |
| TestBreak.java:3:14:3:22 | { ... } | TestBreak.java:3:14:3:22 | super(...) |
| TestBreak.java:4:14:4:14 | Exceptional Exit | TestBreak.java:4:14:4:14 | Exit |
| TestBreak.java:4:14:4:14 | Entry | TestBreak.java:5:2:85:2 | { ... } |
| TestBreak.java:4:14:4:14 | Normal Exit | TestBreak.java:4:14:4:14 | Exit |
| TestBreak.java:5:2:85:2 | { ... } | TestBreak.java:7:3:8:11 | <Label>: ... |
| TestBreak.java:7:3:8:11 | <Label>: ... | TestBreak.java:8:4:8:11 | for (...;...;...) |
@@ -11,8 +11,9 @@
| TestBreak.java:10:5:10:14 | var ...; | TestBreak.java:10:13:10:13 | 1 |
| TestBreak.java:10:9:10:13 | x | TestBreak.java:11:5:11:14 | <Expr>; |
| TestBreak.java:10:13:10:13 | 1 | TestBreak.java:10:9:10:13 | x |
| TestBreak.java:11:5:11:5 | x | TestBreak.java:11:9:11:9 | x |
| TestBreak.java:11:5:11:13 | ...=... | TestBreak.java:12:5:12:15 | if (...) |
| TestBreak.java:11:5:11:14 | <Expr>; | TestBreak.java:11:9:11:9 | x |
| TestBreak.java:11:5:11:14 | <Expr>; | TestBreak.java:11:5:11:5 | x |
| TestBreak.java:11:9:11:9 | x | TestBreak.java:11:13:11:13 | 1 |
| TestBreak.java:11:9:11:13 | ... + ... | TestBreak.java:11:5:11:13 | ...=... |
| TestBreak.java:11:13:11:13 | 1 | TestBreak.java:11:9:11:13 | ... + ... |
@@ -62,8 +63,9 @@
| TestBreak.java:39:15:39:15 | 2 | TestBreak.java:39:10:39:15 | ... == ... |
| TestBreak.java:40:6:42:6 | { ... } | TestBreak.java:41:7:41:12 | break |
| TestBreak.java:41:7:41:12 | break | TestBreak.java:45:5:45:11 | <Expr>; |
| TestBreak.java:43:6:43:6 | y | TestBreak.java:43:10:43:10 | y |
| TestBreak.java:43:6:43:14 | ...=... | TestBreak.java:44:14:44:14 | y |
| TestBreak.java:43:6:43:15 | <Expr>; | TestBreak.java:43:10:43:10 | y |
| TestBreak.java:43:6:43:15 | <Expr>; | TestBreak.java:43:6:43:6 | y |
| TestBreak.java:43:10:43:10 | y | TestBreak.java:43:14:43:14 | 2 |
| TestBreak.java:43:10:43:14 | ... + ... | TestBreak.java:43:6:43:14 | ...=... |
| TestBreak.java:43:14:43:14 | 2 | TestBreak.java:43:10:43:14 | ... + ... |
@@ -71,89 +73,111 @@
| TestBreak.java:44:14:44:19 | ... == ... | TestBreak.java:38:5:44:5 | { ... } |
| TestBreak.java:44:14:44:19 | ... == ... | TestBreak.java:45:5:45:11 | <Expr>; |
| TestBreak.java:44:19:44:19 | 1 | TestBreak.java:44:14:44:19 | ... == ... |
| TestBreak.java:45:5:45:5 | y | TestBreak.java:45:9:45:10 | 12 |
| TestBreak.java:45:5:45:10 | ...=... | TestBreak.java:30:10:30:13 | true |
| TestBreak.java:45:5:45:11 | <Expr>; | TestBreak.java:45:9:45:10 | 12 |
| TestBreak.java:45:5:45:11 | <Expr>; | TestBreak.java:45:5:45:5 | y |
| TestBreak.java:45:9:45:10 | 12 | TestBreak.java:45:5:45:10 | ...=... |
| TestBreak.java:48:3:48:3 | y | TestBreak.java:48:7:48:8 | 13 |
| TestBreak.java:48:3:48:8 | ...=... | TestBreak.java:51:3:51:12 | var ...; |
| TestBreak.java:48:3:48:9 | <Expr>; | TestBreak.java:48:7:48:8 | 13 |
| TestBreak.java:48:3:48:9 | <Expr>; | TestBreak.java:48:3:48:3 | y |
| TestBreak.java:48:7:48:8 | 13 | TestBreak.java:48:3:48:8 | ...=... |
| TestBreak.java:51:3:51:12 | var ...; | TestBreak.java:51:10:51:11 | 12 |
| TestBreak.java:51:7:51:11 | x | TestBreak.java:52:3:52:12 | switch (...) |
| TestBreak.java:51:10:51:11 | 12 | TestBreak.java:51:7:51:11 | x |
| TestBreak.java:52:3:52:12 | switch (...) | TestBreak.java:52:11:52:11 | x |
| TestBreak.java:52:11:52:11 | x | TestBreak.java:54:3:54:9 | case ... |
| TestBreak.java:52:11:52:11 | x | TestBreak.java:57:3:57:9 | case ... |
| TestBreak.java:52:11:52:11 | x | TestBreak.java:61:3:61:9 | case ... |
| TestBreak.java:52:11:52:11 | x | TestBreak.java:62:3:62:9 | case ... |
| TestBreak.java:52:11:52:11 | x | TestBreak.java:66:3:66:9 | case ... |
| TestBreak.java:52:11:52:11 | x | TestBreak.java:67:3:67:9 | case ... |
| TestBreak.java:52:11:52:11 | x | TestBreak.java:70:3:70:10 | default |
| TestBreak.java:54:3:54:9 | case ... | TestBreak.java:55:4:55:13 | <Expr>; |
| TestBreak.java:54:3:54:9 | case ... | TestBreak.java:54:8:54:8 | 1 |
| TestBreak.java:54:3:54:9 | case ... | TestBreak.java:57:3:57:9 | case ... |
| TestBreak.java:54:8:54:8 | 1 | TestBreak.java:55:4:55:13 | <Expr>; |
| TestBreak.java:55:4:55:4 | x | TestBreak.java:55:8:55:8 | x |
| TestBreak.java:55:4:55:12 | ...=... | TestBreak.java:56:4:56:13 | <Expr>; |
| TestBreak.java:55:4:55:13 | <Expr>; | TestBreak.java:55:8:55:8 | x |
| TestBreak.java:55:4:55:13 | <Expr>; | TestBreak.java:55:4:55:4 | x |
| TestBreak.java:55:8:55:8 | x | TestBreak.java:55:12:55:12 | 1 |
| TestBreak.java:55:8:55:12 | ... + ... | TestBreak.java:55:4:55:12 | ...=... |
| TestBreak.java:55:12:55:12 | 1 | TestBreak.java:55:8:55:12 | ... + ... |
| TestBreak.java:56:4:56:12 | ...=... | TestBreak.java:57:3:57:9 | case ... |
| TestBreak.java:56:4:56:13 | <Expr>; | TestBreak.java:56:8:56:8 | y |
| TestBreak.java:56:4:56:4 | y | TestBreak.java:56:8:56:8 | y |
| TestBreak.java:56:4:56:12 | ...=... | TestBreak.java:58:4:58:13 | <Expr>; |
| TestBreak.java:56:4:56:13 | <Expr>; | TestBreak.java:56:4:56:4 | y |
| TestBreak.java:56:8:56:8 | y | TestBreak.java:56:12:56:12 | 1 |
| TestBreak.java:56:8:56:12 | ... + ... | TestBreak.java:56:4:56:12 | ...=... |
| TestBreak.java:56:12:56:12 | 1 | TestBreak.java:56:8:56:12 | ... + ... |
| TestBreak.java:57:3:57:9 | case ... | TestBreak.java:58:4:58:13 | <Expr>; |
| TestBreak.java:57:3:57:9 | case ... | TestBreak.java:57:8:57:8 | 2 |
| TestBreak.java:57:3:57:9 | case ... | TestBreak.java:61:3:61:9 | case ... |
| TestBreak.java:57:8:57:8 | 2 | TestBreak.java:58:4:58:13 | <Expr>; |
| TestBreak.java:58:4:58:4 | x | TestBreak.java:58:8:58:8 | x |
| TestBreak.java:58:4:58:12 | ...=... | TestBreak.java:59:4:59:13 | <Expr>; |
| TestBreak.java:58:4:58:13 | <Expr>; | TestBreak.java:58:8:58:8 | x |
| TestBreak.java:58:4:58:13 | <Expr>; | TestBreak.java:58:4:58:4 | x |
| TestBreak.java:58:8:58:8 | x | TestBreak.java:58:12:58:12 | 2 |
| TestBreak.java:58:8:58:12 | ... + ... | TestBreak.java:58:4:58:12 | ...=... |
| TestBreak.java:58:12:58:12 | 2 | TestBreak.java:58:8:58:12 | ... + ... |
| TestBreak.java:59:4:59:4 | y | TestBreak.java:59:8:59:8 | y |
| TestBreak.java:59:4:59:12 | ...=... | TestBreak.java:60:4:60:9 | break |
| TestBreak.java:59:4:59:13 | <Expr>; | TestBreak.java:59:8:59:8 | y |
| TestBreak.java:59:4:59:13 | <Expr>; | TestBreak.java:59:4:59:4 | y |
| TestBreak.java:59:8:59:8 | y | TestBreak.java:59:12:59:12 | 2 |
| TestBreak.java:59:8:59:12 | ... + ... | TestBreak.java:59:4:59:12 | ...=... |
| TestBreak.java:59:12:59:12 | 2 | TestBreak.java:59:8:59:12 | ... + ... |
| TestBreak.java:60:4:60:9 | break | TestBreak.java:76:3:76:11 | switch (...) |
| TestBreak.java:61:3:61:9 | case ... | TestBreak.java:61:8:61:8 | 3 |
| TestBreak.java:61:3:61:9 | case ... | TestBreak.java:62:3:62:9 | case ... |
| TestBreak.java:62:3:62:9 | case ... | TestBreak.java:63:4:63:13 | <Expr>; |
| TestBreak.java:61:8:61:8 | 3 | TestBreak.java:63:4:63:13 | <Expr>; |
| TestBreak.java:62:3:62:9 | case ... | TestBreak.java:62:8:62:8 | 4 |
| TestBreak.java:62:3:62:9 | case ... | TestBreak.java:66:3:66:9 | case ... |
| TestBreak.java:62:8:62:8 | 4 | TestBreak.java:63:4:63:13 | <Expr>; |
| TestBreak.java:63:4:63:4 | x | TestBreak.java:63:8:63:8 | x |
| TestBreak.java:63:4:63:12 | ...=... | TestBreak.java:64:4:64:13 | <Expr>; |
| TestBreak.java:63:4:63:13 | <Expr>; | TestBreak.java:63:8:63:8 | x |
| TestBreak.java:63:4:63:13 | <Expr>; | TestBreak.java:63:4:63:4 | x |
| TestBreak.java:63:8:63:8 | x | TestBreak.java:63:12:63:12 | 3 |
| TestBreak.java:63:8:63:12 | ... + ... | TestBreak.java:63:4:63:12 | ...=... |
| TestBreak.java:63:12:63:12 | 3 | TestBreak.java:63:8:63:12 | ... + ... |
| TestBreak.java:64:4:64:4 | y | TestBreak.java:64:8:64:8 | y |
| TestBreak.java:64:4:64:12 | ...=... | TestBreak.java:65:4:65:9 | break |
| TestBreak.java:64:4:64:13 | <Expr>; | TestBreak.java:64:8:64:8 | y |
| TestBreak.java:64:4:64:13 | <Expr>; | TestBreak.java:64:4:64:4 | y |
| TestBreak.java:64:8:64:8 | y | TestBreak.java:64:12:64:12 | 4 |
| TestBreak.java:64:8:64:12 | ... + ... | TestBreak.java:64:4:64:12 | ...=... |
| TestBreak.java:64:12:64:12 | 4 | TestBreak.java:64:8:64:12 | ... + ... |
| TestBreak.java:65:4:65:9 | break | TestBreak.java:76:3:76:11 | switch (...) |
| TestBreak.java:66:3:66:9 | case ... | TestBreak.java:66:8:66:8 | 5 |
| TestBreak.java:66:3:66:9 | case ... | TestBreak.java:67:3:67:9 | case ... |
| TestBreak.java:67:3:67:9 | case ... | TestBreak.java:68:4:68:13 | <Expr>; |
| TestBreak.java:66:8:66:8 | 5 | TestBreak.java:68:4:68:13 | <Expr>; |
| TestBreak.java:67:3:67:9 | case ... | TestBreak.java:67:8:67:8 | 6 |
| TestBreak.java:67:3:67:9 | case ... | TestBreak.java:70:3:70:10 | default |
| TestBreak.java:67:8:67:8 | 6 | TestBreak.java:68:4:68:13 | <Expr>; |
| TestBreak.java:68:4:68:4 | x | TestBreak.java:68:8:68:8 | x |
| TestBreak.java:68:4:68:12 | ...=... | TestBreak.java:69:4:69:13 | <Expr>; |
| TestBreak.java:68:4:68:13 | <Expr>; | TestBreak.java:68:8:68:8 | x |
| TestBreak.java:68:4:68:13 | <Expr>; | TestBreak.java:68:4:68:4 | x |
| TestBreak.java:68:8:68:8 | x | TestBreak.java:68:12:68:12 | 5 |
| TestBreak.java:68:8:68:12 | ... + ... | TestBreak.java:68:4:68:12 | ...=... |
| TestBreak.java:68:12:68:12 | 5 | TestBreak.java:68:8:68:12 | ... + ... |
| TestBreak.java:69:4:69:12 | ...=... | TestBreak.java:70:3:70:10 | default |
| TestBreak.java:69:4:69:13 | <Expr>; | TestBreak.java:69:8:69:8 | y |
| TestBreak.java:69:4:69:4 | y | TestBreak.java:69:8:69:8 | y |
| TestBreak.java:69:4:69:12 | ...=... | TestBreak.java:71:4:71:9 | <Expr>; |
| TestBreak.java:69:4:69:13 | <Expr>; | TestBreak.java:69:4:69:4 | y |
| TestBreak.java:69:8:69:8 | y | TestBreak.java:69:12:69:12 | 6 |
| TestBreak.java:69:8:69:12 | ... + ... | TestBreak.java:69:4:69:12 | ...=... |
| TestBreak.java:69:12:69:12 | 6 | TestBreak.java:69:8:69:12 | ... + ... |
| TestBreak.java:70:3:70:10 | default | TestBreak.java:71:4:71:9 | <Expr>; |
| TestBreak.java:71:4:71:4 | x | TestBreak.java:71:8:71:8 | y |
| TestBreak.java:71:4:71:8 | ...=... | TestBreak.java:72:4:72:9 | <Expr>; |
| TestBreak.java:71:4:71:9 | <Expr>; | TestBreak.java:71:8:71:8 | y |
| TestBreak.java:71:4:71:9 | <Expr>; | TestBreak.java:71:4:71:4 | x |
| TestBreak.java:71:8:71:8 | y | TestBreak.java:71:4:71:8 | ...=... |
| TestBreak.java:72:4:72:4 | y | TestBreak.java:72:8:72:8 | x |
| TestBreak.java:72:4:72:8 | ...=... | TestBreak.java:76:3:76:11 | switch (...) |
| TestBreak.java:72:4:72:9 | <Expr>; | TestBreak.java:72:8:72:8 | x |
| TestBreak.java:72:4:72:9 | <Expr>; | TestBreak.java:72:4:72:4 | y |
| TestBreak.java:72:8:72:8 | x | TestBreak.java:72:4:72:8 | ...=... |
| TestBreak.java:76:3:76:11 | switch (...) | TestBreak.java:76:10:76:10 | x |
| TestBreak.java:76:10:76:10 | x | TestBreak.java:4:14:4:14 | Normal Exit |
| TestBreak.java:76:10:76:10 | x | TestBreak.java:78:3:78:9 | case ... |
| TestBreak.java:76:10:76:10 | x | TestBreak.java:81:3:81:9 | case ... |
| TestBreak.java:78:3:78:9 | case ... | TestBreak.java:79:4:79:9 | <Expr>; |
| TestBreak.java:78:3:78:9 | case ... | TestBreak.java:78:8:78:8 | 1 |
| TestBreak.java:78:3:78:9 | case ... | TestBreak.java:81:3:81:9 | case ... |
| TestBreak.java:78:8:78:8 | 1 | TestBreak.java:79:4:79:9 | <Expr>; |
| TestBreak.java:79:4:79:4 | x | TestBreak.java:79:8:79:8 | 1 |
| TestBreak.java:79:4:79:8 | ...=... | TestBreak.java:80:4:80:9 | break |
| TestBreak.java:79:4:79:9 | <Expr>; | TestBreak.java:79:8:79:8 | 1 |
| TestBreak.java:79:4:79:9 | <Expr>; | TestBreak.java:79:4:79:4 | x |
| TestBreak.java:79:8:79:8 | 1 | TestBreak.java:79:4:79:8 | ...=... |
| TestBreak.java:80:4:80:9 | break | TestBreak.java:4:14:4:14 | Normal Exit |
| TestBreak.java:81:3:81:9 | case ... | TestBreak.java:82:4:82:9 | <Expr>; |
| TestBreak.java:81:3:81:9 | case ... | TestBreak.java:4:14:4:14 | Normal Exit |
| TestBreak.java:81:3:81:9 | case ... | TestBreak.java:81:8:81:8 | 2 |
| TestBreak.java:81:8:81:8 | 2 | TestBreak.java:82:4:82:9 | <Expr>; |
| TestBreak.java:82:4:82:4 | x | TestBreak.java:82:8:82:8 | 2 |
| TestBreak.java:82:4:82:8 | ...=... | TestBreak.java:83:4:83:9 | break |
| TestBreak.java:82:4:82:9 | <Expr>; | TestBreak.java:82:8:82:8 | 2 |
| TestBreak.java:82:4:82:9 | <Expr>; | TestBreak.java:82:4:82:4 | x |
| TestBreak.java:82:8:82:8 | 2 | TestBreak.java:82:4:82:8 | ...=... |
| TestBreak.java:83:4:83:9 | break | TestBreak.java:4:14:4:14 | Normal Exit |

View File

@@ -1,8 +1,9 @@
import java
import utils.test.AstCfg
from ControlFlowNode n, ControlFlowNode succ
where
succ = n.getASuccessor() and
succ = getAnAstSuccessor(n) and
n.getLocation().getFile().getExtension() = "java" and
not n.getLocation().getFile().getStem() = "PopulateRuntimeException"
select n, succ

View File

@@ -1,10 +0,0 @@
| TestContinue.java:8:20:8:25 | ... < ... | TestContinue.java:30:3:30:13 | var ...; |
| TestContinue.java:12:9:12:14 | ... == ... | TestContinue.java:16:5:28:5 | { ... } |
| TestContinue.java:19:11:19:16 | ... == ... | TestContinue.java:22:14:22:24 | if (...) |
| TestContinue.java:22:18:22:23 | ... == ... | TestContinue.java:26:7:26:13 | <Expr>; |
| TestContinue.java:31:10:31:16 | ... != ... | TestContinue.java:50:3:50:9 | <Expr>; |
| TestContinue.java:33:8:33:13 | ... == ... | TestContinue.java:37:4:47:4 | { ... } |
| TestContinue.java:40:10:40:15 | ... == ... | TestContinue.java:44:6:44:15 | <Expr>; |
| TestContinue.java:45:14:45:19 | ... == ... | TestContinue.java:46:5:46:11 | <Expr>; |
| TestContinue.java:51:10:51:16 | ... != ... | TestContinue.java:4:14:4:14 | Normal Exit |
| TestContinue.java:53:8:53:13 | ... != ... | TestContinue.java:56:5:56:10 | break |

View File

@@ -1,4 +0,0 @@
import java
from ConditionNode c
select c, c.getAFalseSuccessor()

Some files were not shown because too many files have changed in this diff Show More