From a06a20dbab8ac32ec293d66d14b6500db478acd1 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 6 Dec 2018 14:22:33 -0800 Subject: [PATCH 01/13] C++: move SimpleRangeAnalysis tests --- .../{rangeanalysis => SimpleRangeAnalysis}/inline_assembly.c | 0 .../{rangeanalysis => SimpleRangeAnalysis}/lowerBound.expected | 0 .../{rangeanalysis => SimpleRangeAnalysis}/lowerBound.ql | 0 .../rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/minmax.c | 0 .../{rangeanalysis => SimpleRangeAnalysis}/ternaryLower.expected | 0 .../{rangeanalysis => SimpleRangeAnalysis}/ternaryLower.ql | 0 .../{rangeanalysis => SimpleRangeAnalysis}/ternaryUpper.expected | 0 .../{rangeanalysis => SimpleRangeAnalysis}/ternaryUpper.ql | 0 .../rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/test.c | 0 .../rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/test.cpp | 0 .../{rangeanalysis => SimpleRangeAnalysis}/upperBound.expected | 0 .../{rangeanalysis => SimpleRangeAnalysis}/upperBound.ql | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/inline_assembly.c (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/lowerBound.expected (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/lowerBound.ql (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/minmax.c (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/ternaryLower.expected (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/ternaryLower.ql (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/ternaryUpper.expected (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/ternaryUpper.ql (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/test.c (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/test.cpp (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/upperBound.expected (100%) rename cpp/ql/test/library-tests/rangeanalysis/{rangeanalysis => SimpleRangeAnalysis}/upperBound.ql (100%) diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/inline_assembly.c b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/inline_assembly.c similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/inline_assembly.c rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/inline_assembly.c diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/lowerBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/lowerBound.expected rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/lowerBound.ql b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.ql similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/lowerBound.ql rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.ql diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/minmax.c b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/minmax.c similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/minmax.c rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/minmax.c diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/ternaryLower.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/ternaryLower.expected rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/ternaryLower.ql b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.ql similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/ternaryLower.ql rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.ql diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/ternaryUpper.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/ternaryUpper.expected rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/ternaryUpper.ql b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.ql similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/ternaryUpper.ql rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.ql diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.cpp similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.cpp diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/upperBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/upperBound.expected rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/upperBound.ql b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.ql similarity index 100% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/upperBound.ql rename to cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.ql From ed68f9150ab2e013c04796dac21259fdc1272456 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 6 Dec 2018 15:15:40 -0800 Subject: [PATCH 02/13] C++: Initial implementation of new range analysis --- .../semmle/code/cpp/controlflow/IRGuards.qll | 11 + .../aliased_ssa/Instruction.qll | 8 +- .../ir/implementation/aliased_ssa/Operand.qll | 4 + .../aliased_ssa/gvn/ValueNumbering.qll | 1 + .../cpp/ir/implementation/raw/Instruction.qll | 8 +- .../cpp/ir/implementation/raw/Operand.qll | 4 + .../implementation/raw/gvn/ValueNumbering.qll | 1 + .../unaliased_ssa/Instruction.qll | 8 +- .../implementation/unaliased_ssa/Operand.qll | 4 + .../unaliased_ssa/gvn/ValueNumbering.qll | 1 + .../semmle/code/cpp/rangeanalysis/Bound.qll | 74 + .../code/cpp/rangeanalysis/RangeAnalysis.qll | 591 ++++++ .../code/cpp/rangeanalysis/RangeUtils.qll | 54 + .../rangeanalysis/RangeAnalysis.expected | 1714 +++++++++++++++++ .../rangeanalysis/RangeAnalysis.ql | 12 + .../rangeanalysis/rangeanalysis/test.c | 34 + 16 files changed, 2526 insertions(+), 3 deletions(-) create mode 100644 cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll create mode 100644 cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll create mode 100644 cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll create mode 100644 cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected create mode 100644 cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql create mode 100644 cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c diff --git a/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll index 5867b8e5c59c..bc2a1ecb2fb0 100644 --- a/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll @@ -280,6 +280,17 @@ class IRGuardCondition extends Instruction { ne.controls(controlled, testIsTrue.booleanNot())) } + cached predicate controlsEdge(ConditionalBranchInstruction branch, IRBlock succ, boolean testIsTrue) { + branch.getCondition() = this and + ( + testIsTrue = true and + succ.getFirstInstruction() = branch.getTrueSuccessor() + or + testIsTrue = false and + succ.getFirstInstruction() = branch.getFalseSuccessor() + ) + } + /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ cached predicate comparesLt(Operand left, Operand right, int k, boolean isLessThan, boolean testIsTrue) { compares_lt(this, left, right, k, isLessThan, testIsTrue) diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll index d956421a268f..449d7544a04b 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll @@ -130,7 +130,7 @@ module InstructionSanity { query predicate instructionWithoutUniqueBlock(Instruction instr, int blockCount) { blockCount = count(instr.getBlock()) and blockCount != 1 - } + } } /** @@ -750,6 +750,12 @@ class BinaryInstruction extends Instruction { final Instruction getRightOperand() { result = getAnOperand().(RightOperand).getDefinitionInstruction() } + + final predicate hasOperands(Operand op1, Operand op2) { + op1 = getAnOperand().(LeftOperand) and op2 = getAnOperand().(RightOperand) + or + op1 = getAnOperand().(RightOperand) and op2 = getAnOperand().(LeftOperand) + } } class AddInstruction extends BinaryInstruction { diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll index edf8e141764e..929ba988c9b6 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll @@ -21,6 +21,10 @@ class Operand extends TOperand { result = "Operand" } + Location getLocation() { + result = getInstruction().getLocation() + } + /** * Gets the `Instruction` that consumes this operand. */ diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll index cff349a07b44..d5c6752479eb 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll @@ -107,6 +107,7 @@ private class CongruentCopyInstruction extends CopyInstruction { def = this.getSourceValue() and ( def.getResultMemoryAccess() instanceof IndirectMemoryAccess or + def.getResultMemoryAccess() instanceof PhiMemoryAccess or not def.hasMemoryResult() ) ) diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Instruction.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Instruction.qll index d956421a268f..449d7544a04b 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Instruction.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Instruction.qll @@ -130,7 +130,7 @@ module InstructionSanity { query predicate instructionWithoutUniqueBlock(Instruction instr, int blockCount) { blockCount = count(instr.getBlock()) and blockCount != 1 - } + } } /** @@ -750,6 +750,12 @@ class BinaryInstruction extends Instruction { final Instruction getRightOperand() { result = getAnOperand().(RightOperand).getDefinitionInstruction() } + + final predicate hasOperands(Operand op1, Operand op2) { + op1 = getAnOperand().(LeftOperand) and op2 = getAnOperand().(RightOperand) + or + op1 = getAnOperand().(RightOperand) and op2 = getAnOperand().(LeftOperand) + } } class AddInstruction extends BinaryInstruction { diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Operand.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Operand.qll index edf8e141764e..929ba988c9b6 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Operand.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Operand.qll @@ -21,6 +21,10 @@ class Operand extends TOperand { result = "Operand" } + Location getLocation() { + result = getInstruction().getLocation() + } + /** * Gets the `Instruction` that consumes this operand. */ diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll index cff349a07b44..d5c6752479eb 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll @@ -107,6 +107,7 @@ private class CongruentCopyInstruction extends CopyInstruction { def = this.getSourceValue() and ( def.getResultMemoryAccess() instanceof IndirectMemoryAccess or + def.getResultMemoryAccess() instanceof PhiMemoryAccess or not def.hasMemoryResult() ) ) diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll index d956421a268f..449d7544a04b 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll @@ -130,7 +130,7 @@ module InstructionSanity { query predicate instructionWithoutUniqueBlock(Instruction instr, int blockCount) { blockCount = count(instr.getBlock()) and blockCount != 1 - } + } } /** @@ -750,6 +750,12 @@ class BinaryInstruction extends Instruction { final Instruction getRightOperand() { result = getAnOperand().(RightOperand).getDefinitionInstruction() } + + final predicate hasOperands(Operand op1, Operand op2) { + op1 = getAnOperand().(LeftOperand) and op2 = getAnOperand().(RightOperand) + or + op1 = getAnOperand().(RightOperand) and op2 = getAnOperand().(LeftOperand) + } } class AddInstruction extends BinaryInstruction { diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Operand.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Operand.qll index edf8e141764e..929ba988c9b6 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Operand.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Operand.qll @@ -21,6 +21,10 @@ class Operand extends TOperand { result = "Operand" } + Location getLocation() { + result = getInstruction().getLocation() + } + /** * Gets the `Instruction` that consumes this operand. */ diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll index cff349a07b44..d5c6752479eb 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll @@ -107,6 +107,7 @@ private class CongruentCopyInstruction extends CopyInstruction { def = this.getSourceValue() and ( def.getResultMemoryAccess() instanceof IndirectMemoryAccess or + def.getResultMemoryAccess() instanceof PhiMemoryAccess or not def.hasMemoryResult() ) ) diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll new file mode 100644 index 000000000000..e81f06fd7524 --- /dev/null +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll @@ -0,0 +1,74 @@ +import cpp +private import semmle.code.cpp.ir.IR + +private newtype TBound = + TBoundZero() or + TBoundInstruction(Instruction i) { + i.getResultType() instanceof IntegralType or + i.getResultType() instanceof PointerType + } or + TBoundOperand(Operand o) { + o.getDefinitionInstruction().getResultType() instanceof IntegralType or + o.getDefinitionInstruction().getResultType() instanceof PointerType + } + +/** + * A bound that may be inferred for an expression plus/minus an integer delta. + */ +abstract class Bound extends TBound { + abstract string toString(); + +// FIXME: operands? + /** Gets an expression that equals this bound plus `delta`. */ + abstract Instruction getInstruction(int delta); + + /** Gets an expression that equals this bound. */ + Instruction getInstruction() { result = getInstruction(0) } + + predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { + path = "" and sl = 0 and sc = 0 and el = 0 and ec = 0 + } +} + + +/** + * The bound that corresponds to the integer 0. This is used to represent all + * integer bounds as bounds are always accompanied by an added integer delta. + */ +class ZeroBound extends Bound, TBoundZero { + override string toString() { result = "0" } + + override Instruction getInstruction(int delta) { result.(ConstantValueInstruction).getValue().toInt() = delta } +} + +/** + * A bound corresponding to the value of an `Instruction`. + */ +class InstructionBound extends Bound, TBoundInstruction { + /** Gets the SSA variable that equals this bound. */ + override Instruction getInstruction(int delta) { this = TBoundInstruction(result) and delta = 0} + + override string toString() { result = getInstruction().toString() } + + override predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { + getInstruction().getLocation().hasLocationInfo(path, sl, sc, el, ec) + } +} + + +class OperandBound extends Bound, TBoundOperand { + Operand getOperand() { + this = TBoundOperand(result) + } + + override Instruction getInstruction(int delta) { + this = TBoundOperand(result.getAUse()) and + delta = 0 + } + + override string toString() { result = getOperand().toString() } + + override predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { + getOperand().getLocation().hasLocationInfo(path, sl, sc, el, ec) + } +} \ No newline at end of file diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll new file mode 100644 index 000000000000..347259588bd0 --- /dev/null +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -0,0 +1,591 @@ +/** + * Provides classes and predicates for range analysis. + * + * An inferred bound can either be a specific integer, the abstract value of an + * SSA variable, or the abstract value of an interesting expression. The latter + * category includes array lengths that are not SSA variables. + * + * If an inferred bound relies directly on a condition, then this condition is + * reported as the reason for the bound. + */ + +/* + * This library tackles range analysis as a flow problem. Consider e.g.: + * ``` + * len = arr.length; + * if (x < len) { ... y = x-1; ... y ... } + * ``` + * In this case we would like to infer `y <= arr.length - 2`, and this is + * accomplished by tracking the bound through a sequence of steps: + * ``` + * arr.length --> len = .. --> x < len --> x-1 --> y = .. --> y + * ``` + * + * In its simplest form the step relation `E1 --> E2` relates two expressions + * such that `E1 <= B` implies `E2 <= B` for any `B` (with a second separate + * step relation handling lower bounds). Examples of such steps include + * assignments `E2 = E1` and conditions `x <= E1` where `E2` is a use of `x` + * guarded by the condition. + * + * In order to handle subtractions and additions with constants, and strict + * comparisons, the step relation is augmented with an integer delta. With this + * generalization `E1 --(delta)--> E2` relates two expressions and an integer + * such that `E1 <= B` implies `E2 <= B + delta` for any `B`. This corresponds + * to the predicate `boundFlowStep`. + * + * The complete range analysis is then implemented as the transitive closure of + * the step relation summing the deltas along the way. If `E1` transitively + * steps to `E2`, `delta` is the sum of deltas along the path, and `B` is an + * interesting bound equal to the value of `E1` then `E2 <= B + delta`. This + * corresponds to the predicate `bounded`. + * + * Phi nodes need a little bit of extra handling. Consider `x0 = phi(x1, x2)`. + * There are essentially two cases: + * - If `x1 <= B + d1` and `x2 <= B + d2` then `x0 <= B + max(d1,d2)`. + * - If `x1 <= B + d1` and `x2 <= x0 + d2` with `d2 <= 0` then `x0 <= B + d1`. + * The first case is for whenever a bound can be proven without taking looping + * into account. The second case is relevant when `x2` comes from a back-edge + * where we can prove that the variable has been non-increasing through the + * loop-iteration as this means that any upper bound that holds prior to the + * loop also holds for the variable during the loop. + * This generalizes to a phi node with `n` inputs, so if + * `x0 = phi(x1, ..., xn)` and `xi <= B + delta` for one of the inputs, then we + * also have `x0 <= B + delta` if we can prove either: + * - `xj <= B + d` with `d <= delta` or + * - `xj <= x0 + d` with `d <= 0` + * for each input `xj`. + * + * As all inferred bounds can be related directly to a path in the source code + * the only source of non-termination is if successive redundant (and thereby + * increasingly worse) bounds are calculated along a loop in the source code. + * We prevent this by weakening the bound to a small finite set of bounds when + * a path follows a second back-edge (we postpone weakening till the second + * back-edge as a precise bound might require traversing a loop once). +*/ + +import cpp + +private import semmle.code.cpp.ir.IR +private import semmle.code.cpp.controlflow.IRGuards +private import semmle.code.cpp.ir.ValueNumbering +private import RangeUtils +private import SignAnalysis +import Bound + +cached private module RangeAnalysisCache { + + cached module RangeAnalysisPublic { + /** + * Holds if `b + delta` is a valid bound for `e`. + * - `upper = true` : `e <= b + delta` + * - `upper = false` : `e >= b + delta` + * + * The reason for the bound is given by `reason` and may be either a condition + * or `NoReason` if the bound was proven directly without the use of a bounding + * condition. + */ + cached predicate boundedInstruction(Instruction i, Bound b, int delta, boolean upper, Reason reason) { + boundedInstruction(i, b, delta, upper, _, _, reason) + } + + cached predicate boundedOperand(Operand op, Bound b, int delta, boolean upper, Reason reason) { + boundedNonPhiOperand(op, b, delta, upper, _, _, reason) + or + boundedPhiOperand(op, b, delta, upper, _, _, reason) + } + } + + /** + * Holds if `guard = boundFlowCond(_, _, _, _, _) or guard = eqFlowCond(_, _, _, _, _)`. + */ + cached predicate possibleReason(IRGuardCondition guard) { + guard = boundFlowCond(_, _, _, _, _) + or + guard = eqFlowCond(_, _, _, _, _) + } + +} +private import RangeAnalysisCache +import RangeAnalysisPublic + +/** + * Gets a condition that tests whether `i` equals `bound + delta` at `use`. + * + * If the condition evaluates to `testIsTrue`: + * - `isEq = true` : `i == bound + delta` + * - `isEq = false` : `i != bound + delta` + */ +private IRGuardCondition eqFlowCond(Operand op, Operand bound, int delta, + boolean isEq, boolean testIsTrue) +{ + exists(Operand compared | + result.ensuresEq(compared, bound, delta, op.getInstruction().getBlock(), isEq) and + result.controls(bound.getInstruction().getBlock(), testIsTrue) and + valueNumber(compared.getDefinitionInstruction()) = valueNumber (op.getDefinitionInstruction()) + ) +} + +/** + * Holds if `op1 + delta` is a valid bound for `op2`. + * - `upper = true` : `op2 <= op1 + delta` + * - `upper = false` : `op2 >= op1 + delta` + */ +private predicate boundFlowStepSsa( + NonPhiOperand op2, Operand op1, int delta, boolean upper, Reason reason +) { + op2.getDefinitionInstruction().getAnOperand().(CopySourceOperand) = op1 and + (upper = true or upper = false) and + reason = TNoReason() and + delta = 0 + or + exists(IRGuardCondition guard | + guard = boundFlowCond(op2, op1, delta, upper, _) and + reason = TCondReason(guard) + ) +} + +/** + * Gets a condition that tests whether `v` is bounded by `e + delta`. + * + * If the condition evaluates to `testIsTrue`: + * - `upper = true` : `v <= e + delta` + * - `upper = false` : `v >= e + delta` + */ +private IRGuardCondition boundFlowCond(NonPhiOperand op, NonPhiOperand bound, int delta, boolean upper, + boolean testIsTrue) +{ + exists(Operand compared | + result.comparesLt(compared, bound, delta, upper, testIsTrue) and + result.controls(op.getInstruction().getBlock(), testIsTrue) and + valueNumber(compared.getDefinitionInstruction()) = valueNumber(op.getDefinitionInstruction()) + ) + // TODO: strengthening through modulus library +} + +/** + * Holds if `comp` corresponds to: + * - `upper = true` : `v <= e + delta` or `v < e + delta` + * - `upper = false` : `v >= e + delta` or `v > e + delta` + */ +private IRGuardCondition boundFlowCondPhi(PhiOperand op, NonPhiOperand bound, int delta, boolean upper, + boolean testIsTrue) +{ + exists(Operand compared | + result.comparesLt(compared, bound, delta, upper, testIsTrue) and + result.controlsEdge(op.getPredecessorBlock().getLastInstruction(), op.getInstruction().getBlock(), testIsTrue) and + valueNumber(compared.getDefinitionInstruction()) = valueNumber (op.getDefinitionInstruction()) + ) + or + exists(Operand compared | + result.comparesLt(compared, bound, delta, upper, testIsTrue) and + result.controls(op.getPredecessorBlock(), testIsTrue) and + valueNumber(compared.getDefinitionInstruction()) = valueNumber (op.getDefinitionInstruction()) + ) + // TODO: strengthening through modulus library +} + +private newtype TReason = + TNoReason() or + TCondReason(IRGuardCondition guard) { possibleReason(guard) } + +/** + * A reason for an inferred bound. This can either be `CondReason` if the bound + * is due to a specific condition, or `NoReason` if the bound is inferred + * without going through a bounding condition. + */ +abstract class Reason extends TReason { + abstract string toString(); +} +class NoReason extends Reason, TNoReason { + override string toString() { result = "NoReason" } +} +class CondReason extends Reason, TCondReason { + IRGuardCondition getCond() { this = TCondReason(result) } + override string toString() { result = getCond().toString() } +} + +/** + * Holds if a cast from `fromtyp` to `totyp` can be ignored for the purpose of + * range analysis. + */ +private predicate safeCast(IntegralType fromtyp, IntegralType totyp) { + fromtyp.getSize() <= totyp.getSize() and + ( + fromtyp.isUnsigned() + or + totyp.isSigned() + ) +} + +private class SafeCastInstruction extends ConvertInstruction { + SafeCastInstruction() { + safeCast(getResultType(), getOperand().getResultType()) + } +} + +/** + * Holds if `typ` is a small integral type with the given lower and upper bounds. + */ +private predicate typeBound(IntegralType typ, int lowerbound, int upperbound) { + typ.isSigned() and typ.getSize() = 1 and lowerbound = -128 and upperbound = 127 + or + typ.isUnsigned() and typ.getSize() = 1 and lowerbound = 0 and upperbound = 255 + or + typ.isSigned() and typ.getSize() = 2 and lowerbound = -32768 and upperbound = 32767 + or + typ.isUnsigned() and typ.getSize() = 2 and lowerbound = 0 and upperbound = 65535 +} + +/** + * A cast to a small integral type that may overflow or underflow. + */ +private class NarrowingCastInstruction extends ConvertInstruction { + NarrowingCastInstruction() { + not this instanceof SafeCastInstruction and + typeBound(getResultType(), _, _) + } + /** Gets the lower bound of the resulting type. */ + int getLowerBound() { typeBound(getResultType(), result, _) } + /** Gets the upper bound of the resulting type. */ + int getUpperBound() { typeBound(getResultType(), _, result) } +} + +/** + * Holds if `op + delta` is a valid bound for `i`. + * - `upper = true` : `i <= op + delta` + * - `upper = false` : `i >= op + delta` + */ +private predicate boundFlowStep(Instruction i, Operand op, int delta, boolean upper) { + valueFlowStep(i, op, delta) and + (upper = true or upper = false) + or + i.(SafeCastInstruction).getAnOperand() = op and + delta = 0 and + (upper = true or upper = false) + or + exists(Operand x | + i.(AddInstruction).getAnOperand() = op and + i.(AddInstruction).getAnOperand() = x and + op != x + | + not exists(getValue(getConstantValue(op.getInstruction()))) and + not exists(getValue(getConstantValue(x.getInstruction()))) and + if(strictlyPositive(x)) + then ( + upper = false and delta = 1 + ) else + if positive(x) + then ( + upper = false and delta = 0 + ) else + if strictlyNegative(x) + then ( + upper = true and delta = -1 + ) else if negative(x) then (upper = true and delta = 0) else none() + ) + or + exists(Operand x | + exists(SubInstruction sub | + i = sub and + sub.getAnOperand().(LeftOperand) = op and + sub.getAnOperand().(RightOperand) = x + ) + | + // `x instanceof ConstantIntegerExpr` is covered by valueFlowStep + not exists(getValue(getConstantValue(x.getInstruction()))) and + if strictlyPositive(x) + then ( + upper = true and delta = -1 + ) else + if positive(x) + then ( + upper = true and delta = 0 + ) else + if strictlyNegative(x) + then ( + upper = false and delta = 1 + ) else if negative(x) then (upper = false and delta = 0) else none() + ) + or + i.(RemInstruction).getAnOperand().(RightOperand) = op and positive(op) and delta = -1 and upper = true + or + i.(RemInstruction).getAnOperand().(LeftOperand) = op and positive(op) and delta = 0 and upper = true + or + i.(BitAndInstruction).getAnOperand() = op and positive(op) and delta = 0 and upper = true + or + i.(BitOrInstruction).getAnOperand() = op and positiveInstruction(i) and delta = 0 and upper = false + // TODO: min, max, rand +} + +private predicate boundFlowStepMul(Instruction i1, Operand op, int factor) { + exists(Instruction c, int k | k = getValue(getConstantValue(c)) and k > 0 | + i1.(MulInstruction).hasOperands(op, c.getAUse()) and factor = k + or + exists(ShiftLeftInstruction i | + i = i1 and i.getAnOperand().(LeftOperand) = op and i.getAnOperand().(RightOperand) = c.getAUse() and factor = 2.pow(k) + ) + ) +} + +private predicate boundFlowStepDiv(Instruction i1, Operand op, int factor) { + exists(Instruction c, int k | k = getValue(getConstantValue(c)) and k > 0 | + exists(DivInstruction i | + i = i1 and i.getAnOperand().(LeftOperand) = op and i.getRightOperand() = c and factor = k + ) + or + exists(ShiftRightInstruction i | + i = i1 and i.getAnOperand().(LeftOperand) = op and i.getRightOperand() = c and factor = 2.pow(k) + ) + ) +} + +pragma[noinline] +private predicate boundedNonPhiOperand(NonPhiOperand op, Bound b, int delta, boolean upper, + boolean fromBackEdge, int origdelta, Reason reason +) { + exists(NonPhiOperand op2, int d1, int d2, Reason r1, Reason r2 | + boundFlowStepSsa(op, op2, d1, upper, r1) and + boundedNonPhiOperand(op2, b, d2, upper, fromBackEdge, origdelta, r2) and + delta = d1 + d2 and + (if r1 instanceof NoReason then reason = r2 else reason = r1) + ) + or + boundedInstruction(op.getDefinitionInstruction(), b, delta, upper, fromBackEdge, origdelta, reason) + or + exists(int d, Reason r1, Reason r2 | + boundedInstruction(op.getDefinitionInstruction(), b, d, upper, fromBackEdge, origdelta, r2) + | + unequalOperand(op, b, d, r1) and + ( + upper = true and delta = d - 1 + or upper = false and delta = d + 1 + ) and + ( + reason = r1 + or + reason = r2 and not r2 instanceof NoReason + ) + ) +} + +/** + * Holds if `op1 + delta` is a valid bound for `op2`. + * - `upper = true` : `op2 <= op1 + delta` + * - `upper = false` : `op2 >= op1 + delta` + */ +private predicate boundFlowStepPhi( + PhiOperand op2, Operand op1, int delta, boolean upper, Reason reason +) { + op2.getDefinitionInstruction().getAnOperand().(CopySourceOperand) = op1 and + (upper = true or upper = false) and + reason = TNoReason() and + delta = 0 + or + exists(IRGuardCondition guard | + guard = boundFlowCondPhi(op2, op1, delta, upper, _) and + // Java has guardDirectlyControlsSsaRead here + reason = TCondReason(guard) + ) +} + + +private predicate boundedPhiOperand( + PhiOperand op, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, + Reason reason +) { + exists(NonPhiOperand op2, int d1, int d2, Reason r1, Reason r2 | // should mid be an `Operand`? + boundFlowStepPhi(op, op2, d1, upper, r1) and + boundedNonPhiOperand(op2, b, d2, upper, fromBackEdge, origdelta, r2) and + delta = d1 + d2 and + (if r1 instanceof NoReason then reason = r2 else reason = r1) + ) + or + boundedInstruction(op.getDefinitionInstruction(), b, delta, upper, fromBackEdge, origdelta, reason) + or + exists(int d, Reason r1, Reason r2 | + boundedInstruction(op.getDefinitionInstruction(), b, d, upper, fromBackEdge, origdelta, r2) + | + unequalOperand(op, b, d, r1) and + ( + upper = true and delta = d - 1 + or upper = false and delta = d + 1 + ) and + ( + reason = r1 + or + reason = r2 and not r2 instanceof NoReason + ) + ) +} + +/** + * Holds if `op != b + delta` at `pos`. + */ +private predicate unequalOperand(Operand op, Bound b, int delta, Reason reason) { + none() +} + +/* + * Notes on phi nodes in the C IR vs Java + * + * the IR doesn't have edges as a type, but Java uses edges rather than predecessor blocks; is + * there anything to be gained by distinguishing different edges from the same predecessor? (does + * Java distinguish different edges from the same predecessor? can the IR actually generate multiple + * edges from the same predecessor?) + * + * Java identifies a phi operand using a tuple of a node, an input, and an edge; we might be able to + * get away with just using a PhiOperand, which I believe uniquely identifies the phi node and + * predecessor block. + * + */ + +private predicate boundedPhiCandValidForEdge( + PhiInstruction phi, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, + Reason reason, PhiOperand op +) { + boundedPhiCand(phi, upper, b, delta, fromBackEdge, origdelta, reason) and + ( + exists(int d | boundedPhiInp1(phi, op, b, d, upper) | upper = true and d <= delta) + or + exists(int d | boundedPhiInp1(phi, op, b, d, upper) | upper = false and d >= delta) + or + selfBoundedPhiInp(phi, op, upper) + ) +} + +/** Weakens a delta to lie in the range `[-1..1]`. */ +bindingset[delta, upper] +private int weakenDelta(boolean upper, int delta) { + delta in [-1 .. 1] and result = delta + or + upper = true and result = -1 and delta < -1 + or + upper = false and result = 1 and delta > 1 +} + +private predicate boundedPhiInp( + PhiInstruction phi, PhiOperand op, Bound b, int delta, boolean upper, boolean fromBackEdge, + int origdelta, Reason reason +) { + phi.getAnOperand() = op and + exists(int d, boolean fromBackEdge0 | + boundedInstruction(op.getDefinitionInstruction(), b, d, upper, fromBackEdge0, origdelta, reason) + or + boundedPhiOperand(op, b, d, upper, fromBackEdge0, origdelta, reason) + or + b.(InstructionBound).getInstruction() = op.getDefinitionInstruction() and + d = 0 and + (upper = true or upper = false) and + fromBackEdge0 = false and + origdelta = 0 and + reason = TNoReason() + | + if backEdge(phi, op) + then + fromBackEdge = true and + ( + fromBackEdge0 = true and delta = weakenDelta(upper, d - origdelta) + origdelta + or + fromBackEdge0 = false and delta = d + ) + else ( + delta = d and fromBackEdge = fromBackEdge0 + ) + ) +} + +pragma[noinline] +private predicate boundedPhiInp1( + PhiInstruction phi, PhiOperand op, Bound b, int delta, boolean upper +) { + boundedPhiInp(phi, op, b, delta, upper, _, _, _) +} + +private predicate selfBoundedPhiInp(PhiInstruction phi, PhiOperand op, boolean upper) { + exists(int d, InstructionBound phibound | + phibound.getInstruction() = phi and + boundedPhiInp(phi, op, phibound, d, upper, _, _, _) and + ( + upper = true and d <= 0 + or + upper = false and d >= 0 + ) + ) +} + +pragma[noinline] +private predicate boundedPhiCand( + PhiInstruction phi, boolean upper, Bound b, int delta, boolean fromBackEdge, int origdelta, + Reason reason +) { + exists(PhiOperand op | + boundedPhiInp(phi, op, b, delta, upper, fromBackEdge, origdelta, reason) + ) +} + +/** + * Holds if the value being cast has an upper (for `upper = true`) or lower + * (for `upper = false`) bound within the bounds of the resulting type. + * For `upper = true` this means that the cast will not overflow and for + * `upper = false` this means that the cast will not underflow. + */ +private predicate safeNarrowingCast(NarrowingCastInstruction cast, boolean upper) { + exists(int bound | boundedNonPhiOperand(cast.getAnOperand(), any(ZeroBound zb), bound, upper, _, _, _) | + upper = true and bound <= cast.getUpperBound() + or + upper = false and bound >= cast.getLowerBound() + ) +} + +pragma[noinline] +private predicate boundedCastExpr( + NarrowingCastInstruction cast, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, + Reason reason +) { + boundedNonPhiOperand(cast.getAnOperand(), b, delta, upper, fromBackEdge, origdelta, reason) +} + +private predicate boundedInstruction( + Instruction i, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, Reason reason +) { + i instanceof PhiInstruction and + forex(PhiOperand op | op = i.getAnOperand() | + boundedPhiCandValidForEdge(i, b, delta, upper, fromBackEdge, origdelta, reason, op) + ) + or + i = b.getInstruction(delta) and + (upper = true or upper = false) and + fromBackEdge = false and + origdelta = delta and + reason = TNoReason() + or + exists(Operand mid, int d1, int d2 | + boundFlowStep(i, mid, d1, upper) and + boundedNonPhiOperand(mid, b, d2, upper, fromBackEdge, origdelta, reason) and + delta = d1 + d2 and + not exists(getValue(getConstantValue(i))) + ) + or + exists(Operand mid, int factor, int d | + boundFlowStepMul(i, mid, factor) and + boundedNonPhiOperand(mid, b, d, upper, fromBackEdge, origdelta, reason) and + b instanceof ZeroBound and + delta = d*factor and + not exists(getValue(getConstantValue(i))) + ) + or + exists(Operand mid, int factor, int d | + boundFlowStepDiv(i, mid, factor) and + boundedNonPhiOperand(mid, b, d, upper, fromBackEdge, origdelta, reason) and + d >= 0 and + b instanceof ZeroBound and + delta = d / factor and + not exists(getValue(getConstantValue(i))) + ) + or + exists(NarrowingCastInstruction cast | + cast = i and + safeNarrowingCast(cast, upper.booleanNot()) and + boundedCastExpr(cast, b, delta, upper, fromBackEdge, origdelta, reason) + ) +} diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll new file mode 100644 index 000000000000..bc4ea5870e78 --- /dev/null +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll @@ -0,0 +1,54 @@ +import cpp + +private import semmle.code.cpp.ir.IR +// TODO: move this dependency +import semmle.code.cpp.ir.internal.IntegerConstant + +// TODO: move this out of test code +language[monotonicAggregates] +IntValue getConstantValue(Instruction instr) { + result = instr.(IntegerConstantInstruction).getValue().toInt() or + exists(BinaryInstruction binInstr, IntValue left, IntValue right | + binInstr = instr and + left = getConstantValue(binInstr.getLeftOperand()) and + right = getConstantValue(binInstr.getRightOperand()) and + ( + binInstr instanceof AddInstruction and result = add(left, right) or + binInstr instanceof SubInstruction and result = sub(left, right) or + binInstr instanceof MulInstruction and result = mul(left, right) or + binInstr instanceof DivInstruction and result = div(left, right) + ) + ) or + result = getConstantValue(instr.(CopyInstruction).getSourceValue()) or + exists(PhiInstruction phi | + phi = instr and + result = max(PhiOperand operand | operand = phi.getAnOperand() | getConstantValue(operand.getDefinitionInstruction())) and + result = min(PhiOperand operand | operand = phi.getAnOperand() | getConstantValue(operand.getDefinitionInstruction())) + ) +} + +predicate valueFlowStep(Instruction i, Operand op, int delta) { + i.getAnOperand().(CopySourceOperand) = op and delta = 0 + or + exists(Operand x | + i.(AddInstruction).getAnOperand() = op and + i.(AddInstruction).getAnOperand() = x and + op != x + | + delta = getValue(getConstantValue(x.getDefinitionInstruction())) + ) + or + exists(Operand x | + i.(SubInstruction).getAnOperand().(LeftOperand) = op and + i.(SubInstruction).getAnOperand().(RightOperand) = x + | + delta = -getValue(getConstantValue(x.getDefinitionInstruction())) + ) +} + +predicate backEdge(PhiInstruction phi, PhiOperand op) { + phi.getAnOperand() = op and + ( + phi.getBlock().dominates(op.getPredecessorBlock()) + ) +} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected new file mode 100644 index 000000000000..52f747744a61 --- /dev/null +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -0,0 +1,1714 @@ +instructionBounds +| test.c:3:5:3:9 | VariableAddress: test1 | test.c:3:5:3:9 | Address | 0 | false | NoReason | +| test.c:3:5:3:9 | VariableAddress: test1 | test.c:3:5:3:9 | Address | 0 | true | NoReason | +| test.c:3:5:3:9 | VariableAddress: test1 | test.c:3:5:3:9 | VariableAddress: test1 | 0 | false | NoReason | +| test.c:3:5:3:9 | VariableAddress: test1 | test.c:3:5:3:9 | VariableAddress: test1 | 0 | true | NoReason | +| test.c:3:15:3:15 | InitializeParameter: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:3:15:3:15 | InitializeParameter: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:3:15:3:15 | InitializeParameter: x | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:3:15:3:15 | InitializeParameter: x | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | +| test.c:3:15:3:15 | InitializeParameter: x | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:3:15:3:15 | InitializeParameter: x | test.c:7:3:7:11 | Phi | 0 | true | NoReason | +| test.c:3:15:3:15 | VariableAddress: x | test.c:3:15:3:15 | Address | 0 | false | NoReason | +| test.c:3:15:3:15 | VariableAddress: x | test.c:3:15:3:15 | Address | 0 | true | NoReason | +| test.c:3:15:3:15 | VariableAddress: x | test.c:3:15:3:15 | VariableAddress: x | 0 | false | NoReason | +| test.c:3:15:3:15 | VariableAddress: x | test.c:3:15:3:15 | VariableAddress: x | 0 | true | NoReason | +| test.c:3:22:3:22 | InitializeParameter: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:3:22:3:22 | InitializeParameter: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:3:22:3:22 | InitializeParameter: y | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:3:22:3:22 | InitializeParameter: y | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | +| test.c:3:22:3:22 | InitializeParameter: y | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:3:22:3:22 | InitializeParameter: y | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | +| test.c:3:22:3:22 | VariableAddress: y | test.c:3:22:3:22 | Address | 0 | false | NoReason | +| test.c:3:22:3:22 | VariableAddress: y | test.c:3:22:3:22 | Address | 0 | true | NoReason | +| test.c:3:22:3:22 | VariableAddress: y | test.c:3:22:3:22 | VariableAddress: y | 0 | false | NoReason | +| test.c:3:22:3:22 | VariableAddress: y | test.c:3:22:3:22 | VariableAddress: y | 0 | true | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:4:7:4:7 | Load: x | 0 | false | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:4:7:4:7 | Load: x | 0 | true | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:4:7:4:11 | Left | 0 | false | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:4:7:4:11 | Left | 0 | true | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:4:7:4:7 | Load: x | test.c:7:3:7:11 | Phi | 0 | true | NoReason | +| test.c:4:7:4:7 | VariableAddress: x | test.c:4:7:4:7 | Address | 0 | false | NoReason | +| test.c:4:7:4:7 | VariableAddress: x | test.c:4:7:4:7 | Address | 0 | true | NoReason | +| test.c:4:7:4:7 | VariableAddress: x | test.c:4:7:4:7 | VariableAddress: x | 0 | false | NoReason | +| test.c:4:7:4:7 | VariableAddress: x | test.c:4:7:4:7 | VariableAddress: x | 0 | true | NoReason | +| test.c:4:7:4:11 | CompareLT: ... < ... | test.c:4:7:4:11 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:4:7:4:11 | CompareLT: ... < ... | test.c:4:7:4:11 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:4:7:4:11 | CompareLT: ... < ... | test.c:4:7:4:11 | Condition | 0 | false | NoReason | +| test.c:4:7:4:11 | CompareLT: ... < ... | test.c:4:7:4:11 | Condition | 0 | true | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:4:7:4:11 | Right | 0 | false | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:4:7:4:11 | Right | 0 | true | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:4:11:4:11 | Load: y | 0 | false | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:4:11:4:11 | Load: y | 0 | true | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:4:11:4:11 | Load: y | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | +| test.c:4:11:4:11 | VariableAddress: y | test.c:4:11:4:11 | Address | 0 | false | NoReason | +| test.c:4:11:4:11 | VariableAddress: y | test.c:4:11:4:11 | Address | 0 | true | NoReason | +| test.c:4:11:4:11 | VariableAddress: y | test.c:4:11:4:11 | VariableAddress: y | 0 | false | NoReason | +| test.c:4:11:4:11 | VariableAddress: y | test.c:4:11:4:11 | VariableAddress: y | 0 | true | NoReason | +| test.c:5:5:5:5 | VariableAddress: x | test.c:5:5:5:5 | VariableAddress: x | 0 | false | NoReason | +| test.c:5:5:5:5 | VariableAddress: x | test.c:5:5:5:5 | VariableAddress: x | 0 | true | NoReason | +| test.c:5:5:5:5 | VariableAddress: x | test.c:5:5:5:9 | Address | 0 | false | NoReason | +| test.c:5:5:5:5 | VariableAddress: x | test.c:5:5:5:9 | Address | 0 | true | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:5:5:5:9 | Store: ... = ... | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:5:5:5:9 | Store: ... = ... | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:5:5:5:9 | Store: ... = ... | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:5:5:5:9 | Store: ... = ... | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:5:5:5:9 | CopySource | 0 | false | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:5:5:5:9 | CopySource | 0 | true | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:5:5:5:9 | Store: ... = ... | 0 | false | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:5:5:5:9 | Store: ... = ... | 0 | true | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:5:9:5:9 | Load: y | 0 | false | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:5:9:5:9 | Load: y | 0 | true | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:7:3:7:11 | Phi | 0 | true | NoReason | +| test.c:5:5:5:9 | Store: ... = ... | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | Load: y | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | Load: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | Load: y | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | Load: y | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | Load: y | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:5:5:5:9 | CopySource | 0 | false | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:5:5:5:9 | CopySource | 0 | true | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:5:9:5:9 | Load: y | 0 | false | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:5:9:5:9 | Load: y | 0 | true | NoReason | +| test.c:5:9:5:9 | Load: y | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | VariableAddress: y | test.c:5:9:5:9 | Address | 0 | false | NoReason | +| test.c:5:9:5:9 | VariableAddress: y | test.c:5:9:5:9 | Address | 0 | true | NoReason | +| test.c:5:9:5:9 | VariableAddress: y | test.c:5:9:5:9 | VariableAddress: y | 0 | false | NoReason | +| test.c:5:9:5:9 | VariableAddress: y | test.c:5:9:5:9 | VariableAddress: y | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi: return ... | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi: return ... | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi: return ... | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi: return ... | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:7:3:7:11 | VariableAddress: return ... | test.c:7:3:7:11 | VariableAddress: return ... | 0 | false | NoReason | +| test.c:7:3:7:11 | VariableAddress: return ... | test.c:7:3:7:11 | VariableAddress: return ... | 0 | true | NoReason | +| test.c:7:3:7:11 | VariableAddress: return ... | test.c:7:10:7:10 | Address | 0 | false | NoReason | +| test.c:7:3:7:11 | VariableAddress: return ... | test.c:7:10:7:10 | Address | 0 | true | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | Load: x | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | Load: x | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | Load: x | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | Load: x | 0 | false | NoReason | +| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | Load: x | 0 | true | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:3:5:3:9 | ReturnValue | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:3:5:3:9 | ReturnValue | 0 | true | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | Store: x | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | Store: x | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | Store: x | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | Load: x | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | Load: x | 0 | true | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | Store: x | 0 | false | NoReason | +| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | Store: x | 0 | true | NoReason | +| test.c:7:10:7:10 | VariableAddress: x | test.c:7:10:7:10 | Address | 0 | false | NoReason | +| test.c:7:10:7:10 | VariableAddress: x | test.c:7:10:7:10 | Address | 0 | true | NoReason | +| test.c:7:10:7:10 | VariableAddress: x | test.c:7:10:7:10 | VariableAddress: x | 0 | false | NoReason | +| test.c:7:10:7:10 | VariableAddress: x | test.c:7:10:7:10 | VariableAddress: x | 0 | true | NoReason | +| test.c:11:5:11:9 | VariableAddress: test2 | test.c:11:5:11:9 | Address | 0 | false | NoReason | +| test.c:11:5:11:9 | VariableAddress: test2 | test.c:11:5:11:9 | Address | 0 | true | NoReason | +| test.c:11:5:11:9 | VariableAddress: test2 | test.c:11:5:11:9 | VariableAddress: test2 | 0 | false | NoReason | +| test.c:11:5:11:9 | VariableAddress: test2 | test.c:11:5:11:9 | VariableAddress: test2 | 0 | true | NoReason | +| test.c:11:15:11:15 | InitializeParameter: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:11:15:11:15 | InitializeParameter: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:11:15:11:15 | InitializeParameter: x | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | +| test.c:11:15:11:15 | InitializeParameter: x | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | +| test.c:11:15:11:15 | InitializeParameter: x | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | +| test.c:11:15:11:15 | InitializeParameter: x | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | +| test.c:11:15:11:15 | VariableAddress: x | test.c:11:15:11:15 | Address | 0 | false | NoReason | +| test.c:11:15:11:15 | VariableAddress: x | test.c:11:15:11:15 | Address | 0 | true | NoReason | +| test.c:11:15:11:15 | VariableAddress: x | test.c:11:15:11:15 | VariableAddress: x | 0 | false | NoReason | +| test.c:11:15:11:15 | VariableAddress: x | test.c:11:15:11:15 | VariableAddress: x | 0 | true | NoReason | +| test.c:11:22:11:22 | InitializeParameter: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:11:22:11:22 | InitializeParameter: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:11:22:11:22 | InitializeParameter: y | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | +| test.c:11:22:11:22 | InitializeParameter: y | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | +| test.c:11:22:11:22 | InitializeParameter: y | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | +| test.c:11:22:11:22 | InitializeParameter: y | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | +| test.c:11:22:11:22 | VariableAddress: y | test.c:11:22:11:22 | Address | 0 | false | NoReason | +| test.c:11:22:11:22 | VariableAddress: y | test.c:11:22:11:22 | Address | 0 | true | NoReason | +| test.c:11:22:11:22 | VariableAddress: y | test.c:11:22:11:22 | VariableAddress: y | 0 | false | NoReason | +| test.c:11:22:11:22 | VariableAddress: y | test.c:11:22:11:22 | VariableAddress: y | 0 | true | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:12:7:12:7 | Load: x | 0 | false | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:12:7:12:7 | Load: x | 0 | true | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:12:7:12:11 | Left | 0 | false | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:12:7:12:11 | Left | 0 | true | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | +| test.c:12:7:12:7 | Load: x | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | +| test.c:12:7:12:7 | VariableAddress: x | test.c:12:7:12:7 | Address | 0 | false | NoReason | +| test.c:12:7:12:7 | VariableAddress: x | test.c:12:7:12:7 | Address | 0 | true | NoReason | +| test.c:12:7:12:7 | VariableAddress: x | test.c:12:7:12:7 | VariableAddress: x | 0 | false | NoReason | +| test.c:12:7:12:7 | VariableAddress: x | test.c:12:7:12:7 | VariableAddress: x | 0 | true | NoReason | +| test.c:12:7:12:11 | CompareLT: ... < ... | test.c:12:7:12:11 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:12:7:12:11 | CompareLT: ... < ... | test.c:12:7:12:11 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:12:7:12:11 | CompareLT: ... < ... | test.c:12:7:12:11 | Condition | 0 | false | NoReason | +| test.c:12:7:12:11 | CompareLT: ... < ... | test.c:12:7:12:11 | Condition | 0 | true | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:12:7:12:11 | Right | 0 | false | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:12:7:12:11 | Right | 0 | true | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:12:11:12:11 | Load: y | 0 | false | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:12:11:12:11 | Load: y | 0 | true | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | +| test.c:12:11:12:11 | Load: y | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | +| test.c:12:11:12:11 | VariableAddress: y | test.c:12:11:12:11 | Address | 0 | false | NoReason | +| test.c:12:11:12:11 | VariableAddress: y | test.c:12:11:12:11 | Address | 0 | true | NoReason | +| test.c:12:11:12:11 | VariableAddress: y | test.c:12:11:12:11 | VariableAddress: y | 0 | false | NoReason | +| test.c:12:11:12:11 | VariableAddress: y | test.c:12:11:12:11 | VariableAddress: y | 0 | true | NoReason | +| test.c:13:5:13:5 | VariableAddress: x | test.c:13:5:13:5 | VariableAddress: x | 0 | false | NoReason | +| test.c:13:5:13:5 | VariableAddress: x | test.c:13:5:13:5 | VariableAddress: x | 0 | true | NoReason | +| test.c:13:5:13:5 | VariableAddress: x | test.c:13:5:13:9 | Address | 0 | false | NoReason | +| test.c:13:5:13:5 | VariableAddress: x | test.c:13:5:13:9 | Address | 0 | true | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:13:5:13:9 | Store: ... = ... | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:13:5:13:9 | Store: ... = ... | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:13:5:13:9 | Store: ... = ... | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:13:5:13:9 | Store: ... = ... | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:13:5:13:9 | CopySource | 0 | false | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:13:5:13:9 | CopySource | 0 | true | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:13:5:13:9 | Store: ... = ... | 0 | false | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:13:5:13:9 | Store: ... = ... | 0 | true | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:13:9:13:9 | Load: y | 0 | false | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:13:9:13:9 | Load: y | 0 | true | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:13:5:13:9 | Store: ... = ... | test.c:17:3:17:11 | Phi | 0 | false | NoReason | +| test.c:13:5:13:9 | Store: ... = ... | test.c:17:3:17:11 | Phi | 0 | true | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | Load: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | Load: y | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | Load: y | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | Load: y | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:13:5:13:9 | CopySource | 0 | false | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:13:5:13:9 | CopySource | 0 | true | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:13:9:13:9 | Load: y | 0 | false | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:13:9:13:9 | Load: y | 0 | true | NoReason | +| test.c:13:9:13:9 | Load: y | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | VariableAddress: y | test.c:13:9:13:9 | Address | 0 | false | NoReason | +| test.c:13:9:13:9 | VariableAddress: y | test.c:13:9:13:9 | Address | 0 | true | NoReason | +| test.c:13:9:13:9 | VariableAddress: y | test.c:13:9:13:9 | VariableAddress: y | 0 | false | NoReason | +| test.c:13:9:13:9 | VariableAddress: y | test.c:13:9:13:9 | VariableAddress: y | 0 | true | NoReason | +| test.c:15:5:15:5 | VariableAddress: x | test.c:15:5:15:5 | VariableAddress: x | 0 | false | NoReason | +| test.c:15:5:15:5 | VariableAddress: x | test.c:15:5:15:5 | VariableAddress: x | 0 | true | NoReason | +| test.c:15:5:15:5 | VariableAddress: x | test.c:15:5:15:11 | Address | 0 | false | NoReason | +| test.c:15:5:15:5 | VariableAddress: x | test.c:15:5:15:11 | Address | 0 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:11:15:11:15 | InitializeParameter: x | -1 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | Store: ... = ... | test.c:12:7:12:7 | CopySource | -1 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:12:7:12:7 | CopySource | -2 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:12:7:12:11 | Right | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | Store: ... = ... | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | Store: ... = ... | test.c:12:11:12:11 | Load: y | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | Store: ... = ... | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:5:15:11 | CopySource | 0 | false | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:5:15:11 | CopySource | 0 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:5:15:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:5:15:11 | Store: ... = ... | 0 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | CopySource | -1 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | CopySource | -2 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | Load: x | -1 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | Load: x | -2 | false | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | Load: x | -2 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Left | -1 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Left | -2 | false | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Left | -2 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Sub: ... - ... | 0 | false | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Sub: ... - ... | 0 | true | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:17:3:17:11 | Phi | 0 | false | NoReason | +| test.c:15:5:15:11 | Store: ... = ... | test.c:17:3:17:11 | Phi | 0 | true | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | Load: x | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:12:7:12:11 | Right | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | Load: x | test.c:12:11:12:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | Load: x | test.c:12:11:12:11 | Load: y | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | Load: x | test.c:13:9:13:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | Load: x | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:15:9:15:9 | Load: x | 0 | false | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:15:9:15:9 | Load: x | 0 | true | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:15:9:15:11 | Left | 0 | false | NoReason | +| test.c:15:9:15:9 | Load: x | test.c:15:9:15:11 | Left | 0 | true | NoReason | +| test.c:15:9:15:9 | VariableAddress: x | test.c:15:9:15:9 | Address | 0 | false | NoReason | +| test.c:15:9:15:9 | VariableAddress: x | test.c:15:9:15:9 | Address | 0 | true | NoReason | +| test.c:15:9:15:9 | VariableAddress: x | test.c:15:9:15:9 | VariableAddress: x | 0 | false | NoReason | +| test.c:15:9:15:9 | VariableAddress: x | test.c:15:9:15:9 | VariableAddress: x | 0 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:11:15:11:15 | InitializeParameter: x | -1 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:7:12:7 | CopySource | -1 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:7:12:7 | CopySource | -2 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:7:12:11 | Right | -2 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:11:12:11 | Load: y | -2 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:5:15:11 | CopySource | 0 | false | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:5:15:11 | CopySource | 0 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | CopySource | -1 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | CopySource | -2 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | Load: x | -1 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | Load: x | -2 | false | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | Load: x | -2 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Left | -1 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Left | -2 | false | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Left | -2 | true | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Sub: ... - ... | 0 | false | NoReason | +| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Sub: ... - ... | 0 | true | NoReason | +| test.c:15:11:15:11 | Constant: 2 | file://:0:0:0:0 | 0 | 2 | false | NoReason | +| test.c:15:11:15:11 | Constant: 2 | file://:0:0:0:0 | 0 | 2 | true | NoReason | +| test.c:15:11:15:11 | Constant: 2 | test.c:15:9:15:11 | Right | 0 | false | NoReason | +| test.c:15:11:15:11 | Constant: 2 | test.c:15:9:15:11 | Right | 0 | true | NoReason | +| test.c:15:11:15:11 | Constant: 2 | test.c:15:11:15:11 | Constant: 2 | 0 | false | NoReason | +| test.c:15:11:15:11 | Constant: 2 | test.c:15:11:15:11 | Constant: 2 | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi: return ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:17:3:17:11 | Phi: return ... | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi: return ... | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:17:3:17:11 | Phi: return ... | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi: return ... | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi: return ... | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:17:3:17:11 | Phi: return ... | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi: return ... | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi: return ... | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi: return ... | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:17:3:17:11 | VariableAddress: return ... | test.c:17:3:17:11 | VariableAddress: return ... | 0 | false | NoReason | +| test.c:17:3:17:11 | VariableAddress: return ... | test.c:17:3:17:11 | VariableAddress: return ... | 0 | true | NoReason | +| test.c:17:3:17:11 | VariableAddress: return ... | test.c:17:10:17:10 | Address | 0 | false | NoReason | +| test.c:17:3:17:11 | VariableAddress: return ... | test.c:17:10:17:10 | Address | 0 | true | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | Load: x | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | Load: x | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | Load: x | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | Load: x | 0 | false | NoReason | +| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | Load: x | 0 | true | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:11:5:11:9 | ReturnValue | 0 | false | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:11:5:11:9 | ReturnValue | 0 | true | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | Store: x | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | Store: x | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | Store: x | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | Load: x | 0 | false | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | Load: x | 0 | true | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | Store: x | 0 | false | NoReason | +| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | Store: x | 0 | true | NoReason | +| test.c:17:10:17:10 | VariableAddress: x | test.c:17:10:17:10 | Address | 0 | false | NoReason | +| test.c:17:10:17:10 | VariableAddress: x | test.c:17:10:17:10 | Address | 0 | true | NoReason | +| test.c:17:10:17:10 | VariableAddress: x | test.c:17:10:17:10 | VariableAddress: x | 0 | false | NoReason | +| test.c:17:10:17:10 | VariableAddress: x | test.c:17:10:17:10 | VariableAddress: x | 0 | true | NoReason | +| test.c:21:5:21:9 | VariableAddress: test3 | test.c:21:5:21:9 | Address | 0 | false | NoReason | +| test.c:21:5:21:9 | VariableAddress: test3 | test.c:21:5:21:9 | Address | 0 | true | NoReason | +| test.c:21:5:21:9 | VariableAddress: test3 | test.c:21:5:21:9 | VariableAddress: test3 | 0 | false | NoReason | +| test.c:21:5:21:9 | VariableAddress: test3 | test.c:21:5:21:9 | VariableAddress: test3 | 0 | true | NoReason | +| test.c:21:15:21:15 | InitializeParameter: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:21:15:21:15 | InitializeParameter: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:21:15:21:15 | InitializeParameter: x | test.c:23:19:23:19 | CopySource | 0 | false | NoReason | +| test.c:21:15:21:15 | InitializeParameter: x | test.c:23:19:23:19 | CopySource | 0 | true | NoReason | +| test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | Address | 0 | false | NoReason | +| test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | Address | 0 | true | NoReason | +| test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | VariableAddress: x | 0 | false | NoReason | +| test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | VariableAddress: x | 0 | true | NoReason | +| test.c:21:24:21:24 | InitializeParameter: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | +| test.c:21:24:21:24 | InitializeParameter: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | +| test.c:21:24:21:24 | InitializeParameter: p | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | +| test.c:21:24:21:24 | InitializeParameter: p | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | +| test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | Address | 0 | false | NoReason | +| test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | Address | 0 | true | NoReason | +| test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | VariableAddress: p | 0 | false | NoReason | +| test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | VariableAddress: p | 0 | true | NoReason | +| test.c:22:7:22:7 | Uninitialized: definition of i | test.c:22:7:22:7 | Uninitialized: definition of i | 0 | false | NoReason | +| test.c:22:7:22:7 | Uninitialized: definition of i | test.c:22:7:22:7 | Uninitialized: definition of i | 0 | true | NoReason | +| test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | Address | 0 | false | NoReason | +| test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | Address | 0 | true | NoReason | +| test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | false | NoReason | +| test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | true | NoReason | +| test.c:23:8:23:8 | VariableAddress: i | test.c:23:8:23:8 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:8:23:8 | VariableAddress: i | test.c:23:8:23:8 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:8:23:8 | VariableAddress: i | test.c:23:8:23:12 | Address | 0 | false | NoReason | +| test.c:23:8:23:8 | VariableAddress: i | test.c:23:8:23:12 | Address | 0 | true | NoReason | +| test.c:23:8:23:12 | Store: ... = ... | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:8:23:12 | Store: ... = ... | test.c:23:8:23:12 | Store: ... = ... | 0 | true | NoReason | +| test.c:23:8:23:12 | Store: ... = ... | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:8:23:12 | Store: ... = ... | test.c:23:15:23:15 | Phi | 0 | true | NoReason | +| test.c:23:12:23:12 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:12:23:12 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | true | NoReason | +| test.c:23:12:23:12 | Constant: 0 | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:12:23:12 | Constant: 0 | test.c:23:8:23:12 | CopySource | 0 | true | NoReason | +| test.c:23:12:23:12 | Constant: 0 | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:12:23:12 | Constant: 0 | test.c:23:12:23:12 | Constant: 0 | 0 | true | NoReason | +| test.c:23:15:23:15 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Load: i | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Load: i | 0 | true | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:15:23:19 | Left | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:15:23:19 | Left | 0 | true | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Load: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | VariableAddress: i | test.c:23:15:23:15 | Address | 0 | false | NoReason | +| test.c:23:15:23:15 | VariableAddress: i | test.c:23:15:23:15 | Address | 0 | true | NoReason | +| test.c:23:15:23:15 | VariableAddress: i | test.c:23:15:23:15 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:15:23:15 | VariableAddress: i | test.c:23:15:23:15 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:15:23:19 | CompareLT: ... < ... | test.c:23:15:23:19 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:23:15:23:19 | CompareLT: ... < ... | test.c:23:15:23:19 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:23:15:23:19 | CompareLT: ... < ... | test.c:23:15:23:19 | Condition | 0 | false | NoReason | +| test.c:23:15:23:19 | CompareLT: ... < ... | test.c:23:15:23:19 | Condition | 0 | true | NoReason | +| test.c:23:19:23:19 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:23:19:23:19 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:23:19:23:19 | Load: x | test.c:23:15:23:19 | Right | 0 | false | NoReason | +| test.c:23:19:23:19 | Load: x | test.c:23:15:23:19 | Right | 0 | true | NoReason | +| test.c:23:19:23:19 | Load: x | test.c:23:19:23:19 | CopySource | 0 | false | NoReason | +| test.c:23:19:23:19 | Load: x | test.c:23:19:23:19 | CopySource | 0 | true | NoReason | +| test.c:23:19:23:19 | Load: x | test.c:23:19:23:19 | Load: x | 0 | false | NoReason | +| test.c:23:19:23:19 | Load: x | test.c:23:19:23:19 | Load: x | 0 | true | NoReason | +| test.c:23:19:23:19 | VariableAddress: x | test.c:23:19:23:19 | Address | 0 | false | NoReason | +| test.c:23:19:23:19 | VariableAddress: x | test.c:23:19:23:19 | Address | 0 | true | NoReason | +| test.c:23:19:23:19 | VariableAddress: x | test.c:23:19:23:19 | VariableAddress: x | 0 | false | NoReason | +| test.c:23:19:23:19 | VariableAddress: x | test.c:23:19:23:19 | VariableAddress: x | 0 | true | NoReason | +| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:22 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:22 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:24 | Address | 0 | false | NoReason | +| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:24 | Address | 0 | false | NoReason | +| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:24 | Address | 0 | true | NoReason | +| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:24 | Address | 0 | true | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:8:23:12 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:8:23:12 | Store: ... = ... | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:12:23:12 | Constant: 0 | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | CopySource | 1 | true | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | Phi | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | Phi: i | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | Phi: i | 1 | true | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:19 | Right | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:19:23:19 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:19:23:19 | Load: x | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Add: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Add: ... ++ | 0 | true | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | CopySource | 1 | true | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Left | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Left | 1 | true | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 1 | true | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Right | 0 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | Add: ... ++ | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | +| test.c:23:22:23:24 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:22:23:24 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:23:22:23:24 | Constant: ... ++ | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | Constant: ... ++ | test.c:23:22:23:24 | Constant: ... ++ | 0 | true | NoReason | +| test.c:23:22:23:24 | Constant: ... ++ | test.c:23:22:23:24 | Right | 0 | false | NoReason | +| test.c:23:22:23:24 | Constant: ... ++ | test.c:23:22:23:24 | Right | 0 | true | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | Left | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | Left | 0 | true | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 0 | true | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Load: ... ++ | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:8:23:12 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:8:23:12 | Store: ... = ... | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:12:23:12 | Constant: 0 | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | CopySource | 1 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi | 0 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi: i | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi: i | 1 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:19 | Right | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:19:23:19 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:19:23:19 | Load: x | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Add: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Add: ... ++ | 0 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | CopySource | 1 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Left | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Left | 1 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 1 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Right | 0 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Store: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Store: ... ++ | 0 | true | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | Store: ... ++ | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | Load: p | 0 | false | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | Load: p | 0 | true | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:24:5:24:8 | Left | 0 | false | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:24:5:24:8 | Left | 0 | true | NoReason | +| test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | Address | 0 | false | NoReason | +| test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | Address | 0 | true | NoReason | +| test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | VariableAddress: p | 0 | false | NoReason | +| test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | VariableAddress: p | 0 | true | NoReason | +| test.c:24:5:24:8 | PointerAdd: access to array | test.c:24:5:24:8 | Address | 0 | false | NoReason | +| test.c:24:5:24:8 | PointerAdd: access to array | test.c:24:5:24:8 | Address | 0 | true | NoReason | +| test.c:24:5:24:8 | PointerAdd: access to array | test.c:24:5:24:8 | PointerAdd: access to array | 0 | false | NoReason | +| test.c:24:5:24:8 | PointerAdd: access to array | test.c:24:5:24:8 | PointerAdd: access to array | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | Load: i | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | Load: i | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | Load: i | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | Load: i | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:24:5:24:8 | Right | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:24:5:24:8 | Right | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | Load: i | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | Load: i | 0 | true | NoReason | +| test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | Address | 0 | false | NoReason | +| test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | Address | 0 | true | NoReason | +| test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | VariableAddress: i | 0 | false | NoReason | +| test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | VariableAddress: i | 0 | true | NoReason | +| test.c:29:5:29:9 | VariableAddress: test4 | test.c:29:5:29:9 | Address | 0 | false | NoReason | +| test.c:29:5:29:9 | VariableAddress: test4 | test.c:29:5:29:9 | Address | 0 | true | NoReason | +| test.c:29:5:29:9 | VariableAddress: test4 | test.c:29:5:29:9 | VariableAddress: test4 | 0 | false | NoReason | +| test.c:29:5:29:9 | VariableAddress: test4 | test.c:29:5:29:9 | VariableAddress: test4 | 0 | true | NoReason | +| test.c:29:16:29:20 | InitializeParameter: begin | test.c:29:16:29:20 | InitializeParameter: begin | 0 | false | NoReason | +| test.c:29:16:29:20 | InitializeParameter: begin | test.c:29:16:29:20 | InitializeParameter: begin | 0 | true | NoReason | +| test.c:29:16:29:20 | InitializeParameter: begin | test.c:30:10:30:14 | Phi | 0 | false | NoReason | +| test.c:29:16:29:20 | InitializeParameter: begin | test.c:30:10:30:14 | Phi | 0 | true | NoReason | +| test.c:29:16:29:20 | VariableAddress: begin | test.c:29:16:29:20 | Address | 0 | false | NoReason | +| test.c:29:16:29:20 | VariableAddress: begin | test.c:29:16:29:20 | Address | 0 | true | NoReason | +| test.c:29:16:29:20 | VariableAddress: begin | test.c:29:16:29:20 | VariableAddress: begin | 0 | false | NoReason | +| test.c:29:16:29:20 | VariableAddress: begin | test.c:29:16:29:20 | VariableAddress: begin | 0 | true | NoReason | +| test.c:29:28:29:30 | InitializeParameter: end | test.c:29:28:29:30 | InitializeParameter: end | 0 | false | NoReason | +| test.c:29:28:29:30 | InitializeParameter: end | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | NoReason | +| test.c:29:28:29:30 | InitializeParameter: end | test.c:30:18:30:20 | CopySource | 0 | false | NoReason | +| test.c:29:28:29:30 | InitializeParameter: end | test.c:30:18:30:20 | CopySource | 0 | true | NoReason | +| test.c:29:28:29:30 | VariableAddress: end | test.c:29:28:29:30 | Address | 0 | false | NoReason | +| test.c:29:28:29:30 | VariableAddress: end | test.c:29:28:29:30 | Address | 0 | true | NoReason | +| test.c:29:28:29:30 | VariableAddress: end | test.c:29:28:29:30 | VariableAddress: end | 0 | false | NoReason | +| test.c:29:28:29:30 | VariableAddress: end | test.c:29:28:29:30 | VariableAddress: end | 0 | true | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | Load: begin | 0 | false | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | Load: begin | 0 | true | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:20 | Left | 0 | false | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:20 | Left | 0 | true | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi: begin | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | VariableAddress: begin | test.c:30:10:30:14 | Address | 0 | false | NoReason | +| test.c:30:10:30:14 | VariableAddress: begin | test.c:30:10:30:14 | Address | 0 | true | NoReason | +| test.c:30:10:30:14 | VariableAddress: begin | test.c:30:10:30:14 | VariableAddress: begin | 0 | false | NoReason | +| test.c:30:10:30:14 | VariableAddress: begin | test.c:30:10:30:14 | VariableAddress: begin | 0 | true | NoReason | +| test.c:30:10:30:20 | CompareLT: ... < ... | test.c:30:10:30:20 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:30:10:30:20 | CompareLT: ... < ... | test.c:30:10:30:20 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:30:10:30:20 | CompareLT: ... < ... | test.c:30:10:30:20 | Condition | 0 | false | NoReason | +| test.c:30:10:30:20 | CompareLT: ... < ... | test.c:30:10:30:20 | Condition | 0 | true | NoReason | +| test.c:30:18:30:20 | Load: end | test.c:29:28:29:30 | InitializeParameter: end | 0 | false | NoReason | +| test.c:30:18:30:20 | Load: end | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | NoReason | +| test.c:30:18:30:20 | Load: end | test.c:30:10:30:20 | Right | 0 | false | NoReason | +| test.c:30:18:30:20 | Load: end | test.c:30:10:30:20 | Right | 0 | true | NoReason | +| test.c:30:18:30:20 | Load: end | test.c:30:18:30:20 | CopySource | 0 | false | NoReason | +| test.c:30:18:30:20 | Load: end | test.c:30:18:30:20 | CopySource | 0 | true | NoReason | +| test.c:30:18:30:20 | Load: end | test.c:30:18:30:20 | Load: end | 0 | false | NoReason | +| test.c:30:18:30:20 | Load: end | test.c:30:18:30:20 | Load: end | 0 | true | NoReason | +| test.c:30:18:30:20 | VariableAddress: end | test.c:30:18:30:20 | Address | 0 | false | NoReason | +| test.c:30:18:30:20 | VariableAddress: end | test.c:30:18:30:20 | Address | 0 | true | NoReason | +| test.c:30:18:30:20 | VariableAddress: end | test.c:30:18:30:20 | VariableAddress: end | 0 | false | NoReason | +| test.c:30:18:30:20 | VariableAddress: end | test.c:30:18:30:20 | VariableAddress: end | 0 | true | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:29:5:29:9 | UnmodeledUse | 0 | false | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:29:5:29:9 | UnmodeledUse | 0 | true | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:5:31:25 | CopySource | 0 | false | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:5:31:25 | CopySource | 0 | true | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:5:31:25 | Store: ... = ... | 0 | false | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:5:31:25 | Store: ... = ... | 0 | true | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:14:31:25 | Add: ... + ... | 0 | false | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:14:31:25 | Add: ... + ... | 0 | true | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:14:31:25 | Left | 1 | false | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:14:31:25 | Left | 1 | true | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:15:31:20 | Load: * ... | 1 | false | NoReason | +| test.c:31:5:31:25 | Store: ... = ... | test.c:31:15:31:20 | Load: * ... | 1 | true | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:31:6:31:10 | Load: begin | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:31:6:31:10 | Load: begin | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:31:6:31:10 | Load: begin | test.c:31:5:31:25 | Address | 0 | false | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:31:5:31:25 | Address | 0 | true | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:31:6:31:10 | Load: begin | 0 | false | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:31:6:31:10 | Load: begin | 0 | true | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:31:6:31:10 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:31:6:31:10 | VariableAddress: begin | test.c:31:6:31:10 | Address | 0 | false | NoReason | +| test.c:31:6:31:10 | VariableAddress: begin | test.c:31:6:31:10 | Address | 0 | true | NoReason | +| test.c:31:6:31:10 | VariableAddress: begin | test.c:31:6:31:10 | VariableAddress: begin | 0 | false | NoReason | +| test.c:31:6:31:10 | VariableAddress: begin | test.c:31:6:31:10 | VariableAddress: begin | 0 | true | NoReason | +| test.c:31:14:31:25 | Add: ... + ... | test.c:31:5:31:25 | CopySource | 0 | false | NoReason | +| test.c:31:14:31:25 | Add: ... + ... | test.c:31:5:31:25 | CopySource | 0 | true | NoReason | +| test.c:31:14:31:25 | Add: ... + ... | test.c:31:14:31:25 | Add: ... + ... | 0 | false | NoReason | +| test.c:31:14:31:25 | Add: ... + ... | test.c:31:14:31:25 | Add: ... + ... | 0 | true | NoReason | +| test.c:31:14:31:25 | Add: ... + ... | test.c:31:14:31:25 | Left | 1 | false | NoReason | +| test.c:31:14:31:25 | Add: ... + ... | test.c:31:14:31:25 | Left | 1 | true | NoReason | +| test.c:31:14:31:25 | Add: ... + ... | test.c:31:15:31:20 | Load: * ... | 1 | false | NoReason | +| test.c:31:14:31:25 | Add: ... + ... | test.c:31:15:31:20 | Load: * ... | 1 | true | NoReason | +| test.c:31:15:31:20 | Load: * ... | test.c:31:14:31:25 | Left | 0 | false | NoReason | +| test.c:31:15:31:20 | Load: * ... | test.c:31:14:31:25 | Left | 0 | true | NoReason | +| test.c:31:15:31:20 | Load: * ... | test.c:31:15:31:20 | Load: * ... | 0 | false | NoReason | +| test.c:31:15:31:20 | Load: * ... | test.c:31:15:31:20 | Load: * ... | 0 | true | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:31:16:31:20 | Load: begin | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:31:16:31:20 | Load: begin | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:31:16:31:20 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:31:15:31:20 | Address | 0 | false | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:31:15:31:20 | Address | 0 | true | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:31:16:31:20 | Load: begin | 0 | false | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:31:16:31:20 | Load: begin | 0 | true | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:31:16:31:20 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:31:16:31:20 | VariableAddress: begin | test.c:31:16:31:20 | Address | 0 | false | NoReason | +| test.c:31:16:31:20 | VariableAddress: begin | test.c:31:16:31:20 | Address | 0 | true | NoReason | +| test.c:31:16:31:20 | VariableAddress: begin | test.c:31:16:31:20 | VariableAddress: begin | 0 | false | NoReason | +| test.c:31:16:31:20 | VariableAddress: begin | test.c:31:16:31:20 | VariableAddress: begin | 0 | true | NoReason | +| test.c:31:25:31:25 | Constant: 1 | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:31:25:31:25 | Constant: 1 | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:31:25:31:25 | Constant: 1 | test.c:31:14:31:25 | Right | 0 | false | NoReason | +| test.c:31:25:31:25 | Constant: 1 | test.c:31:14:31:25 | Right | 0 | true | NoReason | +| test.c:31:25:31:25 | Constant: 1 | test.c:31:25:31:25 | Constant: 1 | 0 | false | NoReason | +| test.c:31:25:31:25 | Constant: 1 | test.c:31:25:31:25 | Constant: 1 | 0 | true | NoReason | +| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:9 | VariableAddress: begin | 0 | false | NoReason | +| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:9 | VariableAddress: begin | 0 | true | NoReason | +| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:11 | Address | 0 | false | NoReason | +| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:11 | Address | 0 | false | NoReason | +| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:11 | Address | 0 | true | NoReason | +| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:11 | Address | 0 | true | NoReason | +| test.c:32:5:32:11 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:32:5:32:11 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:32:5:32:11 | Constant: ... ++ | test.c:32:5:32:11 | Constant: ... ++ | 0 | false | NoReason | +| test.c:32:5:32:11 | Constant: ... ++ | test.c:32:5:32:11 | Constant: ... ++ | 0 | true | NoReason | +| test.c:32:5:32:11 | Constant: ... ++ | test.c:32:5:32:11 | Right | 0 | false | NoReason | +| test.c:32:5:32:11 | Constant: ... ++ | test.c:32:5:32:11 | Right | 0 | true | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | Load: ... ++ | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | Load: ... ++ | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | Load: ... ++ | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | Left | 0 | false | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | Left | 0 | true | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | Load: ... ++ | 0 | false | NoReason | +| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | Load: ... ++ | 0 | true | NoReason | +| test.c:32:5:32:11 | PointerAdd: ... ++ | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | PointerAdd: ... ++ | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | PointerAdd: ... ++ | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | false | NoReason | +| test.c:32:5:32:11 | PointerAdd: ... ++ | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | true | NoReason | +| test.c:32:5:32:11 | Store: ... ++ | test.c:30:10:30:14 | Phi | 0 | false | NoReason | +| test.c:32:5:32:11 | Store: ... ++ | test.c:30:10:30:14 | Phi | 0 | true | NoReason | +| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | false | NoReason | +| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | true | NoReason | +| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | Store: ... ++ | 0 | false | NoReason | +| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | Store: ... ++ | 0 | true | NoReason | +operandBounds +| test.c:3:5:3:9 | Address | test.c:3:5:3:9 | Address | 0 | false | NoReason | +| test.c:3:5:3:9 | Address | test.c:3:5:3:9 | Address | 0 | true | NoReason | +| test.c:3:5:3:9 | Address | test.c:3:5:3:9 | VariableAddress: test1 | 0 | false | NoReason | +| test.c:3:5:3:9 | Address | test.c:3:5:3:9 | VariableAddress: test1 | 0 | true | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:3:5:3:9 | ReturnValue | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:3:5:3:9 | ReturnValue | 0 | true | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:3:5:3:9 | ReturnValue | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:3:5:3:9 | ReturnValue | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:3:5:3:9 | ReturnValue | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | Load: x | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | Load: x | 0 | true | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | Store: x | 0 | false | NoReason | +| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | Store: x | 0 | true | NoReason | +| test.c:3:15:3:15 | Address | test.c:3:15:3:15 | Address | 0 | false | NoReason | +| test.c:3:15:3:15 | Address | test.c:3:15:3:15 | Address | 0 | true | NoReason | +| test.c:3:15:3:15 | Address | test.c:3:15:3:15 | VariableAddress: x | 0 | false | NoReason | +| test.c:3:15:3:15 | Address | test.c:3:15:3:15 | VariableAddress: x | 0 | true | NoReason | +| test.c:3:22:3:22 | Address | test.c:3:22:3:22 | Address | 0 | false | NoReason | +| test.c:3:22:3:22 | Address | test.c:3:22:3:22 | Address | 0 | true | NoReason | +| test.c:3:22:3:22 | Address | test.c:3:22:3:22 | VariableAddress: y | 0 | false | NoReason | +| test.c:3:22:3:22 | Address | test.c:3:22:3:22 | VariableAddress: y | 0 | true | NoReason | +| test.c:4:7:4:7 | Address | test.c:4:7:4:7 | Address | 0 | false | NoReason | +| test.c:4:7:4:7 | Address | test.c:4:7:4:7 | Address | 0 | true | NoReason | +| test.c:4:7:4:7 | Address | test.c:4:7:4:7 | VariableAddress: x | 0 | false | NoReason | +| test.c:4:7:4:7 | Address | test.c:4:7:4:7 | VariableAddress: x | 0 | true | NoReason | +| test.c:4:7:4:7 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:4:7:4:7 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:4:7:4:7 | CopySource | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:4:7:4:7 | CopySource | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | +| test.c:4:7:4:7 | CopySource | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:4:7:4:7 | CopySource | test.c:7:3:7:11 | Phi | 0 | true | NoReason | +| test.c:4:7:4:11 | Condition | test.c:4:7:4:11 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:4:7:4:11 | Condition | test.c:4:7:4:11 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:4:7:4:11 | Condition | test.c:4:7:4:11 | Condition | 0 | false | NoReason | +| test.c:4:7:4:11 | Condition | test.c:4:7:4:11 | Condition | 0 | true | NoReason | +| test.c:4:7:4:11 | Left | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:4:7:4:11 | Left | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:4:7:4:11 | Left | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:4:7:4:11 | Left | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | +| test.c:4:7:4:11 | Left | test.c:4:7:4:7 | Load: x | 0 | false | NoReason | +| test.c:4:7:4:11 | Left | test.c:4:7:4:7 | Load: x | 0 | true | NoReason | +| test.c:4:7:4:11 | Left | test.c:4:7:4:11 | Left | 0 | false | NoReason | +| test.c:4:7:4:11 | Left | test.c:4:7:4:11 | Left | 0 | true | NoReason | +| test.c:4:7:4:11 | Left | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:4:7:4:11 | Left | test.c:7:3:7:11 | Phi | 0 | true | NoReason | +| test.c:4:7:4:11 | Right | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:4:7:4:11 | Right | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:4:7:4:11 | Right | test.c:4:7:4:11 | Right | 0 | false | NoReason | +| test.c:4:7:4:11 | Right | test.c:4:7:4:11 | Right | 0 | true | NoReason | +| test.c:4:7:4:11 | Right | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:4:7:4:11 | Right | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | +| test.c:4:7:4:11 | Right | test.c:4:11:4:11 | Load: y | 0 | false | NoReason | +| test.c:4:7:4:11 | Right | test.c:4:11:4:11 | Load: y | 0 | true | NoReason | +| test.c:4:7:4:11 | Right | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:4:7:4:11 | Right | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | +| test.c:4:11:4:11 | Address | test.c:4:11:4:11 | Address | 0 | false | NoReason | +| test.c:4:11:4:11 | Address | test.c:4:11:4:11 | Address | 0 | true | NoReason | +| test.c:4:11:4:11 | Address | test.c:4:11:4:11 | VariableAddress: y | 0 | false | NoReason | +| test.c:4:11:4:11 | Address | test.c:4:11:4:11 | VariableAddress: y | 0 | true | NoReason | +| test.c:4:11:4:11 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:4:11:4:11 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:4:11:4:11 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:4:11:4:11 | CopySource | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | +| test.c:4:11:4:11 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:4:11:4:11 | CopySource | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | +| test.c:5:5:5:9 | Address | test.c:5:5:5:5 | VariableAddress: x | 0 | false | NoReason | +| test.c:5:5:5:9 | Address | test.c:5:5:5:5 | VariableAddress: x | 0 | true | NoReason | +| test.c:5:5:5:9 | Address | test.c:5:5:5:9 | Address | 0 | false | NoReason | +| test.c:5:5:5:9 | Address | test.c:5:5:5:9 | Address | 0 | true | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:5:5:5:9 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:5:5:5:9 | CopySource | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:5:5:5:9 | CopySource | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:5:5:5:9 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:5:5:5:9 | CopySource | 0 | false | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:5:5:5:9 | CopySource | 0 | true | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:5:9:5:9 | Load: y | 0 | false | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:5:9:5:9 | Load: y | 0 | true | NoReason | +| test.c:5:5:5:9 | CopySource | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | Address | test.c:5:9:5:9 | Address | 0 | false | NoReason | +| test.c:5:9:5:9 | Address | test.c:5:9:5:9 | Address | 0 | true | NoReason | +| test.c:5:9:5:9 | Address | test.c:5:9:5:9 | VariableAddress: y | 0 | false | NoReason | +| test.c:5:9:5:9 | Address | test.c:5:9:5:9 | VariableAddress: y | 0 | true | NoReason | +| test.c:5:9:5:9 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:5:9:5:9 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:5:9:5:9 | CopySource | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | CopySource | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | CopySource | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:5:9:5:9 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:5:9:5:9 | CopySource | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | +| test.c:5:9:5:9 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:5:9:5:9 | CopySource | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | +| test.c:5:9:5:9 | CopySource | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:4:7:4:11 | Right | 0 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:4:11:4:11 | Load: y | 0 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:5:5:5:9 | CopySource | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:5:5:5:9 | CopySource | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:5:5:5:9 | Store: ... = ... | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:5:5:5:9 | Store: ... = ... | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | Load: y | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | Load: y | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 0 | true | NoReason | +| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | Address | test.c:7:3:7:11 | VariableAddress: return ... | 0 | false | NoReason | +| test.c:7:10:7:10 | Address | test.c:7:3:7:11 | VariableAddress: return ... | 0 | true | NoReason | +| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | Address | 0 | false | NoReason | +| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | Address | 0 | false | NoReason | +| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | Address | 0 | true | NoReason | +| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | Address | 0 | true | NoReason | +| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | VariableAddress: x | 0 | false | NoReason | +| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | VariableAddress: x | 0 | true | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:7:10:7:10 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | Load: x | 0 | false | NoReason | +| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | Load: x | 0 | true | NoReason | +| test.c:11:5:11:9 | Address | test.c:11:5:11:9 | Address | 0 | false | NoReason | +| test.c:11:5:11:9 | Address | test.c:11:5:11:9 | Address | 0 | true | NoReason | +| test.c:11:5:11:9 | Address | test.c:11:5:11:9 | VariableAddress: test2 | 0 | false | NoReason | +| test.c:11:5:11:9 | Address | test.c:11:5:11:9 | VariableAddress: test2 | 0 | true | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:11:5:11:9 | ReturnValue | 0 | false | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:11:5:11:9 | ReturnValue | 0 | true | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:11:5:11:9 | ReturnValue | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:11:5:11:9 | ReturnValue | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:11:5:11:9 | ReturnValue | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | Load: x | 0 | false | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | Load: x | 0 | true | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | Store: x | 0 | false | NoReason | +| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | Store: x | 0 | true | NoReason | +| test.c:11:15:11:15 | Address | test.c:11:15:11:15 | Address | 0 | false | NoReason | +| test.c:11:15:11:15 | Address | test.c:11:15:11:15 | Address | 0 | true | NoReason | +| test.c:11:15:11:15 | Address | test.c:11:15:11:15 | VariableAddress: x | 0 | false | NoReason | +| test.c:11:15:11:15 | Address | test.c:11:15:11:15 | VariableAddress: x | 0 | true | NoReason | +| test.c:11:22:11:22 | Address | test.c:11:22:11:22 | Address | 0 | false | NoReason | +| test.c:11:22:11:22 | Address | test.c:11:22:11:22 | Address | 0 | true | NoReason | +| test.c:11:22:11:22 | Address | test.c:11:22:11:22 | VariableAddress: y | 0 | false | NoReason | +| test.c:11:22:11:22 | Address | test.c:11:22:11:22 | VariableAddress: y | 0 | true | NoReason | +| test.c:12:7:12:7 | Address | test.c:12:7:12:7 | Address | 0 | false | NoReason | +| test.c:12:7:12:7 | Address | test.c:12:7:12:7 | Address | 0 | true | NoReason | +| test.c:12:7:12:7 | Address | test.c:12:7:12:7 | VariableAddress: x | 0 | false | NoReason | +| test.c:12:7:12:7 | Address | test.c:12:7:12:7 | VariableAddress: x | 0 | true | NoReason | +| test.c:12:7:12:7 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:12:7:12:7 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:12:7:12:7 | CopySource | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | +| test.c:12:7:12:7 | CopySource | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | +| test.c:12:7:12:7 | CopySource | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | +| test.c:12:7:12:7 | CopySource | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | +| test.c:12:7:12:11 | Condition | test.c:12:7:12:11 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:12:7:12:11 | Condition | test.c:12:7:12:11 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:12:7:12:11 | Condition | test.c:12:7:12:11 | Condition | 0 | false | NoReason | +| test.c:12:7:12:11 | Condition | test.c:12:7:12:11 | Condition | 0 | true | NoReason | +| test.c:12:7:12:11 | Left | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:12:7:12:11 | Left | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:12:7:12:11 | Left | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | +| test.c:12:7:12:11 | Left | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | +| test.c:12:7:12:11 | Left | test.c:12:7:12:7 | Load: x | 0 | false | NoReason | +| test.c:12:7:12:11 | Left | test.c:12:7:12:7 | Load: x | 0 | true | NoReason | +| test.c:12:7:12:11 | Left | test.c:12:7:12:11 | Left | 0 | false | NoReason | +| test.c:12:7:12:11 | Left | test.c:12:7:12:11 | Left | 0 | true | NoReason | +| test.c:12:7:12:11 | Left | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | +| test.c:12:7:12:11 | Left | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | +| test.c:12:7:12:11 | Right | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:12:7:12:11 | Right | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:12:7:12:11 | Right | test.c:12:7:12:11 | Right | 0 | false | NoReason | +| test.c:12:7:12:11 | Right | test.c:12:7:12:11 | Right | 0 | true | NoReason | +| test.c:12:7:12:11 | Right | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | +| test.c:12:7:12:11 | Right | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | +| test.c:12:7:12:11 | Right | test.c:12:11:12:11 | Load: y | 0 | false | NoReason | +| test.c:12:7:12:11 | Right | test.c:12:11:12:11 | Load: y | 0 | true | NoReason | +| test.c:12:7:12:11 | Right | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | +| test.c:12:7:12:11 | Right | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | +| test.c:12:11:12:11 | Address | test.c:12:11:12:11 | Address | 0 | false | NoReason | +| test.c:12:11:12:11 | Address | test.c:12:11:12:11 | Address | 0 | true | NoReason | +| test.c:12:11:12:11 | Address | test.c:12:11:12:11 | VariableAddress: y | 0 | false | NoReason | +| test.c:12:11:12:11 | Address | test.c:12:11:12:11 | VariableAddress: y | 0 | true | NoReason | +| test.c:12:11:12:11 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:12:11:12:11 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:12:11:12:11 | CopySource | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | +| test.c:12:11:12:11 | CopySource | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | +| test.c:12:11:12:11 | CopySource | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | +| test.c:12:11:12:11 | CopySource | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | +| test.c:13:5:13:9 | Address | test.c:13:5:13:5 | VariableAddress: x | 0 | false | NoReason | +| test.c:13:5:13:9 | Address | test.c:13:5:13:5 | VariableAddress: x | 0 | true | NoReason | +| test.c:13:5:13:9 | Address | test.c:13:5:13:9 | Address | 0 | false | NoReason | +| test.c:13:5:13:9 | Address | test.c:13:5:13:9 | Address | 0 | true | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:13:5:13:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:13:5:13:9 | CopySource | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:13:5:13:9 | CopySource | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:13:5:13:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:13:5:13:9 | CopySource | 0 | false | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:13:5:13:9 | CopySource | 0 | true | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:13:9:13:9 | Load: y | 0 | false | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:13:9:13:9 | Load: y | 0 | true | NoReason | +| test.c:13:5:13:9 | CopySource | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | Address | test.c:13:9:13:9 | Address | 0 | false | NoReason | +| test.c:13:9:13:9 | Address | test.c:13:9:13:9 | Address | 0 | true | NoReason | +| test.c:13:9:13:9 | Address | test.c:13:9:13:9 | VariableAddress: y | 0 | false | NoReason | +| test.c:13:9:13:9 | Address | test.c:13:9:13:9 | VariableAddress: y | 0 | true | NoReason | +| test.c:13:9:13:9 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:13:9:13:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:13:9:13:9 | CopySource | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | CopySource | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | CopySource | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:13:9:13:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | +| test.c:13:9:13:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | +| test.c:13:9:13:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | +| test.c:13:9:13:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | +| test.c:13:9:13:9 | CopySource | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | Address | test.c:15:5:15:5 | VariableAddress: x | 0 | false | NoReason | +| test.c:15:5:15:11 | Address | test.c:15:5:15:5 | VariableAddress: x | 0 | true | NoReason | +| test.c:15:5:15:11 | Address | test.c:15:5:15:11 | Address | 0 | false | NoReason | +| test.c:15:5:15:11 | Address | test.c:15:5:15:11 | Address | 0 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -1 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -2 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | CopySource | test.c:12:7:12:7 | CopySource | -1 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:12:7:12:7 | CopySource | -2 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:12:7:12:11 | Right | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | CopySource | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | CopySource | test.c:12:11:12:11 | Load: y | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | CopySource | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:15:5:15:11 | CopySource | test.c:15:5:15:11 | CopySource | 0 | false | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:5:15:11 | CopySource | 0 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | CopySource | -1 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | CopySource | -2 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | Load: x | -1 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | Load: x | -2 | false | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | Load: x | -2 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Left | -1 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Left | -2 | false | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Left | -2 | true | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Sub: ... - ... | 0 | false | NoReason | +| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Sub: ... - ... | 0 | true | NoReason | +| test.c:15:9:15:9 | Address | test.c:15:9:15:9 | Address | 0 | false | NoReason | +| test.c:15:9:15:9 | Address | test.c:15:9:15:9 | Address | 0 | true | NoReason | +| test.c:15:9:15:9 | Address | test.c:15:9:15:9 | VariableAddress: x | 0 | false | NoReason | +| test.c:15:9:15:9 | Address | test.c:15:9:15:9 | VariableAddress: x | 0 | true | NoReason | +| test.c:15:9:15:9 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:15:9:15:9 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:15:9:15:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | CopySource | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | +| test.c:15:9:15:9 | CopySource | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | +| test.c:15:9:15:9 | CopySource | test.c:12:7:12:11 | Right | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | CopySource | test.c:12:11:12:11 | Load: y | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:9 | CopySource | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | +| test.c:15:9:15:9 | CopySource | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | +| test.c:15:9:15:11 | Left | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:15:9:15:11 | Left | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:15:9:15:11 | Left | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Left | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | +| test.c:15:9:15:11 | Left | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | +| test.c:15:9:15:11 | Left | test.c:12:7:12:11 | Right | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Left | test.c:12:11:12:11 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Left | test.c:12:11:12:11 | Load: y | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Left | test.c:13:9:13:9 | CopySource | 0 | false | CompareLT: ... < ... | +| test.c:15:9:15:11 | Left | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | +| test.c:15:9:15:11 | Left | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | +| test.c:15:9:15:11 | Left | test.c:15:9:15:9 | Load: x | 0 | false | NoReason | +| test.c:15:9:15:11 | Left | test.c:15:9:15:9 | Load: x | 0 | true | NoReason | +| test.c:15:9:15:11 | Left | test.c:15:9:15:11 | Left | 0 | false | NoReason | +| test.c:15:9:15:11 | Left | test.c:15:9:15:11 | Left | 0 | true | NoReason | +| test.c:15:9:15:11 | Right | file://:0:0:0:0 | 0 | 2 | false | NoReason | +| test.c:15:9:15:11 | Right | file://:0:0:0:0 | 0 | 2 | true | NoReason | +| test.c:15:9:15:11 | Right | test.c:15:9:15:11 | Right | 0 | false | NoReason | +| test.c:15:9:15:11 | Right | test.c:15:9:15:11 | Right | 0 | true | NoReason | +| test.c:15:9:15:11 | Right | test.c:15:11:15:11 | Constant: 2 | 0 | false | NoReason | +| test.c:15:9:15:11 | Right | test.c:15:11:15:11 | Constant: 2 | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:11:15:11:15 | InitializeParameter: x | -1 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:11:15:11:15 | InitializeParameter: x | -2 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | CopySource | -1 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | CopySource | -2 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:12:7:12:11 | Right | -2 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:12:11:12:11 | Load: y | -2 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:13:5:13:9 | CopySource | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:13:5:13:9 | CopySource | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:13:5:13:9 | Store: ... = ... | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:13:5:13:9 | Store: ... = ... | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | Load: y | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | Load: y | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:5:15:11 | CopySource | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:5:15:11 | CopySource | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:5:15:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:5:15:11 | Store: ... = ... | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | CopySource | -1 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | CopySource | -2 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | Load: x | -1 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | Load: x | -2 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | Load: x | -2 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Left | -1 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Left | -2 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Left | -2 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Sub: ... - ... | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Sub: ... - ... | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:17:3:17:11 | Phi | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:17:3:17:11 | Phi | 0 | false | NoReason | +| test.c:17:3:17:11 | Phi | test.c:17:3:17:11 | Phi | 0 | true | NoReason | +| test.c:17:3:17:11 | Phi | test.c:17:3:17:11 | Phi | 0 | true | NoReason | +| test.c:17:10:17:10 | Address | test.c:17:3:17:11 | VariableAddress: return ... | 0 | false | NoReason | +| test.c:17:10:17:10 | Address | test.c:17:3:17:11 | VariableAddress: return ... | 0 | true | NoReason | +| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | Address | 0 | false | NoReason | +| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | Address | 0 | false | NoReason | +| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | Address | 0 | true | NoReason | +| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | Address | 0 | true | NoReason | +| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | VariableAddress: x | 0 | false | NoReason | +| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | VariableAddress: x | 0 | true | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | CopySource | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | CopySource | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | CopySource | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | CopySource | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | +| test.c:17:10:17:10 | CopySource | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | Load: x | 0 | false | NoReason | +| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | Load: x | 0 | true | NoReason | +| test.c:21:5:21:9 | Address | test.c:21:5:21:9 | Address | 0 | false | NoReason | +| test.c:21:5:21:9 | Address | test.c:21:5:21:9 | Address | 0 | true | NoReason | +| test.c:21:5:21:9 | Address | test.c:21:5:21:9 | VariableAddress: test3 | 0 | false | NoReason | +| test.c:21:5:21:9 | Address | test.c:21:5:21:9 | VariableAddress: test3 | 0 | true | NoReason | +| test.c:21:15:21:15 | Address | test.c:21:15:21:15 | Address | 0 | false | NoReason | +| test.c:21:15:21:15 | Address | test.c:21:15:21:15 | Address | 0 | true | NoReason | +| test.c:21:15:21:15 | Address | test.c:21:15:21:15 | VariableAddress: x | 0 | false | NoReason | +| test.c:21:15:21:15 | Address | test.c:21:15:21:15 | VariableAddress: x | 0 | true | NoReason | +| test.c:21:24:21:24 | Address | test.c:21:24:21:24 | Address | 0 | false | NoReason | +| test.c:21:24:21:24 | Address | test.c:21:24:21:24 | Address | 0 | true | NoReason | +| test.c:21:24:21:24 | Address | test.c:21:24:21:24 | VariableAddress: p | 0 | false | NoReason | +| test.c:21:24:21:24 | Address | test.c:21:24:21:24 | VariableAddress: p | 0 | true | NoReason | +| test.c:22:7:22:7 | Address | test.c:22:7:22:7 | Address | 0 | false | NoReason | +| test.c:22:7:22:7 | Address | test.c:22:7:22:7 | Address | 0 | true | NoReason | +| test.c:22:7:22:7 | Address | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | false | NoReason | +| test.c:22:7:22:7 | Address | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | true | NoReason | +| test.c:23:8:23:12 | Address | test.c:23:8:23:8 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:8:23:12 | Address | test.c:23:8:23:8 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:8:23:12 | Address | test.c:23:8:23:12 | Address | 0 | false | NoReason | +| test.c:23:8:23:12 | Address | test.c:23:8:23:12 | Address | 0 | true | NoReason | +| test.c:23:8:23:12 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:8:23:12 | CopySource | file://:0:0:0:0 | 0 | 0 | true | NoReason | +| test.c:23:8:23:12 | CopySource | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:8:23:12 | CopySource | test.c:23:8:23:12 | CopySource | 0 | true | NoReason | +| test.c:23:8:23:12 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:8:23:12 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | true | NoReason | +| test.c:23:15:23:15 | Address | test.c:23:15:23:15 | Address | 0 | false | NoReason | +| test.c:23:15:23:15 | Address | test.c:23:15:23:15 | Address | 0 | true | NoReason | +| test.c:23:15:23:15 | Address | test.c:23:15:23:15 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:15:23:15 | Address | test.c:23:15:23:15 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:15:23:15 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | file://:0:0:0:0 | 0 | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | +| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | CopySource | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | Store: ... = ... | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | Store: ... = ... | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:12:23:12 | Constant: 0 | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:12:23:12 | Constant: 0 | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | CopySource | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | CopySource | 1 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi: i | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi: i | 1 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:15:23:19 | Right | 1 | true | CompareLT: ... < ... | +| test.c:23:15:23:15 | Phi | test.c:23:19:23:19 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:15:23:15 | Phi | test.c:23:19:23:19 | Load: x | 1 | true | CompareLT: ... < ... | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Add: ... ++ | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Add: ... ++ | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | CopySource | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | CopySource | 1 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Left | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Left | 1 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Load: ... ++ | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Load: ... ++ | 1 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Right | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Store: ... ++ | 0 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Store: ... ++ | 0 | true | NoReason | +| test.c:23:15:23:15 | Phi | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | +| test.c:23:15:23:15 | Phi | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | +| test.c:23:15:23:19 | Condition | test.c:23:15:23:19 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:23:15:23:19 | Condition | test.c:23:15:23:19 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:23:15:23:19 | Condition | test.c:23:15:23:19 | Condition | 0 | false | NoReason | +| test.c:23:15:23:19 | Condition | test.c:23:15:23:19 | Condition | 0 | true | NoReason | +| test.c:23:15:23:19 | Left | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Load: i | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Load: i | 0 | true | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:15:23:19 | Left | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:15:23:19 | Left | 0 | true | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:19 | Left | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:19 | Left | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:19 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:23:15:23:19 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:23:15:23:19 | Right | test.c:23:15:23:19 | Right | 0 | false | NoReason | +| test.c:23:15:23:19 | Right | test.c:23:15:23:19 | Right | 0 | true | NoReason | +| test.c:23:15:23:19 | Right | test.c:23:19:23:19 | CopySource | 0 | false | NoReason | +| test.c:23:15:23:19 | Right | test.c:23:19:23:19 | CopySource | 0 | true | NoReason | +| test.c:23:15:23:19 | Right | test.c:23:19:23:19 | Load: x | 0 | false | NoReason | +| test.c:23:15:23:19 | Right | test.c:23:19:23:19 | Load: x | 0 | true | NoReason | +| test.c:23:19:23:19 | Address | test.c:23:19:23:19 | Address | 0 | false | NoReason | +| test.c:23:19:23:19 | Address | test.c:23:19:23:19 | Address | 0 | true | NoReason | +| test.c:23:19:23:19 | Address | test.c:23:19:23:19 | VariableAddress: x | 0 | false | NoReason | +| test.c:23:19:23:19 | Address | test.c:23:19:23:19 | VariableAddress: x | 0 | true | NoReason | +| test.c:23:19:23:19 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:23:19:23:19 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:23:19:23:19 | CopySource | test.c:23:19:23:19 | CopySource | 0 | false | NoReason | +| test.c:23:19:23:19 | CopySource | test.c:23:19:23:19 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:22 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:22 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:22 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:22 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | false | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | false | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | false | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | false | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | true | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | true | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | true | NoReason | +| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | true | NoReason | +| test.c:23:22:23:24 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | CopySource | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:8:23:12 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:8:23:12 | Store: ... = ... | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:12:23:12 | Constant: 0 | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | CopySource | 1 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi: i | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi: i | 1 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | CopySource | test.c:23:15:23:19 | Right | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | CopySource | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | CopySource | test.c:23:19:23:19 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | CopySource | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | CopySource | test.c:23:19:23:19 | Load: x | 1 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Add: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Add: ... ++ | 0 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 1 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Left | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Left | 1 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Load: ... ++ | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Load: ... ++ | 1 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Right | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | +| test.c:23:22:23:24 | CopySource | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | +| test.c:23:22:23:24 | Left | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Left | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Left | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Left | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | Left | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | Left | 0 | true | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | Load: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | Load: ... ++ | 0 | true | NoReason | +| test.c:23:22:23:24 | Left | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:22:23:24 | Left | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:22:23:24 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:22:23:24 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:23:22:23:24 | Right | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:22:23:24 | Right | test.c:23:22:23:24 | Constant: ... ++ | 0 | true | NoReason | +| test.c:23:22:23:24 | Right | test.c:23:22:23:24 | Right | 0 | false | NoReason | +| test.c:23:22:23:24 | Right | test.c:23:22:23:24 | Right | 0 | true | NoReason | +| test.c:24:5:24:5 | Address | test.c:24:5:24:5 | Address | 0 | false | NoReason | +| test.c:24:5:24:5 | Address | test.c:24:5:24:5 | Address | 0 | true | NoReason | +| test.c:24:5:24:5 | Address | test.c:24:5:24:5 | VariableAddress: p | 0 | false | NoReason | +| test.c:24:5:24:5 | Address | test.c:24:5:24:5 | VariableAddress: p | 0 | true | NoReason | +| test.c:24:5:24:5 | CopySource | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | +| test.c:24:5:24:5 | CopySource | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | +| test.c:24:5:24:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | +| test.c:24:5:24:8 | Address | test.c:24:5:24:8 | Address | 0 | false | NoReason | +| test.c:24:5:24:8 | Address | test.c:24:5:24:8 | Address | 0 | true | NoReason | +| test.c:24:5:24:8 | Address | test.c:24:5:24:8 | PointerAdd: access to array | 0 | false | NoReason | +| test.c:24:5:24:8 | Address | test.c:24:5:24:8 | PointerAdd: access to array | 0 | true | NoReason | +| test.c:24:5:24:8 | Left | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | +| test.c:24:5:24:8 | Left | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | +| test.c:24:5:24:8 | Left | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:8 | Left | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | +| test.c:24:5:24:8 | Left | test.c:24:5:24:5 | Load: p | 0 | false | NoReason | +| test.c:24:5:24:8 | Left | test.c:24:5:24:5 | Load: p | 0 | true | NoReason | +| test.c:24:5:24:8 | Left | test.c:24:5:24:8 | Left | 0 | false | NoReason | +| test.c:24:5:24:8 | Left | test.c:24:5:24:8 | Left | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.c:24:5:24:8 | Right | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | +| test.c:24:5:24:8 | Right | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:24:5:24:8 | Right | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:24:5:24:8 | Right | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | test.c:24:5:24:8 | Right | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:24:5:24:8 | Right | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | test.c:24:7:24:7 | Load: i | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:24:7:24:7 | Load: i | 0 | true | NoReason | +| test.c:24:7:24:7 | Address | test.c:24:7:24:7 | Address | 0 | false | NoReason | +| test.c:24:7:24:7 | Address | test.c:24:7:24:7 | Address | 0 | true | NoReason | +| test.c:24:7:24:7 | Address | test.c:24:7:24:7 | VariableAddress: i | 0 | false | NoReason | +| test.c:24:7:24:7 | Address | test.c:24:7:24:7 | VariableAddress: i | 0 | true | NoReason | +| test.c:24:7:24:7 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | CopySource | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | Phi | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | CopySource | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | CopySource | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | CopySource | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:29:5:29:9 | Address | test.c:29:5:29:9 | Address | 0 | false | NoReason | +| test.c:29:5:29:9 | Address | test.c:29:5:29:9 | Address | 0 | true | NoReason | +| test.c:29:5:29:9 | Address | test.c:29:5:29:9 | VariableAddress: test4 | 0 | false | NoReason | +| test.c:29:5:29:9 | Address | test.c:29:5:29:9 | VariableAddress: test4 | 0 | true | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:29:5:29:9 | UnmodeledUse | 0 | false | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:29:5:29:9 | UnmodeledUse | 0 | true | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:5:31:25 | CopySource | 0 | false | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:5:31:25 | CopySource | 0 | true | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:5:31:25 | Store: ... = ... | 0 | false | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:5:31:25 | Store: ... = ... | 0 | true | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:14:31:25 | Add: ... + ... | 0 | false | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:14:31:25 | Add: ... + ... | 0 | true | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:14:31:25 | Left | 1 | false | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:14:31:25 | Left | 1 | true | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:15:31:20 | Load: * ... | 1 | false | NoReason | +| test.c:29:5:29:9 | UnmodeledUse | test.c:31:15:31:20 | Load: * ... | 1 | true | NoReason | +| test.c:29:16:29:20 | Address | test.c:29:16:29:20 | Address | 0 | false | NoReason | +| test.c:29:16:29:20 | Address | test.c:29:16:29:20 | Address | 0 | true | NoReason | +| test.c:29:16:29:20 | Address | test.c:29:16:29:20 | VariableAddress: begin | 0 | false | NoReason | +| test.c:29:16:29:20 | Address | test.c:29:16:29:20 | VariableAddress: begin | 0 | true | NoReason | +| test.c:29:28:29:30 | Address | test.c:29:28:29:30 | Address | 0 | false | NoReason | +| test.c:29:28:29:30 | Address | test.c:29:28:29:30 | Address | 0 | true | NoReason | +| test.c:29:28:29:30 | Address | test.c:29:28:29:30 | VariableAddress: end | 0 | false | NoReason | +| test.c:29:28:29:30 | Address | test.c:29:28:29:30 | VariableAddress: end | 0 | true | NoReason | +| test.c:30:10:30:14 | Address | test.c:30:10:30:14 | Address | 0 | false | NoReason | +| test.c:30:10:30:14 | Address | test.c:30:10:30:14 | Address | 0 | true | NoReason | +| test.c:30:10:30:14 | Address | test.c:30:10:30:14 | VariableAddress: begin | 0 | false | NoReason | +| test.c:30:10:30:14 | Address | test.c:30:10:30:14 | VariableAddress: begin | 0 | true | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi | test.c:29:16:29:20 | InitializeParameter: begin | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi | test.c:29:16:29:20 | InitializeParameter: begin | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi | test.c:30:10:30:14 | Phi | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi | test.c:30:10:30:14 | Phi | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi | test.c:30:10:30:14 | Phi | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi | test.c:30:10:30:14 | Phi | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | true | NoReason | +| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | Store: ... ++ | 0 | false | NoReason | +| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | Store: ... ++ | 0 | true | NoReason | +| test.c:30:10:30:20 | Condition | test.c:30:10:30:20 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:30:10:30:20 | Condition | test.c:30:10:30:20 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:30:10:30:20 | Condition | test.c:30:10:30:20 | Condition | 0 | false | NoReason | +| test.c:30:10:30:20 | Condition | test.c:30:10:30:20 | Condition | 0 | true | NoReason | +| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | Load: begin | 0 | false | NoReason | +| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | Load: begin | 0 | true | NoReason | +| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:30:10:30:20 | Left | test.c:30:10:30:20 | Left | 0 | false | NoReason | +| test.c:30:10:30:20 | Left | test.c:30:10:30:20 | Left | 0 | true | NoReason | +| test.c:30:10:30:20 | Left | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:20 | Left | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:20 | Left | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:20 | Left | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:20 | Left | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:20 | Left | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:20 | Right | test.c:29:28:29:30 | InitializeParameter: end | 0 | false | NoReason | +| test.c:30:10:30:20 | Right | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | NoReason | +| test.c:30:10:30:20 | Right | test.c:30:10:30:20 | Right | 0 | false | NoReason | +| test.c:30:10:30:20 | Right | test.c:30:10:30:20 | Right | 0 | true | NoReason | +| test.c:30:10:30:20 | Right | test.c:30:18:30:20 | CopySource | 0 | false | NoReason | +| test.c:30:10:30:20 | Right | test.c:30:18:30:20 | CopySource | 0 | true | NoReason | +| test.c:30:10:30:20 | Right | test.c:30:18:30:20 | Load: end | 0 | false | NoReason | +| test.c:30:10:30:20 | Right | test.c:30:18:30:20 | Load: end | 0 | true | NoReason | +| test.c:30:18:30:20 | Address | test.c:30:18:30:20 | Address | 0 | false | NoReason | +| test.c:30:18:30:20 | Address | test.c:30:18:30:20 | Address | 0 | true | NoReason | +| test.c:30:18:30:20 | Address | test.c:30:18:30:20 | VariableAddress: end | 0 | false | NoReason | +| test.c:30:18:30:20 | Address | test.c:30:18:30:20 | VariableAddress: end | 0 | true | NoReason | +| test.c:30:18:30:20 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | false | NoReason | +| test.c:30:18:30:20 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | NoReason | +| test.c:30:18:30:20 | CopySource | test.c:30:18:30:20 | CopySource | 0 | false | NoReason | +| test.c:30:18:30:20 | CopySource | test.c:30:18:30:20 | CopySource | 0 | true | NoReason | +| test.c:31:5:31:25 | Address | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:31:5:31:25 | Address | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:31:5:31:25 | Address | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:31:5:31:25 | Address | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:31:5:31:25 | Address | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:31:5:31:25 | Address | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:31:5:31:25 | Address | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:31:5:31:25 | Address | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:31:5:31:25 | Address | test.c:31:5:31:25 | Address | 0 | false | NoReason | +| test.c:31:5:31:25 | Address | test.c:31:5:31:25 | Address | 0 | true | NoReason | +| test.c:31:5:31:25 | Address | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:31:5:31:25 | Address | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:31:5:31:25 | Address | test.c:31:6:31:10 | Load: begin | 0 | false | NoReason | +| test.c:31:5:31:25 | Address | test.c:31:6:31:10 | Load: begin | 0 | true | NoReason | +| test.c:31:5:31:25 | Address | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:31:5:31:25 | Address | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:31:5:31:25 | Address | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:31:5:31:25 | Address | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:31:5:31:25 | CopySource | test.c:31:5:31:25 | CopySource | 0 | false | NoReason | +| test.c:31:5:31:25 | CopySource | test.c:31:5:31:25 | CopySource | 0 | true | NoReason | +| test.c:31:5:31:25 | CopySource | test.c:31:14:31:25 | Add: ... + ... | 0 | false | NoReason | +| test.c:31:5:31:25 | CopySource | test.c:31:14:31:25 | Add: ... + ... | 0 | true | NoReason | +| test.c:31:5:31:25 | CopySource | test.c:31:14:31:25 | Left | 1 | false | NoReason | +| test.c:31:5:31:25 | CopySource | test.c:31:14:31:25 | Left | 1 | true | NoReason | +| test.c:31:5:31:25 | CopySource | test.c:31:15:31:20 | Load: * ... | 1 | false | NoReason | +| test.c:31:5:31:25 | CopySource | test.c:31:15:31:20 | Load: * ... | 1 | true | NoReason | +| test.c:31:6:31:10 | Address | test.c:31:6:31:10 | Address | 0 | false | NoReason | +| test.c:31:6:31:10 | Address | test.c:31:6:31:10 | Address | 0 | true | NoReason | +| test.c:31:6:31:10 | Address | test.c:31:6:31:10 | VariableAddress: begin | 0 | false | NoReason | +| test.c:31:6:31:10 | Address | test.c:31:6:31:10 | VariableAddress: begin | 0 | true | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:31:6:31:10 | CopySource | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:31:6:31:10 | CopySource | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:31:6:31:10 | CopySource | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:31:6:31:10 | CopySource | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:31:6:31:10 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:31:14:31:25 | Left | test.c:31:14:31:25 | Left | 0 | false | NoReason | +| test.c:31:14:31:25 | Left | test.c:31:14:31:25 | Left | 0 | true | NoReason | +| test.c:31:14:31:25 | Left | test.c:31:15:31:20 | Load: * ... | 0 | false | NoReason | +| test.c:31:14:31:25 | Left | test.c:31:15:31:20 | Load: * ... | 0 | true | NoReason | +| test.c:31:14:31:25 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:31:14:31:25 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:31:14:31:25 | Right | test.c:31:14:31:25 | Right | 0 | false | NoReason | +| test.c:31:14:31:25 | Right | test.c:31:14:31:25 | Right | 0 | true | NoReason | +| test.c:31:14:31:25 | Right | test.c:31:25:31:25 | Constant: 1 | 0 | false | NoReason | +| test.c:31:14:31:25 | Right | test.c:31:25:31:25 | Constant: 1 | 0 | true | NoReason | +| test.c:31:15:31:20 | Address | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:31:15:31:20 | Address | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:31:15:31:20 | Address | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:31:15:31:20 | Address | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:31:15:31:20 | Address | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:31:15:31:20 | Address | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:31:15:31:20 | Address | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:31:15:31:20 | Address | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:31:15:31:20 | Address | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:31:15:31:20 | Address | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:31:15:31:20 | Address | test.c:31:15:31:20 | Address | 0 | false | NoReason | +| test.c:31:15:31:20 | Address | test.c:31:15:31:20 | Address | 0 | true | NoReason | +| test.c:31:15:31:20 | Address | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:31:15:31:20 | Address | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:31:15:31:20 | Address | test.c:31:16:31:20 | Load: begin | 0 | false | NoReason | +| test.c:31:15:31:20 | Address | test.c:31:16:31:20 | Load: begin | 0 | true | NoReason | +| test.c:31:15:31:20 | Address | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:31:15:31:20 | Address | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:31:16:31:20 | Address | test.c:31:16:31:20 | Address | 0 | false | NoReason | +| test.c:31:16:31:20 | Address | test.c:31:16:31:20 | Address | 0 | true | NoReason | +| test.c:31:16:31:20 | Address | test.c:31:16:31:20 | VariableAddress: begin | 0 | false | NoReason | +| test.c:31:16:31:20 | Address | test.c:31:16:31:20 | VariableAddress: begin | 0 | true | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:31:16:31:20 | CopySource | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:31:16:31:20 | CopySource | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:31:16:31:20 | CopySource | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:31:16:31:20 | CopySource | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:31:16:31:20 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:9 | VariableAddress: begin | 0 | false | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:9 | VariableAddress: begin | 0 | false | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:9 | VariableAddress: begin | 0 | true | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:9 | VariableAddress: begin | 0 | true | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | false | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | false | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | false | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | false | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | true | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | true | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | true | NoReason | +| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | true | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | CopySource | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | CopySource | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | CopySource | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | CopySource | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | false | NoReason | +| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | true | NoReason | +| test.c:32:5:32:11 | Left | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | Left | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | Left | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Left | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | +| test.c:32:5:32:11 | Left | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | +| test.c:32:5:32:11 | Left | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | Left | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | Left | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:32:5:32:11 | Left | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | Left | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Left | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | Left | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | Left | 0 | false | NoReason | +| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | Left | 0 | true | NoReason | +| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | Load: ... ++ | 0 | false | NoReason | +| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | Load: ... ++ | 0 | true | NoReason | +| test.c:32:5:32:11 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:32:5:32:11 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:32:5:32:11 | Right | test.c:32:5:32:11 | Constant: ... ++ | 0 | false | NoReason | +| test.c:32:5:32:11 | Right | test.c:32:5:32:11 | Constant: ... ++ | 0 | true | NoReason | +| test.c:32:5:32:11 | Right | test.c:32:5:32:11 | Right | 0 | false | NoReason | +| test.c:32:5:32:11 | Right | test.c:32:5:32:11 | Right | 0 | true | NoReason | diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql new file mode 100644 index 000000000000..06e9091791e8 --- /dev/null +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql @@ -0,0 +1,12 @@ +import semmle.code.cpp.rangeanalysis.RangeAnalysis +import semmle.code.cpp.ir.IR +import semmle.code.cpp.controlflow.IRGuards +import semmle.code.cpp.ir.ValueNumbering + +query predicate instructionBounds(Instruction i, Bound b, int delta, boolean upper, Reason reason) { + boundedInstruction(i, b, delta, upper, reason) +} + +query predicate operandBounds(Operand op, Bound b, int delta, boolean upper, Reason reason) { + boundedOperand(op, b, delta, upper, reason) +} diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c new file mode 100644 index 000000000000..507a4e7cd294 --- /dev/null +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c @@ -0,0 +1,34 @@ + +// Guards, inference, critical edges +int test1(int x, int y) { + if (x < y) { + x = y; + } + return x; +} + +// Bounds mergers at phi nodes +int test2(int x, int y) { + if (x < y) { + x = y; + } else { + x = x-2; + } + return x; +} + +// for loops +int test3(int x, void *p) { + int i; + for (i = 0; i < x; i++) { + p[i]; + } +} + +// pointer bounds +int test4(int *begin, int *end) { + while (begin < end) { + *begin = (*begin) + 1; + begin++; + } +} From fe32aea31fe5e8cddf742035f24dbd5cbc4bdd0b Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 6 Dec 2018 16:21:06 -0800 Subject: [PATCH 03/13] C++: fix/add comments --- .../semmle/code/cpp/controlflow/IRGuards.qll | 15 + .../semmle/code/cpp/rangeanalysis/Bound.qll | 5 +- .../code/cpp/rangeanalysis/RangeAnalysis.qll | 51 +- .../rangeanalysis/RangeAnalysis.expected | 2134 +++++++++++------ .../rangeanalysis/rangeanalysis/test.c | 6 +- 5 files changed, 1390 insertions(+), 821 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll index bc2a1ecb2fb0..2ad3d96cb92b 100644 --- a/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll @@ -280,6 +280,21 @@ class IRGuardCondition extends Instruction { ne.controls(controlled, testIsTrue.booleanNot())) } + /** + * Holds if `branch` jumps directly to `succ` when this condition is `testIsTrue`. + * + * This predicate is intended to help with situations in which an inference can only be made + * based on an edge between a block with multiple successors and a block with multiple + * predecessors. For example, in the following situation, an inference can be made about the + * value of `x` at the end of the `if` statement, but there is no block which is controlled by + * the `if` statement when `x >= y`. + * ``` + * if (x < y) { + * x = y; + * } + * return x; + * ``` + */ cached predicate controlsEdge(ConditionalBranchInstruction branch, IRBlock succ, boolean testIsTrue) { branch.getCondition() = this and ( diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll index e81f06fd7524..9f640a80bf61 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll @@ -18,7 +18,6 @@ private newtype TBound = abstract class Bound extends TBound { abstract string toString(); -// FIXME: operands? /** Gets an expression that equals this bound plus `delta`. */ abstract Instruction getInstruction(int delta); @@ -55,7 +54,9 @@ class InstructionBound extends Bound, TBoundInstruction { } } - +/** + * A bound corrseponding to the value of an `Operand`. + */ class OperandBound extends Bound, TBoundOperand { Operand getOperand() { this = TBoundOperand(result) diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index 347259588bd0..be305b77a29b 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -76,9 +76,9 @@ cached private module RangeAnalysisCache { cached module RangeAnalysisPublic { /** - * Holds if `b + delta` is a valid bound for `e`. - * - `upper = true` : `e <= b + delta` - * - `upper = false` : `e >= b + delta` + * Holds if `b + delta` is a valid bound for `i`. + * - `upper = true` : `i <= b + delta` + * - `upper = false` : `i >= b + delta` * * The reason for the bound is given by `reason` and may be either a condition * or `NoReason` if the bound was proven directly without the use of a bounding @@ -88,6 +88,15 @@ cached private module RangeAnalysisCache { boundedInstruction(i, b, delta, upper, _, _, reason) } + /** + * Holds if `b + delta` is a valid bound for `op`. + * - `upper = true` : `op <= b + delta` + * - `upper = false` : `op >= b + delta` + * + * The reason for the bound is given by `reason` and may be either a condition + * or `NoReason` if the bound was proven directly without the use of a bounding + * condition. + */ cached predicate boundedOperand(Operand op, Bound b, int delta, boolean upper, Reason reason) { boundedNonPhiOperand(op, b, delta, upper, _, _, reason) or @@ -145,11 +154,11 @@ private predicate boundFlowStepSsa( } /** - * Gets a condition that tests whether `v` is bounded by `e + delta`. + * Gets a condition that tests whether `op` is bounded by `bound + delta`. * * If the condition evaluates to `testIsTrue`: - * - `upper = true` : `v <= e + delta` - * - `upper = false` : `v >= e + delta` + * - `upper = true` : `op <= bound + delta` + * - `upper = false` : `op >= bound + delta` */ private IRGuardCondition boundFlowCond(NonPhiOperand op, NonPhiOperand bound, int delta, boolean upper, boolean testIsTrue) @@ -163,9 +172,10 @@ private IRGuardCondition boundFlowCond(NonPhiOperand op, NonPhiOperand bound, in } /** - * Holds if `comp` corresponds to: - * - `upper = true` : `v <= e + delta` or `v < e + delta` - * - `upper = false` : `v >= e + delta` or `v > e + delta` + * Gets a condition that tests whether `op` is bounded by `bound + delta`. + * + * - `upper = true` : `op <= bound + delta` + * - `upper = false` : `op >= bound + delta` */ private IRGuardCondition boundFlowCondPhi(PhiOperand op, NonPhiOperand bound, int delta, boolean upper, boolean testIsTrue) @@ -291,7 +301,7 @@ private predicate boundFlowStep(Instruction i, Operand op, int delta, boolean up sub.getAnOperand().(RightOperand) = x ) | - // `x instanceof ConstantIntegerExpr` is covered by valueFlowStep + // `x` with constant value is covered by valueFlowStep not exists(getValue(getConstantValue(x.getInstruction()))) and if strictlyPositive(x) then ( @@ -383,7 +393,6 @@ private predicate boundFlowStepPhi( or exists(IRGuardCondition guard | guard = boundFlowCondPhi(op2, op1, delta, upper, _) and - // Java has guardDirectlyControlsSsaRead here reason = TCondReason(guard) ) } @@ -425,20 +434,6 @@ private predicate unequalOperand(Operand op, Bound b, int delta, Reason reason) none() } -/* - * Notes on phi nodes in the C IR vs Java - * - * the IR doesn't have edges as a type, but Java uses edges rather than predecessor blocks; is - * there anything to be gained by distinguishing different edges from the same predecessor? (does - * Java distinguish different edges from the same predecessor? can the IR actually generate multiple - * edges from the same predecessor?) - * - * Java identifies a phi operand using a tuple of a node, an input, and an edge; we might be able to - * get away with just using a PhiOperand, which I believe uniquely identifies the phi node and - * predecessor block. - * - */ - private predicate boundedPhiCandValidForEdge( PhiInstruction phi, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, Reason reason, PhiOperand op @@ -544,7 +539,11 @@ private predicate boundedCastExpr( ) { boundedNonPhiOperand(cast.getAnOperand(), b, delta, upper, fromBackEdge, origdelta, reason) } - +/** + * Holds if `b + delta` is a valid bound for `i`. + * - `upper = true` : `i <= b + delta` + * - `upper = false` : `i >= b + delta` + */ private predicate boundedInstruction( Instruction i, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, Reason reason ) { diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index 52f747744a61..313179be49c9 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -391,8 +391,10 @@ instructionBounds | test.c:21:5:21:9 | VariableAddress: test3 | test.c:21:5:21:9 | VariableAddress: test3 | 0 | true | NoReason | | test.c:21:15:21:15 | InitializeParameter: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | | test.c:21:15:21:15 | InitializeParameter: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:21:15:21:15 | InitializeParameter: x | test.c:23:19:23:19 | CopySource | 0 | false | NoReason | -| test.c:21:15:21:15 | InitializeParameter: x | test.c:23:19:23:19 | CopySource | 0 | true | NoReason | +| test.c:21:15:21:15 | InitializeParameter: x | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:21:15:21:15 | InitializeParameter: x | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | +| test.c:21:15:21:15 | InitializeParameter: x | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:21:15:21:15 | InitializeParameter: x | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | | test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | Address | 0 | false | NoReason | | test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | Address | 0 | true | NoReason | | test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | VariableAddress: x | 0 | false | NoReason | @@ -401,6 +403,8 @@ instructionBounds | test.c:21:24:21:24 | InitializeParameter: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | | test.c:21:24:21:24 | InitializeParameter: p | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | | test.c:21:24:21:24 | InitializeParameter: p | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | +| test.c:21:24:21:24 | InitializeParameter: p | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | +| test.c:21:24:21:24 | InitializeParameter: p | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | | test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | Address | 0 | false | NoReason | | test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | Address | 0 | true | NoReason | | test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | VariableAddress: p | 0 | false | NoReason | @@ -411,161 +415,166 @@ instructionBounds | test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | Address | 0 | true | NoReason | | test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | false | NoReason | | test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | true | NoReason | -| test.c:23:8:23:8 | VariableAddress: i | test.c:23:8:23:8 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:8:23:8 | VariableAddress: i | test.c:23:8:23:8 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:8:23:8 | VariableAddress: i | test.c:23:8:23:12 | Address | 0 | false | NoReason | -| test.c:23:8:23:8 | VariableAddress: i | test.c:23:8:23:12 | Address | 0 | true | NoReason | -| test.c:23:8:23:12 | Store: ... = ... | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:8:23:12 | Store: ... = ... | test.c:23:8:23:12 | Store: ... = ... | 0 | true | NoReason | -| test.c:23:8:23:12 | Store: ... = ... | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:8:23:12 | Store: ... = ... | test.c:23:15:23:15 | Phi | 0 | true | NoReason | -| test.c:23:12:23:12 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:12:23:12 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | true | NoReason | -| test.c:23:12:23:12 | Constant: 0 | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:12:23:12 | Constant: 0 | test.c:23:8:23:12 | CopySource | 0 | true | NoReason | -| test.c:23:12:23:12 | Constant: 0 | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:12:23:12 | Constant: 0 | test.c:23:12:23:12 | Constant: 0 | 0 | true | NoReason | -| test.c:23:15:23:15 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Load: i | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Load: i | 0 | true | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:15:23:19 | Left | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:15:23:19 | Left | 0 | true | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Load: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | VariableAddress: i | test.c:23:15:23:15 | Address | 0 | false | NoReason | -| test.c:23:15:23:15 | VariableAddress: i | test.c:23:15:23:15 | Address | 0 | true | NoReason | -| test.c:23:15:23:15 | VariableAddress: i | test.c:23:15:23:15 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:15:23:15 | VariableAddress: i | test.c:23:15:23:15 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:15:23:19 | CompareLT: ... < ... | test.c:23:15:23:19 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:23:15:23:19 | CompareLT: ... < ... | test.c:23:15:23:19 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:23:15:23:19 | CompareLT: ... < ... | test.c:23:15:23:19 | Condition | 0 | false | NoReason | -| test.c:23:15:23:19 | CompareLT: ... < ... | test.c:23:15:23:19 | Condition | 0 | true | NoReason | -| test.c:23:19:23:19 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:23:19:23:19 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:23:19:23:19 | Load: x | test.c:23:15:23:19 | Right | 0 | false | NoReason | -| test.c:23:19:23:19 | Load: x | test.c:23:15:23:19 | Right | 0 | true | NoReason | -| test.c:23:19:23:19 | Load: x | test.c:23:19:23:19 | CopySource | 0 | false | NoReason | -| test.c:23:19:23:19 | Load: x | test.c:23:19:23:19 | CopySource | 0 | true | NoReason | -| test.c:23:19:23:19 | Load: x | test.c:23:19:23:19 | Load: x | 0 | false | NoReason | -| test.c:23:19:23:19 | Load: x | test.c:23:19:23:19 | Load: x | 0 | true | NoReason | -| test.c:23:19:23:19 | VariableAddress: x | test.c:23:19:23:19 | Address | 0 | false | NoReason | -| test.c:23:19:23:19 | VariableAddress: x | test.c:23:19:23:19 | Address | 0 | true | NoReason | -| test.c:23:19:23:19 | VariableAddress: x | test.c:23:19:23:19 | VariableAddress: x | 0 | false | NoReason | -| test.c:23:19:23:19 | VariableAddress: x | test.c:23:19:23:19 | VariableAddress: x | 0 | true | NoReason | -| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:22 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:22 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:24 | Address | 0 | false | NoReason | -| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:24 | Address | 0 | false | NoReason | -| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:24 | Address | 0 | true | NoReason | -| test.c:23:22:23:22 | VariableAddress: i | test.c:23:22:23:24 | Address | 0 | true | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:8:23:12 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:8:23:12 | Store: ... = ... | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:12:23:12 | Constant: 0 | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | CopySource | 1 | true | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | Phi | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | Phi: i | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:15 | Phi: i | 1 | true | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:15:23:19 | Right | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:19:23:19 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:19:23:19 | Load: x | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Add: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Add: ... ++ | 0 | true | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | CopySource | 1 | true | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Left | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Left | 1 | true | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 1 | true | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:23:22:23:24 | Right | 0 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | Add: ... ++ | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | -| test.c:23:22:23:24 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:22:23:24 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:23:22:23:24 | Constant: ... ++ | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | Constant: ... ++ | test.c:23:22:23:24 | Constant: ... ++ | 0 | true | NoReason | -| test.c:23:22:23:24 | Constant: ... ++ | test.c:23:22:23:24 | Right | 0 | false | NoReason | -| test.c:23:22:23:24 | Constant: ... ++ | test.c:23:22:23:24 | Right | 0 | true | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | Left | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | Left | 0 | true | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 0 | true | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Load: ... ++ | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:8:23:12 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:8:23:12 | Store: ... = ... | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:12:23:12 | Constant: 0 | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | CopySource | 1 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi | 0 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi: i | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:15 | Phi: i | 1 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:15:23:19 | Right | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:19:23:19 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:19:23:19 | Load: x | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Add: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Add: ... ++ | 0 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | CopySource | 1 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Left | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Left | 1 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Load: ... ++ | 1 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Right | 0 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Store: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:23:22:23:24 | Store: ... ++ | 0 | true | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | Store: ... ++ | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | +| test.c:23:7:23:7 | VariableAddress: i | test.c:23:7:23:7 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:7:23:7 | VariableAddress: i | test.c:23:7:23:7 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:7:23:7 | VariableAddress: i | test.c:23:7:23:11 | Address | 0 | false | NoReason | +| test.c:23:7:23:7 | VariableAddress: i | test.c:23:7:23:11 | Address | 0 | true | NoReason | +| test.c:23:7:23:11 | Store: ... = ... | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:7:23:11 | Store: ... = ... | test.c:23:7:23:11 | Store: ... = ... | 0 | true | NoReason | +| test.c:23:7:23:11 | Store: ... = ... | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:7:23:11 | Store: ... = ... | test.c:23:14:23:14 | Phi | 0 | true | NoReason | +| test.c:23:11:23:11 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:11:23:11 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | true | NoReason | +| test.c:23:11:23:11 | Constant: 0 | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:11:23:11 | Constant: 0 | test.c:23:7:23:11 | CopySource | 0 | true | NoReason | +| test.c:23:11:23:11 | Constant: 0 | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:11:23:11 | Constant: 0 | test.c:23:11:23:11 | Constant: 0 | 0 | true | NoReason | +| test.c:23:14:23:14 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Load: i | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Load: i | 0 | true | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:14:23:18 | Left | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:14:23:18 | Left | 0 | true | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Load: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | VariableAddress: i | test.c:23:14:23:14 | Address | 0 | false | NoReason | +| test.c:23:14:23:14 | VariableAddress: i | test.c:23:14:23:14 | Address | 0 | true | NoReason | +| test.c:23:14:23:14 | VariableAddress: i | test.c:23:14:23:14 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:14:23:14 | VariableAddress: i | test.c:23:14:23:14 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:14:23:18 | CompareLT: ... < ... | test.c:23:14:23:18 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:23:14:23:18 | CompareLT: ... < ... | test.c:23:14:23:18 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:23:14:23:18 | CompareLT: ... < ... | test.c:23:14:23:18 | Condition | 0 | false | NoReason | +| test.c:23:14:23:18 | CompareLT: ... < ... | test.c:23:14:23:18 | Condition | 0 | true | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:23:14:23:18 | Right | 0 | false | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:23:14:23:18 | Right | 0 | true | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:23:18:23:18 | Load: x | 0 | false | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:23:18:23:18 | Load: x | 0 | true | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:23:18:23:18 | Load: x | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | +| test.c:23:18:23:18 | VariableAddress: x | test.c:23:18:23:18 | Address | 0 | false | NoReason | +| test.c:23:18:23:18 | VariableAddress: x | test.c:23:18:23:18 | Address | 0 | true | NoReason | +| test.c:23:18:23:18 | VariableAddress: x | test.c:23:18:23:18 | VariableAddress: x | 0 | false | NoReason | +| test.c:23:18:23:18 | VariableAddress: x | test.c:23:18:23:18 | VariableAddress: x | 0 | true | NoReason | +| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:21 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:21 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:23 | Address | 0 | false | NoReason | +| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:23 | Address | 0 | false | NoReason | +| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:23 | Address | 0 | true | NoReason | +| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:23 | Address | 0 | true | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:7:23:11 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:7:23:11 | Store: ... = ... | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:11:23:11 | Constant: 0 | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | CopySource | 1 | true | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | Phi | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | Phi: i | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | Phi: i | 1 | true | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:18 | Right | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:18:23:18 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:18:23:18 | Load: x | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Add: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Add: ... ++ | 0 | true | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | CopySource | 1 | true | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Left | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Left | 1 | true | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 1 | true | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Right | 0 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | +| test.c:23:21:23:23 | Add: ... ++ | test.c:26:11:26:11 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:21:23:23 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:23:21:23:23 | Constant: ... ++ | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | Constant: ... ++ | test.c:23:21:23:23 | Constant: ... ++ | 0 | true | NoReason | +| test.c:23:21:23:23 | Constant: ... ++ | test.c:23:21:23:23 | Right | 0 | false | NoReason | +| test.c:23:21:23:23 | Constant: ... ++ | test.c:23:21:23:23 | Right | 0 | true | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | Left | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | Left | 0 | true | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 0 | true | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | Load: ... ++ | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Store: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:7:23:11 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:7:23:11 | Store: ... = ... | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:11:23:11 | Constant: 0 | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | CopySource | 1 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi | 0 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi: i | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi: i | 1 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:18 | Right | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:18:23:18 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:18:23:18 | Load: x | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Add: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Add: ... ++ | 0 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | CopySource | 1 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Left | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Left | 1 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 1 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Right | 0 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Store: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Store: ... ++ | 0 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | +| test.c:23:21:23:23 | Store: ... ++ | test.c:26:11:26:11 | CopySource | 1 | true | CompareLT: ... < ... | | test.c:24:5:24:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | | test.c:24:5:24:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | | test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | @@ -574,6 +583,8 @@ instructionBounds | test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | Load: p | 0 | true | NoReason | | test.c:24:5:24:5 | Load: p | test.c:24:5:24:8 | Left | 0 | false | NoReason | | test.c:24:5:24:5 | Load: p | test.c:24:5:24:8 | Left | 0 | true | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:5 | Load: p | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | | test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | Address | 0 | false | NoReason | | test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | Address | 0 | true | NoReason | | test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | VariableAddress: p | 0 | false | NoReason | @@ -584,209 +595,442 @@ instructionBounds | test.c:24:5:24:8 | PointerAdd: access to array | test.c:24:5:24:8 | PointerAdd: access to array | 0 | true | NoReason | | test.c:24:7:24:7 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | | test.c:24:7:24:7 | Load: i | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | Load: i | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | Load: i | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | Load: i | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | Load: i | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | Load: i | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | Load: i | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | Load: i | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | | test.c:24:7:24:7 | Load: i | test.c:24:5:24:8 | Right | 0 | false | NoReason | | test.c:24:7:24:7 | Load: i | test.c:24:5:24:8 | Right | 0 | true | NoReason | | test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | | test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | | test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | Load: i | 0 | false | NoReason | | test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | Load: i | 0 | true | NoReason | +| test.c:24:7:24:7 | Load: i | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | | test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | Address | 0 | false | NoReason | | test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | Address | 0 | true | NoReason | | test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | VariableAddress: i | 0 | false | NoReason | | test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | VariableAddress: i | 0 | true | NoReason | -| test.c:29:5:29:9 | VariableAddress: test4 | test.c:29:5:29:9 | Address | 0 | false | NoReason | -| test.c:29:5:29:9 | VariableAddress: test4 | test.c:29:5:29:9 | Address | 0 | true | NoReason | -| test.c:29:5:29:9 | VariableAddress: test4 | test.c:29:5:29:9 | VariableAddress: test4 | 0 | false | NoReason | -| test.c:29:5:29:9 | VariableAddress: test4 | test.c:29:5:29:9 | VariableAddress: test4 | 0 | true | NoReason | -| test.c:29:16:29:20 | InitializeParameter: begin | test.c:29:16:29:20 | InitializeParameter: begin | 0 | false | NoReason | -| test.c:29:16:29:20 | InitializeParameter: begin | test.c:29:16:29:20 | InitializeParameter: begin | 0 | true | NoReason | -| test.c:29:16:29:20 | InitializeParameter: begin | test.c:30:10:30:14 | Phi | 0 | false | NoReason | -| test.c:29:16:29:20 | InitializeParameter: begin | test.c:30:10:30:14 | Phi | 0 | true | NoReason | -| test.c:29:16:29:20 | VariableAddress: begin | test.c:29:16:29:20 | Address | 0 | false | NoReason | -| test.c:29:16:29:20 | VariableAddress: begin | test.c:29:16:29:20 | Address | 0 | true | NoReason | -| test.c:29:16:29:20 | VariableAddress: begin | test.c:29:16:29:20 | VariableAddress: begin | 0 | false | NoReason | -| test.c:29:16:29:20 | VariableAddress: begin | test.c:29:16:29:20 | VariableAddress: begin | 0 | true | NoReason | -| test.c:29:28:29:30 | InitializeParameter: end | test.c:29:28:29:30 | InitializeParameter: end | 0 | false | NoReason | -| test.c:29:28:29:30 | InitializeParameter: end | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | NoReason | -| test.c:29:28:29:30 | InitializeParameter: end | test.c:30:18:30:20 | CopySource | 0 | false | NoReason | -| test.c:29:28:29:30 | InitializeParameter: end | test.c:30:18:30:20 | CopySource | 0 | true | NoReason | -| test.c:29:28:29:30 | VariableAddress: end | test.c:29:28:29:30 | Address | 0 | false | NoReason | -| test.c:29:28:29:30 | VariableAddress: end | test.c:29:28:29:30 | Address | 0 | true | NoReason | -| test.c:29:28:29:30 | VariableAddress: end | test.c:29:28:29:30 | VariableAddress: end | 0 | false | NoReason | -| test.c:29:28:29:30 | VariableAddress: end | test.c:29:28:29:30 | VariableAddress: end | 0 | true | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | Load: begin | 0 | false | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | Load: begin | 0 | true | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:20 | Left | 0 | false | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:30:10:30:20 | Left | 0 | true | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi: begin | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | VariableAddress: begin | test.c:30:10:30:14 | Address | 0 | false | NoReason | -| test.c:30:10:30:14 | VariableAddress: begin | test.c:30:10:30:14 | Address | 0 | true | NoReason | -| test.c:30:10:30:14 | VariableAddress: begin | test.c:30:10:30:14 | VariableAddress: begin | 0 | false | NoReason | -| test.c:30:10:30:14 | VariableAddress: begin | test.c:30:10:30:14 | VariableAddress: begin | 0 | true | NoReason | -| test.c:30:10:30:20 | CompareLT: ... < ... | test.c:30:10:30:20 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:30:10:30:20 | CompareLT: ... < ... | test.c:30:10:30:20 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:30:10:30:20 | CompareLT: ... < ... | test.c:30:10:30:20 | Condition | 0 | false | NoReason | -| test.c:30:10:30:20 | CompareLT: ... < ... | test.c:30:10:30:20 | Condition | 0 | true | NoReason | -| test.c:30:18:30:20 | Load: end | test.c:29:28:29:30 | InitializeParameter: end | 0 | false | NoReason | -| test.c:30:18:30:20 | Load: end | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | NoReason | -| test.c:30:18:30:20 | Load: end | test.c:30:10:30:20 | Right | 0 | false | NoReason | -| test.c:30:18:30:20 | Load: end | test.c:30:10:30:20 | Right | 0 | true | NoReason | -| test.c:30:18:30:20 | Load: end | test.c:30:18:30:20 | CopySource | 0 | false | NoReason | -| test.c:30:18:30:20 | Load: end | test.c:30:18:30:20 | CopySource | 0 | true | NoReason | -| test.c:30:18:30:20 | Load: end | test.c:30:18:30:20 | Load: end | 0 | false | NoReason | -| test.c:30:18:30:20 | Load: end | test.c:30:18:30:20 | Load: end | 0 | true | NoReason | -| test.c:30:18:30:20 | VariableAddress: end | test.c:30:18:30:20 | Address | 0 | false | NoReason | -| test.c:30:18:30:20 | VariableAddress: end | test.c:30:18:30:20 | Address | 0 | true | NoReason | -| test.c:30:18:30:20 | VariableAddress: end | test.c:30:18:30:20 | VariableAddress: end | 0 | false | NoReason | -| test.c:30:18:30:20 | VariableAddress: end | test.c:30:18:30:20 | VariableAddress: end | 0 | true | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:29:5:29:9 | UnmodeledUse | 0 | false | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:29:5:29:9 | UnmodeledUse | 0 | true | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:5:31:25 | CopySource | 0 | false | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:5:31:25 | CopySource | 0 | true | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:5:31:25 | Store: ... = ... | 0 | false | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:5:31:25 | Store: ... = ... | 0 | true | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:14:31:25 | Add: ... + ... | 0 | false | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:14:31:25 | Add: ... + ... | 0 | true | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:14:31:25 | Left | 1 | false | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:14:31:25 | Left | 1 | true | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:15:31:20 | Load: * ... | 1 | false | NoReason | -| test.c:31:5:31:25 | Store: ... = ... | test.c:31:15:31:20 | Load: * ... | 1 | true | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:31:6:31:10 | Load: begin | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:31:6:31:10 | Load: begin | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:31:6:31:10 | Load: begin | test.c:31:5:31:25 | Address | 0 | false | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:31:5:31:25 | Address | 0 | true | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:31:6:31:10 | Load: begin | 0 | false | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:31:6:31:10 | Load: begin | 0 | true | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:31:6:31:10 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:31:6:31:10 | VariableAddress: begin | test.c:31:6:31:10 | Address | 0 | false | NoReason | -| test.c:31:6:31:10 | VariableAddress: begin | test.c:31:6:31:10 | Address | 0 | true | NoReason | -| test.c:31:6:31:10 | VariableAddress: begin | test.c:31:6:31:10 | VariableAddress: begin | 0 | false | NoReason | -| test.c:31:6:31:10 | VariableAddress: begin | test.c:31:6:31:10 | VariableAddress: begin | 0 | true | NoReason | -| test.c:31:14:31:25 | Add: ... + ... | test.c:31:5:31:25 | CopySource | 0 | false | NoReason | -| test.c:31:14:31:25 | Add: ... + ... | test.c:31:5:31:25 | CopySource | 0 | true | NoReason | -| test.c:31:14:31:25 | Add: ... + ... | test.c:31:14:31:25 | Add: ... + ... | 0 | false | NoReason | -| test.c:31:14:31:25 | Add: ... + ... | test.c:31:14:31:25 | Add: ... + ... | 0 | true | NoReason | -| test.c:31:14:31:25 | Add: ... + ... | test.c:31:14:31:25 | Left | 1 | false | NoReason | -| test.c:31:14:31:25 | Add: ... + ... | test.c:31:14:31:25 | Left | 1 | true | NoReason | -| test.c:31:14:31:25 | Add: ... + ... | test.c:31:15:31:20 | Load: * ... | 1 | false | NoReason | -| test.c:31:14:31:25 | Add: ... + ... | test.c:31:15:31:20 | Load: * ... | 1 | true | NoReason | -| test.c:31:15:31:20 | Load: * ... | test.c:31:14:31:25 | Left | 0 | false | NoReason | -| test.c:31:15:31:20 | Load: * ... | test.c:31:14:31:25 | Left | 0 | true | NoReason | -| test.c:31:15:31:20 | Load: * ... | test.c:31:15:31:20 | Load: * ... | 0 | false | NoReason | -| test.c:31:15:31:20 | Load: * ... | test.c:31:15:31:20 | Load: * ... | 0 | true | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:31:16:31:20 | Load: begin | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:31:16:31:20 | Load: begin | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:31:16:31:20 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:31:15:31:20 | Address | 0 | false | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:31:15:31:20 | Address | 0 | true | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:31:16:31:20 | Load: begin | 0 | false | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:31:16:31:20 | Load: begin | 0 | true | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:31:16:31:20 | Load: begin | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:31:16:31:20 | VariableAddress: begin | test.c:31:16:31:20 | Address | 0 | false | NoReason | -| test.c:31:16:31:20 | VariableAddress: begin | test.c:31:16:31:20 | Address | 0 | true | NoReason | -| test.c:31:16:31:20 | VariableAddress: begin | test.c:31:16:31:20 | VariableAddress: begin | 0 | false | NoReason | -| test.c:31:16:31:20 | VariableAddress: begin | test.c:31:16:31:20 | VariableAddress: begin | 0 | true | NoReason | -| test.c:31:25:31:25 | Constant: 1 | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:31:25:31:25 | Constant: 1 | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:31:25:31:25 | Constant: 1 | test.c:31:14:31:25 | Right | 0 | false | NoReason | -| test.c:31:25:31:25 | Constant: 1 | test.c:31:14:31:25 | Right | 0 | true | NoReason | -| test.c:31:25:31:25 | Constant: 1 | test.c:31:25:31:25 | Constant: 1 | 0 | false | NoReason | -| test.c:31:25:31:25 | Constant: 1 | test.c:31:25:31:25 | Constant: 1 | 0 | true | NoReason | -| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:9 | VariableAddress: begin | 0 | false | NoReason | -| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:9 | VariableAddress: begin | 0 | true | NoReason | -| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:11 | Address | 0 | false | NoReason | -| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:11 | Address | 0 | false | NoReason | -| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:11 | Address | 0 | true | NoReason | -| test.c:32:5:32:9 | VariableAddress: begin | test.c:32:5:32:11 | Address | 0 | true | NoReason | -| test.c:32:5:32:11 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:32:5:32:11 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:32:5:32:11 | Constant: ... ++ | test.c:32:5:32:11 | Constant: ... ++ | 0 | false | NoReason | -| test.c:32:5:32:11 | Constant: ... ++ | test.c:32:5:32:11 | Constant: ... ++ | 0 | true | NoReason | -| test.c:32:5:32:11 | Constant: ... ++ | test.c:32:5:32:11 | Right | 0 | false | NoReason | -| test.c:32:5:32:11 | Constant: ... ++ | test.c:32:5:32:11 | Right | 0 | true | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | Load: ... ++ | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | Load: ... ++ | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | Load: ... ++ | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | Left | 0 | false | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | Left | 0 | true | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | Load: ... ++ | 0 | false | NoReason | -| test.c:32:5:32:11 | Load: ... ++ | test.c:32:5:32:11 | Load: ... ++ | 0 | true | NoReason | -| test.c:32:5:32:11 | PointerAdd: ... ++ | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | PointerAdd: ... ++ | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | PointerAdd: ... ++ | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | false | NoReason | -| test.c:32:5:32:11 | PointerAdd: ... ++ | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | true | NoReason | -| test.c:32:5:32:11 | Store: ... ++ | test.c:30:10:30:14 | Phi | 0 | false | NoReason | -| test.c:32:5:32:11 | Store: ... ++ | test.c:30:10:30:14 | Phi | 0 | true | NoReason | -| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | false | NoReason | -| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | true | NoReason | -| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | Store: ... ++ | 0 | false | NoReason | -| test.c:32:5:32:11 | Store: ... ++ | test.c:32:5:32:11 | Store: ... ++ | 0 | true | NoReason | +| test.c:26:7:26:7 | VariableAddress: i | test.c:26:7:26:7 | VariableAddress: i | 0 | false | NoReason | +| test.c:26:7:26:7 | VariableAddress: i | test.c:26:7:26:7 | VariableAddress: i | 0 | true | NoReason | +| test.c:26:7:26:7 | VariableAddress: i | test.c:26:7:26:11 | Address | 0 | false | NoReason | +| test.c:26:7:26:7 | VariableAddress: i | test.c:26:7:26:11 | Address | 0 | true | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | Store: ... = ... | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | Store: ... = ... | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | Store: ... = ... | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | Store: ... = ... | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | Store: ... = ... | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:7:26:11 | CopySource | 0 | true | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:7:26:11 | Store: ... = ... | 0 | true | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:11:26:11 | Load: x | 0 | true | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:7:26:11 | Store: ... = ... | test.c:26:14:26:14 | Phi | 0 | true | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | Load: x | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | Load: x | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | Load: x | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | Load: x | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | Load: x | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | Load: x | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:26:7:26:11 | CopySource | 0 | true | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:11:26:11 | Load: x | test.c:26:11:26:11 | Load: x | 0 | true | NoReason | +| test.c:26:11:26:11 | VariableAddress: x | test.c:26:11:26:11 | Address | 0 | false | NoReason | +| test.c:26:11:26:11 | VariableAddress: x | test.c:26:11:26:11 | Address | 0 | true | NoReason | +| test.c:26:11:26:11 | VariableAddress: x | test.c:26:11:26:11 | VariableAddress: x | 0 | false | NoReason | +| test.c:26:11:26:11 | VariableAddress: x | test.c:26:11:26:11 | VariableAddress: x | 0 | true | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Load: i | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Load: i | 0 | true | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:14:26:18 | Left | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:14:26:18 | Left | 0 | true | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Load: i | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi: i | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | VariableAddress: i | test.c:26:14:26:14 | Address | 0 | false | NoReason | +| test.c:26:14:26:14 | VariableAddress: i | test.c:26:14:26:14 | Address | 0 | true | NoReason | +| test.c:26:14:26:14 | VariableAddress: i | test.c:26:14:26:14 | VariableAddress: i | 0 | false | NoReason | +| test.c:26:14:26:14 | VariableAddress: i | test.c:26:14:26:14 | VariableAddress: i | 0 | true | NoReason | +| test.c:26:14:26:18 | CompareGT: ... > ... | test.c:26:14:26:18 | CompareGT: ... > ... | 0 | false | NoReason | +| test.c:26:14:26:18 | CompareGT: ... > ... | test.c:26:14:26:18 | CompareGT: ... > ... | 0 | true | NoReason | +| test.c:26:14:26:18 | CompareGT: ... > ... | test.c:26:14:26:18 | Condition | 0 | false | NoReason | +| test.c:26:14:26:18 | CompareGT: ... > ... | test.c:26:14:26:18 | Condition | 0 | true | NoReason | +| test.c:26:18:26:18 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:26:18:26:18 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | true | NoReason | +| test.c:26:18:26:18 | Constant: 0 | test.c:26:14:26:18 | Right | 0 | false | NoReason | +| test.c:26:18:26:18 | Constant: 0 | test.c:26:14:26:18 | Right | 0 | true | NoReason | +| test.c:26:18:26:18 | Constant: 0 | test.c:26:18:26:18 | Constant: 0 | 0 | false | NoReason | +| test.c:26:18:26:18 | Constant: 0 | test.c:26:18:26:18 | Constant: 0 | 0 | true | NoReason | +| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:21 | VariableAddress: i | 0 | false | NoReason | +| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:21 | VariableAddress: i | 0 | true | NoReason | +| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:23 | Address | 0 | false | NoReason | +| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:23 | Address | 0 | false | NoReason | +| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:23 | Address | 0 | true | NoReason | +| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:23 | Address | 0 | true | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Add: ... ++ | file://:0:0:0:0 | 0 | 2 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:23:18:23:18 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:7:26:11 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:7:26:11 | Store: ... = ... | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:11:26:11 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:11:26:11 | Load: x | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | CopySource | 1 | true | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | Phi | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | Phi: i | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | Phi: i | 1 | true | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:18 | Right | 2 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:18:26:18 | Constant: 0 | 2 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Add: ... ++ | 0 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Add: ... ++ | 0 | true | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Constant: ... ++ | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | CopySource | 1 | true | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Left | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Left | 1 | true | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 1 | true | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Right | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:27:7:27:7 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Add: ... ++ | test.c:27:7:27:7 | CopySource | 1 | true | NoReason | +| test.c:26:21:26:23 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:26:21:26:23 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:26:21:26:23 | Constant: ... ++ | test.c:26:21:26:23 | Constant: ... ++ | 0 | false | NoReason | +| test.c:26:21:26:23 | Constant: ... ++ | test.c:26:21:26:23 | Constant: ... ++ | 0 | true | NoReason | +| test.c:26:21:26:23 | Constant: ... ++ | test.c:26:21:26:23 | Right | 0 | false | NoReason | +| test.c:26:21:26:23 | Constant: ... ++ | test.c:26:21:26:23 | Right | 0 | true | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Load: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | Left | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | Left | 0 | true | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 0 | true | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Load: ... ++ | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Store: ... ++ | file://:0:0:0:0 | 0 | 2 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:23:18:23:18 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:7:26:11 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:7:26:11 | Store: ... = ... | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:11:26:11 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:11:26:11 | Load: x | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | CopySource | 1 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi | 0 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi: i | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi: i | 1 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:18 | Right | 2 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:18:26:18 | Constant: 0 | 2 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Add: ... ++ | 0 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Add: ... ++ | 0 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Constant: ... ++ | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | CopySource | 1 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Left | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Left | 1 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 1 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Right | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Store: ... ++ | 0 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Store: ... ++ | 0 | true | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:27:7:27:7 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | Store: ... ++ | test.c:27:7:27:7 | CopySource | 1 | true | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:27:5:27:5 | Load: p | 0 | false | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:27:5:27:5 | Load: p | 0 | true | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:27:5:27:8 | Left | 0 | false | NoReason | +| test.c:27:5:27:5 | Load: p | test.c:27:5:27:8 | Left | 0 | true | NoReason | +| test.c:27:5:27:5 | VariableAddress: p | test.c:27:5:27:5 | Address | 0 | false | NoReason | +| test.c:27:5:27:5 | VariableAddress: p | test.c:27:5:27:5 | Address | 0 | true | NoReason | +| test.c:27:5:27:5 | VariableAddress: p | test.c:27:5:27:5 | VariableAddress: p | 0 | false | NoReason | +| test.c:27:5:27:5 | VariableAddress: p | test.c:27:5:27:5 | VariableAddress: p | 0 | true | NoReason | +| test.c:27:5:27:8 | PointerAdd: access to array | test.c:27:5:27:8 | Address | 0 | false | NoReason | +| test.c:27:5:27:8 | PointerAdd: access to array | test.c:27:5:27:8 | Address | 0 | true | NoReason | +| test.c:27:5:27:8 | PointerAdd: access to array | test.c:27:5:27:8 | PointerAdd: access to array | 0 | false | NoReason | +| test.c:27:5:27:8 | PointerAdd: access to array | test.c:27:5:27:8 | PointerAdd: access to array | 0 | true | NoReason | +| test.c:27:7:27:7 | Load: i | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | +| test.c:27:7:27:7 | Load: i | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | +| test.c:27:7:27:7 | Load: i | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | +| test.c:27:7:27:7 | Load: i | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:27:5:27:8 | Right | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:27:5:27:8 | Right | 0 | true | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:27:7:27:7 | Load: i | 0 | false | NoReason | +| test.c:27:7:27:7 | Load: i | test.c:27:7:27:7 | Load: i | 0 | true | NoReason | +| test.c:27:7:27:7 | VariableAddress: i | test.c:27:7:27:7 | Address | 0 | false | NoReason | +| test.c:27:7:27:7 | VariableAddress: i | test.c:27:7:27:7 | Address | 0 | true | NoReason | +| test.c:27:7:27:7 | VariableAddress: i | test.c:27:7:27:7 | VariableAddress: i | 0 | false | NoReason | +| test.c:27:7:27:7 | VariableAddress: i | test.c:27:7:27:7 | VariableAddress: i | 0 | true | NoReason | +| test.c:32:5:32:9 | VariableAddress: test4 | test.c:32:5:32:9 | Address | 0 | false | NoReason | +| test.c:32:5:32:9 | VariableAddress: test4 | test.c:32:5:32:9 | Address | 0 | true | NoReason | +| test.c:32:5:32:9 | VariableAddress: test4 | test.c:32:5:32:9 | VariableAddress: test4 | 0 | false | NoReason | +| test.c:32:5:32:9 | VariableAddress: test4 | test.c:32:5:32:9 | VariableAddress: test4 | 0 | true | NoReason | +| test.c:32:16:32:20 | InitializeParameter: begin | test.c:32:16:32:20 | InitializeParameter: begin | 0 | false | NoReason | +| test.c:32:16:32:20 | InitializeParameter: begin | test.c:32:16:32:20 | InitializeParameter: begin | 0 | true | NoReason | +| test.c:32:16:32:20 | InitializeParameter: begin | test.c:33:10:33:14 | Phi | 0 | false | NoReason | +| test.c:32:16:32:20 | InitializeParameter: begin | test.c:33:10:33:14 | Phi | 0 | true | NoReason | +| test.c:32:16:32:20 | VariableAddress: begin | test.c:32:16:32:20 | Address | 0 | false | NoReason | +| test.c:32:16:32:20 | VariableAddress: begin | test.c:32:16:32:20 | Address | 0 | true | NoReason | +| test.c:32:16:32:20 | VariableAddress: begin | test.c:32:16:32:20 | VariableAddress: begin | 0 | false | NoReason | +| test.c:32:16:32:20 | VariableAddress: begin | test.c:32:16:32:20 | VariableAddress: begin | 0 | true | NoReason | +| test.c:32:28:32:30 | InitializeParameter: end | test.c:32:28:32:30 | InitializeParameter: end | 0 | false | NoReason | +| test.c:32:28:32:30 | InitializeParameter: end | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | NoReason | +| test.c:32:28:32:30 | InitializeParameter: end | test.c:33:18:33:20 | CopySource | 0 | false | NoReason | +| test.c:32:28:32:30 | InitializeParameter: end | test.c:33:18:33:20 | CopySource | 0 | true | NoReason | +| test.c:32:28:32:30 | VariableAddress: end | test.c:32:28:32:30 | Address | 0 | false | NoReason | +| test.c:32:28:32:30 | VariableAddress: end | test.c:32:28:32:30 | Address | 0 | true | NoReason | +| test.c:32:28:32:30 | VariableAddress: end | test.c:32:28:32:30 | VariableAddress: end | 0 | false | NoReason | +| test.c:32:28:32:30 | VariableAddress: end | test.c:32:28:32:30 | VariableAddress: end | 0 | true | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | Load: begin | 0 | false | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | Load: begin | 0 | true | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:20 | Left | 0 | false | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:20 | Left | 0 | true | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi: begin | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | VariableAddress: begin | test.c:33:10:33:14 | Address | 0 | false | NoReason | +| test.c:33:10:33:14 | VariableAddress: begin | test.c:33:10:33:14 | Address | 0 | true | NoReason | +| test.c:33:10:33:14 | VariableAddress: begin | test.c:33:10:33:14 | VariableAddress: begin | 0 | false | NoReason | +| test.c:33:10:33:14 | VariableAddress: begin | test.c:33:10:33:14 | VariableAddress: begin | 0 | true | NoReason | +| test.c:33:10:33:20 | CompareLT: ... < ... | test.c:33:10:33:20 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:33:10:33:20 | CompareLT: ... < ... | test.c:33:10:33:20 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:33:10:33:20 | CompareLT: ... < ... | test.c:33:10:33:20 | Condition | 0 | false | NoReason | +| test.c:33:10:33:20 | CompareLT: ... < ... | test.c:33:10:33:20 | Condition | 0 | true | NoReason | +| test.c:33:18:33:20 | Load: end | test.c:32:28:32:30 | InitializeParameter: end | 0 | false | NoReason | +| test.c:33:18:33:20 | Load: end | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | NoReason | +| test.c:33:18:33:20 | Load: end | test.c:33:10:33:20 | Right | 0 | false | NoReason | +| test.c:33:18:33:20 | Load: end | test.c:33:10:33:20 | Right | 0 | true | NoReason | +| test.c:33:18:33:20 | Load: end | test.c:33:18:33:20 | CopySource | 0 | false | NoReason | +| test.c:33:18:33:20 | Load: end | test.c:33:18:33:20 | CopySource | 0 | true | NoReason | +| test.c:33:18:33:20 | Load: end | test.c:33:18:33:20 | Load: end | 0 | false | NoReason | +| test.c:33:18:33:20 | Load: end | test.c:33:18:33:20 | Load: end | 0 | true | NoReason | +| test.c:33:18:33:20 | VariableAddress: end | test.c:33:18:33:20 | Address | 0 | false | NoReason | +| test.c:33:18:33:20 | VariableAddress: end | test.c:33:18:33:20 | Address | 0 | true | NoReason | +| test.c:33:18:33:20 | VariableAddress: end | test.c:33:18:33:20 | VariableAddress: end | 0 | false | NoReason | +| test.c:33:18:33:20 | VariableAddress: end | test.c:33:18:33:20 | VariableAddress: end | 0 | true | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:32:5:32:9 | UnmodeledUse | 0 | false | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:32:5:32:9 | UnmodeledUse | 0 | true | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:5:34:25 | CopySource | 0 | false | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:5:34:25 | CopySource | 0 | true | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:5:34:25 | Store: ... = ... | 0 | false | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:5:34:25 | Store: ... = ... | 0 | true | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:14:34:25 | Add: ... + ... | 0 | false | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:14:34:25 | Add: ... + ... | 0 | true | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:14:34:25 | Left | 1 | false | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:14:34:25 | Left | 1 | true | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:15:34:20 | Load: * ... | 1 | false | NoReason | +| test.c:34:5:34:25 | Store: ... = ... | test.c:34:15:34:20 | Load: * ... | 1 | true | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:34:6:34:10 | Load: begin | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:34:6:34:10 | Load: begin | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:34:6:34:10 | Load: begin | test.c:34:5:34:25 | Address | 0 | false | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:34:5:34:25 | Address | 0 | true | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:34:6:34:10 | Load: begin | 0 | false | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:34:6:34:10 | Load: begin | 0 | true | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:34:6:34:10 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:34:6:34:10 | VariableAddress: begin | test.c:34:6:34:10 | Address | 0 | false | NoReason | +| test.c:34:6:34:10 | VariableAddress: begin | test.c:34:6:34:10 | Address | 0 | true | NoReason | +| test.c:34:6:34:10 | VariableAddress: begin | test.c:34:6:34:10 | VariableAddress: begin | 0 | false | NoReason | +| test.c:34:6:34:10 | VariableAddress: begin | test.c:34:6:34:10 | VariableAddress: begin | 0 | true | NoReason | +| test.c:34:14:34:25 | Add: ... + ... | test.c:34:5:34:25 | CopySource | 0 | false | NoReason | +| test.c:34:14:34:25 | Add: ... + ... | test.c:34:5:34:25 | CopySource | 0 | true | NoReason | +| test.c:34:14:34:25 | Add: ... + ... | test.c:34:14:34:25 | Add: ... + ... | 0 | false | NoReason | +| test.c:34:14:34:25 | Add: ... + ... | test.c:34:14:34:25 | Add: ... + ... | 0 | true | NoReason | +| test.c:34:14:34:25 | Add: ... + ... | test.c:34:14:34:25 | Left | 1 | false | NoReason | +| test.c:34:14:34:25 | Add: ... + ... | test.c:34:14:34:25 | Left | 1 | true | NoReason | +| test.c:34:14:34:25 | Add: ... + ... | test.c:34:15:34:20 | Load: * ... | 1 | false | NoReason | +| test.c:34:14:34:25 | Add: ... + ... | test.c:34:15:34:20 | Load: * ... | 1 | true | NoReason | +| test.c:34:15:34:20 | Load: * ... | test.c:34:14:34:25 | Left | 0 | false | NoReason | +| test.c:34:15:34:20 | Load: * ... | test.c:34:14:34:25 | Left | 0 | true | NoReason | +| test.c:34:15:34:20 | Load: * ... | test.c:34:15:34:20 | Load: * ... | 0 | false | NoReason | +| test.c:34:15:34:20 | Load: * ... | test.c:34:15:34:20 | Load: * ... | 0 | true | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:34:16:34:20 | Load: begin | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:34:16:34:20 | Load: begin | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:34:16:34:20 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:34:15:34:20 | Address | 0 | false | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:34:15:34:20 | Address | 0 | true | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:34:16:34:20 | Load: begin | 0 | false | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:34:16:34:20 | Load: begin | 0 | true | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:34:16:34:20 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:34:16:34:20 | VariableAddress: begin | test.c:34:16:34:20 | Address | 0 | false | NoReason | +| test.c:34:16:34:20 | VariableAddress: begin | test.c:34:16:34:20 | Address | 0 | true | NoReason | +| test.c:34:16:34:20 | VariableAddress: begin | test.c:34:16:34:20 | VariableAddress: begin | 0 | false | NoReason | +| test.c:34:16:34:20 | VariableAddress: begin | test.c:34:16:34:20 | VariableAddress: begin | 0 | true | NoReason | +| test.c:34:25:34:25 | Constant: 1 | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:34:25:34:25 | Constant: 1 | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:34:25:34:25 | Constant: 1 | test.c:34:14:34:25 | Right | 0 | false | NoReason | +| test.c:34:25:34:25 | Constant: 1 | test.c:34:14:34:25 | Right | 0 | true | NoReason | +| test.c:34:25:34:25 | Constant: 1 | test.c:34:25:34:25 | Constant: 1 | 0 | false | NoReason | +| test.c:34:25:34:25 | Constant: 1 | test.c:34:25:34:25 | Constant: 1 | 0 | true | NoReason | +| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:9 | VariableAddress: begin | 0 | false | NoReason | +| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:9 | VariableAddress: begin | 0 | true | NoReason | +| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:11 | Address | 0 | false | NoReason | +| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:11 | Address | 0 | false | NoReason | +| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:11 | Address | 0 | true | NoReason | +| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:11 | Address | 0 | true | NoReason | +| test.c:35:5:35:11 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:35:5:35:11 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:35:5:35:11 | Constant: ... ++ | test.c:35:5:35:11 | Constant: ... ++ | 0 | false | NoReason | +| test.c:35:5:35:11 | Constant: ... ++ | test.c:35:5:35:11 | Constant: ... ++ | 0 | true | NoReason | +| test.c:35:5:35:11 | Constant: ... ++ | test.c:35:5:35:11 | Right | 0 | false | NoReason | +| test.c:35:5:35:11 | Constant: ... ++ | test.c:35:5:35:11 | Right | 0 | true | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | Load: ... ++ | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | Load: ... ++ | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | Load: ... ++ | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | Left | 0 | false | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | Left | 0 | true | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | Load: ... ++ | 0 | false | NoReason | +| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | Load: ... ++ | 0 | true | NoReason | +| test.c:35:5:35:11 | PointerAdd: ... ++ | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | PointerAdd: ... ++ | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | PointerAdd: ... ++ | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | false | NoReason | +| test.c:35:5:35:11 | PointerAdd: ... ++ | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | true | NoReason | +| test.c:35:5:35:11 | Store: ... ++ | test.c:33:10:33:14 | Phi | 0 | false | NoReason | +| test.c:35:5:35:11 | Store: ... ++ | test.c:33:10:33:14 | Phi | 0 | true | NoReason | +| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | false | NoReason | +| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | true | NoReason | +| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | Store: ... ++ | 0 | false | NoReason | +| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | Store: ... ++ | 0 | true | NoReason | operandBounds | test.c:3:5:3:9 | Address | test.c:3:5:3:9 | Address | 0 | false | NoReason | | test.c:3:5:3:9 | Address | test.c:3:5:3:9 | Address | 0 | true | NoReason | @@ -1234,194 +1478,202 @@ operandBounds | test.c:22:7:22:7 | Address | test.c:22:7:22:7 | Address | 0 | true | NoReason | | test.c:22:7:22:7 | Address | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | false | NoReason | | test.c:22:7:22:7 | Address | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | true | NoReason | -| test.c:23:8:23:12 | Address | test.c:23:8:23:8 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:8:23:12 | Address | test.c:23:8:23:8 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:8:23:12 | Address | test.c:23:8:23:12 | Address | 0 | false | NoReason | -| test.c:23:8:23:12 | Address | test.c:23:8:23:12 | Address | 0 | true | NoReason | -| test.c:23:8:23:12 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:8:23:12 | CopySource | file://:0:0:0:0 | 0 | 0 | true | NoReason | -| test.c:23:8:23:12 | CopySource | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:8:23:12 | CopySource | test.c:23:8:23:12 | CopySource | 0 | true | NoReason | -| test.c:23:8:23:12 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:8:23:12 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | true | NoReason | -| test.c:23:15:23:15 | Address | test.c:23:15:23:15 | Address | 0 | false | NoReason | -| test.c:23:15:23:15 | Address | test.c:23:15:23:15 | Address | 0 | true | NoReason | -| test.c:23:15:23:15 | Address | test.c:23:15:23:15 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:15:23:15 | Address | test.c:23:15:23:15 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:15:23:15 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | file://:0:0:0:0 | 0 | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | -| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | CopySource | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | Store: ... = ... | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:8:23:12 | Store: ... = ... | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:12:23:12 | Constant: 0 | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:12:23:12 | Constant: 0 | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | CopySource | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | CopySource | 1 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi: i | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:15 | Phi: i | 1 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:15:23:19 | Right | 1 | true | CompareLT: ... < ... | -| test.c:23:15:23:15 | Phi | test.c:23:19:23:19 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:15:23:15 | Phi | test.c:23:19:23:19 | Load: x | 1 | true | CompareLT: ... < ... | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Add: ... ++ | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Add: ... ++ | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | CopySource | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | CopySource | 1 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Left | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Left | 1 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Load: ... ++ | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Load: ... ++ | 1 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Right | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Store: ... ++ | 0 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:23:22:23:24 | Store: ... ++ | 0 | true | NoReason | -| test.c:23:15:23:15 | Phi | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | -| test.c:23:15:23:15 | Phi | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | -| test.c:23:15:23:19 | Condition | test.c:23:15:23:19 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:23:15:23:19 | Condition | test.c:23:15:23:19 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:23:15:23:19 | Condition | test.c:23:15:23:19 | Condition | 0 | false | NoReason | -| test.c:23:15:23:19 | Condition | test.c:23:15:23:19 | Condition | 0 | true | NoReason | -| test.c:23:15:23:19 | Left | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Load: i | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Load: i | 0 | true | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:15:23:19 | Left | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:15:23:19 | Left | 0 | true | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:19 | Left | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:19 | Left | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:19 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:23:15:23:19 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:23:15:23:19 | Right | test.c:23:15:23:19 | Right | 0 | false | NoReason | -| test.c:23:15:23:19 | Right | test.c:23:15:23:19 | Right | 0 | true | NoReason | -| test.c:23:15:23:19 | Right | test.c:23:19:23:19 | CopySource | 0 | false | NoReason | -| test.c:23:15:23:19 | Right | test.c:23:19:23:19 | CopySource | 0 | true | NoReason | -| test.c:23:15:23:19 | Right | test.c:23:19:23:19 | Load: x | 0 | false | NoReason | -| test.c:23:15:23:19 | Right | test.c:23:19:23:19 | Load: x | 0 | true | NoReason | -| test.c:23:19:23:19 | Address | test.c:23:19:23:19 | Address | 0 | false | NoReason | -| test.c:23:19:23:19 | Address | test.c:23:19:23:19 | Address | 0 | true | NoReason | -| test.c:23:19:23:19 | Address | test.c:23:19:23:19 | VariableAddress: x | 0 | false | NoReason | -| test.c:23:19:23:19 | Address | test.c:23:19:23:19 | VariableAddress: x | 0 | true | NoReason | -| test.c:23:19:23:19 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:23:19:23:19 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:23:19:23:19 | CopySource | test.c:23:19:23:19 | CopySource | 0 | false | NoReason | -| test.c:23:19:23:19 | CopySource | test.c:23:19:23:19 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:22 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:22 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:22 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:22 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | false | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | false | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | false | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | false | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | true | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | true | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | true | NoReason | -| test.c:23:22:23:24 | Address | test.c:23:22:23:24 | Address | 0 | true | NoReason | -| test.c:23:22:23:24 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | CopySource | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:8:23:12 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:8:23:12 | Store: ... = ... | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:12:23:12 | Constant: 0 | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | CopySource | 1 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi: i | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:15 | Phi: i | 1 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | CopySource | test.c:23:15:23:19 | Right | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | CopySource | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | CopySource | test.c:23:19:23:19 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | CopySource | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | CopySource | test.c:23:19:23:19 | Load: x | 1 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Add: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Add: ... ++ | 0 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | CopySource | 1 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Left | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Left | 1 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Load: ... ++ | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Load: ... ++ | 1 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:23:22:23:24 | Right | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | -| test.c:23:22:23:24 | CopySource | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | -| test.c:23:22:23:24 | Left | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Left | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Left | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Left | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | Left | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | Left | 0 | true | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | Load: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:23:22:23:24 | Load: ... ++ | 0 | true | NoReason | -| test.c:23:22:23:24 | Left | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:22:23:24 | Left | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:22:23:24 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:22:23:24 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:23:22:23:24 | Right | test.c:23:22:23:24 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:22:23:24 | Right | test.c:23:22:23:24 | Constant: ... ++ | 0 | true | NoReason | -| test.c:23:22:23:24 | Right | test.c:23:22:23:24 | Right | 0 | false | NoReason | -| test.c:23:22:23:24 | Right | test.c:23:22:23:24 | Right | 0 | true | NoReason | +| test.c:23:7:23:11 | Address | test.c:23:7:23:7 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:7:23:11 | Address | test.c:23:7:23:7 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:7:23:11 | Address | test.c:23:7:23:11 | Address | 0 | false | NoReason | +| test.c:23:7:23:11 | Address | test.c:23:7:23:11 | Address | 0 | true | NoReason | +| test.c:23:7:23:11 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:7:23:11 | CopySource | file://:0:0:0:0 | 0 | 0 | true | NoReason | +| test.c:23:7:23:11 | CopySource | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:7:23:11 | CopySource | test.c:23:7:23:11 | CopySource | 0 | true | NoReason | +| test.c:23:7:23:11 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:7:23:11 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | true | NoReason | +| test.c:23:14:23:14 | Address | test.c:23:14:23:14 | Address | 0 | false | NoReason | +| test.c:23:14:23:14 | Address | test.c:23:14:23:14 | Address | 0 | true | NoReason | +| test.c:23:14:23:14 | Address | test.c:23:14:23:14 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:14:23:14 | Address | test.c:23:14:23:14 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:14:23:14 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | file://:0:0:0:0 | 0 | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | +| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | CopySource | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | Store: ... = ... | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | Store: ... = ... | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:11:23:11 | Constant: 0 | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:11:23:11 | Constant: 0 | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | CopySource | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | CopySource | 1 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi: i | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi: i | 1 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:14:23:18 | Right | 1 | true | CompareLT: ... < ... | +| test.c:23:14:23:14 | Phi | test.c:23:18:23:18 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:14:23:14 | Phi | test.c:23:18:23:18 | Load: x | 1 | true | CompareLT: ... < ... | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Add: ... ++ | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Add: ... ++ | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | CopySource | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | CopySource | 1 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Left | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Left | 1 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Load: ... ++ | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Load: ... ++ | 1 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Right | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Store: ... ++ | 0 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Store: ... ++ | 0 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | +| test.c:23:14:23:14 | Phi | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | +| test.c:23:14:23:14 | Phi | test.c:26:11:26:11 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:14:23:18 | Condition | test.c:23:14:23:18 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:23:14:23:18 | Condition | test.c:23:14:23:18 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:23:14:23:18 | Condition | test.c:23:14:23:18 | Condition | 0 | false | NoReason | +| test.c:23:14:23:18 | Condition | test.c:23:14:23:18 | Condition | 0 | true | NoReason | +| test.c:23:14:23:18 | Left | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Load: i | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Load: i | 0 | true | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:14:23:18 | Left | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:14:23:18 | Left | 0 | true | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:18 | Left | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:18 | Left | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:18 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:23:14:23:18 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:23:14:23:18 | Right | test.c:23:14:23:18 | Right | 0 | false | NoReason | +| test.c:23:14:23:18 | Right | test.c:23:14:23:18 | Right | 0 | true | NoReason | +| test.c:23:14:23:18 | Right | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:18 | Right | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | +| test.c:23:14:23:18 | Right | test.c:23:18:23:18 | Load: x | 0 | false | NoReason | +| test.c:23:14:23:18 | Right | test.c:23:18:23:18 | Load: x | 0 | true | NoReason | +| test.c:23:14:23:18 | Right | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:23:14:23:18 | Right | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | +| test.c:23:18:23:18 | Address | test.c:23:18:23:18 | Address | 0 | false | NoReason | +| test.c:23:18:23:18 | Address | test.c:23:18:23:18 | Address | 0 | true | NoReason | +| test.c:23:18:23:18 | Address | test.c:23:18:23:18 | VariableAddress: x | 0 | false | NoReason | +| test.c:23:18:23:18 | Address | test.c:23:18:23:18 | VariableAddress: x | 0 | true | NoReason | +| test.c:23:18:23:18 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:23:18:23:18 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:23:18:23:18 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:23:18:23:18 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | +| test.c:23:18:23:18 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:23:18:23:18 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:21 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:21 | VariableAddress: i | 0 | false | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:21 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:21 | VariableAddress: i | 0 | true | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | false | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | false | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | false | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | false | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | true | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | true | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | true | NoReason | +| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | true | NoReason | +| test.c:23:21:23:23 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | CopySource | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:7:23:11 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:7:23:11 | Store: ... = ... | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:11:23:11 | Constant: 0 | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | CopySource | 1 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi: i | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi: i | 1 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | CopySource | test.c:23:14:23:18 | Right | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | CopySource | test.c:23:18:23:18 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | CopySource | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | CopySource | test.c:23:18:23:18 | Load: x | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Add: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Add: ... ++ | 0 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 1 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Left | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Left | 1 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Load: ... ++ | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Load: ... ++ | 1 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Right | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | +| test.c:23:21:23:23 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | CopySource | test.c:26:11:26:11 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Left | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Left | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Left | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Left | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | Left | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | Left | 0 | true | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | Load: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | Load: ... ++ | 0 | true | NoReason | +| test.c:23:21:23:23 | Left | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | +| test.c:23:21:23:23 | Left | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | +| test.c:23:21:23:23 | Left | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:23:21:23:23 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:23:21:23:23 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:23:21:23:23 | Right | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | +| test.c:23:21:23:23 | Right | test.c:23:21:23:23 | Constant: ... ++ | 0 | true | NoReason | +| test.c:23:21:23:23 | Right | test.c:23:21:23:23 | Right | 0 | false | NoReason | +| test.c:23:21:23:23 | Right | test.c:23:21:23:23 | Right | 0 | true | NoReason | | test.c:24:5:24:5 | Address | test.c:24:5:24:5 | Address | 0 | false | NoReason | | test.c:24:5:24:5 | Address | test.c:24:5:24:5 | Address | 0 | true | NoReason | | test.c:24:5:24:5 | Address | test.c:24:5:24:5 | VariableAddress: p | 0 | false | NoReason | @@ -1430,6 +1682,8 @@ operandBounds | test.c:24:5:24:5 | CopySource | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | | test.c:24:5:24:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | | test.c:24:5:24:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | +| test.c:24:5:24:5 | CopySource | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:5 | CopySource | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | | test.c:24:5:24:8 | Address | test.c:24:5:24:8 | Address | 0 | false | NoReason | | test.c:24:5:24:8 | Address | test.c:24:5:24:8 | Address | 0 | true | NoReason | | test.c:24:5:24:8 | Address | test.c:24:5:24:8 | PointerAdd: access to array | 0 | false | NoReason | @@ -1442,273 +1696,569 @@ operandBounds | test.c:24:5:24:8 | Left | test.c:24:5:24:5 | Load: p | 0 | true | NoReason | | test.c:24:5:24:8 | Left | test.c:24:5:24:8 | Left | 0 | false | NoReason | | test.c:24:5:24:8 | Left | test.c:24:5:24:8 | Left | 0 | true | NoReason | +| test.c:24:5:24:8 | Left | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:8 | Left | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | | test.c:24:5:24:8 | Right | file://:0:0:0:0 | 0 | 0 | false | NoReason | | test.c:24:5:24:8 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:24:5:24:8 | Right | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | -| test.c:24:5:24:8 | Right | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:24:5:24:8 | Right | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:24:5:24:8 | Right | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | +| test.c:24:5:24:8 | Right | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:24:5:24:8 | Right | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:24:5:24:8 | Right | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:24:5:24:8 | Right | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | | test.c:24:5:24:8 | Right | test.c:24:5:24:8 | Right | 0 | false | NoReason | | test.c:24:5:24:8 | Right | test.c:24:5:24:8 | Right | 0 | true | NoReason | | test.c:24:5:24:8 | Right | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | | test.c:24:5:24:8 | Right | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | | test.c:24:5:24:8 | Right | test.c:24:7:24:7 | Load: i | 0 | false | NoReason | | test.c:24:5:24:8 | Right | test.c:24:7:24:7 | Load: i | 0 | true | NoReason | +| test.c:24:5:24:8 | Right | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | | test.c:24:7:24:7 | Address | test.c:24:7:24:7 | Address | 0 | false | NoReason | | test.c:24:7:24:7 | Address | test.c:24:7:24:7 | Address | 0 | true | NoReason | | test.c:24:7:24:7 | Address | test.c:24:7:24:7 | VariableAddress: i | 0 | false | NoReason | | test.c:24:7:24:7 | Address | test.c:24:7:24:7 | VariableAddress: i | 0 | true | NoReason | | test.c:24:7:24:7 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | | test.c:24:7:24:7 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | CopySource | test.c:23:8:23:12 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:8:23:12 | Store: ... = ... | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:12:23:12 | Constant: 0 | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | CopySource | 0 | true | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | Phi | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:15:23:15 | Phi: i | 0 | true | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:15:23:19 | Right | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | CopySource | test.c:23:19:23:19 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | CopySource | test.c:23:19:23:19 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | CopySource | test.c:23:22:23:24 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:22:23:24 | CopySource | 0 | true | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | Phi | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | CopySource | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | +| test.c:24:7:24:7 | CopySource | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | | test.c:24:7:24:7 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | | test.c:24:7:24:7 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:29:5:29:9 | Address | test.c:29:5:29:9 | Address | 0 | false | NoReason | -| test.c:29:5:29:9 | Address | test.c:29:5:29:9 | Address | 0 | true | NoReason | -| test.c:29:5:29:9 | Address | test.c:29:5:29:9 | VariableAddress: test4 | 0 | false | NoReason | -| test.c:29:5:29:9 | Address | test.c:29:5:29:9 | VariableAddress: test4 | 0 | true | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:29:5:29:9 | UnmodeledUse | 0 | false | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:29:5:29:9 | UnmodeledUse | 0 | true | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:5:31:25 | CopySource | 0 | false | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:5:31:25 | CopySource | 0 | true | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:5:31:25 | Store: ... = ... | 0 | false | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:5:31:25 | Store: ... = ... | 0 | true | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:14:31:25 | Add: ... + ... | 0 | false | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:14:31:25 | Add: ... + ... | 0 | true | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:14:31:25 | Left | 1 | false | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:14:31:25 | Left | 1 | true | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:15:31:20 | Load: * ... | 1 | false | NoReason | -| test.c:29:5:29:9 | UnmodeledUse | test.c:31:15:31:20 | Load: * ... | 1 | true | NoReason | -| test.c:29:16:29:20 | Address | test.c:29:16:29:20 | Address | 0 | false | NoReason | -| test.c:29:16:29:20 | Address | test.c:29:16:29:20 | Address | 0 | true | NoReason | -| test.c:29:16:29:20 | Address | test.c:29:16:29:20 | VariableAddress: begin | 0 | false | NoReason | -| test.c:29:16:29:20 | Address | test.c:29:16:29:20 | VariableAddress: begin | 0 | true | NoReason | -| test.c:29:28:29:30 | Address | test.c:29:28:29:30 | Address | 0 | false | NoReason | -| test.c:29:28:29:30 | Address | test.c:29:28:29:30 | Address | 0 | true | NoReason | -| test.c:29:28:29:30 | Address | test.c:29:28:29:30 | VariableAddress: end | 0 | false | NoReason | -| test.c:29:28:29:30 | Address | test.c:29:28:29:30 | VariableAddress: end | 0 | true | NoReason | -| test.c:30:10:30:14 | Address | test.c:30:10:30:14 | Address | 0 | false | NoReason | -| test.c:30:10:30:14 | Address | test.c:30:10:30:14 | Address | 0 | true | NoReason | -| test.c:30:10:30:14 | Address | test.c:30:10:30:14 | VariableAddress: begin | 0 | false | NoReason | -| test.c:30:10:30:14 | Address | test.c:30:10:30:14 | VariableAddress: begin | 0 | true | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi | test.c:29:16:29:20 | InitializeParameter: begin | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi | test.c:29:16:29:20 | InitializeParameter: begin | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi | test.c:30:10:30:14 | Phi | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi | test.c:30:10:30:14 | Phi | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi | test.c:30:10:30:14 | Phi | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi | test.c:30:10:30:14 | Phi | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | true | NoReason | -| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | Store: ... ++ | 0 | false | NoReason | -| test.c:30:10:30:14 | Phi | test.c:32:5:32:11 | Store: ... ++ | 0 | true | NoReason | -| test.c:30:10:30:20 | Condition | test.c:30:10:30:20 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:30:10:30:20 | Condition | test.c:30:10:30:20 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:30:10:30:20 | Condition | test.c:30:10:30:20 | Condition | 0 | false | NoReason | -| test.c:30:10:30:20 | Condition | test.c:30:10:30:20 | Condition | 0 | true | NoReason | -| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | Load: begin | 0 | false | NoReason | -| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | Load: begin | 0 | true | NoReason | -| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:30:10:30:20 | Left | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:30:10:30:20 | Left | test.c:30:10:30:20 | Left | 0 | false | NoReason | -| test.c:30:10:30:20 | Left | test.c:30:10:30:20 | Left | 0 | true | NoReason | -| test.c:30:10:30:20 | Left | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:20 | Left | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:20 | Left | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:20 | Left | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:20 | Left | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:20 | Left | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:20 | Right | test.c:29:28:29:30 | InitializeParameter: end | 0 | false | NoReason | -| test.c:30:10:30:20 | Right | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | NoReason | -| test.c:30:10:30:20 | Right | test.c:30:10:30:20 | Right | 0 | false | NoReason | -| test.c:30:10:30:20 | Right | test.c:30:10:30:20 | Right | 0 | true | NoReason | -| test.c:30:10:30:20 | Right | test.c:30:18:30:20 | CopySource | 0 | false | NoReason | -| test.c:30:10:30:20 | Right | test.c:30:18:30:20 | CopySource | 0 | true | NoReason | -| test.c:30:10:30:20 | Right | test.c:30:18:30:20 | Load: end | 0 | false | NoReason | -| test.c:30:10:30:20 | Right | test.c:30:18:30:20 | Load: end | 0 | true | NoReason | -| test.c:30:18:30:20 | Address | test.c:30:18:30:20 | Address | 0 | false | NoReason | -| test.c:30:18:30:20 | Address | test.c:30:18:30:20 | Address | 0 | true | NoReason | -| test.c:30:18:30:20 | Address | test.c:30:18:30:20 | VariableAddress: end | 0 | false | NoReason | -| test.c:30:18:30:20 | Address | test.c:30:18:30:20 | VariableAddress: end | 0 | true | NoReason | -| test.c:30:18:30:20 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | false | NoReason | -| test.c:30:18:30:20 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | NoReason | -| test.c:30:18:30:20 | CopySource | test.c:30:18:30:20 | CopySource | 0 | false | NoReason | -| test.c:30:18:30:20 | CopySource | test.c:30:18:30:20 | CopySource | 0 | true | NoReason | -| test.c:31:5:31:25 | Address | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:31:5:31:25 | Address | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:31:5:31:25 | Address | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:31:5:31:25 | Address | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:31:5:31:25 | Address | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:31:5:31:25 | Address | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:31:5:31:25 | Address | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:31:5:31:25 | Address | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:31:5:31:25 | Address | test.c:31:5:31:25 | Address | 0 | false | NoReason | -| test.c:31:5:31:25 | Address | test.c:31:5:31:25 | Address | 0 | true | NoReason | -| test.c:31:5:31:25 | Address | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:31:5:31:25 | Address | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:31:5:31:25 | Address | test.c:31:6:31:10 | Load: begin | 0 | false | NoReason | -| test.c:31:5:31:25 | Address | test.c:31:6:31:10 | Load: begin | 0 | true | NoReason | -| test.c:31:5:31:25 | Address | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:31:5:31:25 | Address | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:31:5:31:25 | Address | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:31:5:31:25 | Address | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:31:5:31:25 | CopySource | test.c:31:5:31:25 | CopySource | 0 | false | NoReason | -| test.c:31:5:31:25 | CopySource | test.c:31:5:31:25 | CopySource | 0 | true | NoReason | -| test.c:31:5:31:25 | CopySource | test.c:31:14:31:25 | Add: ... + ... | 0 | false | NoReason | -| test.c:31:5:31:25 | CopySource | test.c:31:14:31:25 | Add: ... + ... | 0 | true | NoReason | -| test.c:31:5:31:25 | CopySource | test.c:31:14:31:25 | Left | 1 | false | NoReason | -| test.c:31:5:31:25 | CopySource | test.c:31:14:31:25 | Left | 1 | true | NoReason | -| test.c:31:5:31:25 | CopySource | test.c:31:15:31:20 | Load: * ... | 1 | false | NoReason | -| test.c:31:5:31:25 | CopySource | test.c:31:15:31:20 | Load: * ... | 1 | true | NoReason | -| test.c:31:6:31:10 | Address | test.c:31:6:31:10 | Address | 0 | false | NoReason | -| test.c:31:6:31:10 | Address | test.c:31:6:31:10 | Address | 0 | true | NoReason | -| test.c:31:6:31:10 | Address | test.c:31:6:31:10 | VariableAddress: begin | 0 | false | NoReason | -| test.c:31:6:31:10 | Address | test.c:31:6:31:10 | VariableAddress: begin | 0 | true | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:31:6:31:10 | CopySource | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:31:6:31:10 | CopySource | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:31:6:31:10 | CopySource | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:31:6:31:10 | CopySource | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:31:6:31:10 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:31:14:31:25 | Left | test.c:31:14:31:25 | Left | 0 | false | NoReason | -| test.c:31:14:31:25 | Left | test.c:31:14:31:25 | Left | 0 | true | NoReason | -| test.c:31:14:31:25 | Left | test.c:31:15:31:20 | Load: * ... | 0 | false | NoReason | -| test.c:31:14:31:25 | Left | test.c:31:15:31:20 | Load: * ... | 0 | true | NoReason | -| test.c:31:14:31:25 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:31:14:31:25 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:31:14:31:25 | Right | test.c:31:14:31:25 | Right | 0 | false | NoReason | -| test.c:31:14:31:25 | Right | test.c:31:14:31:25 | Right | 0 | true | NoReason | -| test.c:31:14:31:25 | Right | test.c:31:25:31:25 | Constant: 1 | 0 | false | NoReason | -| test.c:31:14:31:25 | Right | test.c:31:25:31:25 | Constant: 1 | 0 | true | NoReason | -| test.c:31:15:31:20 | Address | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:31:15:31:20 | Address | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:31:15:31:20 | Address | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:31:15:31:20 | Address | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:31:15:31:20 | Address | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:31:15:31:20 | Address | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:31:15:31:20 | Address | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:31:15:31:20 | Address | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:31:15:31:20 | Address | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:31:15:31:20 | Address | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:31:15:31:20 | Address | test.c:31:15:31:20 | Address | 0 | false | NoReason | -| test.c:31:15:31:20 | Address | test.c:31:15:31:20 | Address | 0 | true | NoReason | -| test.c:31:15:31:20 | Address | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:31:15:31:20 | Address | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:31:15:31:20 | Address | test.c:31:16:31:20 | Load: begin | 0 | false | NoReason | -| test.c:31:15:31:20 | Address | test.c:31:16:31:20 | Load: begin | 0 | true | NoReason | -| test.c:31:15:31:20 | Address | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:31:15:31:20 | Address | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:31:16:31:20 | Address | test.c:31:16:31:20 | Address | 0 | false | NoReason | -| test.c:31:16:31:20 | Address | test.c:31:16:31:20 | Address | 0 | true | NoReason | -| test.c:31:16:31:20 | Address | test.c:31:16:31:20 | VariableAddress: begin | 0 | false | NoReason | -| test.c:31:16:31:20 | Address | test.c:31:16:31:20 | VariableAddress: begin | 0 | true | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:31:16:31:20 | CopySource | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:31:16:31:20 | CopySource | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:31:16:31:20 | CopySource | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:31:16:31:20 | CopySource | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:31:16:31:20 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:9 | VariableAddress: begin | 0 | false | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:9 | VariableAddress: begin | 0 | false | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:9 | VariableAddress: begin | 0 | true | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:9 | VariableAddress: begin | 0 | true | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | false | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | false | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | false | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | false | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | true | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | true | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | true | NoReason | -| test.c:32:5:32:11 | Address | test.c:32:5:32:11 | Address | 0 | true | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | CopySource | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | CopySource | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | CopySource | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | CopySource | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | false | NoReason | -| test.c:32:5:32:11 | CopySource | test.c:32:5:32:11 | PointerAdd: ... ++ | 0 | true | NoReason | -| test.c:32:5:32:11 | Left | test.c:29:28:29:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | Left | test.c:30:10:30:14 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | Left | test.c:30:10:30:14 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Left | test.c:30:10:30:14 | Phi: begin | 0 | false | NoReason | -| test.c:32:5:32:11 | Left | test.c:30:10:30:14 | Phi: begin | 0 | true | NoReason | -| test.c:32:5:32:11 | Left | test.c:30:10:30:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | Left | test.c:30:18:30:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | Left | test.c:30:18:30:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:32:5:32:11 | Left | test.c:31:6:31:10 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | Left | test.c:31:6:31:10 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Left | test.c:31:16:31:20 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | Left | test.c:31:16:31:20 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | Left | 0 | false | NoReason | -| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | Left | 0 | true | NoReason | -| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | Load: ... ++ | 0 | false | NoReason | -| test.c:32:5:32:11 | Left | test.c:32:5:32:11 | Load: ... ++ | 0 | true | NoReason | -| test.c:32:5:32:11 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:32:5:32:11 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:32:5:32:11 | Right | test.c:32:5:32:11 | Constant: ... ++ | 0 | false | NoReason | -| test.c:32:5:32:11 | Right | test.c:32:5:32:11 | Constant: ... ++ | 0 | true | NoReason | -| test.c:32:5:32:11 | Right | test.c:32:5:32:11 | Right | 0 | false | NoReason | -| test.c:32:5:32:11 | Right | test.c:32:5:32:11 | Right | 0 | true | NoReason | +| test.c:24:7:24:7 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | Address | test.c:26:7:26:7 | VariableAddress: i | 0 | false | NoReason | +| test.c:26:7:26:11 | Address | test.c:26:7:26:7 | VariableAddress: i | 0 | true | NoReason | +| test.c:26:7:26:11 | Address | test.c:26:7:26:11 | Address | 0 | false | NoReason | +| test.c:26:7:26:11 | Address | test.c:26:7:26:11 | Address | 0 | true | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | CopySource | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | CopySource | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | CopySource | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | CopySource | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:7:26:11 | CopySource | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:26:7:26:11 | CopySource | 0 | true | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:7:26:11 | CopySource | test.c:26:11:26:11 | Load: x | 0 | true | NoReason | +| test.c:26:11:26:11 | Address | test.c:26:11:26:11 | Address | 0 | false | NoReason | +| test.c:26:11:26:11 | Address | test.c:26:11:26:11 | Address | 0 | true | NoReason | +| test.c:26:11:26:11 | Address | test.c:26:11:26:11 | VariableAddress: x | 0 | false | NoReason | +| test.c:26:11:26:11 | Address | test.c:26:11:26:11 | VariableAddress: x | 0 | true | NoReason | +| test.c:26:11:26:11 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:11:26:11 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:26:11:26:11 | CopySource | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | CopySource | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | CopySource | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | CopySource | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:11:26:11 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | +| test.c:26:11:26:11 | CopySource | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | CopySource | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:11:26:11 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:11:26:11 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Address | test.c:26:14:26:14 | Address | 0 | false | NoReason | +| test.c:26:14:26:14 | Address | test.c:26:14:26:14 | Address | 0 | true | NoReason | +| test.c:26:14:26:14 | Address | test.c:26:14:26:14 | VariableAddress: i | 0 | false | NoReason | +| test.c:26:14:26:14 | Address | test.c:26:14:26:14 | VariableAddress: i | 0 | true | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | CopySource | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | +| test.c:26:14:26:14 | Phi | file://:0:0:0:0 | 0 | 2 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:14:26:14 | Phi | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | +| test.c:26:14:26:14 | Phi | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | +| test.c:26:14:26:14 | Phi | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | +| test.c:26:14:26:14 | Phi | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:23:18:23:18 | CopySource | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:14:26:14 | Phi | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | +| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | CopySource | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | Store: ... = ... | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | Store: ... = ... | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | CopySource | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | Load: x | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | Load: x | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | CopySource | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | CopySource | 1 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi: i | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi: i | 1 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:14:26:18 | Right | 2 | false | CompareGT: ... > ... | +| test.c:26:14:26:14 | Phi | test.c:26:18:26:18 | Constant: 0 | 2 | false | CompareGT: ... > ... | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Add: ... ++ | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Add: ... ++ | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Constant: ... ++ | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | CopySource | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | CopySource | 1 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Left | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Left | 1 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Load: ... ++ | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Load: ... ++ | 1 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Right | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Store: ... ++ | 0 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Store: ... ++ | 0 | true | NoReason | +| test.c:26:14:26:14 | Phi | test.c:27:7:27:7 | CopySource | 1 | false | NoReason | +| test.c:26:14:26:14 | Phi | test.c:27:7:27:7 | CopySource | 1 | true | NoReason | +| test.c:26:14:26:18 | Condition | test.c:26:14:26:18 | CompareGT: ... > ... | 0 | false | NoReason | +| test.c:26:14:26:18 | Condition | test.c:26:14:26:18 | CompareGT: ... > ... | 0 | true | NoReason | +| test.c:26:14:26:18 | Condition | test.c:26:14:26:18 | Condition | 0 | false | NoReason | +| test.c:26:14:26:18 | Condition | test.c:26:14:26:18 | Condition | 0 | true | NoReason | +| test.c:26:14:26:18 | Left | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Load: i | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Load: i | 0 | true | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:14:26:18 | Left | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:14:26:18 | Left | 0 | true | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:18 | Left | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:26:14:26:18 | Left | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:26:14:26:18 | Right | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.c:26:14:26:18 | Right | file://:0:0:0:0 | 0 | 0 | true | NoReason | +| test.c:26:14:26:18 | Right | test.c:26:14:26:18 | Right | 0 | false | NoReason | +| test.c:26:14:26:18 | Right | test.c:26:14:26:18 | Right | 0 | true | NoReason | +| test.c:26:14:26:18 | Right | test.c:26:18:26:18 | Constant: 0 | 0 | false | NoReason | +| test.c:26:14:26:18 | Right | test.c:26:18:26:18 | Constant: 0 | 0 | true | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:21 | VariableAddress: i | 0 | false | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:21 | VariableAddress: i | 0 | false | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:21 | VariableAddress: i | 0 | true | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:21 | VariableAddress: i | 0 | true | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | false | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | false | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | false | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | false | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | true | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | true | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | true | NoReason | +| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | true | NoReason | +| test.c:26:21:26:23 | CopySource | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | CopySource | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | CopySource | file://:0:0:0:0 | 0 | 2 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:23:18:23:18 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:7:26:11 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:7:26:11 | Store: ... = ... | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:11:26:11 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:11:26:11 | Load: x | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | CopySource | 1 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi: i | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi: i | 1 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | CopySource | test.c:26:14:26:18 | Right | 2 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | CopySource | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | CopySource | test.c:26:18:26:18 | Constant: 0 | 2 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Add: ... ++ | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Add: ... ++ | 0 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Constant: ... ++ | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 1 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Left | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Left | 1 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Load: ... ++ | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Load: ... ++ | 1 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Right | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:27:7:27:7 | CopySource | 1 | false | NoReason | +| test.c:26:21:26:23 | CopySource | test.c:27:7:27:7 | CopySource | 1 | true | NoReason | +| test.c:26:21:26:23 | Left | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Left | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Left | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | +| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | Left | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | Left | 0 | true | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | Load: ... ++ | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | Load: ... ++ | 0 | true | NoReason | +| test.c:26:21:26:23 | Left | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:26:21:26:23 | Left | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:26:21:26:23 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:26:21:26:23 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:26:21:26:23 | Right | test.c:26:21:26:23 | Constant: ... ++ | 0 | false | NoReason | +| test.c:26:21:26:23 | Right | test.c:26:21:26:23 | Constant: ... ++ | 0 | true | NoReason | +| test.c:26:21:26:23 | Right | test.c:26:21:26:23 | Right | 0 | false | NoReason | +| test.c:26:21:26:23 | Right | test.c:26:21:26:23 | Right | 0 | true | NoReason | +| test.c:27:5:27:5 | Address | test.c:27:5:27:5 | Address | 0 | false | NoReason | +| test.c:27:5:27:5 | Address | test.c:27:5:27:5 | Address | 0 | true | NoReason | +| test.c:27:5:27:5 | Address | test.c:27:5:27:5 | VariableAddress: p | 0 | false | NoReason | +| test.c:27:5:27:5 | Address | test.c:27:5:27:5 | VariableAddress: p | 0 | true | NoReason | +| test.c:27:5:27:5 | CopySource | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | +| test.c:27:5:27:5 | CopySource | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | +| test.c:27:5:27:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | +| test.c:27:5:27:5 | CopySource | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:5 | CopySource | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | +| test.c:27:5:27:8 | Address | test.c:27:5:27:8 | Address | 0 | false | NoReason | +| test.c:27:5:27:8 | Address | test.c:27:5:27:8 | Address | 0 | true | NoReason | +| test.c:27:5:27:8 | Address | test.c:27:5:27:8 | PointerAdd: access to array | 0 | false | NoReason | +| test.c:27:5:27:8 | Address | test.c:27:5:27:8 | PointerAdd: access to array | 0 | true | NoReason | +| test.c:27:5:27:8 | Left | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | +| test.c:27:5:27:8 | Left | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | +| test.c:27:5:27:8 | Left | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:8 | Left | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | +| test.c:27:5:27:8 | Left | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:8 | Left | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | +| test.c:27:5:27:8 | Left | test.c:27:5:27:5 | Load: p | 0 | false | NoReason | +| test.c:27:5:27:8 | Left | test.c:27:5:27:5 | Load: p | 0 | true | NoReason | +| test.c:27:5:27:8 | Left | test.c:27:5:27:8 | Left | 0 | false | NoReason | +| test.c:27:5:27:8 | Left | test.c:27:5:27:8 | Left | 0 | true | NoReason | +| test.c:27:5:27:8 | Right | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | +| test.c:27:5:27:8 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | +| test.c:27:5:27:8 | Right | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | +| test.c:27:5:27:8 | Right | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:27:5:27:8 | Right | test.c:27:5:27:8 | Right | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:27:5:27:8 | Right | 0 | true | NoReason | +| test.c:27:5:27:8 | Right | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:27:5:27:8 | Right | test.c:27:7:27:7 | Load: i | 0 | false | NoReason | +| test.c:27:5:27:8 | Right | test.c:27:7:27:7 | Load: i | 0 | true | NoReason | +| test.c:27:7:27:7 | Address | test.c:27:7:27:7 | Address | 0 | false | NoReason | +| test.c:27:7:27:7 | Address | test.c:27:7:27:7 | Address | 0 | true | NoReason | +| test.c:27:7:27:7 | Address | test.c:27:7:27:7 | VariableAddress: i | 0 | false | NoReason | +| test.c:27:7:27:7 | Address | test.c:27:7:27:7 | VariableAddress: i | 0 | true | NoReason | +| test.c:27:7:27:7 | CopySource | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | +| test.c:27:7:27:7 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | Phi | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | +| test.c:27:7:27:7 | CopySource | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | +| test.c:27:7:27:7 | CopySource | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | +| test.c:27:7:27:7 | CopySource | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:9 | Address | test.c:32:5:32:9 | Address | 0 | false | NoReason | +| test.c:32:5:32:9 | Address | test.c:32:5:32:9 | Address | 0 | true | NoReason | +| test.c:32:5:32:9 | Address | test.c:32:5:32:9 | VariableAddress: test4 | 0 | false | NoReason | +| test.c:32:5:32:9 | Address | test.c:32:5:32:9 | VariableAddress: test4 | 0 | true | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:32:5:32:9 | UnmodeledUse | 0 | false | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:32:5:32:9 | UnmodeledUse | 0 | true | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:5:34:25 | CopySource | 0 | false | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:5:34:25 | CopySource | 0 | true | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:5:34:25 | Store: ... = ... | 0 | false | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:5:34:25 | Store: ... = ... | 0 | true | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:14:34:25 | Add: ... + ... | 0 | false | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:14:34:25 | Add: ... + ... | 0 | true | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:14:34:25 | Left | 1 | false | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:14:34:25 | Left | 1 | true | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:15:34:20 | Load: * ... | 1 | false | NoReason | +| test.c:32:5:32:9 | UnmodeledUse | test.c:34:15:34:20 | Load: * ... | 1 | true | NoReason | +| test.c:32:16:32:20 | Address | test.c:32:16:32:20 | Address | 0 | false | NoReason | +| test.c:32:16:32:20 | Address | test.c:32:16:32:20 | Address | 0 | true | NoReason | +| test.c:32:16:32:20 | Address | test.c:32:16:32:20 | VariableAddress: begin | 0 | false | NoReason | +| test.c:32:16:32:20 | Address | test.c:32:16:32:20 | VariableAddress: begin | 0 | true | NoReason | +| test.c:32:28:32:30 | Address | test.c:32:28:32:30 | Address | 0 | false | NoReason | +| test.c:32:28:32:30 | Address | test.c:32:28:32:30 | Address | 0 | true | NoReason | +| test.c:32:28:32:30 | Address | test.c:32:28:32:30 | VariableAddress: end | 0 | false | NoReason | +| test.c:32:28:32:30 | Address | test.c:32:28:32:30 | VariableAddress: end | 0 | true | NoReason | +| test.c:33:10:33:14 | Address | test.c:33:10:33:14 | Address | 0 | false | NoReason | +| test.c:33:10:33:14 | Address | test.c:33:10:33:14 | Address | 0 | true | NoReason | +| test.c:33:10:33:14 | Address | test.c:33:10:33:14 | VariableAddress: begin | 0 | false | NoReason | +| test.c:33:10:33:14 | Address | test.c:33:10:33:14 | VariableAddress: begin | 0 | true | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi | test.c:32:16:32:20 | InitializeParameter: begin | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi | test.c:32:16:32:20 | InitializeParameter: begin | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi | test.c:33:10:33:14 | Phi | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi | test.c:33:10:33:14 | Phi | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi | test.c:33:10:33:14 | Phi | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi | test.c:33:10:33:14 | Phi | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | true | NoReason | +| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | Store: ... ++ | 0 | false | NoReason | +| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | Store: ... ++ | 0 | true | NoReason | +| test.c:33:10:33:20 | Condition | test.c:33:10:33:20 | CompareLT: ... < ... | 0 | false | NoReason | +| test.c:33:10:33:20 | Condition | test.c:33:10:33:20 | CompareLT: ... < ... | 0 | true | NoReason | +| test.c:33:10:33:20 | Condition | test.c:33:10:33:20 | Condition | 0 | false | NoReason | +| test.c:33:10:33:20 | Condition | test.c:33:10:33:20 | Condition | 0 | true | NoReason | +| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | Load: begin | 0 | false | NoReason | +| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | Load: begin | 0 | true | NoReason | +| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:33:10:33:20 | Left | test.c:33:10:33:20 | Left | 0 | false | NoReason | +| test.c:33:10:33:20 | Left | test.c:33:10:33:20 | Left | 0 | true | NoReason | +| test.c:33:10:33:20 | Left | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:20 | Left | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:20 | Left | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:20 | Left | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:20 | Left | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:20 | Left | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:20 | Right | test.c:32:28:32:30 | InitializeParameter: end | 0 | false | NoReason | +| test.c:33:10:33:20 | Right | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | NoReason | +| test.c:33:10:33:20 | Right | test.c:33:10:33:20 | Right | 0 | false | NoReason | +| test.c:33:10:33:20 | Right | test.c:33:10:33:20 | Right | 0 | true | NoReason | +| test.c:33:10:33:20 | Right | test.c:33:18:33:20 | CopySource | 0 | false | NoReason | +| test.c:33:10:33:20 | Right | test.c:33:18:33:20 | CopySource | 0 | true | NoReason | +| test.c:33:10:33:20 | Right | test.c:33:18:33:20 | Load: end | 0 | false | NoReason | +| test.c:33:10:33:20 | Right | test.c:33:18:33:20 | Load: end | 0 | true | NoReason | +| test.c:33:18:33:20 | Address | test.c:33:18:33:20 | Address | 0 | false | NoReason | +| test.c:33:18:33:20 | Address | test.c:33:18:33:20 | Address | 0 | true | NoReason | +| test.c:33:18:33:20 | Address | test.c:33:18:33:20 | VariableAddress: end | 0 | false | NoReason | +| test.c:33:18:33:20 | Address | test.c:33:18:33:20 | VariableAddress: end | 0 | true | NoReason | +| test.c:33:18:33:20 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | false | NoReason | +| test.c:33:18:33:20 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | NoReason | +| test.c:33:18:33:20 | CopySource | test.c:33:18:33:20 | CopySource | 0 | false | NoReason | +| test.c:33:18:33:20 | CopySource | test.c:33:18:33:20 | CopySource | 0 | true | NoReason | +| test.c:34:5:34:25 | Address | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:34:5:34:25 | Address | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:34:5:34:25 | Address | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:34:5:34:25 | Address | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:34:5:34:25 | Address | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:34:5:34:25 | Address | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:34:5:34:25 | Address | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:34:5:34:25 | Address | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:34:5:34:25 | Address | test.c:34:5:34:25 | Address | 0 | false | NoReason | +| test.c:34:5:34:25 | Address | test.c:34:5:34:25 | Address | 0 | true | NoReason | +| test.c:34:5:34:25 | Address | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:34:5:34:25 | Address | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:34:5:34:25 | Address | test.c:34:6:34:10 | Load: begin | 0 | false | NoReason | +| test.c:34:5:34:25 | Address | test.c:34:6:34:10 | Load: begin | 0 | true | NoReason | +| test.c:34:5:34:25 | Address | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:34:5:34:25 | Address | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:34:5:34:25 | Address | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:34:5:34:25 | Address | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:34:5:34:25 | CopySource | test.c:34:5:34:25 | CopySource | 0 | false | NoReason | +| test.c:34:5:34:25 | CopySource | test.c:34:5:34:25 | CopySource | 0 | true | NoReason | +| test.c:34:5:34:25 | CopySource | test.c:34:14:34:25 | Add: ... + ... | 0 | false | NoReason | +| test.c:34:5:34:25 | CopySource | test.c:34:14:34:25 | Add: ... + ... | 0 | true | NoReason | +| test.c:34:5:34:25 | CopySource | test.c:34:14:34:25 | Left | 1 | false | NoReason | +| test.c:34:5:34:25 | CopySource | test.c:34:14:34:25 | Left | 1 | true | NoReason | +| test.c:34:5:34:25 | CopySource | test.c:34:15:34:20 | Load: * ... | 1 | false | NoReason | +| test.c:34:5:34:25 | CopySource | test.c:34:15:34:20 | Load: * ... | 1 | true | NoReason | +| test.c:34:6:34:10 | Address | test.c:34:6:34:10 | Address | 0 | false | NoReason | +| test.c:34:6:34:10 | Address | test.c:34:6:34:10 | Address | 0 | true | NoReason | +| test.c:34:6:34:10 | Address | test.c:34:6:34:10 | VariableAddress: begin | 0 | false | NoReason | +| test.c:34:6:34:10 | Address | test.c:34:6:34:10 | VariableAddress: begin | 0 | true | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:34:6:34:10 | CopySource | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:34:6:34:10 | CopySource | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:34:6:34:10 | CopySource | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:34:6:34:10 | CopySource | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:34:6:34:10 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:34:14:34:25 | Left | test.c:34:14:34:25 | Left | 0 | false | NoReason | +| test.c:34:14:34:25 | Left | test.c:34:14:34:25 | Left | 0 | true | NoReason | +| test.c:34:14:34:25 | Left | test.c:34:15:34:20 | Load: * ... | 0 | false | NoReason | +| test.c:34:14:34:25 | Left | test.c:34:15:34:20 | Load: * ... | 0 | true | NoReason | +| test.c:34:14:34:25 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:34:14:34:25 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:34:14:34:25 | Right | test.c:34:14:34:25 | Right | 0 | false | NoReason | +| test.c:34:14:34:25 | Right | test.c:34:14:34:25 | Right | 0 | true | NoReason | +| test.c:34:14:34:25 | Right | test.c:34:25:34:25 | Constant: 1 | 0 | false | NoReason | +| test.c:34:14:34:25 | Right | test.c:34:25:34:25 | Constant: 1 | 0 | true | NoReason | +| test.c:34:15:34:20 | Address | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:34:15:34:20 | Address | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:34:15:34:20 | Address | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:34:15:34:20 | Address | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:34:15:34:20 | Address | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:34:15:34:20 | Address | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:34:15:34:20 | Address | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:34:15:34:20 | Address | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:34:15:34:20 | Address | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:34:15:34:20 | Address | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:34:15:34:20 | Address | test.c:34:15:34:20 | Address | 0 | false | NoReason | +| test.c:34:15:34:20 | Address | test.c:34:15:34:20 | Address | 0 | true | NoReason | +| test.c:34:15:34:20 | Address | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:34:15:34:20 | Address | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:34:15:34:20 | Address | test.c:34:16:34:20 | Load: begin | 0 | false | NoReason | +| test.c:34:15:34:20 | Address | test.c:34:16:34:20 | Load: begin | 0 | true | NoReason | +| test.c:34:15:34:20 | Address | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:34:15:34:20 | Address | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:34:16:34:20 | Address | test.c:34:16:34:20 | Address | 0 | false | NoReason | +| test.c:34:16:34:20 | Address | test.c:34:16:34:20 | Address | 0 | true | NoReason | +| test.c:34:16:34:20 | Address | test.c:34:16:34:20 | VariableAddress: begin | 0 | false | NoReason | +| test.c:34:16:34:20 | Address | test.c:34:16:34:20 | VariableAddress: begin | 0 | true | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:34:16:34:20 | CopySource | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:34:16:34:20 | CopySource | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:34:16:34:20 | CopySource | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:34:16:34:20 | CopySource | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:34:16:34:20 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:9 | VariableAddress: begin | 0 | false | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:9 | VariableAddress: begin | 0 | false | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:9 | VariableAddress: begin | 0 | true | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:9 | VariableAddress: begin | 0 | true | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | false | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | false | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | false | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | false | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | true | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | true | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | true | NoReason | +| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | true | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | CopySource | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | CopySource | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | CopySource | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | CopySource | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | false | NoReason | +| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | true | NoReason | +| test.c:35:5:35:11 | Left | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | Left | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | Left | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Left | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | +| test.c:35:5:35:11 | Left | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | +| test.c:35:5:35:11 | Left | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | Left | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | Left | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | +| test.c:35:5:35:11 | Left | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | Left | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Left | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | Left | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | +| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | +| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | Left | 0 | false | NoReason | +| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | Left | 0 | true | NoReason | +| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | Load: ... ++ | 0 | false | NoReason | +| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | Load: ... ++ | 0 | true | NoReason | +| test.c:35:5:35:11 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | +| test.c:35:5:35:11 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | +| test.c:35:5:35:11 | Right | test.c:35:5:35:11 | Constant: ... ++ | 0 | false | NoReason | +| test.c:35:5:35:11 | Right | test.c:35:5:35:11 | Constant: ... ++ | 0 | true | NoReason | +| test.c:35:5:35:11 | Right | test.c:35:5:35:11 | Right | 0 | false | NoReason | +| test.c:35:5:35:11 | Right | test.c:35:5:35:11 | Right | 0 | true | NoReason | diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c index 507a4e7cd294..43c96461be58 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c @@ -20,7 +20,10 @@ int test2(int x, int y) { // for loops int test3(int x, void *p) { int i; - for (i = 0; i < x; i++) { + for(i = 0; i < x; i++) { + p[i]; + } + for(i = x; i > 0; i++) { p[i]; } } @@ -32,3 +35,4 @@ int test4(int *begin, int *end) { begin++; } } + From ae4ffd916605997fee31c66667b0b2bc7c5fe0c3 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Tue, 11 Dec 2018 12:15:20 -0800 Subject: [PATCH 04/13] C++: respond to PR comments, add some TODOs --- .../semmle/code/cpp/controlflow/IRGuards.qll | 2 +- .../semmle/code/cpp/rangeanalysis/Bound.qll | 4 +- .../code/cpp/rangeanalysis/RangeAnalysis.qll | 46 +- .../code/cpp/rangeanalysis/RangeUtils.qll | 7 - .../rangeanalysis/RangeAnalysis.expected | 2290 +---------------- .../rangeanalysis/RangeAnalysis.ql | 16 +- .../rangeanalysis/{test.c => test.cpp} | 19 +- 7 files changed, 88 insertions(+), 2296 deletions(-) rename cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/{test.c => test.cpp} (62%) diff --git a/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll index 2ad3d96cb92b..2396987f6a21 100644 --- a/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll @@ -295,7 +295,7 @@ class IRGuardCondition extends Instruction { * return x; * ``` */ - cached predicate controlsEdge(ConditionalBranchInstruction branch, IRBlock succ, boolean testIsTrue) { + predicate controlsEdgeDirectly(ConditionalBranchInstruction branch, IRBlock succ, boolean testIsTrue) { branch.getCondition() = this and ( testIsTrue = true and diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll index 9f640a80bf61..af70cad717ef 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll @@ -55,7 +55,7 @@ class InstructionBound extends Bound, TBoundInstruction { } /** - * A bound corrseponding to the value of an `Operand`. + * A bound corresponding to the value of an `Operand`. */ class OperandBound extends Bound, TBoundOperand { Operand getOperand() { @@ -72,4 +72,4 @@ class OperandBound extends Bound, TBoundOperand { override predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { getOperand().getLocation().hasLocationInfo(path, sl, sc, el, ec) } -} \ No newline at end of file +} diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index be305b77a29b..dc6adcbfdad0 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -1,14 +1,14 @@ /** * Provides classes and predicates for range analysis. * - * An inferred bound can either be a specific integer, the abstract value of an - * SSA variable, or the abstract value of an interesting expression. The latter - * category includes array lengths that are not SSA variables. + * An inferred bound can either be a specific integer or the abstract value of + * an IR `Instruction`. * * If an inferred bound relies directly on a condition, then this condition is * reported as the reason for the bound. */ +// TODO: update the following comment /* * This library tackles range analysis as a flow problem. Consider e.g.: * ``` @@ -118,7 +118,7 @@ private import RangeAnalysisCache import RangeAnalysisPublic /** - * Gets a condition that tests whether `i` equals `bound + delta` at `use`. + * Gets a condition that tests whether `op` equals `bound + delta`. * * If the condition evaluates to `testIsTrue`: * - `isEq = true` : `i == bound + delta` @@ -142,11 +142,11 @@ private IRGuardCondition eqFlowCond(Operand op, Operand bound, int delta, private predicate boundFlowStepSsa( NonPhiOperand op2, Operand op1, int delta, boolean upper, Reason reason ) { - op2.getDefinitionInstruction().getAnOperand().(CopySourceOperand) = op1 and + /*op2.getDefinitionInstruction().getAnOperand().(CopySourceOperand) = op1 and (upper = true or upper = false) and reason = TNoReason() and delta = 0 - or + or*/ exists(IRGuardCondition guard | guard = boundFlowCond(op2, op1, delta, upper, _) and reason = TCondReason(guard) @@ -182,7 +182,7 @@ private IRGuardCondition boundFlowCondPhi(PhiOperand op, NonPhiOperand bound, in { exists(Operand compared | result.comparesLt(compared, bound, delta, upper, testIsTrue) and - result.controlsEdge(op.getPredecessorBlock().getLastInstruction(), op.getInstruction().getBlock(), testIsTrue) and + result.controlsEdgeDirectly(op.getPredecessorBlock().getLastInstruction(), op.getInstruction().getBlock(), testIsTrue) and valueNumber(compared.getDefinitionInstruction()) = valueNumber (op.getDefinitionInstruction()) ) or @@ -219,12 +219,21 @@ class CondReason extends Reason, TCondReason { * range analysis. */ private predicate safeCast(IntegralType fromtyp, IntegralType totyp) { - fromtyp.getSize() <= totyp.getSize() and + fromtyp.getSize() < totyp.getSize() and ( fromtyp.isUnsigned() or totyp.isSigned() + ) or + fromtyp.getSize() <= totyp.getSize() and + ( + fromtyp.isSigned() and + totyp.isSigned() + or + fromtyp.isUnsigned() and + totyp.isUnsigned() ) + // TODO: infer safety using sign analysis? } private class SafeCastInstruction extends ConvertInstruction { @@ -349,15 +358,17 @@ private predicate boundFlowStepDiv(Instruction i1, Operand op, int factor) { ) } +/** + * Holds if `b` is a valid bound for `op` + */ pragma[noinline] private predicate boundedNonPhiOperand(NonPhiOperand op, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, Reason reason ) { - exists(NonPhiOperand op2, int d1, int d2, Reason r1, Reason r2 | - boundFlowStepSsa(op, op2, d1, upper, r1) and - boundedNonPhiOperand(op2, b, d2, upper, fromBackEdge, origdelta, r2) and - delta = d1 + d2 and - (if r1 instanceof NoReason then reason = r2 else reason = r1) + exists(NonPhiOperand op2, int d1, int d2 | + boundFlowStepSsa(op, op2, d1, upper, reason) and + boundedNonPhiOperand(op2, b, d2, upper, fromBackEdge, origdelta, _) and + delta = d1 + d2 ) or boundedInstruction(op.getDefinitionInstruction(), b, delta, upper, fromBackEdge, origdelta, reason) @@ -402,7 +413,7 @@ private predicate boundedPhiOperand( PhiOperand op, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, Reason reason ) { - exists(NonPhiOperand op2, int d1, int d2, Reason r1, Reason r2 | // should mid be an `Operand`? + exists(NonPhiOperand op2, int d1, int d2, Reason r1, Reason r2 | boundFlowStepPhi(op, op2, d1, upper, r1) and boundedNonPhiOperand(op2, b, d2, upper, fromBackEdge, origdelta, r2) and delta = d1 + d2 and @@ -431,6 +442,7 @@ private predicate boundedPhiOperand( * Holds if `op != b + delta` at `pos`. */ private predicate unequalOperand(Operand op, Bound b, int delta, Reason reason) { + // TODO: implement this none() } @@ -588,3 +600,9 @@ private predicate boundedInstruction( boundedCastExpr(cast, b, delta, upper, fromBackEdge, origdelta, reason) ) } + +predicate backEdge(PhiInstruction phi, PhiOperand op) { + phi.getAnOperand() = op and + phi.getBlock().dominates(op.getPredecessorBlock()) + // TODO: identify backedges during IR construction +} \ No newline at end of file diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll index bc4ea5870e78..238f619395e5 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll @@ -45,10 +45,3 @@ predicate valueFlowStep(Instruction i, Operand op, int delta) { delta = -getValue(getConstantValue(x.getDefinitionInstruction())) ) } - -predicate backEdge(PhiInstruction phi, PhiOperand op) { - phi.getAnOperand() = op and - ( - phi.getBlock().dominates(op.getPredecessorBlock()) - ) -} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index 313179be49c9..b4bba787a2ef 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -1,2264 +1,26 @@ -instructionBounds -| test.c:3:5:3:9 | VariableAddress: test1 | test.c:3:5:3:9 | Address | 0 | false | NoReason | -| test.c:3:5:3:9 | VariableAddress: test1 | test.c:3:5:3:9 | Address | 0 | true | NoReason | -| test.c:3:5:3:9 | VariableAddress: test1 | test.c:3:5:3:9 | VariableAddress: test1 | 0 | false | NoReason | -| test.c:3:5:3:9 | VariableAddress: test1 | test.c:3:5:3:9 | VariableAddress: test1 | 0 | true | NoReason | -| test.c:3:15:3:15 | InitializeParameter: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:3:15:3:15 | InitializeParameter: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:3:15:3:15 | InitializeParameter: x | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:3:15:3:15 | InitializeParameter: x | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | -| test.c:3:15:3:15 | InitializeParameter: x | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:3:15:3:15 | InitializeParameter: x | test.c:7:3:7:11 | Phi | 0 | true | NoReason | -| test.c:3:15:3:15 | VariableAddress: x | test.c:3:15:3:15 | Address | 0 | false | NoReason | -| test.c:3:15:3:15 | VariableAddress: x | test.c:3:15:3:15 | Address | 0 | true | NoReason | -| test.c:3:15:3:15 | VariableAddress: x | test.c:3:15:3:15 | VariableAddress: x | 0 | false | NoReason | -| test.c:3:15:3:15 | VariableAddress: x | test.c:3:15:3:15 | VariableAddress: x | 0 | true | NoReason | -| test.c:3:22:3:22 | InitializeParameter: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:3:22:3:22 | InitializeParameter: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:3:22:3:22 | InitializeParameter: y | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:3:22:3:22 | InitializeParameter: y | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | -| test.c:3:22:3:22 | InitializeParameter: y | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:3:22:3:22 | InitializeParameter: y | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | -| test.c:3:22:3:22 | VariableAddress: y | test.c:3:22:3:22 | Address | 0 | false | NoReason | -| test.c:3:22:3:22 | VariableAddress: y | test.c:3:22:3:22 | Address | 0 | true | NoReason | -| test.c:3:22:3:22 | VariableAddress: y | test.c:3:22:3:22 | VariableAddress: y | 0 | false | NoReason | -| test.c:3:22:3:22 | VariableAddress: y | test.c:3:22:3:22 | VariableAddress: y | 0 | true | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:4:7:4:7 | Load: x | 0 | false | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:4:7:4:7 | Load: x | 0 | true | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:4:7:4:11 | Left | 0 | false | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:4:7:4:11 | Left | 0 | true | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:4:7:4:7 | Load: x | test.c:7:3:7:11 | Phi | 0 | true | NoReason | -| test.c:4:7:4:7 | VariableAddress: x | test.c:4:7:4:7 | Address | 0 | false | NoReason | -| test.c:4:7:4:7 | VariableAddress: x | test.c:4:7:4:7 | Address | 0 | true | NoReason | -| test.c:4:7:4:7 | VariableAddress: x | test.c:4:7:4:7 | VariableAddress: x | 0 | false | NoReason | -| test.c:4:7:4:7 | VariableAddress: x | test.c:4:7:4:7 | VariableAddress: x | 0 | true | NoReason | -| test.c:4:7:4:11 | CompareLT: ... < ... | test.c:4:7:4:11 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:4:7:4:11 | CompareLT: ... < ... | test.c:4:7:4:11 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:4:7:4:11 | CompareLT: ... < ... | test.c:4:7:4:11 | Condition | 0 | false | NoReason | -| test.c:4:7:4:11 | CompareLT: ... < ... | test.c:4:7:4:11 | Condition | 0 | true | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:4:7:4:11 | Right | 0 | false | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:4:7:4:11 | Right | 0 | true | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:4:11:4:11 | Load: y | 0 | false | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:4:11:4:11 | Load: y | 0 | true | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:4:11:4:11 | Load: y | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | -| test.c:4:11:4:11 | VariableAddress: y | test.c:4:11:4:11 | Address | 0 | false | NoReason | -| test.c:4:11:4:11 | VariableAddress: y | test.c:4:11:4:11 | Address | 0 | true | NoReason | -| test.c:4:11:4:11 | VariableAddress: y | test.c:4:11:4:11 | VariableAddress: y | 0 | false | NoReason | -| test.c:4:11:4:11 | VariableAddress: y | test.c:4:11:4:11 | VariableAddress: y | 0 | true | NoReason | -| test.c:5:5:5:5 | VariableAddress: x | test.c:5:5:5:5 | VariableAddress: x | 0 | false | NoReason | -| test.c:5:5:5:5 | VariableAddress: x | test.c:5:5:5:5 | VariableAddress: x | 0 | true | NoReason | -| test.c:5:5:5:5 | VariableAddress: x | test.c:5:5:5:9 | Address | 0 | false | NoReason | -| test.c:5:5:5:5 | VariableAddress: x | test.c:5:5:5:9 | Address | 0 | true | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:5:5:5:9 | Store: ... = ... | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:5:5:5:9 | Store: ... = ... | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:5:5:5:9 | Store: ... = ... | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:5:5:5:9 | Store: ... = ... | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:5:5:5:9 | CopySource | 0 | false | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:5:5:5:9 | CopySource | 0 | true | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:5:5:5:9 | Store: ... = ... | 0 | false | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:5:5:5:9 | Store: ... = ... | 0 | true | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:5:9:5:9 | Load: y | 0 | false | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:5:9:5:9 | Load: y | 0 | true | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:7:3:7:11 | Phi | 0 | true | NoReason | -| test.c:5:5:5:9 | Store: ... = ... | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | Load: y | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | Load: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | Load: y | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | Load: y | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | Load: y | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:5:5:5:9 | CopySource | 0 | false | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:5:5:5:9 | CopySource | 0 | true | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:5:9:5:9 | Load: y | 0 | false | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:5:9:5:9 | Load: y | 0 | true | NoReason | -| test.c:5:9:5:9 | Load: y | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | VariableAddress: y | test.c:5:9:5:9 | Address | 0 | false | NoReason | -| test.c:5:9:5:9 | VariableAddress: y | test.c:5:9:5:9 | Address | 0 | true | NoReason | -| test.c:5:9:5:9 | VariableAddress: y | test.c:5:9:5:9 | VariableAddress: y | 0 | false | NoReason | -| test.c:5:9:5:9 | VariableAddress: y | test.c:5:9:5:9 | VariableAddress: y | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi: return ... | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi: return ... | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi: return ... | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi: return ... | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:7:3:7:11 | VariableAddress: return ... | test.c:7:3:7:11 | VariableAddress: return ... | 0 | false | NoReason | -| test.c:7:3:7:11 | VariableAddress: return ... | test.c:7:3:7:11 | VariableAddress: return ... | 0 | true | NoReason | -| test.c:7:3:7:11 | VariableAddress: return ... | test.c:7:10:7:10 | Address | 0 | false | NoReason | -| test.c:7:3:7:11 | VariableAddress: return ... | test.c:7:10:7:10 | Address | 0 | true | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | Load: x | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | Load: x | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | Load: x | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | Load: x | 0 | false | NoReason | -| test.c:7:10:7:10 | Load: x | test.c:7:10:7:10 | Load: x | 0 | true | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:3:5:3:9 | ReturnValue | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:3:5:3:9 | ReturnValue | 0 | true | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | Store: x | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | Store: x | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | Store: x | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | Load: x | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | Load: x | 0 | true | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | Store: x | 0 | false | NoReason | -| test.c:7:10:7:10 | Store: x | test.c:7:10:7:10 | Store: x | 0 | true | NoReason | -| test.c:7:10:7:10 | VariableAddress: x | test.c:7:10:7:10 | Address | 0 | false | NoReason | -| test.c:7:10:7:10 | VariableAddress: x | test.c:7:10:7:10 | Address | 0 | true | NoReason | -| test.c:7:10:7:10 | VariableAddress: x | test.c:7:10:7:10 | VariableAddress: x | 0 | false | NoReason | -| test.c:7:10:7:10 | VariableAddress: x | test.c:7:10:7:10 | VariableAddress: x | 0 | true | NoReason | -| test.c:11:5:11:9 | VariableAddress: test2 | test.c:11:5:11:9 | Address | 0 | false | NoReason | -| test.c:11:5:11:9 | VariableAddress: test2 | test.c:11:5:11:9 | Address | 0 | true | NoReason | -| test.c:11:5:11:9 | VariableAddress: test2 | test.c:11:5:11:9 | VariableAddress: test2 | 0 | false | NoReason | -| test.c:11:5:11:9 | VariableAddress: test2 | test.c:11:5:11:9 | VariableAddress: test2 | 0 | true | NoReason | -| test.c:11:15:11:15 | InitializeParameter: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:11:15:11:15 | InitializeParameter: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:11:15:11:15 | InitializeParameter: x | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | -| test.c:11:15:11:15 | InitializeParameter: x | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | -| test.c:11:15:11:15 | InitializeParameter: x | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | -| test.c:11:15:11:15 | InitializeParameter: x | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | -| test.c:11:15:11:15 | VariableAddress: x | test.c:11:15:11:15 | Address | 0 | false | NoReason | -| test.c:11:15:11:15 | VariableAddress: x | test.c:11:15:11:15 | Address | 0 | true | NoReason | -| test.c:11:15:11:15 | VariableAddress: x | test.c:11:15:11:15 | VariableAddress: x | 0 | false | NoReason | -| test.c:11:15:11:15 | VariableAddress: x | test.c:11:15:11:15 | VariableAddress: x | 0 | true | NoReason | -| test.c:11:22:11:22 | InitializeParameter: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:11:22:11:22 | InitializeParameter: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:11:22:11:22 | InitializeParameter: y | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | -| test.c:11:22:11:22 | InitializeParameter: y | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | -| test.c:11:22:11:22 | InitializeParameter: y | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | -| test.c:11:22:11:22 | InitializeParameter: y | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | -| test.c:11:22:11:22 | VariableAddress: y | test.c:11:22:11:22 | Address | 0 | false | NoReason | -| test.c:11:22:11:22 | VariableAddress: y | test.c:11:22:11:22 | Address | 0 | true | NoReason | -| test.c:11:22:11:22 | VariableAddress: y | test.c:11:22:11:22 | VariableAddress: y | 0 | false | NoReason | -| test.c:11:22:11:22 | VariableAddress: y | test.c:11:22:11:22 | VariableAddress: y | 0 | true | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:12:7:12:7 | Load: x | 0 | false | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:12:7:12:7 | Load: x | 0 | true | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:12:7:12:11 | Left | 0 | false | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:12:7:12:11 | Left | 0 | true | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | -| test.c:12:7:12:7 | Load: x | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | -| test.c:12:7:12:7 | VariableAddress: x | test.c:12:7:12:7 | Address | 0 | false | NoReason | -| test.c:12:7:12:7 | VariableAddress: x | test.c:12:7:12:7 | Address | 0 | true | NoReason | -| test.c:12:7:12:7 | VariableAddress: x | test.c:12:7:12:7 | VariableAddress: x | 0 | false | NoReason | -| test.c:12:7:12:7 | VariableAddress: x | test.c:12:7:12:7 | VariableAddress: x | 0 | true | NoReason | -| test.c:12:7:12:11 | CompareLT: ... < ... | test.c:12:7:12:11 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:12:7:12:11 | CompareLT: ... < ... | test.c:12:7:12:11 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:12:7:12:11 | CompareLT: ... < ... | test.c:12:7:12:11 | Condition | 0 | false | NoReason | -| test.c:12:7:12:11 | CompareLT: ... < ... | test.c:12:7:12:11 | Condition | 0 | true | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:12:7:12:11 | Right | 0 | false | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:12:7:12:11 | Right | 0 | true | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:12:11:12:11 | Load: y | 0 | false | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:12:11:12:11 | Load: y | 0 | true | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | -| test.c:12:11:12:11 | Load: y | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | -| test.c:12:11:12:11 | VariableAddress: y | test.c:12:11:12:11 | Address | 0 | false | NoReason | -| test.c:12:11:12:11 | VariableAddress: y | test.c:12:11:12:11 | Address | 0 | true | NoReason | -| test.c:12:11:12:11 | VariableAddress: y | test.c:12:11:12:11 | VariableAddress: y | 0 | false | NoReason | -| test.c:12:11:12:11 | VariableAddress: y | test.c:12:11:12:11 | VariableAddress: y | 0 | true | NoReason | -| test.c:13:5:13:5 | VariableAddress: x | test.c:13:5:13:5 | VariableAddress: x | 0 | false | NoReason | -| test.c:13:5:13:5 | VariableAddress: x | test.c:13:5:13:5 | VariableAddress: x | 0 | true | NoReason | -| test.c:13:5:13:5 | VariableAddress: x | test.c:13:5:13:9 | Address | 0 | false | NoReason | -| test.c:13:5:13:5 | VariableAddress: x | test.c:13:5:13:9 | Address | 0 | true | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:13:5:13:9 | Store: ... = ... | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:13:5:13:9 | Store: ... = ... | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:13:5:13:9 | Store: ... = ... | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:13:5:13:9 | Store: ... = ... | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:13:5:13:9 | CopySource | 0 | false | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:13:5:13:9 | CopySource | 0 | true | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:13:5:13:9 | Store: ... = ... | 0 | false | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:13:5:13:9 | Store: ... = ... | 0 | true | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:13:9:13:9 | Load: y | 0 | false | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:13:9:13:9 | Load: y | 0 | true | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:13:5:13:9 | Store: ... = ... | test.c:17:3:17:11 | Phi | 0 | false | NoReason | -| test.c:13:5:13:9 | Store: ... = ... | test.c:17:3:17:11 | Phi | 0 | true | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | Load: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | Load: y | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | Load: y | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | Load: y | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:13:5:13:9 | CopySource | 0 | false | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:13:5:13:9 | CopySource | 0 | true | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:13:9:13:9 | Load: y | 0 | false | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:13:9:13:9 | Load: y | 0 | true | NoReason | -| test.c:13:9:13:9 | Load: y | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | VariableAddress: y | test.c:13:9:13:9 | Address | 0 | false | NoReason | -| test.c:13:9:13:9 | VariableAddress: y | test.c:13:9:13:9 | Address | 0 | true | NoReason | -| test.c:13:9:13:9 | VariableAddress: y | test.c:13:9:13:9 | VariableAddress: y | 0 | false | NoReason | -| test.c:13:9:13:9 | VariableAddress: y | test.c:13:9:13:9 | VariableAddress: y | 0 | true | NoReason | -| test.c:15:5:15:5 | VariableAddress: x | test.c:15:5:15:5 | VariableAddress: x | 0 | false | NoReason | -| test.c:15:5:15:5 | VariableAddress: x | test.c:15:5:15:5 | VariableAddress: x | 0 | true | NoReason | -| test.c:15:5:15:5 | VariableAddress: x | test.c:15:5:15:11 | Address | 0 | false | NoReason | -| test.c:15:5:15:5 | VariableAddress: x | test.c:15:5:15:11 | Address | 0 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:11:15:11:15 | InitializeParameter: x | -1 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | Store: ... = ... | test.c:12:7:12:7 | CopySource | -1 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:12:7:12:7 | CopySource | -2 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:12:7:12:11 | Right | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | Store: ... = ... | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | Store: ... = ... | test.c:12:11:12:11 | Load: y | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | Store: ... = ... | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:5:15:11 | CopySource | 0 | false | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:5:15:11 | CopySource | 0 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:5:15:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:5:15:11 | Store: ... = ... | 0 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | CopySource | -1 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | CopySource | -2 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | Load: x | -1 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | Load: x | -2 | false | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:9 | Load: x | -2 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Left | -1 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Left | -2 | false | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Left | -2 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Sub: ... - ... | 0 | false | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:15:9:15:11 | Sub: ... - ... | 0 | true | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:17:3:17:11 | Phi | 0 | false | NoReason | -| test.c:15:5:15:11 | Store: ... = ... | test.c:17:3:17:11 | Phi | 0 | true | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | Load: x | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:12:7:12:11 | Right | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | Load: x | test.c:12:11:12:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | Load: x | test.c:12:11:12:11 | Load: y | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | Load: x | test.c:13:9:13:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | Load: x | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:15:9:15:9 | Load: x | 0 | false | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:15:9:15:9 | Load: x | 0 | true | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:15:9:15:11 | Left | 0 | false | NoReason | -| test.c:15:9:15:9 | Load: x | test.c:15:9:15:11 | Left | 0 | true | NoReason | -| test.c:15:9:15:9 | VariableAddress: x | test.c:15:9:15:9 | Address | 0 | false | NoReason | -| test.c:15:9:15:9 | VariableAddress: x | test.c:15:9:15:9 | Address | 0 | true | NoReason | -| test.c:15:9:15:9 | VariableAddress: x | test.c:15:9:15:9 | VariableAddress: x | 0 | false | NoReason | -| test.c:15:9:15:9 | VariableAddress: x | test.c:15:9:15:9 | VariableAddress: x | 0 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:11:15:11:15 | InitializeParameter: x | -1 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:7:12:7 | CopySource | -1 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:7:12:7 | CopySource | -2 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:7:12:11 | Right | -2 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:12:11:12:11 | Load: y | -2 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:5:15:11 | CopySource | 0 | false | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:5:15:11 | CopySource | 0 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | CopySource | -1 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | CopySource | -2 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | Load: x | -1 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | Load: x | -2 | false | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:9 | Load: x | -2 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Left | -1 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Left | -2 | false | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Left | -2 | true | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Sub: ... - ... | 0 | false | NoReason | -| test.c:15:9:15:11 | Sub: ... - ... | test.c:15:9:15:11 | Sub: ... - ... | 0 | true | NoReason | -| test.c:15:11:15:11 | Constant: 2 | file://:0:0:0:0 | 0 | 2 | false | NoReason | -| test.c:15:11:15:11 | Constant: 2 | file://:0:0:0:0 | 0 | 2 | true | NoReason | -| test.c:15:11:15:11 | Constant: 2 | test.c:15:9:15:11 | Right | 0 | false | NoReason | -| test.c:15:11:15:11 | Constant: 2 | test.c:15:9:15:11 | Right | 0 | true | NoReason | -| test.c:15:11:15:11 | Constant: 2 | test.c:15:11:15:11 | Constant: 2 | 0 | false | NoReason | -| test.c:15:11:15:11 | Constant: 2 | test.c:15:11:15:11 | Constant: 2 | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi: return ... | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:17:3:17:11 | Phi: return ... | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi: return ... | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:17:3:17:11 | Phi: return ... | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi: return ... | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi: return ... | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:17:3:17:11 | Phi: return ... | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi: return ... | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi: return ... | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi: return ... | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:17:3:17:11 | VariableAddress: return ... | test.c:17:3:17:11 | VariableAddress: return ... | 0 | false | NoReason | -| test.c:17:3:17:11 | VariableAddress: return ... | test.c:17:3:17:11 | VariableAddress: return ... | 0 | true | NoReason | -| test.c:17:3:17:11 | VariableAddress: return ... | test.c:17:10:17:10 | Address | 0 | false | NoReason | -| test.c:17:3:17:11 | VariableAddress: return ... | test.c:17:10:17:10 | Address | 0 | true | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | Load: x | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | Load: x | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | Load: x | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | Load: x | 0 | false | NoReason | -| test.c:17:10:17:10 | Load: x | test.c:17:10:17:10 | Load: x | 0 | true | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:11:5:11:9 | ReturnValue | 0 | false | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:11:5:11:9 | ReturnValue | 0 | true | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | Store: x | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | Store: x | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | Store: x | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | Load: x | 0 | false | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | Load: x | 0 | true | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | Store: x | 0 | false | NoReason | -| test.c:17:10:17:10 | Store: x | test.c:17:10:17:10 | Store: x | 0 | true | NoReason | -| test.c:17:10:17:10 | VariableAddress: x | test.c:17:10:17:10 | Address | 0 | false | NoReason | -| test.c:17:10:17:10 | VariableAddress: x | test.c:17:10:17:10 | Address | 0 | true | NoReason | -| test.c:17:10:17:10 | VariableAddress: x | test.c:17:10:17:10 | VariableAddress: x | 0 | false | NoReason | -| test.c:17:10:17:10 | VariableAddress: x | test.c:17:10:17:10 | VariableAddress: x | 0 | true | NoReason | -| test.c:21:5:21:9 | VariableAddress: test3 | test.c:21:5:21:9 | Address | 0 | false | NoReason | -| test.c:21:5:21:9 | VariableAddress: test3 | test.c:21:5:21:9 | Address | 0 | true | NoReason | -| test.c:21:5:21:9 | VariableAddress: test3 | test.c:21:5:21:9 | VariableAddress: test3 | 0 | false | NoReason | -| test.c:21:5:21:9 | VariableAddress: test3 | test.c:21:5:21:9 | VariableAddress: test3 | 0 | true | NoReason | -| test.c:21:15:21:15 | InitializeParameter: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:21:15:21:15 | InitializeParameter: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:21:15:21:15 | InitializeParameter: x | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:21:15:21:15 | InitializeParameter: x | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | -| test.c:21:15:21:15 | InitializeParameter: x | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:21:15:21:15 | InitializeParameter: x | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | -| test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | Address | 0 | false | NoReason | -| test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | Address | 0 | true | NoReason | -| test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | VariableAddress: x | 0 | false | NoReason | -| test.c:21:15:21:15 | VariableAddress: x | test.c:21:15:21:15 | VariableAddress: x | 0 | true | NoReason | -| test.c:21:24:21:24 | InitializeParameter: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | -| test.c:21:24:21:24 | InitializeParameter: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | -| test.c:21:24:21:24 | InitializeParameter: p | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | -| test.c:21:24:21:24 | InitializeParameter: p | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | -| test.c:21:24:21:24 | InitializeParameter: p | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | -| test.c:21:24:21:24 | InitializeParameter: p | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | -| test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | Address | 0 | false | NoReason | -| test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | Address | 0 | true | NoReason | -| test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | VariableAddress: p | 0 | false | NoReason | -| test.c:21:24:21:24 | VariableAddress: p | test.c:21:24:21:24 | VariableAddress: p | 0 | true | NoReason | -| test.c:22:7:22:7 | Uninitialized: definition of i | test.c:22:7:22:7 | Uninitialized: definition of i | 0 | false | NoReason | -| test.c:22:7:22:7 | Uninitialized: definition of i | test.c:22:7:22:7 | Uninitialized: definition of i | 0 | true | NoReason | -| test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | Address | 0 | false | NoReason | -| test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | Address | 0 | true | NoReason | -| test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | false | NoReason | -| test.c:22:7:22:7 | VariableAddress: definition of i | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | true | NoReason | -| test.c:23:7:23:7 | VariableAddress: i | test.c:23:7:23:7 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:7:23:7 | VariableAddress: i | test.c:23:7:23:7 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:7:23:7 | VariableAddress: i | test.c:23:7:23:11 | Address | 0 | false | NoReason | -| test.c:23:7:23:7 | VariableAddress: i | test.c:23:7:23:11 | Address | 0 | true | NoReason | -| test.c:23:7:23:11 | Store: ... = ... | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:7:23:11 | Store: ... = ... | test.c:23:7:23:11 | Store: ... = ... | 0 | true | NoReason | -| test.c:23:7:23:11 | Store: ... = ... | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:7:23:11 | Store: ... = ... | test.c:23:14:23:14 | Phi | 0 | true | NoReason | -| test.c:23:11:23:11 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:11:23:11 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | true | NoReason | -| test.c:23:11:23:11 | Constant: 0 | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:11:23:11 | Constant: 0 | test.c:23:7:23:11 | CopySource | 0 | true | NoReason | -| test.c:23:11:23:11 | Constant: 0 | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:11:23:11 | Constant: 0 | test.c:23:11:23:11 | Constant: 0 | 0 | true | NoReason | -| test.c:23:14:23:14 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Load: i | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Load: i | 0 | true | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:14:23:18 | Left | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:14:23:18 | Left | 0 | true | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Load: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | VariableAddress: i | test.c:23:14:23:14 | Address | 0 | false | NoReason | -| test.c:23:14:23:14 | VariableAddress: i | test.c:23:14:23:14 | Address | 0 | true | NoReason | -| test.c:23:14:23:14 | VariableAddress: i | test.c:23:14:23:14 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:14:23:14 | VariableAddress: i | test.c:23:14:23:14 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:14:23:18 | CompareLT: ... < ... | test.c:23:14:23:18 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:23:14:23:18 | CompareLT: ... < ... | test.c:23:14:23:18 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:23:14:23:18 | CompareLT: ... < ... | test.c:23:14:23:18 | Condition | 0 | false | NoReason | -| test.c:23:14:23:18 | CompareLT: ... < ... | test.c:23:14:23:18 | Condition | 0 | true | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:23:14:23:18 | Right | 0 | false | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:23:14:23:18 | Right | 0 | true | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:23:18:23:18 | Load: x | 0 | false | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:23:18:23:18 | Load: x | 0 | true | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:23:18:23:18 | Load: x | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | -| test.c:23:18:23:18 | VariableAddress: x | test.c:23:18:23:18 | Address | 0 | false | NoReason | -| test.c:23:18:23:18 | VariableAddress: x | test.c:23:18:23:18 | Address | 0 | true | NoReason | -| test.c:23:18:23:18 | VariableAddress: x | test.c:23:18:23:18 | VariableAddress: x | 0 | false | NoReason | -| test.c:23:18:23:18 | VariableAddress: x | test.c:23:18:23:18 | VariableAddress: x | 0 | true | NoReason | -| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:21 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:21 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:23 | Address | 0 | false | NoReason | -| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:23 | Address | 0 | false | NoReason | -| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:23 | Address | 0 | true | NoReason | -| test.c:23:21:23:21 | VariableAddress: i | test.c:23:21:23:23 | Address | 0 | true | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:7:23:11 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:7:23:11 | Store: ... = ... | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:11:23:11 | Constant: 0 | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | CopySource | 1 | true | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | Phi | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | Phi: i | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:14 | Phi: i | 1 | true | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:14:23:18 | Right | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:18:23:18 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:18:23:18 | Load: x | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Add: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Add: ... ++ | 0 | true | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | CopySource | 1 | true | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Left | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Left | 1 | true | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 1 | true | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:23:21:23:23 | Right | 0 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | -| test.c:23:21:23:23 | Add: ... ++ | test.c:26:11:26:11 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:21:23:23 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:23:21:23:23 | Constant: ... ++ | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | Constant: ... ++ | test.c:23:21:23:23 | Constant: ... ++ | 0 | true | NoReason | -| test.c:23:21:23:23 | Constant: ... ++ | test.c:23:21:23:23 | Right | 0 | false | NoReason | -| test.c:23:21:23:23 | Constant: ... ++ | test.c:23:21:23:23 | Right | 0 | true | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | Left | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | Left | 0 | true | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 0 | true | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | Load: ... ++ | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Store: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:7:23:11 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:7:23:11 | Store: ... = ... | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:11:23:11 | Constant: 0 | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | CopySource | 1 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi | 0 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi: i | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:14 | Phi: i | 1 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:14:23:18 | Right | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:18:23:18 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:18:23:18 | Load: x | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Add: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Add: ... ++ | 0 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | CopySource | 1 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Left | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Left | 1 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Load: ... ++ | 1 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Right | 0 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Store: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:23:21:23:23 | Store: ... ++ | 0 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | -| test.c:23:21:23:23 | Store: ... ++ | test.c:26:11:26:11 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:24:5:24:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | -| test.c:24:5:24:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | -| test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | Load: p | 0 | false | NoReason | -| test.c:24:5:24:5 | Load: p | test.c:24:5:24:5 | Load: p | 0 | true | NoReason | -| test.c:24:5:24:5 | Load: p | test.c:24:5:24:8 | Left | 0 | false | NoReason | -| test.c:24:5:24:5 | Load: p | test.c:24:5:24:8 | Left | 0 | true | NoReason | -| test.c:24:5:24:5 | Load: p | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:5 | Load: p | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | Address | 0 | false | NoReason | -| test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | Address | 0 | true | NoReason | -| test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | VariableAddress: p | 0 | false | NoReason | -| test.c:24:5:24:5 | VariableAddress: p | test.c:24:5:24:5 | VariableAddress: p | 0 | true | NoReason | -| test.c:24:5:24:8 | PointerAdd: access to array | test.c:24:5:24:8 | Address | 0 | false | NoReason | -| test.c:24:5:24:8 | PointerAdd: access to array | test.c:24:5:24:8 | Address | 0 | true | NoReason | -| test.c:24:5:24:8 | PointerAdd: access to array | test.c:24:5:24:8 | PointerAdd: access to array | 0 | false | NoReason | -| test.c:24:5:24:8 | PointerAdd: access to array | test.c:24:5:24:8 | PointerAdd: access to array | 0 | true | NoReason | -| test.c:24:7:24:7 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | Load: i | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | Load: i | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | Load: i | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | Load: i | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:24:5:24:8 | Right | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:24:5:24:8 | Right | 0 | true | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | Load: i | 0 | false | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:24:7:24:7 | Load: i | 0 | true | NoReason | -| test.c:24:7:24:7 | Load: i | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | Address | 0 | false | NoReason | -| test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | Address | 0 | true | NoReason | -| test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | VariableAddress: i | 0 | false | NoReason | -| test.c:24:7:24:7 | VariableAddress: i | test.c:24:7:24:7 | VariableAddress: i | 0 | true | NoReason | -| test.c:26:7:26:7 | VariableAddress: i | test.c:26:7:26:7 | VariableAddress: i | 0 | false | NoReason | -| test.c:26:7:26:7 | VariableAddress: i | test.c:26:7:26:7 | VariableAddress: i | 0 | true | NoReason | -| test.c:26:7:26:7 | VariableAddress: i | test.c:26:7:26:11 | Address | 0 | false | NoReason | -| test.c:26:7:26:7 | VariableAddress: i | test.c:26:7:26:11 | Address | 0 | true | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | Store: ... = ... | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | Store: ... = ... | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | Store: ... = ... | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | Store: ... = ... | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | Store: ... = ... | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:7:26:11 | CopySource | 0 | true | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:7:26:11 | Store: ... = ... | 0 | true | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:11:26:11 | Load: x | 0 | true | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:7:26:11 | Store: ... = ... | test.c:26:14:26:14 | Phi | 0 | true | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | Load: x | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | Load: x | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | Load: x | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | Load: x | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | Load: x | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | Load: x | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:26:7:26:11 | CopySource | 0 | true | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:11:26:11 | Load: x | test.c:26:11:26:11 | Load: x | 0 | true | NoReason | -| test.c:26:11:26:11 | VariableAddress: x | test.c:26:11:26:11 | Address | 0 | false | NoReason | -| test.c:26:11:26:11 | VariableAddress: x | test.c:26:11:26:11 | Address | 0 | true | NoReason | -| test.c:26:11:26:11 | VariableAddress: x | test.c:26:11:26:11 | VariableAddress: x | 0 | false | NoReason | -| test.c:26:11:26:11 | VariableAddress: x | test.c:26:11:26:11 | VariableAddress: x | 0 | true | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Load: i | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Load: i | 0 | true | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:14:26:18 | Left | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:14:26:18 | Left | 0 | true | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Load: i | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi: i | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | VariableAddress: i | test.c:26:14:26:14 | Address | 0 | false | NoReason | -| test.c:26:14:26:14 | VariableAddress: i | test.c:26:14:26:14 | Address | 0 | true | NoReason | -| test.c:26:14:26:14 | VariableAddress: i | test.c:26:14:26:14 | VariableAddress: i | 0 | false | NoReason | -| test.c:26:14:26:14 | VariableAddress: i | test.c:26:14:26:14 | VariableAddress: i | 0 | true | NoReason | -| test.c:26:14:26:18 | CompareGT: ... > ... | test.c:26:14:26:18 | CompareGT: ... > ... | 0 | false | NoReason | -| test.c:26:14:26:18 | CompareGT: ... > ... | test.c:26:14:26:18 | CompareGT: ... > ... | 0 | true | NoReason | -| test.c:26:14:26:18 | CompareGT: ... > ... | test.c:26:14:26:18 | Condition | 0 | false | NoReason | -| test.c:26:14:26:18 | CompareGT: ... > ... | test.c:26:14:26:18 | Condition | 0 | true | NoReason | -| test.c:26:18:26:18 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:26:18:26:18 | Constant: 0 | file://:0:0:0:0 | 0 | 0 | true | NoReason | -| test.c:26:18:26:18 | Constant: 0 | test.c:26:14:26:18 | Right | 0 | false | NoReason | -| test.c:26:18:26:18 | Constant: 0 | test.c:26:14:26:18 | Right | 0 | true | NoReason | -| test.c:26:18:26:18 | Constant: 0 | test.c:26:18:26:18 | Constant: 0 | 0 | false | NoReason | -| test.c:26:18:26:18 | Constant: 0 | test.c:26:18:26:18 | Constant: 0 | 0 | true | NoReason | -| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:21 | VariableAddress: i | 0 | false | NoReason | -| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:21 | VariableAddress: i | 0 | true | NoReason | -| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:23 | Address | 0 | false | NoReason | -| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:23 | Address | 0 | false | NoReason | -| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:23 | Address | 0 | true | NoReason | -| test.c:26:21:26:21 | VariableAddress: i | test.c:26:21:26:23 | Address | 0 | true | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Add: ... ++ | file://:0:0:0:0 | 0 | 2 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:23:18:23:18 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:7:26:11 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:7:26:11 | Store: ... = ... | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:11:26:11 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:11:26:11 | Load: x | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | CopySource | 1 | true | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | Phi | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | Phi: i | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:14 | Phi: i | 1 | true | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:14:26:18 | Right | 2 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:18:26:18 | Constant: 0 | 2 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Add: ... ++ | 0 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Add: ... ++ | 0 | true | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Constant: ... ++ | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | CopySource | 1 | true | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Left | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Left | 1 | true | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 1 | true | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:26:21:26:23 | Right | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:27:7:27:7 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Add: ... ++ | test.c:27:7:27:7 | CopySource | 1 | true | NoReason | -| test.c:26:21:26:23 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:26:21:26:23 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:26:21:26:23 | Constant: ... ++ | test.c:26:21:26:23 | Constant: ... ++ | 0 | false | NoReason | -| test.c:26:21:26:23 | Constant: ... ++ | test.c:26:21:26:23 | Constant: ... ++ | 0 | true | NoReason | -| test.c:26:21:26:23 | Constant: ... ++ | test.c:26:21:26:23 | Right | 0 | false | NoReason | -| test.c:26:21:26:23 | Constant: ... ++ | test.c:26:21:26:23 | Right | 0 | true | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Load: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | Left | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | Left | 0 | true | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 0 | true | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Load: ... ++ | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Store: ... ++ | file://:0:0:0:0 | 0 | 2 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:21:15:21:15 | InitializeParameter: x | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:23:18:23:18 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:7:26:11 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:7:26:11 | Store: ... = ... | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:11:26:11 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:11:26:11 | Load: x | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | CopySource | 1 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi | 0 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi: i | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:14 | Phi: i | 1 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:14:26:18 | Right | 2 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:18:26:18 | Constant: 0 | 2 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Add: ... ++ | 0 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Add: ... ++ | 0 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Constant: ... ++ | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | CopySource | 1 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Left | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Left | 1 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Load: ... ++ | 1 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Right | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Store: ... ++ | 0 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:26:21:26:23 | Store: ... ++ | 0 | true | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:27:7:27:7 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | Store: ... ++ | test.c:27:7:27:7 | CopySource | 1 | true | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:27:5:27:5 | Load: p | 0 | false | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:27:5:27:5 | Load: p | 0 | true | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:27:5:27:8 | Left | 0 | false | NoReason | -| test.c:27:5:27:5 | Load: p | test.c:27:5:27:8 | Left | 0 | true | NoReason | -| test.c:27:5:27:5 | VariableAddress: p | test.c:27:5:27:5 | Address | 0 | false | NoReason | -| test.c:27:5:27:5 | VariableAddress: p | test.c:27:5:27:5 | Address | 0 | true | NoReason | -| test.c:27:5:27:5 | VariableAddress: p | test.c:27:5:27:5 | VariableAddress: p | 0 | false | NoReason | -| test.c:27:5:27:5 | VariableAddress: p | test.c:27:5:27:5 | VariableAddress: p | 0 | true | NoReason | -| test.c:27:5:27:8 | PointerAdd: access to array | test.c:27:5:27:8 | Address | 0 | false | NoReason | -| test.c:27:5:27:8 | PointerAdd: access to array | test.c:27:5:27:8 | Address | 0 | true | NoReason | -| test.c:27:5:27:8 | PointerAdd: access to array | test.c:27:5:27:8 | PointerAdd: access to array | 0 | false | NoReason | -| test.c:27:5:27:8 | PointerAdd: access to array | test.c:27:5:27:8 | PointerAdd: access to array | 0 | true | NoReason | -| test.c:27:7:27:7 | Load: i | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | -| test.c:27:7:27:7 | Load: i | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | -| test.c:27:7:27:7 | Load: i | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | -| test.c:27:7:27:7 | Load: i | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:27:5:27:8 | Right | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:27:5:27:8 | Right | 0 | true | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:27:7:27:7 | Load: i | 0 | false | NoReason | -| test.c:27:7:27:7 | Load: i | test.c:27:7:27:7 | Load: i | 0 | true | NoReason | -| test.c:27:7:27:7 | VariableAddress: i | test.c:27:7:27:7 | Address | 0 | false | NoReason | -| test.c:27:7:27:7 | VariableAddress: i | test.c:27:7:27:7 | Address | 0 | true | NoReason | -| test.c:27:7:27:7 | VariableAddress: i | test.c:27:7:27:7 | VariableAddress: i | 0 | false | NoReason | -| test.c:27:7:27:7 | VariableAddress: i | test.c:27:7:27:7 | VariableAddress: i | 0 | true | NoReason | -| test.c:32:5:32:9 | VariableAddress: test4 | test.c:32:5:32:9 | Address | 0 | false | NoReason | -| test.c:32:5:32:9 | VariableAddress: test4 | test.c:32:5:32:9 | Address | 0 | true | NoReason | -| test.c:32:5:32:9 | VariableAddress: test4 | test.c:32:5:32:9 | VariableAddress: test4 | 0 | false | NoReason | -| test.c:32:5:32:9 | VariableAddress: test4 | test.c:32:5:32:9 | VariableAddress: test4 | 0 | true | NoReason | -| test.c:32:16:32:20 | InitializeParameter: begin | test.c:32:16:32:20 | InitializeParameter: begin | 0 | false | NoReason | -| test.c:32:16:32:20 | InitializeParameter: begin | test.c:32:16:32:20 | InitializeParameter: begin | 0 | true | NoReason | -| test.c:32:16:32:20 | InitializeParameter: begin | test.c:33:10:33:14 | Phi | 0 | false | NoReason | -| test.c:32:16:32:20 | InitializeParameter: begin | test.c:33:10:33:14 | Phi | 0 | true | NoReason | -| test.c:32:16:32:20 | VariableAddress: begin | test.c:32:16:32:20 | Address | 0 | false | NoReason | -| test.c:32:16:32:20 | VariableAddress: begin | test.c:32:16:32:20 | Address | 0 | true | NoReason | -| test.c:32:16:32:20 | VariableAddress: begin | test.c:32:16:32:20 | VariableAddress: begin | 0 | false | NoReason | -| test.c:32:16:32:20 | VariableAddress: begin | test.c:32:16:32:20 | VariableAddress: begin | 0 | true | NoReason | -| test.c:32:28:32:30 | InitializeParameter: end | test.c:32:28:32:30 | InitializeParameter: end | 0 | false | NoReason | -| test.c:32:28:32:30 | InitializeParameter: end | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | NoReason | -| test.c:32:28:32:30 | InitializeParameter: end | test.c:33:18:33:20 | CopySource | 0 | false | NoReason | -| test.c:32:28:32:30 | InitializeParameter: end | test.c:33:18:33:20 | CopySource | 0 | true | NoReason | -| test.c:32:28:32:30 | VariableAddress: end | test.c:32:28:32:30 | Address | 0 | false | NoReason | -| test.c:32:28:32:30 | VariableAddress: end | test.c:32:28:32:30 | Address | 0 | true | NoReason | -| test.c:32:28:32:30 | VariableAddress: end | test.c:32:28:32:30 | VariableAddress: end | 0 | false | NoReason | -| test.c:32:28:32:30 | VariableAddress: end | test.c:32:28:32:30 | VariableAddress: end | 0 | true | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | Load: begin | 0 | false | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | Load: begin | 0 | true | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:20 | Left | 0 | false | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:33:10:33:20 | Left | 0 | true | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi: begin | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | VariableAddress: begin | test.c:33:10:33:14 | Address | 0 | false | NoReason | -| test.c:33:10:33:14 | VariableAddress: begin | test.c:33:10:33:14 | Address | 0 | true | NoReason | -| test.c:33:10:33:14 | VariableAddress: begin | test.c:33:10:33:14 | VariableAddress: begin | 0 | false | NoReason | -| test.c:33:10:33:14 | VariableAddress: begin | test.c:33:10:33:14 | VariableAddress: begin | 0 | true | NoReason | -| test.c:33:10:33:20 | CompareLT: ... < ... | test.c:33:10:33:20 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:33:10:33:20 | CompareLT: ... < ... | test.c:33:10:33:20 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:33:10:33:20 | CompareLT: ... < ... | test.c:33:10:33:20 | Condition | 0 | false | NoReason | -| test.c:33:10:33:20 | CompareLT: ... < ... | test.c:33:10:33:20 | Condition | 0 | true | NoReason | -| test.c:33:18:33:20 | Load: end | test.c:32:28:32:30 | InitializeParameter: end | 0 | false | NoReason | -| test.c:33:18:33:20 | Load: end | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | NoReason | -| test.c:33:18:33:20 | Load: end | test.c:33:10:33:20 | Right | 0 | false | NoReason | -| test.c:33:18:33:20 | Load: end | test.c:33:10:33:20 | Right | 0 | true | NoReason | -| test.c:33:18:33:20 | Load: end | test.c:33:18:33:20 | CopySource | 0 | false | NoReason | -| test.c:33:18:33:20 | Load: end | test.c:33:18:33:20 | CopySource | 0 | true | NoReason | -| test.c:33:18:33:20 | Load: end | test.c:33:18:33:20 | Load: end | 0 | false | NoReason | -| test.c:33:18:33:20 | Load: end | test.c:33:18:33:20 | Load: end | 0 | true | NoReason | -| test.c:33:18:33:20 | VariableAddress: end | test.c:33:18:33:20 | Address | 0 | false | NoReason | -| test.c:33:18:33:20 | VariableAddress: end | test.c:33:18:33:20 | Address | 0 | true | NoReason | -| test.c:33:18:33:20 | VariableAddress: end | test.c:33:18:33:20 | VariableAddress: end | 0 | false | NoReason | -| test.c:33:18:33:20 | VariableAddress: end | test.c:33:18:33:20 | VariableAddress: end | 0 | true | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:32:5:32:9 | UnmodeledUse | 0 | false | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:32:5:32:9 | UnmodeledUse | 0 | true | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:5:34:25 | CopySource | 0 | false | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:5:34:25 | CopySource | 0 | true | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:5:34:25 | Store: ... = ... | 0 | false | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:5:34:25 | Store: ... = ... | 0 | true | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:14:34:25 | Add: ... + ... | 0 | false | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:14:34:25 | Add: ... + ... | 0 | true | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:14:34:25 | Left | 1 | false | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:14:34:25 | Left | 1 | true | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:15:34:20 | Load: * ... | 1 | false | NoReason | -| test.c:34:5:34:25 | Store: ... = ... | test.c:34:15:34:20 | Load: * ... | 1 | true | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:34:6:34:10 | Load: begin | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:34:6:34:10 | Load: begin | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:34:6:34:10 | Load: begin | test.c:34:5:34:25 | Address | 0 | false | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:34:5:34:25 | Address | 0 | true | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:34:6:34:10 | Load: begin | 0 | false | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:34:6:34:10 | Load: begin | 0 | true | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:34:6:34:10 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:34:6:34:10 | VariableAddress: begin | test.c:34:6:34:10 | Address | 0 | false | NoReason | -| test.c:34:6:34:10 | VariableAddress: begin | test.c:34:6:34:10 | Address | 0 | true | NoReason | -| test.c:34:6:34:10 | VariableAddress: begin | test.c:34:6:34:10 | VariableAddress: begin | 0 | false | NoReason | -| test.c:34:6:34:10 | VariableAddress: begin | test.c:34:6:34:10 | VariableAddress: begin | 0 | true | NoReason | -| test.c:34:14:34:25 | Add: ... + ... | test.c:34:5:34:25 | CopySource | 0 | false | NoReason | -| test.c:34:14:34:25 | Add: ... + ... | test.c:34:5:34:25 | CopySource | 0 | true | NoReason | -| test.c:34:14:34:25 | Add: ... + ... | test.c:34:14:34:25 | Add: ... + ... | 0 | false | NoReason | -| test.c:34:14:34:25 | Add: ... + ... | test.c:34:14:34:25 | Add: ... + ... | 0 | true | NoReason | -| test.c:34:14:34:25 | Add: ... + ... | test.c:34:14:34:25 | Left | 1 | false | NoReason | -| test.c:34:14:34:25 | Add: ... + ... | test.c:34:14:34:25 | Left | 1 | true | NoReason | -| test.c:34:14:34:25 | Add: ... + ... | test.c:34:15:34:20 | Load: * ... | 1 | false | NoReason | -| test.c:34:14:34:25 | Add: ... + ... | test.c:34:15:34:20 | Load: * ... | 1 | true | NoReason | -| test.c:34:15:34:20 | Load: * ... | test.c:34:14:34:25 | Left | 0 | false | NoReason | -| test.c:34:15:34:20 | Load: * ... | test.c:34:14:34:25 | Left | 0 | true | NoReason | -| test.c:34:15:34:20 | Load: * ... | test.c:34:15:34:20 | Load: * ... | 0 | false | NoReason | -| test.c:34:15:34:20 | Load: * ... | test.c:34:15:34:20 | Load: * ... | 0 | true | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:34:16:34:20 | Load: begin | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:34:16:34:20 | Load: begin | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:34:16:34:20 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:34:15:34:20 | Address | 0 | false | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:34:15:34:20 | Address | 0 | true | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:34:16:34:20 | Load: begin | 0 | false | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:34:16:34:20 | Load: begin | 0 | true | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:34:16:34:20 | Load: begin | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:34:16:34:20 | VariableAddress: begin | test.c:34:16:34:20 | Address | 0 | false | NoReason | -| test.c:34:16:34:20 | VariableAddress: begin | test.c:34:16:34:20 | Address | 0 | true | NoReason | -| test.c:34:16:34:20 | VariableAddress: begin | test.c:34:16:34:20 | VariableAddress: begin | 0 | false | NoReason | -| test.c:34:16:34:20 | VariableAddress: begin | test.c:34:16:34:20 | VariableAddress: begin | 0 | true | NoReason | -| test.c:34:25:34:25 | Constant: 1 | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:34:25:34:25 | Constant: 1 | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:34:25:34:25 | Constant: 1 | test.c:34:14:34:25 | Right | 0 | false | NoReason | -| test.c:34:25:34:25 | Constant: 1 | test.c:34:14:34:25 | Right | 0 | true | NoReason | -| test.c:34:25:34:25 | Constant: 1 | test.c:34:25:34:25 | Constant: 1 | 0 | false | NoReason | -| test.c:34:25:34:25 | Constant: 1 | test.c:34:25:34:25 | Constant: 1 | 0 | true | NoReason | -| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:9 | VariableAddress: begin | 0 | false | NoReason | -| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:9 | VariableAddress: begin | 0 | true | NoReason | -| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:11 | Address | 0 | false | NoReason | -| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:11 | Address | 0 | false | NoReason | -| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:11 | Address | 0 | true | NoReason | -| test.c:35:5:35:9 | VariableAddress: begin | test.c:35:5:35:11 | Address | 0 | true | NoReason | -| test.c:35:5:35:11 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:35:5:35:11 | Constant: ... ++ | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:35:5:35:11 | Constant: ... ++ | test.c:35:5:35:11 | Constant: ... ++ | 0 | false | NoReason | -| test.c:35:5:35:11 | Constant: ... ++ | test.c:35:5:35:11 | Constant: ... ++ | 0 | true | NoReason | -| test.c:35:5:35:11 | Constant: ... ++ | test.c:35:5:35:11 | Right | 0 | false | NoReason | -| test.c:35:5:35:11 | Constant: ... ++ | test.c:35:5:35:11 | Right | 0 | true | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | Load: ... ++ | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | Load: ... ++ | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | Load: ... ++ | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | Left | 0 | false | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | Left | 0 | true | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | Load: ... ++ | 0 | false | NoReason | -| test.c:35:5:35:11 | Load: ... ++ | test.c:35:5:35:11 | Load: ... ++ | 0 | true | NoReason | -| test.c:35:5:35:11 | PointerAdd: ... ++ | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | PointerAdd: ... ++ | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | PointerAdd: ... ++ | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | false | NoReason | -| test.c:35:5:35:11 | PointerAdd: ... ++ | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | true | NoReason | -| test.c:35:5:35:11 | Store: ... ++ | test.c:33:10:33:14 | Phi | 0 | false | NoReason | -| test.c:35:5:35:11 | Store: ... ++ | test.c:33:10:33:14 | Phi | 0 | true | NoReason | -| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | false | NoReason | -| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | true | NoReason | -| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | Store: ... ++ | 0 | false | NoReason | -| test.c:35:5:35:11 | Store: ... ++ | test.c:35:5:35:11 | Store: ... ++ | 0 | true | NoReason | -operandBounds -| test.c:3:5:3:9 | Address | test.c:3:5:3:9 | Address | 0 | false | NoReason | -| test.c:3:5:3:9 | Address | test.c:3:5:3:9 | Address | 0 | true | NoReason | -| test.c:3:5:3:9 | Address | test.c:3:5:3:9 | VariableAddress: test1 | 0 | false | NoReason | -| test.c:3:5:3:9 | Address | test.c:3:5:3:9 | VariableAddress: test1 | 0 | true | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:3:5:3:9 | ReturnValue | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:3:5:3:9 | ReturnValue | 0 | true | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:3:5:3:9 | ReturnValue | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:3:5:3:9 | ReturnValue | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:3:5:3:9 | ReturnValue | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | Load: x | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | Load: x | 0 | true | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | Store: x | 0 | false | NoReason | -| test.c:3:5:3:9 | ReturnValue | test.c:7:10:7:10 | Store: x | 0 | true | NoReason | -| test.c:3:15:3:15 | Address | test.c:3:15:3:15 | Address | 0 | false | NoReason | -| test.c:3:15:3:15 | Address | test.c:3:15:3:15 | Address | 0 | true | NoReason | -| test.c:3:15:3:15 | Address | test.c:3:15:3:15 | VariableAddress: x | 0 | false | NoReason | -| test.c:3:15:3:15 | Address | test.c:3:15:3:15 | VariableAddress: x | 0 | true | NoReason | -| test.c:3:22:3:22 | Address | test.c:3:22:3:22 | Address | 0 | false | NoReason | -| test.c:3:22:3:22 | Address | test.c:3:22:3:22 | Address | 0 | true | NoReason | -| test.c:3:22:3:22 | Address | test.c:3:22:3:22 | VariableAddress: y | 0 | false | NoReason | -| test.c:3:22:3:22 | Address | test.c:3:22:3:22 | VariableAddress: y | 0 | true | NoReason | -| test.c:4:7:4:7 | Address | test.c:4:7:4:7 | Address | 0 | false | NoReason | -| test.c:4:7:4:7 | Address | test.c:4:7:4:7 | Address | 0 | true | NoReason | -| test.c:4:7:4:7 | Address | test.c:4:7:4:7 | VariableAddress: x | 0 | false | NoReason | -| test.c:4:7:4:7 | Address | test.c:4:7:4:7 | VariableAddress: x | 0 | true | NoReason | -| test.c:4:7:4:7 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:4:7:4:7 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:4:7:4:7 | CopySource | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:4:7:4:7 | CopySource | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | -| test.c:4:7:4:7 | CopySource | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:4:7:4:7 | CopySource | test.c:7:3:7:11 | Phi | 0 | true | NoReason | -| test.c:4:7:4:11 | Condition | test.c:4:7:4:11 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:4:7:4:11 | Condition | test.c:4:7:4:11 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:4:7:4:11 | Condition | test.c:4:7:4:11 | Condition | 0 | false | NoReason | -| test.c:4:7:4:11 | Condition | test.c:4:7:4:11 | Condition | 0 | true | NoReason | -| test.c:4:7:4:11 | Left | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:4:7:4:11 | Left | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:4:7:4:11 | Left | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:4:7:4:11 | Left | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | -| test.c:4:7:4:11 | Left | test.c:4:7:4:7 | Load: x | 0 | false | NoReason | -| test.c:4:7:4:11 | Left | test.c:4:7:4:7 | Load: x | 0 | true | NoReason | -| test.c:4:7:4:11 | Left | test.c:4:7:4:11 | Left | 0 | false | NoReason | -| test.c:4:7:4:11 | Left | test.c:4:7:4:11 | Left | 0 | true | NoReason | -| test.c:4:7:4:11 | Left | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:4:7:4:11 | Left | test.c:7:3:7:11 | Phi | 0 | true | NoReason | -| test.c:4:7:4:11 | Right | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:4:7:4:11 | Right | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:4:7:4:11 | Right | test.c:4:7:4:11 | Right | 0 | false | NoReason | -| test.c:4:7:4:11 | Right | test.c:4:7:4:11 | Right | 0 | true | NoReason | -| test.c:4:7:4:11 | Right | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:4:7:4:11 | Right | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | -| test.c:4:7:4:11 | Right | test.c:4:11:4:11 | Load: y | 0 | false | NoReason | -| test.c:4:7:4:11 | Right | test.c:4:11:4:11 | Load: y | 0 | true | NoReason | -| test.c:4:7:4:11 | Right | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:4:7:4:11 | Right | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | -| test.c:4:11:4:11 | Address | test.c:4:11:4:11 | Address | 0 | false | NoReason | -| test.c:4:11:4:11 | Address | test.c:4:11:4:11 | Address | 0 | true | NoReason | -| test.c:4:11:4:11 | Address | test.c:4:11:4:11 | VariableAddress: y | 0 | false | NoReason | -| test.c:4:11:4:11 | Address | test.c:4:11:4:11 | VariableAddress: y | 0 | true | NoReason | -| test.c:4:11:4:11 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:4:11:4:11 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:4:11:4:11 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:4:11:4:11 | CopySource | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | -| test.c:4:11:4:11 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:4:11:4:11 | CopySource | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | -| test.c:5:5:5:9 | Address | test.c:5:5:5:5 | VariableAddress: x | 0 | false | NoReason | -| test.c:5:5:5:9 | Address | test.c:5:5:5:5 | VariableAddress: x | 0 | true | NoReason | -| test.c:5:5:5:9 | Address | test.c:5:5:5:9 | Address | 0 | false | NoReason | -| test.c:5:5:5:9 | Address | test.c:5:5:5:9 | Address | 0 | true | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:5:5:5:9 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:5:5:5:9 | CopySource | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:5:5:5:9 | CopySource | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:5:5:5:9 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:5:5:5:9 | CopySource | 0 | false | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:5:5:5:9 | CopySource | 0 | true | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:5:9:5:9 | Load: y | 0 | false | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:5:9:5:9 | Load: y | 0 | true | NoReason | -| test.c:5:5:5:9 | CopySource | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | Address | test.c:5:9:5:9 | Address | 0 | false | NoReason | -| test.c:5:9:5:9 | Address | test.c:5:9:5:9 | Address | 0 | true | NoReason | -| test.c:5:9:5:9 | Address | test.c:5:9:5:9 | VariableAddress: y | 0 | false | NoReason | -| test.c:5:9:5:9 | Address | test.c:5:9:5:9 | VariableAddress: y | 0 | true | NoReason | -| test.c:5:9:5:9 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:5:9:5:9 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:5:9:5:9 | CopySource | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | CopySource | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | CopySource | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:5:9:5:9 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:5:9:5:9 | CopySource | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | -| test.c:5:9:5:9 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:5:9:5:9 | CopySource | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | -| test.c:5:9:5:9 | CopySource | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:3:15:3:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:3:15:3:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:3:22:3:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:4:7:4:7 | CopySource | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:4:7:4:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:4:7:4:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:4:7:4:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:4:7:4:11 | Right | 0 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:4:11:4:11 | CopySource | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:4:11:4:11 | Load: y | 0 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:5:5:5:9 | CopySource | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:5:5:5:9 | CopySource | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:5:5:5:9 | Store: ... = ... | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:5:5:5:9 | Store: ... = ... | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | CopySource | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | Load: y | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:5:9:5:9 | Load: y | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 0 | true | NoReason | -| test.c:7:3:7:11 | Phi | test.c:7:3:7:11 | Phi | 1 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | Address | test.c:7:3:7:11 | VariableAddress: return ... | 0 | false | NoReason | -| test.c:7:10:7:10 | Address | test.c:7:3:7:11 | VariableAddress: return ... | 0 | true | NoReason | -| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | Address | 0 | false | NoReason | -| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | Address | 0 | false | NoReason | -| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | Address | 0 | true | NoReason | -| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | Address | 0 | true | NoReason | -| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | VariableAddress: x | 0 | false | NoReason | -| test.c:7:10:7:10 | Address | test.c:7:10:7:10 | VariableAddress: x | 0 | true | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:3:15:3:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:3:22:3:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:4:7:4:7 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:4:11:4:11 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:7:10:7:10 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:5:9:5:9 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi: return ... | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:3:7:11 | Phi: return ... | 0 | true | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | CopySource | 0 | true | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | Load: x | 0 | false | NoReason | -| test.c:7:10:7:10 | CopySource | test.c:7:10:7:10 | Load: x | 0 | true | NoReason | -| test.c:11:5:11:9 | Address | test.c:11:5:11:9 | Address | 0 | false | NoReason | -| test.c:11:5:11:9 | Address | test.c:11:5:11:9 | Address | 0 | true | NoReason | -| test.c:11:5:11:9 | Address | test.c:11:5:11:9 | VariableAddress: test2 | 0 | false | NoReason | -| test.c:11:5:11:9 | Address | test.c:11:5:11:9 | VariableAddress: test2 | 0 | true | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:11:5:11:9 | ReturnValue | 0 | false | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:11:5:11:9 | ReturnValue | 0 | true | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:11:5:11:9 | ReturnValue | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:11:5:11:9 | ReturnValue | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:11:5:11:9 | ReturnValue | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | Load: x | 0 | false | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | Load: x | 0 | true | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | Store: x | 0 | false | NoReason | -| test.c:11:5:11:9 | ReturnValue | test.c:17:10:17:10 | Store: x | 0 | true | NoReason | -| test.c:11:15:11:15 | Address | test.c:11:15:11:15 | Address | 0 | false | NoReason | -| test.c:11:15:11:15 | Address | test.c:11:15:11:15 | Address | 0 | true | NoReason | -| test.c:11:15:11:15 | Address | test.c:11:15:11:15 | VariableAddress: x | 0 | false | NoReason | -| test.c:11:15:11:15 | Address | test.c:11:15:11:15 | VariableAddress: x | 0 | true | NoReason | -| test.c:11:22:11:22 | Address | test.c:11:22:11:22 | Address | 0 | false | NoReason | -| test.c:11:22:11:22 | Address | test.c:11:22:11:22 | Address | 0 | true | NoReason | -| test.c:11:22:11:22 | Address | test.c:11:22:11:22 | VariableAddress: y | 0 | false | NoReason | -| test.c:11:22:11:22 | Address | test.c:11:22:11:22 | VariableAddress: y | 0 | true | NoReason | -| test.c:12:7:12:7 | Address | test.c:12:7:12:7 | Address | 0 | false | NoReason | -| test.c:12:7:12:7 | Address | test.c:12:7:12:7 | Address | 0 | true | NoReason | -| test.c:12:7:12:7 | Address | test.c:12:7:12:7 | VariableAddress: x | 0 | false | NoReason | -| test.c:12:7:12:7 | Address | test.c:12:7:12:7 | VariableAddress: x | 0 | true | NoReason | -| test.c:12:7:12:7 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:12:7:12:7 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:12:7:12:7 | CopySource | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | -| test.c:12:7:12:7 | CopySource | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | -| test.c:12:7:12:7 | CopySource | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | -| test.c:12:7:12:7 | CopySource | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | -| test.c:12:7:12:11 | Condition | test.c:12:7:12:11 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:12:7:12:11 | Condition | test.c:12:7:12:11 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:12:7:12:11 | Condition | test.c:12:7:12:11 | Condition | 0 | false | NoReason | -| test.c:12:7:12:11 | Condition | test.c:12:7:12:11 | Condition | 0 | true | NoReason | -| test.c:12:7:12:11 | Left | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:12:7:12:11 | Left | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:12:7:12:11 | Left | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | -| test.c:12:7:12:11 | Left | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | -| test.c:12:7:12:11 | Left | test.c:12:7:12:7 | Load: x | 0 | false | NoReason | -| test.c:12:7:12:11 | Left | test.c:12:7:12:7 | Load: x | 0 | true | NoReason | -| test.c:12:7:12:11 | Left | test.c:12:7:12:11 | Left | 0 | false | NoReason | -| test.c:12:7:12:11 | Left | test.c:12:7:12:11 | Left | 0 | true | NoReason | -| test.c:12:7:12:11 | Left | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | -| test.c:12:7:12:11 | Left | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | -| test.c:12:7:12:11 | Right | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:12:7:12:11 | Right | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:12:7:12:11 | Right | test.c:12:7:12:11 | Right | 0 | false | NoReason | -| test.c:12:7:12:11 | Right | test.c:12:7:12:11 | Right | 0 | true | NoReason | -| test.c:12:7:12:11 | Right | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | -| test.c:12:7:12:11 | Right | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | -| test.c:12:7:12:11 | Right | test.c:12:11:12:11 | Load: y | 0 | false | NoReason | -| test.c:12:7:12:11 | Right | test.c:12:11:12:11 | Load: y | 0 | true | NoReason | -| test.c:12:7:12:11 | Right | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | -| test.c:12:7:12:11 | Right | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | -| test.c:12:11:12:11 | Address | test.c:12:11:12:11 | Address | 0 | false | NoReason | -| test.c:12:11:12:11 | Address | test.c:12:11:12:11 | Address | 0 | true | NoReason | -| test.c:12:11:12:11 | Address | test.c:12:11:12:11 | VariableAddress: y | 0 | false | NoReason | -| test.c:12:11:12:11 | Address | test.c:12:11:12:11 | VariableAddress: y | 0 | true | NoReason | -| test.c:12:11:12:11 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:12:11:12:11 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:12:11:12:11 | CopySource | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | -| test.c:12:11:12:11 | CopySource | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | -| test.c:12:11:12:11 | CopySource | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | -| test.c:12:11:12:11 | CopySource | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | -| test.c:13:5:13:9 | Address | test.c:13:5:13:5 | VariableAddress: x | 0 | false | NoReason | -| test.c:13:5:13:9 | Address | test.c:13:5:13:5 | VariableAddress: x | 0 | true | NoReason | -| test.c:13:5:13:9 | Address | test.c:13:5:13:9 | Address | 0 | false | NoReason | -| test.c:13:5:13:9 | Address | test.c:13:5:13:9 | Address | 0 | true | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:13:5:13:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:13:5:13:9 | CopySource | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:13:5:13:9 | CopySource | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:13:5:13:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:13:5:13:9 | CopySource | 0 | false | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:13:5:13:9 | CopySource | 0 | true | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:13:9:13:9 | Load: y | 0 | false | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:13:9:13:9 | Load: y | 0 | true | NoReason | -| test.c:13:5:13:9 | CopySource | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | Address | test.c:13:9:13:9 | Address | 0 | false | NoReason | -| test.c:13:9:13:9 | Address | test.c:13:9:13:9 | Address | 0 | true | NoReason | -| test.c:13:9:13:9 | Address | test.c:13:9:13:9 | VariableAddress: y | 0 | false | NoReason | -| test.c:13:9:13:9 | Address | test.c:13:9:13:9 | VariableAddress: y | 0 | true | NoReason | -| test.c:13:9:13:9 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:13:9:13:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:13:9:13:9 | CopySource | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | CopySource | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | CopySource | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:13:9:13:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | -| test.c:13:9:13:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | -| test.c:13:9:13:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | -| test.c:13:9:13:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | -| test.c:13:9:13:9 | CopySource | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | Address | test.c:15:5:15:5 | VariableAddress: x | 0 | false | NoReason | -| test.c:15:5:15:11 | Address | test.c:15:5:15:5 | VariableAddress: x | 0 | true | NoReason | -| test.c:15:5:15:11 | Address | test.c:15:5:15:11 | Address | 0 | false | NoReason | -| test.c:15:5:15:11 | Address | test.c:15:5:15:11 | Address | 0 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -1 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -2 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | CopySource | test.c:12:7:12:7 | CopySource | -1 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:12:7:12:7 | CopySource | -2 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:12:7:12:11 | Right | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | CopySource | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | CopySource | test.c:12:11:12:11 | Load: y | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | CopySource | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:15:5:15:11 | CopySource | test.c:15:5:15:11 | CopySource | 0 | false | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:5:15:11 | CopySource | 0 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | CopySource | -1 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | CopySource | -2 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | Load: x | -1 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | Load: x | -2 | false | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:9 | Load: x | -2 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Left | -1 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Left | -2 | false | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Left | -2 | true | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Sub: ... - ... | 0 | false | NoReason | -| test.c:15:5:15:11 | CopySource | test.c:15:9:15:11 | Sub: ... - ... | 0 | true | NoReason | -| test.c:15:9:15:9 | Address | test.c:15:9:15:9 | Address | 0 | false | NoReason | -| test.c:15:9:15:9 | Address | test.c:15:9:15:9 | Address | 0 | true | NoReason | -| test.c:15:9:15:9 | Address | test.c:15:9:15:9 | VariableAddress: x | 0 | false | NoReason | -| test.c:15:9:15:9 | Address | test.c:15:9:15:9 | VariableAddress: x | 0 | true | NoReason | -| test.c:15:9:15:9 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:15:9:15:9 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:15:9:15:9 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | CopySource | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | -| test.c:15:9:15:9 | CopySource | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | -| test.c:15:9:15:9 | CopySource | test.c:12:7:12:11 | Right | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | CopySource | test.c:12:11:12:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | CopySource | test.c:12:11:12:11 | Load: y | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | CopySource | test.c:13:9:13:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:9 | CopySource | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | -| test.c:15:9:15:9 | CopySource | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | -| test.c:15:9:15:11 | Left | test.c:11:15:11:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:15:9:15:11 | Left | test.c:11:15:11:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:15:9:15:11 | Left | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Left | test.c:12:7:12:7 | CopySource | 0 | false | NoReason | -| test.c:15:9:15:11 | Left | test.c:12:7:12:7 | CopySource | 0 | true | NoReason | -| test.c:15:9:15:11 | Left | test.c:12:7:12:11 | Right | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Left | test.c:12:11:12:11 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Left | test.c:12:11:12:11 | Load: y | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Left | test.c:13:9:13:9 | CopySource | 0 | false | CompareLT: ... < ... | -| test.c:15:9:15:11 | Left | test.c:15:9:15:9 | CopySource | 0 | false | NoReason | -| test.c:15:9:15:11 | Left | test.c:15:9:15:9 | CopySource | 0 | true | NoReason | -| test.c:15:9:15:11 | Left | test.c:15:9:15:9 | Load: x | 0 | false | NoReason | -| test.c:15:9:15:11 | Left | test.c:15:9:15:9 | Load: x | 0 | true | NoReason | -| test.c:15:9:15:11 | Left | test.c:15:9:15:11 | Left | 0 | false | NoReason | -| test.c:15:9:15:11 | Left | test.c:15:9:15:11 | Left | 0 | true | NoReason | -| test.c:15:9:15:11 | Right | file://:0:0:0:0 | 0 | 2 | false | NoReason | -| test.c:15:9:15:11 | Right | file://:0:0:0:0 | 0 | 2 | true | NoReason | -| test.c:15:9:15:11 | Right | test.c:15:9:15:11 | Right | 0 | false | NoReason | -| test.c:15:9:15:11 | Right | test.c:15:9:15:11 | Right | 0 | true | NoReason | -| test.c:15:9:15:11 | Right | test.c:15:11:15:11 | Constant: 2 | 0 | false | NoReason | -| test.c:15:9:15:11 | Right | test.c:15:11:15:11 | Constant: 2 | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:11:15:11:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:11:15:11:15 | InitializeParameter: x | -1 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:11:15:11:15 | InitializeParameter: x | -2 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:11:22:11:22 | InitializeParameter: y | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:11:22:11:22 | InitializeParameter: y | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | CopySource | -1 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | CopySource | -2 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:12:7:12:7 | Load: x | 1 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:12:7:12:11 | Left | 1 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:12:7:12:11 | Right | -2 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:12:11:12:11 | CopySource | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:12:11:12:11 | CopySource | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:12:11:12:11 | Load: y | -2 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:13:5:13:9 | CopySource | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:13:5:13:9 | CopySource | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:13:5:13:9 | Store: ... = ... | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:13:5:13:9 | Store: ... = ... | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | CopySource | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | CopySource | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | Load: y | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:13:9:13:9 | Load: y | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:5:15:11 | CopySource | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:5:15:11 | CopySource | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:5:15:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:5:15:11 | Store: ... = ... | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | CopySource | 1 | false | CompareLT: ... < ... | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | CopySource | -1 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | CopySource | -2 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | Load: x | -1 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | Load: x | -2 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:9 | Load: x | -2 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Left | -1 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Left | -2 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Left | -2 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Sub: ... - ... | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:15:9:15:11 | Sub: ... - ... | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:17:3:17:11 | Phi | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:17:3:17:11 | Phi | 0 | false | NoReason | -| test.c:17:3:17:11 | Phi | test.c:17:3:17:11 | Phi | 0 | true | NoReason | -| test.c:17:3:17:11 | Phi | test.c:17:3:17:11 | Phi | 0 | true | NoReason | -| test.c:17:10:17:10 | Address | test.c:17:3:17:11 | VariableAddress: return ... | 0 | false | NoReason | -| test.c:17:10:17:10 | Address | test.c:17:3:17:11 | VariableAddress: return ... | 0 | true | NoReason | -| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | Address | 0 | false | NoReason | -| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | Address | 0 | false | NoReason | -| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | Address | 0 | true | NoReason | -| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | Address | 0 | true | NoReason | -| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | VariableAddress: x | 0 | false | NoReason | -| test.c:17:10:17:10 | Address | test.c:17:10:17:10 | VariableAddress: x | 0 | true | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:11:15:11:15 | InitializeParameter: x | -2 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | CopySource | test.c:11:22:11:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | CopySource | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:12:7:12:7 | CopySource | -2 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | CopySource | test.c:12:11:12:11 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | CopySource | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | CopySource | test.c:13:9:13:9 | CopySource | -2 | false | CompareLT: ... < ... | -| test.c:17:10:17:10 | CopySource | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:15:9:15:9 | CopySource | -2 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:3:17:11 | Phi: return ... | 0 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:3:17:11 | Phi: return ... | 0 | true | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | CopySource | 0 | true | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | Load: x | 0 | false | NoReason | -| test.c:17:10:17:10 | CopySource | test.c:17:10:17:10 | Load: x | 0 | true | NoReason | -| test.c:21:5:21:9 | Address | test.c:21:5:21:9 | Address | 0 | false | NoReason | -| test.c:21:5:21:9 | Address | test.c:21:5:21:9 | Address | 0 | true | NoReason | -| test.c:21:5:21:9 | Address | test.c:21:5:21:9 | VariableAddress: test3 | 0 | false | NoReason | -| test.c:21:5:21:9 | Address | test.c:21:5:21:9 | VariableAddress: test3 | 0 | true | NoReason | -| test.c:21:15:21:15 | Address | test.c:21:15:21:15 | Address | 0 | false | NoReason | -| test.c:21:15:21:15 | Address | test.c:21:15:21:15 | Address | 0 | true | NoReason | -| test.c:21:15:21:15 | Address | test.c:21:15:21:15 | VariableAddress: x | 0 | false | NoReason | -| test.c:21:15:21:15 | Address | test.c:21:15:21:15 | VariableAddress: x | 0 | true | NoReason | -| test.c:21:24:21:24 | Address | test.c:21:24:21:24 | Address | 0 | false | NoReason | -| test.c:21:24:21:24 | Address | test.c:21:24:21:24 | Address | 0 | true | NoReason | -| test.c:21:24:21:24 | Address | test.c:21:24:21:24 | VariableAddress: p | 0 | false | NoReason | -| test.c:21:24:21:24 | Address | test.c:21:24:21:24 | VariableAddress: p | 0 | true | NoReason | -| test.c:22:7:22:7 | Address | test.c:22:7:22:7 | Address | 0 | false | NoReason | -| test.c:22:7:22:7 | Address | test.c:22:7:22:7 | Address | 0 | true | NoReason | -| test.c:22:7:22:7 | Address | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | false | NoReason | -| test.c:22:7:22:7 | Address | test.c:22:7:22:7 | VariableAddress: definition of i | 0 | true | NoReason | -| test.c:23:7:23:11 | Address | test.c:23:7:23:7 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:7:23:11 | Address | test.c:23:7:23:7 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:7:23:11 | Address | test.c:23:7:23:11 | Address | 0 | false | NoReason | -| test.c:23:7:23:11 | Address | test.c:23:7:23:11 | Address | 0 | true | NoReason | -| test.c:23:7:23:11 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:7:23:11 | CopySource | file://:0:0:0:0 | 0 | 0 | true | NoReason | -| test.c:23:7:23:11 | CopySource | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:7:23:11 | CopySource | test.c:23:7:23:11 | CopySource | 0 | true | NoReason | -| test.c:23:7:23:11 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:7:23:11 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | true | NoReason | -| test.c:23:14:23:14 | Address | test.c:23:14:23:14 | Address | 0 | false | NoReason | -| test.c:23:14:23:14 | Address | test.c:23:14:23:14 | Address | 0 | true | NoReason | -| test.c:23:14:23:14 | Address | test.c:23:14:23:14 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:14:23:14 | Address | test.c:23:14:23:14 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:14:23:14 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | file://:0:0:0:0 | 0 | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | -| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | CopySource | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | Store: ... = ... | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:7:23:11 | Store: ... = ... | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:11:23:11 | Constant: 0 | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:11:23:11 | Constant: 0 | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | CopySource | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | CopySource | 1 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi: i | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:14 | Phi: i | 1 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:14:23:18 | Right | 1 | true | CompareLT: ... < ... | -| test.c:23:14:23:14 | Phi | test.c:23:18:23:18 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:14:23:14 | Phi | test.c:23:18:23:18 | Load: x | 1 | true | CompareLT: ... < ... | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Add: ... ++ | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Add: ... ++ | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | CopySource | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | CopySource | 1 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Left | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Left | 1 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Load: ... ++ | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Load: ... ++ | 1 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Right | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Store: ... ++ | 0 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:23:21:23:23 | Store: ... ++ | 0 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | -| test.c:23:14:23:14 | Phi | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | -| test.c:23:14:23:14 | Phi | test.c:26:11:26:11 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:14:23:18 | Condition | test.c:23:14:23:18 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:23:14:23:18 | Condition | test.c:23:14:23:18 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:23:14:23:18 | Condition | test.c:23:14:23:18 | Condition | 0 | false | NoReason | -| test.c:23:14:23:18 | Condition | test.c:23:14:23:18 | Condition | 0 | true | NoReason | -| test.c:23:14:23:18 | Left | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Load: i | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Load: i | 0 | true | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:14:23:18 | Left | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:14:23:18 | Left | 0 | true | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:18 | Left | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:18 | Left | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:18 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:23:14:23:18 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:23:14:23:18 | Right | test.c:23:14:23:18 | Right | 0 | false | NoReason | -| test.c:23:14:23:18 | Right | test.c:23:14:23:18 | Right | 0 | true | NoReason | -| test.c:23:14:23:18 | Right | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:18 | Right | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | -| test.c:23:14:23:18 | Right | test.c:23:18:23:18 | Load: x | 0 | false | NoReason | -| test.c:23:14:23:18 | Right | test.c:23:18:23:18 | Load: x | 0 | true | NoReason | -| test.c:23:14:23:18 | Right | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:23:14:23:18 | Right | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | -| test.c:23:18:23:18 | Address | test.c:23:18:23:18 | Address | 0 | false | NoReason | -| test.c:23:18:23:18 | Address | test.c:23:18:23:18 | Address | 0 | true | NoReason | -| test.c:23:18:23:18 | Address | test.c:23:18:23:18 | VariableAddress: x | 0 | false | NoReason | -| test.c:23:18:23:18 | Address | test.c:23:18:23:18 | VariableAddress: x | 0 | true | NoReason | -| test.c:23:18:23:18 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:23:18:23:18 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:23:18:23:18 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:23:18:23:18 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | -| test.c:23:18:23:18 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:23:18:23:18 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:21 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:21 | VariableAddress: i | 0 | false | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:21 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:21 | VariableAddress: i | 0 | true | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | false | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | false | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | false | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | false | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | true | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | true | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | true | NoReason | -| test.c:23:21:23:23 | Address | test.c:23:21:23:23 | Address | 0 | true | NoReason | -| test.c:23:21:23:23 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | CopySource | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:7:23:11 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:7:23:11 | Store: ... = ... | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:11:23:11 | Constant: 0 | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | CopySource | 1 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi: i | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:14 | Phi: i | 1 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | CopySource | test.c:23:14:23:18 | Right | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | CopySource | test.c:23:18:23:18 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | CopySource | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | CopySource | test.c:23:18:23:18 | Load: x | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Add: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Add: ... ++ | 0 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | CopySource | 1 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Left | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Left | 1 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Load: ... ++ | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Load: ... ++ | 1 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:23:21:23:23 | Right | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:24:7:24:7 | CopySource | 1 | false | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:24:7:24:7 | CopySource | 1 | true | NoReason | -| test.c:23:21:23:23 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | CopySource | test.c:26:11:26:11 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Left | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Left | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Left | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Left | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | Left | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | Left | 0 | true | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | Load: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:23:21:23:23 | Load: ... ++ | 0 | true | NoReason | -| test.c:23:21:23:23 | Left | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:23:21:23:23 | Left | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:23:21:23:23 | Left | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:23:21:23:23 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:23:21:23:23 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:23:21:23:23 | Right | test.c:23:21:23:23 | Constant: ... ++ | 0 | false | NoReason | -| test.c:23:21:23:23 | Right | test.c:23:21:23:23 | Constant: ... ++ | 0 | true | NoReason | -| test.c:23:21:23:23 | Right | test.c:23:21:23:23 | Right | 0 | false | NoReason | -| test.c:23:21:23:23 | Right | test.c:23:21:23:23 | Right | 0 | true | NoReason | -| test.c:24:5:24:5 | Address | test.c:24:5:24:5 | Address | 0 | false | NoReason | -| test.c:24:5:24:5 | Address | test.c:24:5:24:5 | Address | 0 | true | NoReason | -| test.c:24:5:24:5 | Address | test.c:24:5:24:5 | VariableAddress: p | 0 | false | NoReason | -| test.c:24:5:24:5 | Address | test.c:24:5:24:5 | VariableAddress: p | 0 | true | NoReason | -| test.c:24:5:24:5 | CopySource | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | -| test.c:24:5:24:5 | CopySource | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | -| test.c:24:5:24:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:5 | CopySource | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:5 | CopySource | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:8 | Address | test.c:24:5:24:8 | Address | 0 | false | NoReason | -| test.c:24:5:24:8 | Address | test.c:24:5:24:8 | Address | 0 | true | NoReason | -| test.c:24:5:24:8 | Address | test.c:24:5:24:8 | PointerAdd: access to array | 0 | false | NoReason | -| test.c:24:5:24:8 | Address | test.c:24:5:24:8 | PointerAdd: access to array | 0 | true | NoReason | -| test.c:24:5:24:8 | Left | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | -| test.c:24:5:24:8 | Left | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | -| test.c:24:5:24:8 | Left | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:8 | Left | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:8 | Left | test.c:24:5:24:5 | Load: p | 0 | false | NoReason | -| test.c:24:5:24:8 | Left | test.c:24:5:24:5 | Load: p | 0 | true | NoReason | -| test.c:24:5:24:8 | Left | test.c:24:5:24:8 | Left | 0 | false | NoReason | -| test.c:24:5:24:8 | Left | test.c:24:5:24:8 | Left | 0 | true | NoReason | -| test.c:24:5:24:8 | Left | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:8 | Left | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:8 | Right | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:24:5:24:8 | Right | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | -| test.c:24:5:24:8 | Right | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:24:5:24:8 | Right | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:24:5:24:8 | Right | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:8 | Right | test.c:24:5:24:8 | Right | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:24:5:24:8 | Right | 0 | true | NoReason | -| test.c:24:5:24:8 | Right | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:24:5:24:8 | Right | test.c:24:7:24:7 | Load: i | 0 | false | NoReason | -| test.c:24:5:24:8 | Right | test.c:24:7:24:7 | Load: i | 0 | true | NoReason | -| test.c:24:5:24:8 | Right | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | Address | test.c:24:7:24:7 | Address | 0 | false | NoReason | -| test.c:24:7:24:7 | Address | test.c:24:7:24:7 | Address | 0 | true | NoReason | -| test.c:24:7:24:7 | Address | test.c:24:7:24:7 | VariableAddress: i | 0 | false | NoReason | -| test.c:24:7:24:7 | Address | test.c:24:7:24:7 | VariableAddress: i | 0 | true | NoReason | -| test.c:24:7:24:7 | CopySource | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | CopySource | test.c:23:7:23:11 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:7:23:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:11:23:11 | Constant: 0 | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | CopySource | 0 | true | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | Phi | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:14:23:14 | Phi: i | 0 | true | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:14:23:18 | Right | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | CopySource | test.c:23:18:23:18 | Load: x | 0 | true | CompareLT: ... < ... | -| test.c:24:7:24:7 | CopySource | test.c:23:21:23:23 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:23:21:23:23 | CopySource | 0 | true | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:24:7:24:7 | CopySource | 0 | false | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:24:7:24:7 | CopySource | 0 | true | NoReason | -| test.c:24:7:24:7 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | Address | test.c:26:7:26:7 | VariableAddress: i | 0 | false | NoReason | -| test.c:26:7:26:11 | Address | test.c:26:7:26:7 | VariableAddress: i | 0 | true | NoReason | -| test.c:26:7:26:11 | Address | test.c:26:7:26:11 | Address | 0 | false | NoReason | -| test.c:26:7:26:11 | Address | test.c:26:7:26:11 | Address | 0 | true | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | CopySource | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | CopySource | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | CopySource | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | CopySource | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:7:26:11 | CopySource | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:26:7:26:11 | CopySource | 0 | true | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:7:26:11 | CopySource | test.c:26:11:26:11 | Load: x | 0 | true | NoReason | -| test.c:26:11:26:11 | Address | test.c:26:11:26:11 | Address | 0 | false | NoReason | -| test.c:26:11:26:11 | Address | test.c:26:11:26:11 | Address | 0 | true | NoReason | -| test.c:26:11:26:11 | Address | test.c:26:11:26:11 | VariableAddress: x | 0 | false | NoReason | -| test.c:26:11:26:11 | Address | test.c:26:11:26:11 | VariableAddress: x | 0 | true | NoReason | -| test.c:26:11:26:11 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:11:26:11 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:26:11:26:11 | CopySource | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | CopySource | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | CopySource | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | CopySource | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:11:26:11 | CopySource | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | -| test.c:26:11:26:11 | CopySource | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | CopySource | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:11:26:11 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:11:26:11 | CopySource | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Address | test.c:26:14:26:14 | Address | 0 | false | NoReason | -| test.c:26:14:26:14 | Address | test.c:26:14:26:14 | Address | 0 | true | NoReason | -| test.c:26:14:26:14 | Address | test.c:26:14:26:14 | VariableAddress: i | 0 | false | NoReason | -| test.c:26:14:26:14 | Address | test.c:26:14:26:14 | VariableAddress: i | 0 | true | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | CopySource | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | -| test.c:26:14:26:14 | Phi | file://:0:0:0:0 | 0 | 2 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:21:15:21:15 | InitializeParameter: x | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:23:14:23:14 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:14:26:14 | Phi | test.c:23:14:23:14 | Load: i | 1 | true | CompareLT: ... < ... | -| test.c:26:14:26:14 | Phi | test.c:23:14:23:14 | Phi: i | 1 | true | CompareLT: ... < ... | -| test.c:26:14:26:14 | Phi | test.c:23:14:23:18 | Left | 1 | true | CompareLT: ... < ... | -| test.c:26:14:26:14 | Phi | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:23:18:23:18 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:23:18:23:18 | CopySource | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:23:21:23:23 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:14:26:14 | Phi | test.c:24:7:24:7 | CopySource | 1 | true | CompareLT: ... < ... | -| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | CopySource | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | Store: ... = ... | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:7:26:11 | Store: ... = ... | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | CopySource | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | Load: x | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:11:26:11 | Load: x | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | CopySource | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | CopySource | 1 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi: i | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:14 | Phi: i | 1 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:14:26:18 | Right | 2 | false | CompareGT: ... > ... | -| test.c:26:14:26:14 | Phi | test.c:26:18:26:18 | Constant: 0 | 2 | false | CompareGT: ... > ... | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Add: ... ++ | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Add: ... ++ | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Constant: ... ++ | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | CopySource | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | CopySource | 1 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Left | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Left | 1 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Load: ... ++ | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Load: ... ++ | 1 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Right | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Store: ... ++ | 0 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:26:21:26:23 | Store: ... ++ | 0 | true | NoReason | -| test.c:26:14:26:14 | Phi | test.c:27:7:27:7 | CopySource | 1 | false | NoReason | -| test.c:26:14:26:14 | Phi | test.c:27:7:27:7 | CopySource | 1 | true | NoReason | -| test.c:26:14:26:18 | Condition | test.c:26:14:26:18 | CompareGT: ... > ... | 0 | false | NoReason | -| test.c:26:14:26:18 | Condition | test.c:26:14:26:18 | CompareGT: ... > ... | 0 | true | NoReason | -| test.c:26:14:26:18 | Condition | test.c:26:14:26:18 | Condition | 0 | false | NoReason | -| test.c:26:14:26:18 | Condition | test.c:26:14:26:18 | Condition | 0 | true | NoReason | -| test.c:26:14:26:18 | Left | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Load: i | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Load: i | 0 | true | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:14:26:18 | Left | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:14:26:18 | Left | 0 | true | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:18 | Left | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:26:14:26:18 | Left | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:26:14:26:18 | Right | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.c:26:14:26:18 | Right | file://:0:0:0:0 | 0 | 0 | true | NoReason | -| test.c:26:14:26:18 | Right | test.c:26:14:26:18 | Right | 0 | false | NoReason | -| test.c:26:14:26:18 | Right | test.c:26:14:26:18 | Right | 0 | true | NoReason | -| test.c:26:14:26:18 | Right | test.c:26:18:26:18 | Constant: 0 | 0 | false | NoReason | -| test.c:26:14:26:18 | Right | test.c:26:18:26:18 | Constant: 0 | 0 | true | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:21 | VariableAddress: i | 0 | false | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:21 | VariableAddress: i | 0 | false | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:21 | VariableAddress: i | 0 | true | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:21 | VariableAddress: i | 0 | true | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | false | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | false | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | false | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | false | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | true | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | true | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | true | NoReason | -| test.c:26:21:26:23 | Address | test.c:26:21:26:23 | Address | 0 | true | NoReason | -| test.c:26:21:26:23 | CopySource | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | CopySource | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | CopySource | file://:0:0:0:0 | 0 | 2 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:23:18:23:18 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:7:26:11 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:7:26:11 | Store: ... = ... | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:11:26:11 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:11:26:11 | Load: x | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | CopySource | 1 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi: i | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:14 | Phi: i | 1 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | CopySource | test.c:26:14:26:18 | Right | 2 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | CopySource | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | CopySource | test.c:26:18:26:18 | Constant: 0 | 2 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Add: ... ++ | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Add: ... ++ | 0 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Constant: ... ++ | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | CopySource | 1 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Left | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Left | 1 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Load: ... ++ | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Load: ... ++ | 1 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:26:21:26:23 | Right | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:27:7:27:7 | CopySource | 1 | false | NoReason | -| test.c:26:21:26:23 | CopySource | test.c:27:7:27:7 | CopySource | 1 | true | NoReason | -| test.c:26:21:26:23 | Left | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Left | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Left | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | -| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | Left | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | Left | 0 | true | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | Load: ... ++ | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:26:21:26:23 | Load: ... ++ | 0 | true | NoReason | -| test.c:26:21:26:23 | Left | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:26:21:26:23 | Left | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:26:21:26:23 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:26:21:26:23 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:26:21:26:23 | Right | test.c:26:21:26:23 | Constant: ... ++ | 0 | false | NoReason | -| test.c:26:21:26:23 | Right | test.c:26:21:26:23 | Constant: ... ++ | 0 | true | NoReason | -| test.c:26:21:26:23 | Right | test.c:26:21:26:23 | Right | 0 | false | NoReason | -| test.c:26:21:26:23 | Right | test.c:26:21:26:23 | Right | 0 | true | NoReason | -| test.c:27:5:27:5 | Address | test.c:27:5:27:5 | Address | 0 | false | NoReason | -| test.c:27:5:27:5 | Address | test.c:27:5:27:5 | Address | 0 | true | NoReason | -| test.c:27:5:27:5 | Address | test.c:27:5:27:5 | VariableAddress: p | 0 | false | NoReason | -| test.c:27:5:27:5 | Address | test.c:27:5:27:5 | VariableAddress: p | 0 | true | NoReason | -| test.c:27:5:27:5 | CopySource | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | -| test.c:27:5:27:5 | CopySource | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | -| test.c:27:5:27:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:5 | CopySource | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | -| test.c:27:5:27:5 | CopySource | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:5 | CopySource | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | -| test.c:27:5:27:8 | Address | test.c:27:5:27:8 | Address | 0 | false | NoReason | -| test.c:27:5:27:8 | Address | test.c:27:5:27:8 | Address | 0 | true | NoReason | -| test.c:27:5:27:8 | Address | test.c:27:5:27:8 | PointerAdd: access to array | 0 | false | NoReason | -| test.c:27:5:27:8 | Address | test.c:27:5:27:8 | PointerAdd: access to array | 0 | true | NoReason | -| test.c:27:5:27:8 | Left | test.c:21:24:21:24 | InitializeParameter: p | 0 | false | NoReason | -| test.c:27:5:27:8 | Left | test.c:21:24:21:24 | InitializeParameter: p | 0 | true | NoReason | -| test.c:27:5:27:8 | Left | test.c:24:5:24:5 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:8 | Left | test.c:24:5:24:5 | CopySource | 0 | true | NoReason | -| test.c:27:5:27:8 | Left | test.c:27:5:27:5 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:8 | Left | test.c:27:5:27:5 | CopySource | 0 | true | NoReason | -| test.c:27:5:27:8 | Left | test.c:27:5:27:5 | Load: p | 0 | false | NoReason | -| test.c:27:5:27:8 | Left | test.c:27:5:27:5 | Load: p | 0 | true | NoReason | -| test.c:27:5:27:8 | Left | test.c:27:5:27:8 | Left | 0 | false | NoReason | -| test.c:27:5:27:8 | Left | test.c:27:5:27:8 | Left | 0 | true | NoReason | -| test.c:27:5:27:8 | Right | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | -| test.c:27:5:27:8 | Right | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | -| test.c:27:5:27:8 | Right | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | -| test.c:27:5:27:8 | Right | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:27:5:27:8 | Right | test.c:27:5:27:8 | Right | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:27:5:27:8 | Right | 0 | true | NoReason | -| test.c:27:5:27:8 | Right | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:27:5:27:8 | Right | test.c:27:7:27:7 | Load: i | 0 | false | NoReason | -| test.c:27:5:27:8 | Right | test.c:27:7:27:7 | Load: i | 0 | true | NoReason | -| test.c:27:7:27:7 | Address | test.c:27:7:27:7 | Address | 0 | false | NoReason | -| test.c:27:7:27:7 | Address | test.c:27:7:27:7 | Address | 0 | true | NoReason | -| test.c:27:7:27:7 | Address | test.c:27:7:27:7 | VariableAddress: i | 0 | false | NoReason | -| test.c:27:7:27:7 | Address | test.c:27:7:27:7 | VariableAddress: i | 0 | true | NoReason | -| test.c:27:7:27:7 | CopySource | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | -| test.c:27:7:27:7 | CopySource | test.c:21:15:21:15 | InitializeParameter: x | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:23:18:23:18 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:7:26:11 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:7:26:11 | Store: ... = ... | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:11:26:11 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:11:26:11 | Load: x | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | CopySource | 0 | true | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | Phi | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:14:26:14 | Phi: i | 0 | true | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:14:26:18 | Right | 1 | false | CompareGT: ... > ... | -| test.c:27:7:27:7 | CopySource | test.c:26:18:26:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | -| test.c:27:7:27:7 | CopySource | test.c:26:21:26:23 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:26:21:26:23 | CopySource | 0 | true | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:27:7:27:7 | CopySource | 0 | false | NoReason | -| test.c:27:7:27:7 | CopySource | test.c:27:7:27:7 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:9 | Address | test.c:32:5:32:9 | Address | 0 | false | NoReason | -| test.c:32:5:32:9 | Address | test.c:32:5:32:9 | Address | 0 | true | NoReason | -| test.c:32:5:32:9 | Address | test.c:32:5:32:9 | VariableAddress: test4 | 0 | false | NoReason | -| test.c:32:5:32:9 | Address | test.c:32:5:32:9 | VariableAddress: test4 | 0 | true | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:32:5:32:9 | UnmodeledUse | 0 | false | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:32:5:32:9 | UnmodeledUse | 0 | true | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:5:34:25 | CopySource | 0 | false | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:5:34:25 | CopySource | 0 | true | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:5:34:25 | Store: ... = ... | 0 | false | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:5:34:25 | Store: ... = ... | 0 | true | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:14:34:25 | Add: ... + ... | 0 | false | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:14:34:25 | Add: ... + ... | 0 | true | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:14:34:25 | Left | 1 | false | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:14:34:25 | Left | 1 | true | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:15:34:20 | Load: * ... | 1 | false | NoReason | -| test.c:32:5:32:9 | UnmodeledUse | test.c:34:15:34:20 | Load: * ... | 1 | true | NoReason | -| test.c:32:16:32:20 | Address | test.c:32:16:32:20 | Address | 0 | false | NoReason | -| test.c:32:16:32:20 | Address | test.c:32:16:32:20 | Address | 0 | true | NoReason | -| test.c:32:16:32:20 | Address | test.c:32:16:32:20 | VariableAddress: begin | 0 | false | NoReason | -| test.c:32:16:32:20 | Address | test.c:32:16:32:20 | VariableAddress: begin | 0 | true | NoReason | -| test.c:32:28:32:30 | Address | test.c:32:28:32:30 | Address | 0 | false | NoReason | -| test.c:32:28:32:30 | Address | test.c:32:28:32:30 | Address | 0 | true | NoReason | -| test.c:32:28:32:30 | Address | test.c:32:28:32:30 | VariableAddress: end | 0 | false | NoReason | -| test.c:32:28:32:30 | Address | test.c:32:28:32:30 | VariableAddress: end | 0 | true | NoReason | -| test.c:33:10:33:14 | Address | test.c:33:10:33:14 | Address | 0 | false | NoReason | -| test.c:33:10:33:14 | Address | test.c:33:10:33:14 | Address | 0 | true | NoReason | -| test.c:33:10:33:14 | Address | test.c:33:10:33:14 | VariableAddress: begin | 0 | false | NoReason | -| test.c:33:10:33:14 | Address | test.c:33:10:33:14 | VariableAddress: begin | 0 | true | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi | test.c:32:16:32:20 | InitializeParameter: begin | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi | test.c:32:16:32:20 | InitializeParameter: begin | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi | test.c:33:10:33:14 | Phi | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi | test.c:33:10:33:14 | Phi | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi | test.c:33:10:33:14 | Phi | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi | test.c:33:10:33:14 | Phi | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | true | NoReason | -| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | Store: ... ++ | 0 | false | NoReason | -| test.c:33:10:33:14 | Phi | test.c:35:5:35:11 | Store: ... ++ | 0 | true | NoReason | -| test.c:33:10:33:20 | Condition | test.c:33:10:33:20 | CompareLT: ... < ... | 0 | false | NoReason | -| test.c:33:10:33:20 | Condition | test.c:33:10:33:20 | CompareLT: ... < ... | 0 | true | NoReason | -| test.c:33:10:33:20 | Condition | test.c:33:10:33:20 | Condition | 0 | false | NoReason | -| test.c:33:10:33:20 | Condition | test.c:33:10:33:20 | Condition | 0 | true | NoReason | -| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | Load: begin | 0 | false | NoReason | -| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | Load: begin | 0 | true | NoReason | -| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:33:10:33:20 | Left | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:33:10:33:20 | Left | test.c:33:10:33:20 | Left | 0 | false | NoReason | -| test.c:33:10:33:20 | Left | test.c:33:10:33:20 | Left | 0 | true | NoReason | -| test.c:33:10:33:20 | Left | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:20 | Left | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:20 | Left | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:20 | Left | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:20 | Left | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:20 | Left | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:20 | Right | test.c:32:28:32:30 | InitializeParameter: end | 0 | false | NoReason | -| test.c:33:10:33:20 | Right | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | NoReason | -| test.c:33:10:33:20 | Right | test.c:33:10:33:20 | Right | 0 | false | NoReason | -| test.c:33:10:33:20 | Right | test.c:33:10:33:20 | Right | 0 | true | NoReason | -| test.c:33:10:33:20 | Right | test.c:33:18:33:20 | CopySource | 0 | false | NoReason | -| test.c:33:10:33:20 | Right | test.c:33:18:33:20 | CopySource | 0 | true | NoReason | -| test.c:33:10:33:20 | Right | test.c:33:18:33:20 | Load: end | 0 | false | NoReason | -| test.c:33:10:33:20 | Right | test.c:33:18:33:20 | Load: end | 0 | true | NoReason | -| test.c:33:18:33:20 | Address | test.c:33:18:33:20 | Address | 0 | false | NoReason | -| test.c:33:18:33:20 | Address | test.c:33:18:33:20 | Address | 0 | true | NoReason | -| test.c:33:18:33:20 | Address | test.c:33:18:33:20 | VariableAddress: end | 0 | false | NoReason | -| test.c:33:18:33:20 | Address | test.c:33:18:33:20 | VariableAddress: end | 0 | true | NoReason | -| test.c:33:18:33:20 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | false | NoReason | -| test.c:33:18:33:20 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | NoReason | -| test.c:33:18:33:20 | CopySource | test.c:33:18:33:20 | CopySource | 0 | false | NoReason | -| test.c:33:18:33:20 | CopySource | test.c:33:18:33:20 | CopySource | 0 | true | NoReason | -| test.c:34:5:34:25 | Address | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:34:5:34:25 | Address | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:34:5:34:25 | Address | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:34:5:34:25 | Address | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:34:5:34:25 | Address | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:34:5:34:25 | Address | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:34:5:34:25 | Address | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:34:5:34:25 | Address | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:34:5:34:25 | Address | test.c:34:5:34:25 | Address | 0 | false | NoReason | -| test.c:34:5:34:25 | Address | test.c:34:5:34:25 | Address | 0 | true | NoReason | -| test.c:34:5:34:25 | Address | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:34:5:34:25 | Address | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:34:5:34:25 | Address | test.c:34:6:34:10 | Load: begin | 0 | false | NoReason | -| test.c:34:5:34:25 | Address | test.c:34:6:34:10 | Load: begin | 0 | true | NoReason | -| test.c:34:5:34:25 | Address | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:34:5:34:25 | Address | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:34:5:34:25 | Address | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:34:5:34:25 | Address | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:34:5:34:25 | CopySource | test.c:34:5:34:25 | CopySource | 0 | false | NoReason | -| test.c:34:5:34:25 | CopySource | test.c:34:5:34:25 | CopySource | 0 | true | NoReason | -| test.c:34:5:34:25 | CopySource | test.c:34:14:34:25 | Add: ... + ... | 0 | false | NoReason | -| test.c:34:5:34:25 | CopySource | test.c:34:14:34:25 | Add: ... + ... | 0 | true | NoReason | -| test.c:34:5:34:25 | CopySource | test.c:34:14:34:25 | Left | 1 | false | NoReason | -| test.c:34:5:34:25 | CopySource | test.c:34:14:34:25 | Left | 1 | true | NoReason | -| test.c:34:5:34:25 | CopySource | test.c:34:15:34:20 | Load: * ... | 1 | false | NoReason | -| test.c:34:5:34:25 | CopySource | test.c:34:15:34:20 | Load: * ... | 1 | true | NoReason | -| test.c:34:6:34:10 | Address | test.c:34:6:34:10 | Address | 0 | false | NoReason | -| test.c:34:6:34:10 | Address | test.c:34:6:34:10 | Address | 0 | true | NoReason | -| test.c:34:6:34:10 | Address | test.c:34:6:34:10 | VariableAddress: begin | 0 | false | NoReason | -| test.c:34:6:34:10 | Address | test.c:34:6:34:10 | VariableAddress: begin | 0 | true | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:34:6:34:10 | CopySource | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:34:6:34:10 | CopySource | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:34:6:34:10 | CopySource | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:34:6:34:10 | CopySource | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:34:6:34:10 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:34:14:34:25 | Left | test.c:34:14:34:25 | Left | 0 | false | NoReason | -| test.c:34:14:34:25 | Left | test.c:34:14:34:25 | Left | 0 | true | NoReason | -| test.c:34:14:34:25 | Left | test.c:34:15:34:20 | Load: * ... | 0 | false | NoReason | -| test.c:34:14:34:25 | Left | test.c:34:15:34:20 | Load: * ... | 0 | true | NoReason | -| test.c:34:14:34:25 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:34:14:34:25 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:34:14:34:25 | Right | test.c:34:14:34:25 | Right | 0 | false | NoReason | -| test.c:34:14:34:25 | Right | test.c:34:14:34:25 | Right | 0 | true | NoReason | -| test.c:34:14:34:25 | Right | test.c:34:25:34:25 | Constant: 1 | 0 | false | NoReason | -| test.c:34:14:34:25 | Right | test.c:34:25:34:25 | Constant: 1 | 0 | true | NoReason | -| test.c:34:15:34:20 | Address | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:34:15:34:20 | Address | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:34:15:34:20 | Address | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:34:15:34:20 | Address | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:34:15:34:20 | Address | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:34:15:34:20 | Address | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:34:15:34:20 | Address | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:34:15:34:20 | Address | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:34:15:34:20 | Address | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:34:15:34:20 | Address | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:34:15:34:20 | Address | test.c:34:15:34:20 | Address | 0 | false | NoReason | -| test.c:34:15:34:20 | Address | test.c:34:15:34:20 | Address | 0 | true | NoReason | -| test.c:34:15:34:20 | Address | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:34:15:34:20 | Address | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:34:15:34:20 | Address | test.c:34:16:34:20 | Load: begin | 0 | false | NoReason | -| test.c:34:15:34:20 | Address | test.c:34:16:34:20 | Load: begin | 0 | true | NoReason | -| test.c:34:15:34:20 | Address | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:34:15:34:20 | Address | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:34:16:34:20 | Address | test.c:34:16:34:20 | Address | 0 | false | NoReason | -| test.c:34:16:34:20 | Address | test.c:34:16:34:20 | Address | 0 | true | NoReason | -| test.c:34:16:34:20 | Address | test.c:34:16:34:20 | VariableAddress: begin | 0 | false | NoReason | -| test.c:34:16:34:20 | Address | test.c:34:16:34:20 | VariableAddress: begin | 0 | true | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:34:16:34:20 | CopySource | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:34:16:34:20 | CopySource | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:34:16:34:20 | CopySource | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:34:16:34:20 | CopySource | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:34:16:34:20 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:9 | VariableAddress: begin | 0 | false | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:9 | VariableAddress: begin | 0 | false | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:9 | VariableAddress: begin | 0 | true | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:9 | VariableAddress: begin | 0 | true | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | false | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | false | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | false | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | false | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | true | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | true | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | true | NoReason | -| test.c:35:5:35:11 | Address | test.c:35:5:35:11 | Address | 0 | true | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | CopySource | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | CopySource | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | CopySource | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | CopySource | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | false | NoReason | -| test.c:35:5:35:11 | CopySource | test.c:35:5:35:11 | PointerAdd: ... ++ | 0 | true | NoReason | -| test.c:35:5:35:11 | Left | test.c:32:28:32:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | Left | test.c:33:10:33:14 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | Left | test.c:33:10:33:14 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Left | test.c:33:10:33:14 | Phi: begin | 0 | false | NoReason | -| test.c:35:5:35:11 | Left | test.c:33:10:33:14 | Phi: begin | 0 | true | NoReason | -| test.c:35:5:35:11 | Left | test.c:33:10:33:20 | Right | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | Left | test.c:33:18:33:20 | CopySource | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | Left | test.c:33:18:33:20 | Load: end | 0 | true | CompareLT: ... < ... | -| test.c:35:5:35:11 | Left | test.c:34:6:34:10 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | Left | test.c:34:6:34:10 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Left | test.c:34:16:34:20 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | Left | test.c:34:16:34:20 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | CopySource | 0 | false | NoReason | -| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | CopySource | 0 | true | NoReason | -| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | Left | 0 | false | NoReason | -| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | Left | 0 | true | NoReason | -| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | Load: ... ++ | 0 | false | NoReason | -| test.c:35:5:35:11 | Left | test.c:35:5:35:11 | Load: ... ++ | 0 | true | NoReason | -| test.c:35:5:35:11 | Right | file://:0:0:0:0 | 0 | 1 | false | NoReason | -| test.c:35:5:35:11 | Right | file://:0:0:0:0 | 0 | 1 | true | NoReason | -| test.c:35:5:35:11 | Right | test.c:35:5:35:11 | Constant: ... ++ | 0 | false | NoReason | -| test.c:35:5:35:11 | Right | test.c:35:5:35:11 | Constant: ... ++ | 0 | true | NoReason | -| test.c:35:5:35:11 | Right | test.c:35:5:35:11 | Right | 0 | false | NoReason | -| test.c:35:5:35:11 | Right | test.c:35:5:35:11 | Right | 0 | true | NoReason | +| test.cpp:8:9:8:9 | Load: y | test.cpp:6:15:6:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.cpp:10:10:10:10 | Load: x | test.cpp:6:15:6:15 | InitializeParameter: x | 0 | false | NoReason | +| test.cpp:10:10:10:10 | Load: x | test.cpp:6:22:6:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.cpp:10:10:10:10 | Load: x | test.cpp:6:22:6:22 | InitializeParameter: y | 0 | false | NoReason | +| test.cpp:16:9:16:9 | Load: y | test.cpp:14:15:14:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.cpp:18:9:18:9 | Load: x | test.cpp:14:22:14:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | +| test.cpp:20:10:20:10 | Load: x | test.cpp:14:15:14:15 | InitializeParameter: x | -2 | false | NoReason | +| test.cpp:20:10:20:10 | Load: x | test.cpp:14:22:14:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | +| test.cpp:26:14:26:14 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.cpp:26:21:26:23 | Load: ... ++ | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.cpp:26:21:26:23 | Load: ... ++ | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.cpp:27:7:27:7 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | +| test.cpp:27:7:27:7 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | +| test.cpp:29:14:29:14 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | NoReason | +| test.cpp:29:21:29:23 | Load: ... -- | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | +| test.cpp:29:21:29:23 | Load: ... -- | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | NoReason | +| test.cpp:30:7:30:7 | Load: i | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | +| test.cpp:30:7:30:7 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | NoReason | +| test.cpp:37:6:37:10 | Load: begin | test.cpp:35:28:35:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.cpp:37:16:37:20 | Load: begin | test.cpp:35:28:35:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.cpp:38:5:38:11 | Load: ... ++ | test.cpp:35:28:35:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | +| test.cpp:44:13:44:13 | Load: y | test.cpp:42:29:42:29 | InitializeParameter: z | 0 | true | CompareLT: ... < ... | +| test.cpp:45:12:45:12 | Load: x | test.cpp:42:22:42:22 | InitializeParameter: y | 0 | true | CompareLT: ... < ... | +| test.cpp:45:12:45:12 | Load: x | test.cpp:42:29:42:29 | InitializeParameter: z | 0 | true | CompareLT: ... < ... | +| test.cpp:49:9:49:9 | Load: y | test.cpp:42:15:42:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | +| test.cpp:50:12:50:12 | Load: x | test.cpp:42:22:42:22 | InitializeParameter: y | 0 | true | CompareLT: ... < ... | diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql index 06e9091791e8..69ff8461ba16 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql @@ -3,10 +3,14 @@ import semmle.code.cpp.ir.IR import semmle.code.cpp.controlflow.IRGuards import semmle.code.cpp.ir.ValueNumbering -query predicate instructionBounds(Instruction i, Bound b, int delta, boolean upper, Reason reason) { - boundedInstruction(i, b, delta, upper, reason) -} - -query predicate operandBounds(Operand op, Bound b, int delta, boolean upper, Reason reason) { - boundedOperand(op, b, delta, upper, reason) +query predicate instructionBounds(Instruction i, Bound b, int delta, boolean upper, Reason reason) +{ + i instanceof LoadInstruction and + boundedInstruction(i, b, delta, upper, reason) and + ( + b.(InstructionBound).getInstruction() instanceof InitializeParameterInstruction or + b.(InstructionBound).getInstruction() instanceof CallInstruction or + b instanceof ZeroBound + ) and + not valueNumber(b.(InstructionBound).getInstruction()) = valueNumber(i) } diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp similarity index 62% rename from cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c rename to cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp index 43c96461be58..365d7a556763 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.c +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp @@ -1,4 +1,7 @@ +void sink(...); +int source(); + // Guards, inference, critical edges int test1(int x, int y) { if (x < y) { @@ -18,12 +21,12 @@ int test2(int x, int y) { } // for loops -int test3(int x, void *p) { +int test3(int x, int *p) { int i; for(i = 0; i < x; i++) { p[i]; } - for(i = x; i > 0; i++) { + for(i = x; i > 0; i--) { p[i]; } } @@ -36,3 +39,15 @@ int test4(int *begin, int *end) { } } +int test5(int x, int y, int z) { + if (y < z) { + if (x < y) { + sink(x); + } + } + if (x < y) { + if (y < z) { + sink(x); // x < z is not inferred here + } + } +} From 89148a9ec7b92c10d44d041de5db1fee44ff3fb8 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 12 Dec 2018 16:50:26 -0800 Subject: [PATCH 05/13] C++: respond to further PR comments --- .../semmle/code/cpp/controlflow/IRGuards.qll | 2 +- .../aliased_ssa/Instruction.qll | 3 + .../aliased_ssa/gvn/ValueNumbering.qll | 11 ++++ .../semmle/code/cpp/rangeanalysis/Bound.qll | 26 +------- .../code/cpp/rangeanalysis/RangeAnalysis.qll | 66 ++++++++----------- .../code/cpp/rangeanalysis/RangeUtils.qll | 17 +++++ .../rangeanalysis/RangeAnalysis.expected | 65 ++++++++++-------- .../rangeanalysis/RangeAnalysis.ql | 25 ++++--- .../rangeanalysis/rangeanalysis/test.cpp | 35 ++++++++-- 9 files changed, 146 insertions(+), 104 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll index 2396987f6a21..5e2d4bd14508 100644 --- a/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/src/semmle/code/cpp/controlflow/IRGuards.qll @@ -295,7 +295,7 @@ class IRGuardCondition extends Instruction { * return x; * ``` */ - predicate controlsEdgeDirectly(ConditionalBranchInstruction branch, IRBlock succ, boolean testIsTrue) { + predicate hasBranchEdge(ConditionalBranchInstruction branch, IRBlock succ, boolean testIsTrue) { branch.getCondition() = this and ( testIsTrue = true and diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll index 449d7544a04b..dcad960d8dfd 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll @@ -751,6 +751,9 @@ class BinaryInstruction extends Instruction { result = getAnOperand().(RightOperand).getDefinitionInstruction() } + /** + * Holds if this instruction's operands are `op1` and `op2`, in either order. + */ final predicate hasOperands(Operand op1, Operand op2) { op1 = getAnOperand().(LeftOperand) and op2 = getAnOperand().(RightOperand) or diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll index d5c6752479eb..9a14a8288fa8 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll @@ -83,6 +83,10 @@ class ValueNumber extends TValueNumber { instr order by instr.getBlock().getDisplayIndex(), instr.getDisplayIndexInBlock() ) } + + final Operand getAUse() { + this = valueNumber(result.getDefinitionInstruction()) + } } /** @@ -220,6 +224,13 @@ ValueNumber valueNumber(Instruction instr) { ) } +/** + * Gets the value number assigned to `instr`, if any. Returns at most one result. + */ +ValueNumber valueNumberOfOperand(Operand op) { + result = valueNumber(op.getDefinitionInstruction()) +} + /** * Gets the value number assigned to `instr`, if any, unless that instruction is assigned a unique * value number. diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll index af70cad717ef..7bac85a1cb3a 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll @@ -6,10 +6,6 @@ private newtype TBound = TBoundInstruction(Instruction i) { i.getResultType() instanceof IntegralType or i.getResultType() instanceof PointerType - } or - TBoundOperand(Operand o) { - o.getDefinitionInstruction().getResultType() instanceof IntegralType or - o.getDefinitionInstruction().getResultType() instanceof PointerType } /** @@ -52,24 +48,4 @@ class InstructionBound extends Bound, TBoundInstruction { override predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { getInstruction().getLocation().hasLocationInfo(path, sl, sc, el, ec) } -} - -/** - * A bound corresponding to the value of an `Operand`. - */ -class OperandBound extends Bound, TBoundOperand { - Operand getOperand() { - this = TBoundOperand(result) - } - - override Instruction getInstruction(int delta) { - this = TBoundOperand(result.getAUse()) and - delta = 0 - } - - override string toString() { result = getOperand().toString() } - - override predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - getOperand().getLocation().hasLocationInfo(path, sl, sc, el, ec) - } -} +} \ No newline at end of file diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index dc6adcbfdad0..ad5d83bbbf4d 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -124,14 +124,10 @@ import RangeAnalysisPublic * - `isEq = true` : `i == bound + delta` * - `isEq = false` : `i != bound + delta` */ -private IRGuardCondition eqFlowCond(Operand op, Operand bound, int delta, +private IRGuardCondition eqFlowCond(ValueNumber vn, Operand bound, int delta, boolean isEq, boolean testIsTrue) { - exists(Operand compared | - result.ensuresEq(compared, bound, delta, op.getInstruction().getBlock(), isEq) and - result.controls(bound.getInstruction().getBlock(), testIsTrue) and - valueNumber(compared.getDefinitionInstruction()) = valueNumber (op.getDefinitionInstruction()) - ) + result.comparesEq(vn.getAUse(), bound, delta, isEq, testIsTrue) } /** @@ -147,8 +143,9 @@ private predicate boundFlowStepSsa( reason = TNoReason() and delta = 0 or*/ - exists(IRGuardCondition guard | - guard = boundFlowCond(op2, op1, delta, upper, _) and + exists(IRGuardCondition guard, boolean testIsTrue | + guard = boundFlowCond(valueNumberOfOperand(op2), op1, delta, upper, testIsTrue) and + guard.controls(op2.getInstruction().getBlock(), testIsTrue) and reason = TCondReason(guard) ) } @@ -160,37 +157,19 @@ private predicate boundFlowStepSsa( * - `upper = true` : `op <= bound + delta` * - `upper = false` : `op >= bound + delta` */ -private IRGuardCondition boundFlowCond(NonPhiOperand op, NonPhiOperand bound, int delta, boolean upper, +private IRGuardCondition boundFlowCond(ValueNumber vn, NonPhiOperand bound, int delta, boolean upper, boolean testIsTrue) { - exists(Operand compared | - result.comparesLt(compared, bound, delta, upper, testIsTrue) and - result.controls(op.getInstruction().getBlock(), testIsTrue) and - valueNumber(compared.getDefinitionInstruction()) = valueNumber(op.getDefinitionInstruction()) - ) - // TODO: strengthening through modulus library -} - -/** - * Gets a condition that tests whether `op` is bounded by `bound + delta`. - * - * - `upper = true` : `op <= bound + delta` - * - `upper = false` : `op >= bound + delta` - */ -private IRGuardCondition boundFlowCondPhi(PhiOperand op, NonPhiOperand bound, int delta, boolean upper, - boolean testIsTrue) -{ - exists(Operand compared | - result.comparesLt(compared, bound, delta, upper, testIsTrue) and - result.controlsEdgeDirectly(op.getPredecessorBlock().getLastInstruction(), op.getInstruction().getBlock(), testIsTrue) and - valueNumber(compared.getDefinitionInstruction()) = valueNumber (op.getDefinitionInstruction()) + exists(int d | + result.comparesLt(vn.getAUse(), bound, d, upper, testIsTrue) and + // strengthen from x < y to x <= y-1 + if upper = true + then delta = d-1 + else delta = d ) or - exists(Operand compared | - result.comparesLt(compared, bound, delta, upper, testIsTrue) and - result.controls(op.getPredecessorBlock(), testIsTrue) and - valueNumber(compared.getDefinitionInstruction()) = valueNumber (op.getDefinitionInstruction()) - ) + result = eqFlowCond(vn, bound, delta, true, testIsTrue) and + (upper = true or upper = false) // TODO: strengthening through modulus library } @@ -239,6 +218,9 @@ private predicate safeCast(IntegralType fromtyp, IntegralType totyp) { private class SafeCastInstruction extends ConvertInstruction { SafeCastInstruction() { safeCast(getResultType(), getOperand().getResultType()) + or + getResultType() instanceof PointerType and + getOperand().getResultType() instanceof PointerType } } @@ -402,8 +384,13 @@ private predicate boundFlowStepPhi( reason = TNoReason() and delta = 0 or - exists(IRGuardCondition guard | - guard = boundFlowCondPhi(op2, op1, delta, upper, _) and + exists(IRGuardCondition guard, boolean testIsTrue | + guard = boundFlowCond(valueNumberOfOperand(op2), op1, delta, upper, testIsTrue) and + ( + guard.hasBranchEdge(op2.getPredecessorBlock().getLastInstruction(), op2.getInstruction().getBlock(), testIsTrue) + or + guard.controls(op2.getPredecessorBlock(), testIsTrue) + ) and reason = TCondReason(guard) ) } @@ -472,12 +459,10 @@ private int weakenDelta(boolean upper, int delta) { private predicate boundedPhiInp( PhiInstruction phi, PhiOperand op, Bound b, int delta, boolean upper, boolean fromBackEdge, - int origdelta, Reason reason + int origdelta, Reason reason ) { phi.getAnOperand() = op and exists(int d, boolean fromBackEdge0 | - boundedInstruction(op.getDefinitionInstruction(), b, d, upper, fromBackEdge0, origdelta, reason) - or boundedPhiOperand(op, b, d, upper, fromBackEdge0, origdelta, reason) or b.(InstructionBound).getInstruction() = op.getDefinitionInstruction() and @@ -564,6 +549,7 @@ private predicate boundedInstruction( boundedPhiCandValidForEdge(i, b, delta, upper, fromBackEdge, origdelta, reason, op) ) or + not i instanceof PhiInstruction and i = b.getInstruction(delta) and (upper = true or upper = false) and fromBackEdge = false and diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll index 238f619395e5..4f76fbb6f89a 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll @@ -44,4 +44,21 @@ predicate valueFlowStep(Instruction i, Operand op, int delta) { | delta = -getValue(getConstantValue(x.getDefinitionInstruction())) ) + or + exists(Operand x | + i.(PointerAddInstruction).getAnOperand() = op and + i.(PointerAddInstruction).getAnOperand() = x and + op != x + | + delta = i.(PointerAddInstruction).getElementSize() * + getValue(getConstantValue(x.getDefinitionInstruction())) + ) + or + exists(Operand x | + i.(PointerSubInstruction).getAnOperand().(LeftOperand) = op and + i.(PointerSubInstruction).getAnOperand().(RightOperand) = x + | + delta = i.(PointerSubInstruction).getElementSize() * + -getValue(getConstantValue(x.getDefinitionInstruction())) + ) } diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index b4bba787a2ef..04f5d5f5ce40 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -1,26 +1,39 @@ -| test.cpp:8:9:8:9 | Load: y | test.cpp:6:15:6:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.cpp:10:10:10:10 | Load: x | test.cpp:6:15:6:15 | InitializeParameter: x | 0 | false | NoReason | -| test.cpp:10:10:10:10 | Load: x | test.cpp:6:22:6:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.cpp:10:10:10:10 | Load: x | test.cpp:6:22:6:22 | InitializeParameter: y | 0 | false | NoReason | -| test.cpp:16:9:16:9 | Load: y | test.cpp:14:15:14:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.cpp:18:9:18:9 | Load: x | test.cpp:14:22:14:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | -| test.cpp:20:10:20:10 | Load: x | test.cpp:14:15:14:15 | InitializeParameter: x | -2 | false | NoReason | -| test.cpp:20:10:20:10 | Load: x | test.cpp:14:22:14:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | -| test.cpp:26:14:26:14 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.cpp:26:21:26:23 | Load: ... ++ | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.cpp:26:21:26:23 | Load: ... ++ | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.cpp:27:7:27:7 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | -| test.cpp:27:7:27:7 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | CompareLT: ... < ... | -| test.cpp:29:14:29:14 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | NoReason | -| test.cpp:29:21:29:23 | Load: ... -- | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | -| test.cpp:29:21:29:23 | Load: ... -- | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | NoReason | -| test.cpp:30:7:30:7 | Load: i | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | -| test.cpp:30:7:30:7 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | NoReason | -| test.cpp:37:6:37:10 | Load: begin | test.cpp:35:28:35:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.cpp:37:16:37:20 | Load: begin | test.cpp:35:28:35:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.cpp:38:5:38:11 | Load: ... ++ | test.cpp:35:28:35:30 | InitializeParameter: end | 0 | true | CompareLT: ... < ... | -| test.cpp:44:13:44:13 | Load: y | test.cpp:42:29:42:29 | InitializeParameter: z | 0 | true | CompareLT: ... < ... | -| test.cpp:45:12:45:12 | Load: x | test.cpp:42:22:42:22 | InitializeParameter: y | 0 | true | CompareLT: ... < ... | -| test.cpp:45:12:45:12 | Load: x | test.cpp:42:29:42:29 | InitializeParameter: z | 0 | true | CompareLT: ... < ... | -| test.cpp:49:9:49:9 | Load: y | test.cpp:42:15:42:15 | InitializeParameter: x | 1 | false | CompareLT: ... < ... | -| test.cpp:50:12:50:12 | Load: x | test.cpp:42:22:42:22 | InitializeParameter: y | 0 | true | CompareLT: ... < ... | +| test.cpp:10:10:10:10 | Store: x | test.cpp:6:15:6:15 | InitializeParameter: x | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:10:10:10:10 | Store: x | test.cpp:6:22:6:22 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | test.cpp:7:7:7:11 | test.cpp:7:7:7:11 | +| test.cpp:10:10:10:10 | Store: x | test.cpp:6:22:6:22 | InitializeParameter: y | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:20:10:20:10 | Store: x | test.cpp:14:15:14:15 | InitializeParameter: x | -2 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:20:10:20:10 | Store: x | test.cpp:14:22:14:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | test.cpp:15:7:15:11 | test.cpp:15:7:15:11 | +| test.cpp:27:10:27:10 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:27:10:27:10 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | -1 | true | CompareLT: ... < ... | test.cpp:26:14:26:18 | test.cpp:26:14:26:18 | +| test.cpp:27:10:27:10 | Load: i | test.cpp:26:18:26:18 | Load: x | -1 | true | CompareLT: ... < ... | test.cpp:26:14:26:18 | test.cpp:26:14:26:18 | +| test.cpp:30:10:30:10 | Load: i | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | test.cpp:29:14:29:18 | test.cpp:29:14:29:18 | +| test.cpp:30:10:30:10 | Load: i | test.cpp:29:18:29:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | test.cpp:29:14:29:18 | test.cpp:29:14:29:18 | +| test.cpp:33:10:33:10 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:33:10:33:10 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 | +| test.cpp:33:10:33:10 | Load: i | test.cpp:26:14:26:14 | Load: i | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 | +| test.cpp:33:10:33:10 | Load: i | test.cpp:32:18:32:18 | Load: x | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 | +| test.cpp:33:10:33:10 | Load: i | test.cpp:32:18:32:22 | Add: ... + ... | -1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 | +| test.cpp:40:10:40:14 | Load: begin | test.cpp:38:28:38:30 | InitializeParameter: end | -1 | true | CompareLT: ... < ... | test.cpp:39:10:39:20 | test.cpp:39:10:39:20 | +| test.cpp:40:10:40:14 | Load: begin | test.cpp:39:18:39:20 | Load: end | -1 | true | CompareLT: ... < ... | test.cpp:39:10:39:20 | test.cpp:39:10:39:20 | +| test.cpp:49:12:49:12 | Load: x | test.cpp:46:22:46:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 | +| test.cpp:49:12:49:12 | Load: x | test.cpp:46:29:46:29 | InitializeParameter: z | -2 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 | +| test.cpp:49:12:49:12 | Load: x | test.cpp:47:11:47:11 | Load: z | -2 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 | +| test.cpp:49:12:49:12 | Load: x | test.cpp:48:13:48:13 | Load: y | -1 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 | +| test.cpp:54:12:54:12 | Load: x | test.cpp:46:22:46:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:52:7:52:11 | test.cpp:52:7:52:11 | +| test.cpp:54:12:54:12 | Load: x | test.cpp:52:11:52:11 | Load: y | -1 | true | CompareLT: ... < ... | test.cpp:52:7:52:11 | test.cpp:52:7:52:11 | +| test.cpp:62:10:62:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 3 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 | +| test.cpp:62:10:62:13 | Load: iter | test.cpp:61:39:61:51 | Convert: (char *)... | -1 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 | +| test.cpp:62:10:62:13 | Load: iter | test.cpp:61:48:61:48 | Load: p | 3 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 | +| test.cpp:62:10:62:13 | Load: iter | test.cpp:61:48:61:50 | PointerAdd: ... + ... | -1 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 3 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:61:32:61:35 | Load: iter | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:65:15:65:27 | Convert: (char *)... | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:65:15:65:27 | Store: (char *)... | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:65:24:65:24 | Load: p | 3 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:65:24:65:26 | PointerAdd: ... + ... | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:66:39:66:41 | Load: end | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | +| test.cpp:77:12:77:12 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:77:12:77:12 | Load: i | test.cpp:72:15:72:15 | InitializeParameter: x | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | +| test.cpp:77:12:77:12 | Load: i | test.cpp:72:22:72:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | +| test.cpp:77:12:77:12 | Load: i | test.cpp:75:7:75:7 | Load: x | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | +| test.cpp:77:12:77:12 | Load: i | test.cpp:76:24:76:24 | Load: y | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql index 69ff8461ba16..fe0d3871451e 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql @@ -3,14 +3,23 @@ import semmle.code.cpp.ir.IR import semmle.code.cpp.controlflow.IRGuards import semmle.code.cpp.ir.ValueNumbering -query predicate instructionBounds(Instruction i, Bound b, int delta, boolean upper, Reason reason) +query predicate instructionBounds(Instruction i, Bound b, int delta, boolean upper, Reason reason, + Location reasonLoc) { - i instanceof LoadInstruction and - boundedInstruction(i, b, delta, upper, reason) and ( - b.(InstructionBound).getInstruction() instanceof InitializeParameterInstruction or - b.(InstructionBound).getInstruction() instanceof CallInstruction or - b instanceof ZeroBound + i.getAUse() instanceof ArgumentOperand + or + i.getAUse() instanceof ReturnValueOperand ) and - not valueNumber(b.(InstructionBound).getInstruction()) = valueNumber(i) -} + ( + upper = true and + delta = min(int d | boundedInstruction(i, b, d, upper, reason)) + or + upper = false and + delta = max(int d | boundedInstruction(i, b, d, upper, reason)) + ) and + not valueNumber(b.getInstruction()) = valueNumber(i) + and if reason instanceof CondReason + then reasonLoc = reason.(CondReason).getCond().getLocation() + else reasonLoc instanceof UnknownDefaultLocation +} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp index 365d7a556763..82bf6bf0d544 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp @@ -21,24 +21,28 @@ int test2(int x, int y) { } // for loops -int test3(int x, int *p) { +int test3(int x) { int i; for(i = 0; i < x; i++) { - p[i]; + sink(i); } for(i = x; i > 0; i--) { - p[i]; + sink(i); + } + for(i = 0; i < x + 2; i++) { + sink(i); } } // pointer bounds int test4(int *begin, int *end) { while (begin < end) { - *begin = (*begin) + 1; + sink(begin); begin++; } } +// bound propagation through conditionals int test5(int x, int y, int z) { if (y < z) { if (x < y) { @@ -51,3 +55,26 @@ int test5(int x, int y, int z) { } } } + +// pointer arithmetic and sizes +void test6(int *p) { + for (char *iter = (char *)p; iter < (char *)(p+1); iter++) { + sink(iter); + } + + char *end = (char *)(p+1); + for (char *iter = (char *)p; iter < end; iter++) { + sink(iter); + } +} + +// inference from equality +int test8(int x, int y) { + int *p = new int[x]; + + if (x == y) { + for(int i = 0; i < y; ++i) { + sink(i); + } + } +} From 2f8ca8802b9ca19e4cac11ddb4346c09eb77c123 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Wed, 12 Dec 2018 17:07:45 -0800 Subject: [PATCH 06/13] C++: switch to using ValueNumbers as bounds This reduces the number of bounds computed, and will simplify use of the library. The resulting locations in the tests may be slightly strange, because the example `Instruction` for a `ValueNumber` is the first appearing in the IR, regardless of source order, and may not be the most closely related `Instruction` to the bounded value. I think that's worth doing for the performance and usability benefits. --- .../semmle/code/cpp/rangeanalysis/Bound.qll | 56 ++++++++++++++----- .../code/cpp/rangeanalysis/RangeAnalysis.qll | 4 +- .../rangeanalysis/RangeAnalysis.expected | 28 +++------- 3 files changed, 53 insertions(+), 35 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll index 7bac85a1cb3a..8d2fb592b90b 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll @@ -1,11 +1,33 @@ import cpp private import semmle.code.cpp.ir.IR +private import semmle.code.cpp.ir.ValueNumbering private newtype TBound = TBoundZero() or - TBoundInstruction(Instruction i) { - i.getResultType() instanceof IntegralType or - i.getResultType() instanceof PointerType + TBoundValueNumber(ValueNumber vn) { + exists(Instruction i | + vn.getAnInstruction() = i and + ( + i.getResultType() instanceof IntegralType or + i.getResultType() instanceof PointerType + ) + | + i instanceof PhiInstruction + or + i instanceof InitializeParameterInstruction + or + i instanceof CallInstruction + or + i instanceof VariableAddressInstruction + or + i instanceof FieldAddressInstruction + or + i.(LoadInstruction).getSourceAddress() instanceof VariableAddressInstruction + or + i.(LoadInstruction).getSourceAddress() instanceof FieldAddressInstruction + or + i.getAUse() instanceof ArgumentOperand + ) } /** @@ -20,12 +42,9 @@ abstract class Bound extends TBound { /** Gets an expression that equals this bound. */ Instruction getInstruction() { result = getInstruction(0) } - predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - path = "" and sl = 0 and sc = 0 and el = 0 and ec = 0 - } + abstract Location getLocation(); } - /** * The bound that corresponds to the integer 0. This is used to represent all * integer bounds as bounds are always accompanied by an added integer delta. @@ -34,18 +53,27 @@ class ZeroBound extends Bound, TBoundZero { override string toString() { result = "0" } override Instruction getInstruction(int delta) { result.(ConstantValueInstruction).getValue().toInt() = delta } + + override Location getLocation() { + result instanceof UnknownDefaultLocation + } } - /** * A bound corresponding to the value of an `Instruction`. */ -class InstructionBound extends Bound, TBoundInstruction { +class ValueNumberBound extends Bound, TBoundValueNumber { + ValueNumber vn; + + ValueNumberBound() { + this = TBoundValueNumber(vn) + } + /** Gets the SSA variable that equals this bound. */ - override Instruction getInstruction(int delta) { this = TBoundInstruction(result) and delta = 0} + override Instruction getInstruction(int delta) { this = TBoundValueNumber(valueNumber(result)) and delta = 0} - override string toString() { result = getInstruction().toString() } + override string toString() { result = vn.getExampleInstruction().toString() } - override predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - getInstruction().getLocation().hasLocationInfo(path, sl, sc, el, ec) + override Location getLocation() { + result = vn.getLocation() } -} \ No newline at end of file +} diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index ad5d83bbbf4d..8ebac3ac2a6d 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -465,7 +465,7 @@ private predicate boundedPhiInp( exists(int d, boolean fromBackEdge0 | boundedPhiOperand(op, b, d, upper, fromBackEdge0, origdelta, reason) or - b.(InstructionBound).getInstruction() = op.getDefinitionInstruction() and + b.(ValueNumberBound).getInstruction() = op.getDefinitionInstruction() and d = 0 and (upper = true or upper = false) and fromBackEdge0 = false and @@ -494,7 +494,7 @@ private predicate boundedPhiInp1( } private predicate selfBoundedPhiInp(PhiInstruction phi, PhiOperand op, boolean upper) { - exists(int d, InstructionBound phibound | + exists(int d, ValueNumberBound phibound | phibound.getInstruction() = phi and boundedPhiInp(phi, op, phibound, d, upper, _, _, _) and ( diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index 04f5d5f5ce40..9f04b8c3fdbb 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -5,35 +5,25 @@ | test.cpp:20:10:20:10 | Store: x | test.cpp:14:22:14:22 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | test.cpp:15:7:15:11 | test.cpp:15:7:15:11 | | test.cpp:27:10:27:10 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:27:10:27:10 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | -1 | true | CompareLT: ... < ... | test.cpp:26:14:26:18 | test.cpp:26:14:26:18 | -| test.cpp:27:10:27:10 | Load: i | test.cpp:26:18:26:18 | Load: x | -1 | true | CompareLT: ... < ... | test.cpp:26:14:26:18 | test.cpp:26:14:26:18 | | test.cpp:30:10:30:10 | Load: i | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | test.cpp:29:14:29:18 | test.cpp:29:14:29:18 | -| test.cpp:30:10:30:10 | Load: i | test.cpp:29:18:29:18 | Constant: 0 | 1 | false | CompareGT: ... > ... | test.cpp:29:14:29:18 | test.cpp:29:14:29:18 | +| test.cpp:30:10:30:10 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 0 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:30:10:30:10 | Load: i | test.cpp:26:14:26:14 | Phi: i | 0 | true | CompareLT: ... < ... | test.cpp:26:14:26:18 | test.cpp:26:14:26:18 | | test.cpp:33:10:33:10 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:33:10:33:10 | Load: i | test.cpp:24:15:24:15 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 | -| test.cpp:33:10:33:10 | Load: i | test.cpp:26:14:26:14 | Load: i | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 | -| test.cpp:33:10:33:10 | Load: i | test.cpp:32:18:32:18 | Load: x | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 | -| test.cpp:33:10:33:10 | Load: i | test.cpp:32:18:32:22 | Add: ... + ... | -1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 | +| test.cpp:33:10:33:10 | Load: i | test.cpp:26:14:26:14 | Phi: i | 1 | true | CompareLT: ... < ... | test.cpp:32:14:32:22 | test.cpp:32:14:32:22 | +| test.cpp:33:10:33:10 | Load: i | test.cpp:29:14:29:14 | Phi: i | 0 | false | CompareGT: ... > ... | test.cpp:29:14:29:18 | test.cpp:29:14:29:18 | +| test.cpp:40:10:40:14 | Load: begin | test.cpp:38:16:38:20 | InitializeParameter: begin | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:40:10:40:14 | Load: begin | test.cpp:38:28:38:30 | InitializeParameter: end | -1 | true | CompareLT: ... < ... | test.cpp:39:10:39:20 | test.cpp:39:10:39:20 | -| test.cpp:40:10:40:14 | Load: begin | test.cpp:39:18:39:20 | Load: end | -1 | true | CompareLT: ... < ... | test.cpp:39:10:39:20 | test.cpp:39:10:39:20 | | test.cpp:49:12:49:12 | Load: x | test.cpp:46:22:46:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 | | test.cpp:49:12:49:12 | Load: x | test.cpp:46:29:46:29 | InitializeParameter: z | -2 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 | -| test.cpp:49:12:49:12 | Load: x | test.cpp:47:11:47:11 | Load: z | -2 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 | -| test.cpp:49:12:49:12 | Load: x | test.cpp:48:13:48:13 | Load: y | -1 | true | CompareLT: ... < ... | test.cpp:48:9:48:13 | test.cpp:48:9:48:13 | | test.cpp:54:12:54:12 | Load: x | test.cpp:46:22:46:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:52:7:52:11 | test.cpp:52:7:52:11 | -| test.cpp:54:12:54:12 | Load: x | test.cpp:52:11:52:11 | Load: y | -1 | true | CompareLT: ... < ... | test.cpp:52:7:52:11 | test.cpp:52:7:52:11 | +| test.cpp:62:10:62:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:62:10:62:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 3 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 | | test.cpp:62:10:62:13 | Load: iter | test.cpp:61:39:61:51 | Convert: (char *)... | -1 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 | -| test.cpp:62:10:62:13 | Load: iter | test.cpp:61:48:61:48 | Load: p | 3 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 | -| test.cpp:62:10:62:13 | Load: iter | test.cpp:61:48:61:50 | PointerAdd: ... + ... | -1 | true | CompareLT: ... < ... | test.cpp:61:32:61:51 | test.cpp:61:32:61:51 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:67:10:67:13 | Load: iter | test.cpp:60:17:60:17 | InitializeParameter: p | 3 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | -| test.cpp:67:10:67:13 | Load: iter | test.cpp:61:32:61:35 | Load: iter | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | -| test.cpp:67:10:67:13 | Load: iter | test.cpp:65:15:65:27 | Convert: (char *)... | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | -| test.cpp:67:10:67:13 | Load: iter | test.cpp:65:15:65:27 | Store: (char *)... | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | -| test.cpp:67:10:67:13 | Load: iter | test.cpp:65:24:65:24 | Load: p | 3 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | -| test.cpp:67:10:67:13 | Load: iter | test.cpp:65:24:65:26 | PointerAdd: ... + ... | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | -| test.cpp:67:10:67:13 | Load: iter | test.cpp:66:39:66:41 | Load: end | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:61:32:61:35 | Phi: iter | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | +| test.cpp:67:10:67:13 | Load: iter | test.cpp:61:39:61:51 | Convert: (char *)... | -1 | true | CompareLT: ... < ... | test.cpp:66:32:66:41 | test.cpp:66:32:66:41 | | test.cpp:77:12:77:12 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:77:12:77:12 | Load: i | test.cpp:72:15:72:15 | InitializeParameter: x | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | | test.cpp:77:12:77:12 | Load: i | test.cpp:72:22:72:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | -| test.cpp:77:12:77:12 | Load: i | test.cpp:75:7:75:7 | Load: x | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | -| test.cpp:77:12:77:12 | Load: i | test.cpp:76:24:76:24 | Load: y | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | From b2cd9a29f227d33cfab67383b27c7d3c75ea4c67 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 13 Dec 2018 10:44:29 -0800 Subject: [PATCH 07/13] C++: add test for false comparisons --- .../rangeanalysis/RangeAnalysis.expected | 8 +++++++ .../rangeanalysis/rangeanalysis/test.cpp | 24 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index 9f04b8c3fdbb..d7486ccf1b90 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -27,3 +27,11 @@ | test.cpp:77:12:77:12 | Load: i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:77:12:77:12 | Load: i | test.cpp:72:15:72:15 | InitializeParameter: x | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | | test.cpp:77:12:77:12 | Load: i | test.cpp:72:22:72:22 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:76:20:76:24 | test.cpp:76:20:76:24 | +| test.cpp:85:10:85:10 | Load: x | file://:0:0:0:0 | 0 | 2 | false | CompareGT: ... > ... | test.cpp:84:7:84:11 | test.cpp:84:7:84:11 | +| test.cpp:87:10:87:10 | Load: x | file://:0:0:0:0 | 0 | 1 | true | CompareGT: ... > ... | test.cpp:84:7:84:11 | test.cpp:84:7:84:11 | +| test.cpp:90:10:90:10 | Load: x | file://:0:0:0:0 | 0 | 1 | false | CompareGE: ... >= ... | test.cpp:89:7:89:12 | test.cpp:89:7:89:12 | +| test.cpp:92:10:92:10 | Load: x | file://:0:0:0:0 | 0 | 0 | true | CompareGE: ... >= ... | test.cpp:89:7:89:12 | test.cpp:89:7:89:12 | +| test.cpp:95:10:95:10 | Load: x | file://:0:0:0:0 | 0 | 0 | true | CompareLT: ... < ... | test.cpp:94:7:94:11 | test.cpp:94:7:94:11 | +| test.cpp:97:10:97:10 | Load: x | file://:0:0:0:0 | 0 | 1 | false | CompareLT: ... < ... | test.cpp:94:7:94:11 | test.cpp:94:7:94:11 | +| test.cpp:100:10:100:10 | Load: x | file://:0:0:0:0 | 0 | 1 | true | CompareLE: ... <= ... | test.cpp:99:7:99:12 | test.cpp:99:7:99:12 | +| test.cpp:102:10:102:10 | Load: x | file://:0:0:0:0 | 0 | 2 | false | CompareLE: ... <= ... | test.cpp:99:7:99:12 | test.cpp:99:7:99:12 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp index 82bf6bf0d544..deb162a94fb0 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp @@ -78,3 +78,27 @@ int test8(int x, int y) { } } } + +// >, >=, <= +void test9(int x) { + if (x > 1) { + sink(x); + } else { + sink(x); + } + if (x >= 1) { + sink(x); + } else { + sink(x); + } + if (x < 1) { + sink(x); + } else { + sink(x); + } + if (x <= 1) { + sink(x); + } else { + sink(x); + } +} From 567eee111474571676e5aa0a4a8510c2df721ca2 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 13 Dec 2018 11:55:55 -0800 Subject: [PATCH 08/13] C++: allow phi nodes to self-bound --- .../semmle/code/cpp/rangeanalysis/RangeAnalysis.qll | 9 ++++----- .../rangeanalysis/RangeAnalysis.expected | 3 +++ .../rangeanalysis/rangeanalysis/test.cpp | 13 +++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index 8ebac3ac2a6d..1eea467a28e6 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -118,7 +118,7 @@ private import RangeAnalysisCache import RangeAnalysisPublic /** - * Gets a condition that tests whether `op` equals `bound + delta`. + * Gets a condition that tests whether `vn` equals `bound + delta`. * * If the condition evaluates to `testIsTrue`: * - `isEq = true` : `i == bound + delta` @@ -151,11 +151,11 @@ private predicate boundFlowStepSsa( } /** - * Gets a condition that tests whether `op` is bounded by `bound + delta`. + * Gets a condition that tests whether `vn` is bounded by `bound + delta`. * * If the condition evaluates to `testIsTrue`: - * - `upper = true` : `op <= bound + delta` - * - `upper = false` : `op >= bound + delta` + * - `upper = true` : `vn <= bound + delta` + * - `upper = false` : `vn >= bound + delta` */ private IRGuardCondition boundFlowCond(ValueNumber vn, NonPhiOperand bound, int delta, boolean upper, boolean testIsTrue) @@ -549,7 +549,6 @@ private predicate boundedInstruction( boundedPhiCandValidForEdge(i, b, delta, upper, fromBackEdge, origdelta, reason, op) ) or - not i instanceof PhiInstruction and i = b.getInstruction(delta) and (upper = true or upper = false) and fromBackEdge = false and diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index d7486ccf1b90..5baab29f442b 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -35,3 +35,6 @@ | test.cpp:97:10:97:10 | Load: x | file://:0:0:0:0 | 0 | 1 | false | CompareLT: ... < ... | test.cpp:94:7:94:11 | test.cpp:94:7:94:11 | | test.cpp:100:10:100:10 | Load: x | file://:0:0:0:0 | 0 | 1 | true | CompareLE: ... <= ... | test.cpp:99:7:99:12 | test.cpp:99:7:99:12 | | test.cpp:102:10:102:10 | Load: x | file://:0:0:0:0 | 0 | 2 | false | CompareLE: ... <= ... | test.cpp:99:7:99:12 | test.cpp:99:7:99:12 | +| test.cpp:106:5:106:10 | Phi: test10 | test.cpp:113:3:113:6 | Phi: call to sink | -1 | true | CompareLT: ... < ... | test.cpp:114:18:114:22 | test.cpp:114:18:114:22 | +| test.cpp:106:5:106:10 | Phi: test10 | test.cpp:114:18:114:18 | Phi: i | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:106:5:106:10 | Phi: test10 | test.cpp:114:18:114:18 | Phi: i | 0 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp index deb162a94fb0..daf53764d99b 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp @@ -102,3 +102,16 @@ void test9(int x) { sink(x); } } + +int test10(int y, int z, bool use_y) { + int x; + if(use_y) { + x = y; + } else { + x = z; + } + sink(); + for(int i = 0; i < x; i++) { + return i; + } +} From 8c9c316e1b998963ba696884dff6575e305ff4c4 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Fri, 14 Dec 2018 14:59:25 -0800 Subject: [PATCH 09/13] C++: performance and termination fixes --- .../aliased_ssa/gvn/ValueNumbering.qll | 2 +- .../semmle/code/cpp/rangeanalysis/Bound.qll | 3 +- .../code/cpp/rangeanalysis/RangeAnalysis.qll | 109 ++++++++++-------- .../code/cpp/rangeanalysis/RangeUtils.qll | 22 ++++ .../rangeanalysis/RangeAnalysis.expected | 11 +- .../rangeanalysis/rangeanalysis/test.cpp | 33 ++++++ 6 files changed, 127 insertions(+), 53 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll index 9a14a8288fa8..c03ddf991626 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll @@ -216,7 +216,7 @@ private predicate uniqueValueNumber(Instruction instr, FunctionIR funcIR) { /** * Gets the value number assigned to `instr`, if any. Returns at most one result. */ -ValueNumber valueNumber(Instruction instr) { +cached ValueNumber valueNumber(Instruction instr) { result = nonUniqueValueNumber(instr) or exists(FunctionIR funcIR | uniqueValueNumber(instr, funcIR) and diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll index 8d2fb592b90b..54a825e2ffce 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/Bound.qll @@ -10,7 +10,8 @@ private newtype TBound = ( i.getResultType() instanceof IntegralType or i.getResultType() instanceof PointerType - ) + ) and + not vn.getAnInstruction() instanceof ConstantInstruction | i instanceof PhiInstruction or diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index 1eea467a28e6..6c1334251661 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -197,6 +197,7 @@ class CondReason extends Reason, TCondReason { * Holds if a cast from `fromtyp` to `totyp` can be ignored for the purpose of * range analysis. */ +pragma[inline] private predicate safeCast(IntegralType fromtyp, IntegralType totyp) { fromtyp.getSize() < totyp.getSize() and ( @@ -256,7 +257,7 @@ private class NarrowingCastInstruction extends ConvertInstruction { * - `upper = true` : `i <= op + delta` * - `upper = false` : `i >= op + delta` */ -private predicate boundFlowStep(Instruction i, Operand op, int delta, boolean upper) { +private predicate boundFlowStep(Instruction i, NonPhiOperand op, int delta, boolean upper) { valueFlowStep(i, op, delta) and (upper = true or upper = false) or @@ -425,12 +426,27 @@ private predicate boundedPhiOperand( ) } +/** Holds if `v != e + delta` at `pos`. */ +private predicate unequalFlowStep( + Operand op1, Operand op2, int delta, Reason reason +) { + exists(IRGuardCondition guard, boolean testIsTrue | + guard = eqFlowCond(valueNumberOfOperand(op1), op2, delta, false, testIsTrue) and + guard.controls(op1.getInstruction().getBlock(), testIsTrue) and + reason = TCondReason(guard) + ) +} + /** * Holds if `op != b + delta` at `pos`. */ private predicate unequalOperand(Operand op, Bound b, int delta, Reason reason) { - // TODO: implement this - none() + exists(Operand op2, int d1, int d2 | + unequalFlowStep(op, op2, delta, reason) and + boundedNonPhiOperand(op2, b, d2, true, _, _, _) and + boundedNonPhiOperand(op2, b, d2, true, _, _, _) and + delta = d1 + d2 + ) } private predicate boundedPhiCandValidForEdge( @@ -544,50 +560,47 @@ private predicate boundedCastExpr( private predicate boundedInstruction( Instruction i, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, Reason reason ) { - i instanceof PhiInstruction and - forex(PhiOperand op | op = i.getAnOperand() | - boundedPhiCandValidForEdge(i, b, delta, upper, fromBackEdge, origdelta, reason, op) - ) - or - i = b.getInstruction(delta) and - (upper = true or upper = false) and - fromBackEdge = false and - origdelta = delta and - reason = TNoReason() - or - exists(Operand mid, int d1, int d2 | - boundFlowStep(i, mid, d1, upper) and - boundedNonPhiOperand(mid, b, d2, upper, fromBackEdge, origdelta, reason) and - delta = d1 + d2 and - not exists(getValue(getConstantValue(i))) - ) - or - exists(Operand mid, int factor, int d | - boundFlowStepMul(i, mid, factor) and - boundedNonPhiOperand(mid, b, d, upper, fromBackEdge, origdelta, reason) and - b instanceof ZeroBound and - delta = d*factor and - not exists(getValue(getConstantValue(i))) - ) - or - exists(Operand mid, int factor, int d | - boundFlowStepDiv(i, mid, factor) and - boundedNonPhiOperand(mid, b, d, upper, fromBackEdge, origdelta, reason) and - d >= 0 and - b instanceof ZeroBound and - delta = d / factor and - not exists(getValue(getConstantValue(i))) - ) - or - exists(NarrowingCastInstruction cast | - cast = i and - safeNarrowingCast(cast, upper.booleanNot()) and - boundedCastExpr(cast, b, delta, upper, fromBackEdge, origdelta, reason) + isReducibleCFG(i.getFunction()) and + ( + i instanceof PhiInstruction and + forex(PhiOperand op | op = i.getAnOperand() | + boundedPhiCandValidForEdge(i, b, delta, upper, fromBackEdge, origdelta, reason, op) + ) + or + i = b.getInstruction(delta) and + (upper = true or upper = false) and + fromBackEdge = false and + origdelta = delta and + reason = TNoReason() + or + exists(Operand mid, int d1, int d2 | + boundFlowStep(i, mid, d1, upper) and + boundedNonPhiOperand(mid, b, d2, upper, fromBackEdge, origdelta, reason) and + delta = d1 + d2 and + not exists(getValue(getConstantValue(i))) + ) + or + exists(Operand mid, int factor, int d | + boundFlowStepMul(i, mid, factor) and + boundedNonPhiOperand(mid, b, d, upper, fromBackEdge, origdelta, reason) and + b instanceof ZeroBound and + delta = d*factor and + not exists(getValue(getConstantValue(i))) + ) + or + exists(Operand mid, int factor, int d | + boundFlowStepDiv(i, mid, factor) and + boundedNonPhiOperand(mid, b, d, upper, fromBackEdge, origdelta, reason) and + d >= 0 and + b instanceof ZeroBound and + delta = d / factor and + not exists(getValue(getConstantValue(i))) + ) + or + exists(NarrowingCastInstruction cast | + cast = i and + safeNarrowingCast(cast, upper.booleanNot()) and + boundedCastExpr(cast, b, delta, upper, fromBackEdge, origdelta, reason) + ) ) } - -predicate backEdge(PhiInstruction phi, PhiOperand op) { - phi.getAnOperand() = op and - phi.getBlock().dominates(op.getPredecessorBlock()) - // TODO: identify backedges during IR construction -} \ No newline at end of file diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll index 4f76fbb6f89a..b02914033a74 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeUtils.qll @@ -62,3 +62,25 @@ predicate valueFlowStep(Instruction i, Operand op, int delta) { -getValue(getConstantValue(x.getDefinitionInstruction())) ) } + +predicate isReducibleCFG(Function f) { + not exists(LabelStmt l, GotoStmt goto | + goto.getTarget() = l and + l.getLocation().isBefore(goto.getLocation()) and + l.getEnclosingFunction() = f + ) and + not exists(LabelStmt ls, Loop l | + ls.getParent*() = l and + l.getEnclosingFunction() = f + ) and + not exists(SwitchCase cs | + cs.getSwitchStmt().getStmt() != cs.getParentStmt() and + cs.getEnclosingFunction() = f + ) +} + +predicate backEdge(PhiInstruction phi, PhiOperand op) { + phi.getAnOperand() = op and + phi.getBlock().dominates(op.getPredecessorBlock()) + // TODO: identify backedges during IR construction +} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index 5baab29f442b..24429da03625 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -35,6 +35,11 @@ | test.cpp:97:10:97:10 | Load: x | file://:0:0:0:0 | 0 | 1 | false | CompareLT: ... < ... | test.cpp:94:7:94:11 | test.cpp:94:7:94:11 | | test.cpp:100:10:100:10 | Load: x | file://:0:0:0:0 | 0 | 1 | true | CompareLE: ... <= ... | test.cpp:99:7:99:12 | test.cpp:99:7:99:12 | | test.cpp:102:10:102:10 | Load: x | file://:0:0:0:0 | 0 | 2 | false | CompareLE: ... <= ... | test.cpp:99:7:99:12 | test.cpp:99:7:99:12 | -| test.cpp:106:5:106:10 | Phi: test10 | test.cpp:113:3:113:6 | Phi: call to sink | -1 | true | CompareLT: ... < ... | test.cpp:114:18:114:22 | test.cpp:114:18:114:22 | -| test.cpp:106:5:106:10 | Phi: test10 | test.cpp:114:18:114:18 | Phi: i | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | -| test.cpp:106:5:106:10 | Phi: test10 | test.cpp:114:18:114:18 | Phi: i | 0 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:107:5:107:10 | Phi: test10 | test.cpp:114:3:114:6 | Phi: call to sink | -1 | true | CompareLT: ... < ... | test.cpp:115:18:115:22 | test.cpp:115:18:115:22 | +| test.cpp:140:10:140:10 | Store: i | file://:0:0:0:0 | 0 | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:140:10:140:10 | Store: i | test.cpp:135:16:135:16 | InitializeParameter: x | 0 | false | CompareLT: ... < ... | test.cpp:139:11:139:15 | test.cpp:139:11:139:15 | +| test.cpp:140:10:140:10 | Store: i | test.cpp:138:5:138:5 | Phi: i | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:140:10:140:10 | Store: i | test.cpp:138:5:138:5 | Phi: i | 1 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:149:10:149:10 | Store: i | file://:0:0:0:0 | 0 | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:149:10:149:10 | Store: i | test.cpp:147:5:147:5 | Phi: i | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:149:10:149:10 | Store: i | test.cpp:147:5:147:5 | Phi: i | 1 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp index daf53764d99b..a9407b6e6020 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp @@ -103,6 +103,7 @@ void test9(int x) { } } +// Phi nodes as bounds int test10(int y, int z, bool use_y) { int x; if(use_y) { @@ -115,3 +116,35 @@ int test10(int y, int z, bool use_y) { return i; } } + +// Irreducible CFGs +int test11(int y, int x) { + int i = 0; + if (x < y) { + x = y; + } else { + goto inLoop; + } + for(i = 0; i < x; i++) { + inLoop: + sink(i); + } +} + +// do-while +int test12(int x) { + int i = 0; + do { + i++; + } while(i < x); + return i; +} + +// do while false +int test13(int x) { + int i = 0; + do { + i++; + } while(false); + return i; +} From 0040a2d123b50b641b65927b2ab973b642df068d Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 17 Dec 2018 15:39:47 -0800 Subject: [PATCH 10/13] C++: respond to further PR comments --- .../code/cpp/rangeanalysis/RangeAnalysis.qll | 53 +++++++++---------- .../rangeanalysis/RangeAnalysis.expected | 14 +++++ .../rangeanalysis/rangeanalysis/test.cpp | 22 ++++++++ 3 files changed, 61 insertions(+), 28 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index 6c1334251661..d416c7fe80b0 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -1,14 +1,13 @@ /** * Provides classes and predicates for range analysis. * - * An inferred bound can either be a specific integer or the abstract value of - * an IR `Instruction`. + * An inferred bound can either be a specific integer or a `ValueNumber` + * representing the abstract value of a set of `Instruction`s. * * If an inferred bound relies directly on a condition, then this condition is * reported as the reason for the bound. */ -// TODO: update the following comment /* * This library tackles range analysis as a flow problem. Consider e.g.: * ``` @@ -21,24 +20,29 @@ * arr.length --> len = .. --> x < len --> x-1 --> y = .. --> y * ``` * - * In its simplest form the step relation `E1 --> E2` relates two expressions - * such that `E1 <= B` implies `E2 <= B` for any `B` (with a second separate + * In its simplest form the step relation `I1 --> I2` relates two `Instruction`s + * such that `I1 <= B` implies `I2 <= B` for any `B` (with a second separate * step relation handling lower bounds). Examples of such steps include - * assignments `E2 = E1` and conditions `x <= E1` where `E2` is a use of `x` + * assignments `I2 = I1` and conditions `x <= I1` where `I2` is a use of `x` * guarded by the condition. * * In order to handle subtractions and additions with constants, and strict * comparisons, the step relation is augmented with an integer delta. With this - * generalization `E1 --(delta)--> E2` relates two expressions and an integer - * such that `E1 <= B` implies `E2 <= B + delta` for any `B`. This corresponds + * generalization `I1 --(delta)--> I2` relates two `Instruction`s and an integer + * such that `I1 <= B` implies `I2 <= B + delta` for any `B`. This corresponds * to the predicate `boundFlowStep`. * * The complete range analysis is then implemented as the transitive closure of - * the step relation summing the deltas along the way. If `E1` transitively - * steps to `E2`, `delta` is the sum of deltas along the path, and `B` is an - * interesting bound equal to the value of `E1` then `E2 <= B + delta`. This - * corresponds to the predicate `bounded`. + * the step relation summing the deltas along the way. If `I1` transitively + * steps to `I2`, `delta` is the sum of deltas along the path, and `B` is an + * interesting bound equal to the value of `I1` then `I2 <= B + delta`. This + * corresponds to the predicate `boundedInstruction`. * + * Bounds come in two forms: either they are relative to zero (and thus provide + * a constant bound), or they are relative to some program value. This value is + * represented by the `ValueNumber` class, each instance of which represents a + * set of `Instructions` that must have the same value. + * * Phi nodes need a little bit of extra handling. Consider `x0 = phi(x1, x2)`. * There are essentially two cases: * - If `x1 <= B + d1` and `x2 <= B + d2` then `x0 <= B + max(d1,d2)`. @@ -121,8 +125,8 @@ import RangeAnalysisPublic * Gets a condition that tests whether `vn` equals `bound + delta`. * * If the condition evaluates to `testIsTrue`: - * - `isEq = true` : `i == bound + delta` - * - `isEq = false` : `i != bound + delta` + * - `isEq = true` : `vn == bound + delta` + * - `isEq = false` : `vn != bound + delta` */ private IRGuardCondition eqFlowCond(ValueNumber vn, Operand bound, int delta, boolean isEq, boolean testIsTrue) @@ -138,11 +142,6 @@ private IRGuardCondition eqFlowCond(ValueNumber vn, Operand bound, int delta, private predicate boundFlowStepSsa( NonPhiOperand op2, Operand op1, int delta, boolean upper, Reason reason ) { - /*op2.getDefinitionInstruction().getAnOperand().(CopySourceOperand) = op1 and - (upper = true or upper = false) and - reason = TNoReason() and - delta = 0 - or*/ exists(IRGuardCondition guard, boolean testIsTrue | guard = boundFlowCond(valueNumberOfOperand(op2), op1, delta, upper, testIsTrue) and guard.controls(op2.getInstruction().getBlock(), testIsTrue) and @@ -170,7 +169,6 @@ private IRGuardCondition boundFlowCond(ValueNumber vn, NonPhiOperand bound, int or result = eqFlowCond(vn, bound, delta, true, testIsTrue) and (upper = true or upper = false) - // TODO: strengthening through modulus library } private newtype TReason = @@ -213,7 +211,6 @@ private predicate safeCast(IntegralType fromtyp, IntegralType totyp) { fromtyp.isUnsigned() and totyp.isUnsigned() ) - // TODO: infer safety using sign analysis? } private class SafeCastInstruction extends ConvertInstruction { @@ -357,7 +354,7 @@ private predicate boundedNonPhiOperand(NonPhiOperand op, Bound b, int delta, boo boundedInstruction(op.getDefinitionInstruction(), b, delta, upper, fromBackEdge, origdelta, reason) or exists(int d, Reason r1, Reason r2 | - boundedInstruction(op.getDefinitionInstruction(), b, d, upper, fromBackEdge, origdelta, r2) + boundedNonPhiOperand(op, b, d, upper, fromBackEdge, origdelta, r2) | unequalOperand(op, b, d, r1) and ( @@ -426,13 +423,13 @@ private predicate boundedPhiOperand( ) } -/** Holds if `v != e + delta` at `pos`. */ +/** Holds if `op2 != op1 + delta` at `pos`. */ private predicate unequalFlowStep( - Operand op1, Operand op2, int delta, Reason reason + Operand op2, Operand op1, int delta, Reason reason ) { exists(IRGuardCondition guard, boolean testIsTrue | - guard = eqFlowCond(valueNumberOfOperand(op1), op2, delta, false, testIsTrue) and - guard.controls(op1.getInstruction().getBlock(), testIsTrue) and + guard = eqFlowCond(valueNumberOfOperand(op2), op1, delta, false, testIsTrue) and + guard.controls(op2.getInstruction().getBlock(), testIsTrue) and reason = TCondReason(guard) ) } @@ -442,9 +439,9 @@ private predicate unequalFlowStep( */ private predicate unequalOperand(Operand op, Bound b, int delta, Reason reason) { exists(Operand op2, int d1, int d2 | - unequalFlowStep(op, op2, delta, reason) and - boundedNonPhiOperand(op2, b, d2, true, _, _, _) and + unequalFlowStep(op, op2, d1, reason) and boundedNonPhiOperand(op2, b, d2, true, _, _, _) and + boundedNonPhiOperand(op2, b, d2, false, _, _, _) and delta = d1 + d2 ) } diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index 24429da03625..f27d34002dc0 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -43,3 +43,17 @@ | test.cpp:149:10:149:10 | Store: i | file://:0:0:0:0 | 0 | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:149:10:149:10 | Store: i | test.cpp:147:5:147:5 | Phi: i | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:149:10:149:10 | Store: i | test.cpp:147:5:147:5 | Phi: i | 1 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | +| test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | false | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 | +| test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 | +| test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 | +| test.cpp:158:12:158:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -2 | true | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 | +| test.cpp:158:12:158:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -2 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 | +| test.cpp:161:12:161:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -2 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 | +| test.cpp:161:12:161:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -2 | true | CompareNE: ... != ... | test.cpp:160:9:160:16 | test.cpp:160:9:160:16 | +| test.cpp:163:12:163:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | false | CompareNE: ... != ... | test.cpp:160:9:160:16 | test.cpp:160:9:160:16 | +| test.cpp:163:12:163:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 | +| test.cpp:163:12:163:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareNE: ... != ... | test.cpp:160:9:160:16 | test.cpp:160:9:160:16 | +| test.cpp:167:12:167:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 | +| test.cpp:167:12:167:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | 1 | false | CompareEQ: ... == ... | test.cpp:166:9:166:16 | test.cpp:166:9:166:16 | +| test.cpp:167:12:167:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | 1 | true | CompareEQ: ... == ... | test.cpp:166:9:166:16 | test.cpp:166:9:166:16 | +| test.cpp:169:12:169:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp index a9407b6e6020..24f95205fcf8 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/test.cpp @@ -148,3 +148,25 @@ int test13(int x) { } while(false); return i; } + +// unequal bound narrowing +int test14(int x, int y) { + if(x < y) { + if (x == y-1) { + sink(x); + } else { + sink(x); + } + if (x != y-1) { + sink(x); + } else { + sink(x); + } + } else { + if (y == x-1) { + sink(x); + } else { + sink(x); + } + } +} From af8a3f2522d8414e299af79efa131f0e5b95fd22 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Tue, 18 Dec 2018 09:54:27 -0800 Subject: [PATCH 11/13] C++: expand a comment --- cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index d416c7fe80b0..2ddb0bd1daf9 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -161,7 +161,11 @@ private IRGuardCondition boundFlowCond(ValueNumber vn, NonPhiOperand bound, int { exists(int d | result.comparesLt(vn.getAUse(), bound, d, upper, testIsTrue) and - // strengthen from x < y to x <= y-1 + /* + * `comparesLt` provides bounds of the form `x < y + k` or `x >= y + k`, but we need + * `x <= y + k` so we strengthen here. `testIsTrue` has the same semantics in `comparesLt` as + * it does here, so we don't need to account for it. + */ if upper = true then delta = d-1 else delta = d From c39de75d3db73d004d3f52d67324b4b539cf7998 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 7 Jan 2019 09:09:45 -0800 Subject: [PATCH 12/13] C++: change in-predicate comment formatting --- .../src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index 2ddb0bd1daf9..32b3d4ee4fcd 100644 --- a/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/src/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -161,11 +161,9 @@ private IRGuardCondition boundFlowCond(ValueNumber vn, NonPhiOperand bound, int { exists(int d | result.comparesLt(vn.getAUse(), bound, d, upper, testIsTrue) and - /* - * `comparesLt` provides bounds of the form `x < y + k` or `x >= y + k`, but we need - * `x <= y + k` so we strengthen here. `testIsTrue` has the same semantics in `comparesLt` as - * it does here, so we don't need to account for it. - */ + // `comparesLt` provides bounds of the form `x < y + k` or `x >= y + k`, but we need + // `x <= y + k` so we strengthen here. `testIsTrue` has the same semantics in `comparesLt` as + // it does here, so we don't need to account for it. if upper = true then delta = d-1 else delta = d From c455db9e59dc94bea3294b056fcf7434a6e3bfa5 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Thu, 10 Jan 2019 11:24:13 -0800 Subject: [PATCH 13/13] C++: update test expectations --- .../rangeanalysis/RangeAnalysis.expected | 3 --- .../signanalysis/SignAnalysis.expected | 20 +++++++++------- .../GlobalValueNumbering/ir_gvn.expected | 24 +++++++++---------- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index f27d34002dc0..d48b37bbaf19 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -40,9 +40,6 @@ | test.cpp:140:10:140:10 | Store: i | test.cpp:135:16:135:16 | InitializeParameter: x | 0 | false | CompareLT: ... < ... | test.cpp:139:11:139:15 | test.cpp:139:11:139:15 | | test.cpp:140:10:140:10 | Store: i | test.cpp:138:5:138:5 | Phi: i | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:140:10:140:10 | Store: i | test.cpp:138:5:138:5 | Phi: i | 1 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | -| test.cpp:149:10:149:10 | Store: i | file://:0:0:0:0 | 0 | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | -| test.cpp:149:10:149:10 | Store: i | test.cpp:147:5:147:5 | Phi: i | 1 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | -| test.cpp:149:10:149:10 | Store: i | test.cpp:147:5:147:5 | Phi: i | 1 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | false | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 | | test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareEQ: ... == ... | test.cpp:155:9:155:16 | test.cpp:155:9:155:16 | | test.cpp:156:12:156:12 | Load: x | test.cpp:153:23:153:23 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cpp:154:6:154:10 | test.cpp:154:6:154:10 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected b/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected index 138d6c33a6e2..4a1f172d16df 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected @@ -65,9 +65,9 @@ | test.c:34:5:34:14 | Store: ... += ... | positive | | test.c:34:14:34:14 | Load: i | positive | | test.c:36:10:36:14 | Load: total | positive | -| test.c:36:10:36:18 | Add: ... + ... | positive | -| test.c:36:10:36:18 | Store: ... + ... | positive | -| test.c:36:18:36:18 | Load: i | positive | +| test.c:36:10:36:18 | Add: ... + ... | positive strictlyPositive | +| test.c:36:10:36:18 | Store: ... + ... | positive strictlyPositive | +| test.c:36:18:36:18 | Load: i | positive strictlyPositive | | test.c:42:15:42:15 | Load: i | positive | | test.c:42:15:42:15 | Phi: i | positive | | test.c:42:15:42:15 | Phi: i | positive | @@ -81,9 +81,9 @@ | test.c:43:5:43:14 | Store: ... += ... | positive | | test.c:43:14:43:14 | Load: i | positive | | test.c:45:10:45:14 | Load: total | positive | -| test.c:45:10:45:18 | Add: ... + ... | positive | -| test.c:45:10:45:18 | Store: ... + ... | positive | -| test.c:45:18:45:18 | Load: i | positive | +| test.c:45:10:45:18 | Add: ... + ... | positive strictlyPositive | +| test.c:45:10:45:18 | Store: ... + ... | positive strictlyPositive | +| test.c:45:18:45:18 | Load: i | positive strictlyPositive | | test.c:51:15:51:15 | Load: i | positive | | test.c:51:15:51:15 | Phi: i | positive | | test.c:51:15:51:15 | Phi: i | positive | @@ -448,10 +448,10 @@ | test.c:343:5:343:7 | Constant: ... ++ | positive strictlyPositive | | test.c:343:5:343:7 | Load: ... ++ | positive | | test.c:343:5:343:7 | Store: ... ++ | positive strictlyPositive | -| test.c:345:3:345:7 | Store: ... = ... | positive | -| test.c:345:7:345:7 | Load: i | positive | +| test.c:345:3:345:7 | Store: ... = ... | positive strictlyPositive | +| test.c:345:7:345:7 | Load: i | positive strictlyPositive | | test.c:346:7:346:7 | Load: x | positive | -| test.c:347:9:347:9 | Load: d | positive | +| test.c:347:9:347:9 | Load: d | positive strictlyPositive | | test.c:348:14:348:14 | Constant: 1 | positive strictlyPositive | | test.c:348:14:348:14 | Store: 1 | positive strictlyPositive | | test.c:355:42:355:42 | InitializeParameter: x | positive | @@ -674,6 +674,8 @@ | test.cpp:45:12:45:15 | Constant: 1024 | positive strictlyPositive | | test.cpp:46:5:46:12 | Store: ... = ... | positive strictlyPositive | | test.cpp:46:9:46:12 | Constant: 1024 | positive strictlyPositive | +| test.cpp:57:21:57:21 | Load: x | positive strictlyPositive | +| test.cpp:62:21:62:21 | Load: x | negative strictlyNegative | | test.cpp:69:10:69:21 | Constant: ... \|\| ... | positive strictlyPositive | | test.cpp:69:10:69:21 | Load: ... \|\| ... | positive | | test.cpp:69:10:69:21 | Phi: ... \|\| ... | positive | diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected index dd3c96a23adf..877cdb36750b 100644 --- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected +++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected @@ -365,7 +365,7 @@ test.cpp: # 53| Block 1 # 53| m1_0(unsigned int) = Phi : from 0:m0_11, from 8:m8_4 -# 53| valnum = unique +# 53| valnum = m1_0 # 53| r1_1(glval) = VariableAddress[str] : # 53| valnum = r0_3 # 53| r1_2(char *) = Load : r1_1, m0_4 @@ -395,11 +395,11 @@ test.cpp: # 56| Block 3 # 56| m3_0(char *) = Phi : from 2:m2_3, from 5:m5_4 -# 56| valnum = unique +# 56| valnum = m3_0 # 56| r3_1(glval) = VariableAddress[ptr] : # 56| valnum = r0_7 # 56| r3_2(char *) = Load : r3_1, m3_0 -# 56| valnum = unique +# 56| valnum = m3_0 # 56| r3_3(char) = Load : r3_2, m0_1 # 56| valnum = unique # 56| r3_4(int) = Convert : r3_3 @@ -422,7 +422,7 @@ test.cpp: # 56| r4_0(glval) = VariableAddress[ptr] : # 56| valnum = r0_7 # 56| r4_1(char *) = Load : r4_0, m3_0 -# 56| valnum = unique +# 56| valnum = m3_0 # 56| r4_2(char) = Load : r4_1, m0_1 # 56| valnum = unique # 56| r4_3(int) = Convert : r4_2 @@ -439,7 +439,7 @@ test.cpp: # 56| r5_0(glval) = VariableAddress[ptr] : # 56| valnum = r0_7 # 56| r5_1(char *) = Load : r5_0, m3_0 -# 56| valnum = unique +# 56| valnum = m3_0 # 56| r5_2(int) = Constant[1] : # 56| valnum = unique # 56| r5_3(char *) = PointerAdd[1] : r5_1, r5_2 @@ -452,7 +452,7 @@ test.cpp: # 59| r6_0(glval) = VariableAddress[ptr] : # 59| valnum = r0_7 # 59| r6_1(char *) = Load : r6_0, m3_0 -# 59| valnum = unique +# 59| valnum = m3_0 # 59| r6_2(char) = Load : r6_1, m0_1 # 59| valnum = unique # 59| r6_3(int) = Convert : r6_2 @@ -473,7 +473,7 @@ test.cpp: # 62| r8_0(glval) = VariableAddress[result] : # 62| valnum = r0_9 # 62| r8_1(unsigned int) = Load : r8_0, m1_0 -# 62| valnum = unique +# 62| valnum = m1_0 # 62| r8_2(unsigned int) = Constant[1] : # 62| valnum = unique # 62| r8_3(unsigned int) = Add : r8_1, r8_2 @@ -489,9 +489,9 @@ test.cpp: # 65| r9_2(glval) = VariableAddress[result] : # 65| valnum = r0_9 # 65| r9_3(unsigned int) = Load : r9_2, m1_0 -# 65| valnum = r9_3 +# 65| valnum = m1_0 # 65| m9_4(unsigned int) = Store : r9_1, r9_3 -# 65| valnum = r9_3 +# 65| valnum = m1_0 # 49| r9_5(glval) = VariableAddress[#return] : # 49| valnum = r9_1 # 49| v9_6(void) = ReturnValue : r9_5, m9_4 @@ -639,15 +639,15 @@ test.cpp: # 88| Block 3 # 88| m3_0(int) = Phi : from 1:m1_3, from 2:m2_3 -# 88| valnum = unique +# 88| valnum = m3_0 # 88| r3_1(glval) = VariableAddress[#temp88:7] : # 88| valnum = r1_2 # 88| r3_2(int) = Load : r3_1, m3_0 -# 88| valnum = r3_2 +# 88| valnum = m3_0 # 88| r3_3(glval) = VariableAddress[v] : # 88| valnum = r0_9 # 88| m3_4(int) = Store : r3_3, r3_2 -# 88| valnum = r3_2 +# 88| valnum = m3_0 # 89| v3_5(void) = NoOp : # 84| v3_6(void) = ReturnVoid : # 84| v3_7(void) = UnmodeledUse : mu*