diff --git a/Cargo.lock b/Cargo.lock index 7267065be985..9e30973bcb6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -436,6 +436,7 @@ dependencies = [ "serde_json", "serde_with", "stderrlog", + "toml", "triomphe", ] @@ -2094,6 +2095,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + [[package]] name = "serde_with" version = "3.12.0" @@ -2303,6 +2313,40 @@ dependencies = [ "time-core", ] +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap 2.7.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tracing" version = "0.1.41" @@ -2754,6 +2798,15 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "winnow" +version = "0.6.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +dependencies = [ + "memchr", +] + [[package]] name = "yansi" version = "1.0.1" diff --git a/MODULE.bazel b/MODULE.bazel index 0481eb7a0bb8..73f8271fb63e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -125,6 +125,7 @@ use_repo( "vendor__serde_with-3.12.0", "vendor__stderrlog-0.6.0", "vendor__syn-2.0.96", + "vendor__toml-0.8.19", "vendor__tracing-0.1.41", "vendor__tracing-subscriber-0.3.19", "vendor__tree-sitter-0.24.6", diff --git a/cpp/ql/lib/DefaultOptions.qll b/cpp/ql/lib/DefaultOptions.qll index dd6fe38e792c..e4aa8d1f2d74 100644 --- a/cpp/ql/lib/DefaultOptions.qll +++ b/cpp/ql/lib/DefaultOptions.qll @@ -54,11 +54,11 @@ class Options extends string { * * By default, this holds for `exit`, `_exit`, `_Exit`, `abort`, * `__assert_fail`, `longjmp`, `__builtin_unreachable` and any - * function with a `noreturn` or `__noreturn__` attribute or - * `noreturn` specifier. + * function with a `noreturn`, `__noreturn__`, or `_Noreturn` + * attribute or `noreturn` specifier. */ predicate exits(Function f) { - f.getAnAttribute().hasName(["noreturn", "__noreturn__"]) + f.getAnAttribute().hasName(["noreturn", "__noreturn__", "_Noreturn"]) or f.getASpecifier().hasName("noreturn") or diff --git a/cpp/ql/lib/change-notes/2025-01-16-noreturn.md b/cpp/ql/lib/change-notes/2025-01-16-noreturn.md new file mode 100644 index 000000000000..a270b650d91d --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-01-16-noreturn.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* `DefaultOptions::exits` now holds for C23 functions with the `_Noreturn` or `___Noreturn__` attribute. diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 7f85efa93cd5..b836f12c96f4 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -233,6 +233,114 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardConditionImpl } } +/** + * Holds if `ir` controls `block`, meaning that `block` is only + * entered if the value of this condition is `v`. This helper + * predicate does not necessarily hold for binary logical operations like + * `&&` and `||`. See the detailed explanation on predicate `controls`. + */ +private predicate controlsBlock(IRGuardCondition ir, BasicBlock controlled, AbstractValue v) { + exists(IRBlock irb | + ir.valueControls(irb, v) and + nonExcludedIRAndBasicBlock(irb, controlled) and + not isUnreachedBlock(irb) + ) +} + +private class GuardConditionFromNotExpr extends GuardConditionImpl { + IRGuardCondition ir; + + GuardConditionFromNotExpr() { + // Users often expect the `x` in `!x` to also be a guard condition. But + // from the perspective of the IR the `x` is just the left-hand side of a + // comparison against 0 so it's not included as a normal + // `IRGuardCondition`. So to align with user expectations we make that `x` + // a `GuardCondition`. + exists(NotExpr notExpr | + this = notExpr.getOperand() and + ir.getUnconvertedResultExpression() = notExpr + ) + } + + override predicate valueControls(BasicBlock controlled, AbstractValue v) { + // This condition must determine the flow of control; that is, this + // node must be a top-level condition. + controlsBlock(ir, controlled, v.getDualValue()) + } + + pragma[inline] + override predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { + exists(Instruction li, Instruction ri | + li.getUnconvertedResultExpression() = left and + ri.getUnconvertedResultExpression() = right and + ir.comparesLt(li.getAUse(), ri.getAUse(), k, isLessThan, testIsTrue.booleanNot()) + ) + } + + pragma[inline] + override predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { + exists(Instruction i | + i.getUnconvertedResultExpression() = e and + ir.comparesLt(i.getAUse(), k, isLessThan, value.getDualValue()) + ) + } + + pragma[inline] + override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { + exists(Instruction li, Instruction ri, boolean testIsTrue | + li.getUnconvertedResultExpression() = left and + ri.getUnconvertedResultExpression() = right and + ir.comparesLt(li.getAUse(), ri.getAUse(), k, isLessThan, testIsTrue.booleanNot()) and + this.controls(block, testIsTrue) + ) + } + + pragma[inline] + override predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { + exists(Instruction i, AbstractValue value | + i.getUnconvertedResultExpression() = e and + ir.comparesLt(i.getAUse(), k, isLessThan, value.getDualValue()) and + this.valueControls(block, value) + ) + } + + pragma[inline] + override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { + exists(Instruction li, Instruction ri | + li.getUnconvertedResultExpression() = left and + ri.getUnconvertedResultExpression() = right and + ir.comparesEq(li.getAUse(), ri.getAUse(), k, areEqual, testIsTrue.booleanNot()) + ) + } + + pragma[inline] + override predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { + exists(Instruction li, Instruction ri, boolean testIsTrue | + li.getUnconvertedResultExpression() = left and + ri.getUnconvertedResultExpression() = right and + ir.comparesEq(li.getAUse(), ri.getAUse(), k, areEqual, testIsTrue.booleanNot()) and + this.controls(block, testIsTrue) + ) + } + + pragma[inline] + override predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { + exists(Instruction i | + i.getUnconvertedResultExpression() = e and + ir.comparesEq(i.getAUse(), k, areEqual, value.getDualValue()) + ) + } + + pragma[inline] + override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { + exists(Instruction i, AbstractValue value | + i.getUnconvertedResultExpression() = e and + ir.comparesEq(i.getAUse(), k, areEqual, value.getDualValue()) and + this.valueControls(block, value) + ) + } +} + /** * A Boolean condition in the AST that guards one or more basic blocks and has a corresponding IR * instruction. @@ -245,7 +353,7 @@ private class GuardConditionFromIR extends GuardConditionImpl { override predicate valueControls(BasicBlock controlled, AbstractValue v) { // This condition must determine the flow of control; that is, this // node must be a top-level condition. - this.controlsBlock(controlled, v) + controlsBlock(ir, controlled, v) } pragma[inline] @@ -319,20 +427,6 @@ private class GuardConditionFromIR extends GuardConditionImpl { this.valueControls(block, value) ) } - - /** - * Holds if this condition controls `block`, meaning that `block` is only - * entered if the value of this condition is `v`. This helper - * predicate does not necessarily hold for binary logical operations like - * `&&` and `||`. See the detailed explanation on predicate `controls`. - */ - private predicate controlsBlock(BasicBlock controlled, AbstractValue v) { - exists(IRBlock irb | - ir.valueControls(irb, v) and - nonExcludedIRAndBasicBlock(irb, controlled) and - not isUnreachedBlock(irb) - ) - } } private predicate excludeAsControlledInstruction(Instruction instr) { @@ -588,7 +682,7 @@ class IRGuardCondition extends Instruction { /** Holds if (determined by this guard) `op == k` evaluates to `areEqual` if this expression evaluates to `value`. */ pragma[inline] predicate comparesEq(Operand op, int k, boolean areEqual, AbstractValue value) { - unary_compares_eq(valueNumber(this), op, k, areEqual, false, value) + unary_compares_eq(valueNumber(this), op, k, areEqual, value) } /** @@ -610,7 +704,7 @@ class IRGuardCondition extends Instruction { pragma[inline] predicate ensuresEq(Operand op, int k, IRBlock block, boolean areEqual) { exists(AbstractValue value | - unary_compares_eq(valueNumber(this), op, k, areEqual, false, value) and + unary_compares_eq(valueNumber(this), op, k, areEqual, value) and this.valueControls(block, value) ) } @@ -636,7 +730,7 @@ class IRGuardCondition extends Instruction { pragma[inline] predicate ensuresEqEdge(Operand op, int k, IRBlock pred, IRBlock succ, boolean areEqual) { exists(AbstractValue value | - unary_compares_eq(valueNumber(this), op, k, areEqual, false, value) and + unary_compares_eq(valueNumber(this), op, k, areEqual, value) and this.valueControlsEdge(pred, succ, value) ) } @@ -847,77 +941,59 @@ private module Cached { compares_eq(test.(BuiltinExpectCallValueNumber).getCondition(), left, right, k, areEqual, value) } + private predicate isConvertedBool(Instruction instr) { + instr.getResultIRType() instanceof IRBooleanType + or + isConvertedBool(instr.(ConvertInstruction).getUnary()) + or + isConvertedBool(instr.(BuiltinExpectCallInstruction).getCondition()) + } + /** * Holds if `op == k` is `areEqual` given that `test` is equal to `value`. - * - * Many internal predicates in this file have a `inNonZeroCase` column. - * Ideally, the `k` column would be a type such as `Option::Option`, to - * represent whether we have a concrete value `k` such that `op == k`, or whether - * we only know that `op != 0`. - * However, cannot instantiate `Option` with an infinite type. Thus the boolean - * `inNonZeroCase` is used to distinquish the `Some` (where we have a concrete - * value `k`) and `None` cases (where we only know that `op != 0`). - * - * Thus, if `inNonZeroCase = true` then `op != 0` and the value of `k` is - * meaningless. - * - * To see why `inNonZeroCase` is needed consider the following C program: - * ```c - * char* p = ...; - * if(p) { - * use(p); - * } - * ``` - * in C++ there would be an int-to-bool conversion on `p`. However, since C - * does not have booleans there is no conversion. We want to be able to - * conclude that `p` is non-zero in the true branch, so we need to give `k` - * some value. However, simply setting `k = 1` would make the rest of the - * analysis think that `k == 1` holds inside the branch. So we distinquish - * between the above case and - * ```c - * if(p == 1) { - * use(p) - * } - * ``` - * by setting `inNonZeroCase` to `true` in the former case, but not in the - * latter. */ cached predicate unary_compares_eq( - ValueNumber test, Operand op, int k, boolean areEqual, boolean inNonZeroCase, - AbstractValue value + ValueNumber test, Operand op, int k, boolean areEqual, AbstractValue value ) { /* The simple case where the test *is* the comparison so areEqual = testIsTrue xor eq. */ - exists(AbstractValue v | unary_simple_comparison_eq(test, op, k, inNonZeroCase, v) | + exists(AbstractValue v | unary_simple_comparison_eq(test, op, k, v) | areEqual = true and value = v or areEqual = false and value = v.getDualValue() ) or - unary_complex_eq(test, op, k, areEqual, inNonZeroCase, value) + unary_complex_eq(test, op, k, areEqual, value) or /* (x is true => (op == k)) => (!x is false => (op == k)) */ - exists(AbstractValue dual, boolean inNonZeroCase0 | + exists(AbstractValue dual | value = dual.getDualValue() and - unary_compares_eq(test.(LogicalNotValueNumber).getUnary(), op, k, inNonZeroCase0, areEqual, - dual) - | - k = 0 and inNonZeroCase = inNonZeroCase0 - or - k != 0 and inNonZeroCase = true + unary_compares_eq(test.(LogicalNotValueNumber).getUnary(), op, k, areEqual, dual) ) or // ((test is `areEqual` => op == const + k2) and const == `k1`) => // test is `areEqual` => op == k1 + k2 - inNonZeroCase = false and exists(int k1, int k2, Instruction const | compares_eq(test, op, const.getAUse(), k2, areEqual, value) and int_value(const) = k1 and k = k1 + k2 ) or - unary_compares_eq(test.(BuiltinExpectCallValueNumber).getCondition(), op, k, areEqual, - inNonZeroCase, value) + exists(CompareValueNumber cmp, Operand left, Operand right, AbstractValue v | + test = cmp and + cmp.hasOperands(left, right) and + isConvertedBool(left.getDef()) and + int_value(right.getDef()) = 0 and + unary_compares_eq(valueNumberOfOperand(left), op, k, areEqual, v) + | + cmp instanceof CompareNEValueNumber and + v = value + or + cmp instanceof CompareEQValueNumber and + v.getDualValue() = value + ) + or + unary_compares_eq(test.(BuiltinExpectCallValueNumber).getCondition(), op, k, areEqual, value) } /** Rearrange various simple comparisons into `left == right + k` form. */ @@ -939,74 +1015,64 @@ private module Cached { * Holds if `op` is an operand that is eventually used in a unary comparison * with a constant. */ - private predicate isRelevantUnaryComparisonOperand(Operand op) { - // Base case: `op` is an operand of a `CompareEQInstruction` or `CompareNEInstruction`, - // and the other operand is a constant. - exists(CompareInstruction eq, Instruction instr | - eq.hasOperands(op, instr.getAUse()) and - exists(int_value(instr)) - | - eq instanceof CompareEQInstruction - or - eq instanceof CompareNEInstruction - ) - or - // C doesn't have int-to-bool conversions, so `if(x)` will just generate: - // r2_1(glval) = VariableAddress[x] - // r2_2(int) = Load[x] : &:r2_1, m1_6 - // v2_3(void) = ConditionalBranch : r2_2 - exists(ConditionalBranchInstruction branch | branch.getConditionOperand() = op) + private predicate mayBranchOn(Instruction instr) { + exists(ConditionalBranchInstruction branch | branch.getCondition() = instr) or // If `!x` is a relevant unary comparison then so is `x`. exists(LogicalNotInstruction logicalNot | - isRelevantUnaryComparisonOperand(unique( | | logicalNot.getAUse())) and - logicalNot.getUnaryOperand() = op + mayBranchOn(logicalNot) and + logicalNot.getUnary() = instr ) or // If `y` is a relevant unary comparison and `y = x` then so is `x`. - not op.isDefinitionInexact() and exists(CopyInstruction copy | - isRelevantUnaryComparisonOperand(unique( | | copy.getAUse())) and - op = copy.getSourceValueOperand() + mayBranchOn(copy) and + instr = copy.getSourceValue() ) or // If phi(x1, x2) is a relevant unary comparison then so are `x1` and `x2`. - not op.isDefinitionInexact() and exists(PhiInstruction phi | - isRelevantUnaryComparisonOperand(unique( | | phi.getAUse())) and - op = phi.getAnInputOperand() + mayBranchOn(phi) and + instr = phi.getAnInput() ) or // If `__builtin_expect(x)` is a relevant unary comparison then so is `x`. exists(BuiltinExpectCallInstruction call | - isRelevantUnaryComparisonOperand(unique( | | call.getAUse())) and - op = call.getConditionOperand() + mayBranchOn(call) and + instr = call.getCondition() ) } /** Rearrange various simple comparisons into `op == k` form. */ private predicate unary_simple_comparison_eq( - ValueNumber test, Operand op, int k, boolean inNonZeroCase, AbstractValue value + ValueNumber test, Operand op, int k, AbstractValue value ) { exists(CaseEdge case, SwitchConditionValueNumber condition | condition = test and op = condition.getExpressionOperand() and case = value.(MatchValue).getCase() and exists(condition.getSuccessor(case)) and - case.getValue().toInt() = k and - inNonZeroCase = false + case.getValue().toInt() = k ) or - isRelevantUnaryComparisonOperand(op) and - op.getDef() = test.getAnInstruction() and - ( - k = 1 and + exists(Instruction const | int_value(const) = k | value.(BooleanValue).getValue() = true and - inNonZeroCase = true + test.(CompareEQValueNumber).hasOperands(op, const.getAUse()) or - k = 0 and value.(BooleanValue).getValue() = false and - inNonZeroCase = false + test.(CompareNEValueNumber).hasOperands(op, const.getAUse()) + ) + or + exists(BooleanValue bv | + bv = value and + mayBranchOn(op.getDef()) and + op = test.getAUse() + | + k = 0 and + bv.getValue() = false + or + k = 1 and + bv.getValue() = true ) } @@ -1061,13 +1127,12 @@ private module Cached { * an instruction that compares the value of `__builtin_expect(op == k, _)` to `0`. */ private predicate unary_builtin_expect_eq( - CompareValueNumber cmp, Operand op, int k, boolean areEqual, boolean inNonZeroCase, - AbstractValue value + CompareValueNumber cmp, Operand op, int k, boolean areEqual, AbstractValue value ) { exists(BuiltinExpectCallValueNumber call, Instruction const, AbstractValue innerValue | int_value(const) = 0 and cmp.hasOperands(call.getAUse(), const.getAUse()) and - unary_compares_eq(call.getCondition(), op, k, areEqual, inNonZeroCase, innerValue) + unary_compares_eq(call.getCondition(), op, k, areEqual, innerValue) | cmp instanceof CompareNEValueNumber and value = innerValue @@ -1078,14 +1143,13 @@ private module Cached { } private predicate unary_complex_eq( - ValueNumber test, Operand op, int k, boolean areEqual, boolean inNonZeroCase, - AbstractValue value + ValueNumber test, Operand op, int k, boolean areEqual, AbstractValue value ) { - unary_sub_eq(test, op, k, areEqual, inNonZeroCase, value) + unary_sub_eq(test, op, k, areEqual, value) or - unary_add_eq(test, op, k, areEqual, inNonZeroCase, value) + unary_add_eq(test, op, k, areEqual, value) or - unary_builtin_expect_eq(test, op, k, areEqual, inNonZeroCase, value) + unary_builtin_expect_eq(test, op, k, areEqual, value) } /* @@ -1347,20 +1411,17 @@ private module Cached { // op - x == c => op == (c+x) private predicate unary_sub_eq( - ValueNumber test, Operand op, int k, boolean areEqual, boolean inNonZeroCase, - AbstractValue value + ValueNumber test, Operand op, int k, boolean areEqual, AbstractValue value ) { - inNonZeroCase = false and exists(SubInstruction sub, int c, int x | - unary_compares_eq(test, sub.getAUse(), c, areEqual, inNonZeroCase, value) and + unary_compares_eq(test, sub.getAUse(), c, areEqual, value) and op = sub.getLeftOperand() and x = int_value(sub.getRight()) and k = c + x ) or - inNonZeroCase = false and exists(PointerSubInstruction sub, int c, int x | - unary_compares_eq(test, sub.getAUse(), c, areEqual, inNonZeroCase, value) and + unary_compares_eq(test, sub.getAUse(), c, areEqual, value) and op = sub.getLeftOperand() and x = int_value(sub.getRight()) and k = c + x @@ -1415,12 +1476,10 @@ private module Cached { // left + x == right + c => left == right + (c-x) private predicate unary_add_eq( - ValueNumber test, Operand left, int k, boolean areEqual, boolean inNonZeroCase, - AbstractValue value + ValueNumber test, Operand left, int k, boolean areEqual, AbstractValue value ) { - inNonZeroCase = false and exists(AddInstruction lhs, int c, int x | - unary_compares_eq(test, lhs.getAUse(), c, areEqual, inNonZeroCase, value) and + unary_compares_eq(test, lhs.getAUse(), c, areEqual, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -1429,9 +1488,8 @@ private module Cached { k = c - x ) or - inNonZeroCase = false and exists(PointerAddInstruction lhs, int c, int x | - unary_compares_eq(test, lhs.getAUse(), c, areEqual, inNonZeroCase, value) and + unary_compares_eq(test, lhs.getAUse(), c, areEqual, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll index 29cdcfedda0f..5e2461ba8b7c 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll @@ -171,6 +171,23 @@ module Raw { // forwarded the result of another translated expression. instruction = translatedExpr.getInstruction(_) ) + or + // Consider the snippet `if(x) { ... }` where `x` is an integer. + // In C++ there is a `BoolConversion` conversion on `x` which generates a + // `CompareNEInstruction` whose `getInstructionConvertedResultExpression` + // is the `BoolConversion` (by the logic in the disjunct above). Thus, + // calling `getInstructionUnconvertedResultExpression` on the + // `CompareNEInstruction` gives `x` in C++ code. + // However, in C there is no such conversion to return. So instead we have + // to map the result of `getInstructionConvertedResultExpression` on the + // `CompareNEInstruction` to `x` manually. This ensures that calling + // `getInstructionUnconvertedResultExpression` on the `CompareNEInstruction` + // gives `x` in both the C case and C++ case. + exists(TranslatedValueCondition translatedValueCondition | + translatedValueCondition = getTranslatedCondition(result) and + translatedValueCondition.shouldGenerateCompareNE() and + instruction = translatedValueCondition.getInstruction(ValueConditionCompareTag()) + ) } cached diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll index 06e6ffa654ab..35e08e5920c4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll @@ -38,7 +38,11 @@ newtype TInstructionTag = AllocationSizeTag() or AllocationElementSizeTag() or AllocationExtentConvertTag() or + ValueConditionCompareTag() or + ValueConditionConstantTag() or ValueConditionConditionalBranchTag() or + ValueConditionConditionalConstantTag() or + ValueConditionConditionalCompareTag() or ConditionValueTrueTempAddressTag() or ConditionValueTrueConstantTag() or ConditionValueTrueStoreTag() or @@ -49,6 +53,8 @@ newtype TInstructionTag = ConditionValueResultLoadTag() or BoolConversionConstantTag() or BoolConversionCompareTag() or + NotExprOperationTag() or + NotExprConstantTag() or ResultCopyTag() or LoadTag() or // Implicit load due to lvalue-to-rvalue conversion CatchTag() or @@ -167,6 +173,14 @@ string getInstructionTagId(TInstructionTag tag) { or tag = ValueConditionConditionalBranchTag() and result = "ValCondCondBranch" or + tag = ValueConditionConditionalConstantTag() and result = "ValueConditionConditionalConstant" + or + tag = ValueConditionConditionalCompareTag() and result = "ValueConditionConditionalCompare" + or + tag = ValueConditionCompareTag() and result = "ValCondCondCompare" + or + tag = ValueConditionConstantTag() and result = "ValCondConstant" + or tag = ConditionValueTrueTempAddressTag() and result = "CondValTrueTempAddr" or tag = ConditionValueTrueConstantTag() and result = "CondValTrueConst" @@ -187,6 +201,10 @@ string getInstructionTagId(TInstructionTag tag) { or tag = BoolConversionCompareTag() and result = "BoolConvComp" or + tag = NotExprOperationTag() and result = "NotExprOperation" + or + tag = NotExprConstantTag() and result = "NotExprWithBoolConversionConstant" + or tag = ResultCopyTag() and result = "ResultCopy" or tag = LoadTag() and result = "Load" // Implicit load due to lvalue-to-rvalue conversion diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCondition.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCondition.qll index 1616c9c434b1..a31494db8b02 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCondition.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCondition.qll @@ -187,7 +187,24 @@ class TranslatedValueCondition extends TranslatedCondition, TTranslatedValueCond final override predicate handlesDestructorsExplicitly() { none() } // TODO: this needs to be revisted when we get unnamed destructors + private Type getValueExprType() { + result = this.getValueExpr().getExprType().getUnspecifiedType() + } + + predicate shouldGenerateCompareNE() { not this.getValueExprType() instanceof BoolType } + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + this.shouldGenerateCompareNE() and + ( + tag = ValueConditionCompareTag() and + opcode instanceof Opcode::CompareNE and + resultType = getBoolType() + or + tag = ValueConditionConstantTag() and + opcode instanceof Opcode::Constant and + resultType = getTypeForPRValue(this.getValueExprType()) + ) + or tag = ValueConditionConditionalBranchTag() and opcode instanceof Opcode::ConditionalBranch and resultType = getVoidType() @@ -195,11 +212,24 @@ class TranslatedValueCondition extends TranslatedCondition, TTranslatedValueCond override Instruction getChildSuccessorInternal(TranslatedElement child, EdgeKind kind) { child = this.getValueExpr() and - result = this.getInstruction(ValueConditionConditionalBranchTag()) and - kind instanceof GotoEdge + kind instanceof GotoEdge and + if this.shouldGenerateCompareNE() + then result = this.getInstruction(ValueConditionConstantTag()) + else result = this.getInstruction(ValueConditionConditionalBranchTag()) } override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + this.shouldGenerateCompareNE() and + ( + tag = ValueConditionConstantTag() and + kind instanceof GotoEdge and + result = this.getInstruction(ValueConditionCompareTag()) + or + tag = ValueConditionCompareTag() and + kind instanceof GotoEdge and + result = this.getInstruction(ValueConditionConditionalBranchTag()) + ) + or tag = ValueConditionConditionalBranchTag() and ( kind instanceof TrueEdge and @@ -211,9 +241,26 @@ class TranslatedValueCondition extends TranslatedCondition, TTranslatedValueCond } override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + this.shouldGenerateCompareNE() and + tag = ValueConditionCompareTag() and + ( + operandTag instanceof LeftOperandTag and + result = this.getValueExpr().getResult() + or + operandTag instanceof RightOperandTag and + result = this.getInstruction(ValueConditionConstantTag()) + ) + or tag = ValueConditionConditionalBranchTag() and operandTag instanceof ConditionOperandTag and - result = this.getValueExpr().getResult() + if this.shouldGenerateCompareNE() + then result = this.getInstruction(ValueConditionCompareTag()) + else result = this.getValueExpr().getResult() + } + + override string getInstructionConstantValue(InstructionTag tag) { + tag = ValueConditionConstantTag() and + result = "0" } private TranslatedExpr getValueExpr() { result = getTranslatedExpr(expr) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index 573df94a740e..f21f44956768 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -59,10 +59,19 @@ abstract class TranslatedExpr extends TranslatedElement { final CppType getResultType() { if this.isResultGLValue() - then result = getTypeForGLValue(expr.getType()) - else result = getTypeForPRValue(expr.getType()) + then result = getTypeForGLValue(this.getExprType()) + else result = getTypeForPRValue(this.getExprType()) } + /** + * Gets the type of `expr`. + * + * This predicate can be overwritten in subclasses to modify the result + * of `getResultType` which determines the type of the instruction that + * generates the result of `expr`. + */ + Type getExprType() { result = expr.getType() } + /** * Holds if the result of this `TranslatedExpr` is a glvalue. */ @@ -1262,9 +1271,10 @@ abstract class TranslatedSingleInstructionExpr extends TranslatedNonConstantExpr class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr { TranslatedUnaryExpr() { - expr instanceof NotExpr or - expr instanceof ComplementExpr or - expr instanceof UnaryPlusExpr or + expr instanceof ComplementExpr + or + expr instanceof UnaryPlusExpr + or expr instanceof UnaryMinusExpr } @@ -1298,8 +1308,6 @@ class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr { } final override Opcode getOpcode() { - expr instanceof NotExpr and result instanceof Opcode::LogicalNot - or expr instanceof ComplementExpr and result instanceof Opcode::BitComplement or expr instanceof UnaryPlusExpr and result instanceof Opcode::CopyValue @@ -1312,6 +1320,100 @@ class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr { } } +/** + * The IR translation of a `NotExpr`. + * + * In C++ an operation such as `!x` where `x` is an `int` will generate + * ``` + * r1(glval) = VariableAddress[x] : + * r2(int) = Load : &r1 + * r3(int) = Constant[0] : + * r4(bool) = CompareNE : r2, r3 + * r5(bool) = LogicalNot : r4 + * ``` + * since C does not do implicit int-to-bool casts we need to generate the + * `Constant[0]`, `CompareNE`, and `LogicalNot` instructions manually, but + * we simplify this and generate `Constant[0]`, `CompareEQ` instead. + */ +class TranslatedNotExpr extends TranslatedNonConstantExpr { + override NotExpr expr; + + override Type getExprType() { result instanceof BoolType } + + private Type getOperandType() { result = this.getOperand().getExprType().getUnspecifiedType() } + + predicate shouldGenerateEq() { not this.getOperandType() instanceof BoolType } + + final override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getOperand().getFirstInstruction(kind) + } + + override Instruction getALastInstructionInternal() { + result = this.getInstruction(NotExprOperationTag()) + } + + final override TranslatedElement getChildInternal(int id) { + id = 0 and result = this.getOperand() + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + this.shouldGenerateEq() and + tag = NotExprConstantTag() and + opcode instanceof Opcode::Constant and + resultType = getTypeForPRValue(this.getOperandType()) + or + resultType = getBoolType() and + tag = NotExprOperationTag() and + if this.shouldGenerateEq() + then opcode instanceof Opcode::CompareEQ + else opcode instanceof Opcode::LogicalNot + } + + final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = NotExprOperationTag() and + result = this.getParent().getChildSuccessor(this, kind) + or + tag = NotExprConstantTag() and + kind instanceof GotoEdge and + result = this.getInstruction(NotExprOperationTag()) + } + + final override Instruction getChildSuccessorInternal(TranslatedElement child, EdgeKind kind) { + child = this.getOperand() and + kind instanceof GotoEdge and + if this.shouldGenerateEq() + then result = this.getInstruction(NotExprConstantTag()) + else result = this.getInstruction(NotExprOperationTag()) + } + + final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + tag = NotExprOperationTag() and + if this.shouldGenerateEq() + then ( + result = this.getOperand().getResult() and + operandTag instanceof LeftOperandTag + or + result = this.getInstruction(NotExprConstantTag()) and + operandTag instanceof RightOperandTag + ) else ( + operandTag instanceof UnaryOperandTag and + result = this.getOperand().getResult() + ) + } + + private TranslatedExpr getOperand() { + result = getTranslatedExpr(expr.getOperand().getFullyConverted()) + } + + final override Instruction getResult() { result = this.getInstruction(NotExprOperationTag()) } + + override string getInstructionConstantValue(InstructionTag tag) { + this.shouldGenerateEq() and + tag = NotExprConstantTag() and + result = "0" + } +} + /** * IR translation of a `co_await` or `co_yield` expression. * @@ -1754,6 +1856,12 @@ class TranslatedBinaryOperation extends TranslatedSingleInstructionExpr { result = comparisonOpcode(expr) } + override Type getExprType() { + if exists(comparisonOpcode(expr)) + then result instanceof BoolType + else result = super.getExprType() + } + override int getInstructionElementSize(InstructionTag tag) { tag = OnlyInstructionTag() and exists(Opcode opcode | @@ -2857,6 +2965,10 @@ class TranslatedBinaryConditionalExpr extends TranslatedConditionalExpr { result = this.getCondition().getFirstInstruction(kind) } + private Type getConditionType() { + result = this.getCondition().getExprType().getUnspecifiedType() + } + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { super.hasInstruction(opcode, tag, resultType) or @@ -2864,11 +2976,35 @@ class TranslatedBinaryConditionalExpr extends TranslatedConditionalExpr { tag = ValueConditionConditionalBranchTag() and opcode instanceof Opcode::ConditionalBranch and resultType = getVoidType() + or + exists(Type t | + t = this.getConditionType() and + not t instanceof BoolType + | + tag = ValueConditionConditionalConstantTag() and + opcode instanceof Opcode::Constant and + resultType = getTypeForPRValue(t) + or + tag = ValueConditionConditionalCompareTag() and + opcode instanceof Opcode::CompareNE and + resultType = getBoolType() + ) } override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { result = super.getInstructionSuccessorInternal(tag, kind) or + not this.getConditionType() instanceof BoolType and + ( + tag = ValueConditionConditionalConstantTag() and + kind instanceof GotoEdge and + result = this.getInstruction(ValueConditionConditionalCompareTag()) + or + tag = ValueConditionConditionalCompareTag() and + kind instanceof GotoEdge and + result = this.getInstruction(ValueConditionConditionalBranchTag()) + ) + or tag = ValueConditionConditionalBranchTag() and ( kind instanceof TrueEdge and @@ -2884,7 +3020,19 @@ class TranslatedBinaryConditionalExpr extends TranslatedConditionalExpr { or tag = ValueConditionConditionalBranchTag() and operandTag instanceof ConditionOperandTag and - result = this.getCondition().getResult() + if this.getConditionType() instanceof BoolType + then result = this.getCondition().getResult() + else result = this.getInstruction(ValueConditionConditionalCompareTag()) + or + not this.getConditionType() instanceof BoolType and + tag = ValueConditionConditionalCompareTag() and + ( + operandTag instanceof LeftOperandTag and + result = this.getCondition().getResult() + or + operandTag instanceof RightOperandTag and + result = this.getInstruction(ValueConditionConditionalConstantTag()) + ) } override Instruction getChildSuccessorInternal(TranslatedElement child, EdgeKind kind) { @@ -2892,7 +3040,9 @@ class TranslatedBinaryConditionalExpr extends TranslatedConditionalExpr { or kind instanceof GotoEdge and child = this.getCondition() and - result = this.getInstruction(ValueConditionConditionalBranchTag()) + if this.getConditionType() instanceof BoolType + then result = this.getInstruction(ValueConditionConditionalBranchTag()) + else result = this.getInstruction(ValueConditionConditionalConstantTag()) } private TranslatedExpr getCondition() { @@ -2909,6 +3059,11 @@ class TranslatedBinaryConditionalExpr extends TranslatedConditionalExpr { // always converting the "then" operand to `bool`, which is almost always the wrong type. result = getTranslatedExpr(expr.getThen().getExplicitlyConverted()) } + + override string getInstructionConstantValue(InstructionTag tag) { + tag = ValueConditionConditionalConstantTag() and + result = "0" + } } /** diff --git a/cpp/ql/src/Architecture/Refactoring Opportunities/ClassesWithManyFields.ql b/cpp/ql/src/Architecture/Refactoring Opportunities/ClassesWithManyFields.ql index b1d0e4d2619a..15884ba10e4f 100644 --- a/cpp/ql/src/Architecture/Refactoring Opportunities/ClassesWithManyFields.ql +++ b/cpp/ql/src/Architecture/Refactoring Opportunities/ClassesWithManyFields.ql @@ -168,12 +168,7 @@ where strictcount(string fieldName | exists(Field f | f.getDeclaringType() = c and - fieldName = f.getName() and - // IBOutlet's are a way of building GUIs - // automatically out of ObjC properties. - // We don't want to count those for the - // purposes of this query. - not f.getType().getAnAttribute().hasName("iboutlet") + fieldName = f.getName() ) ) and n > 15 and diff --git a/cpp/ql/test/experimental/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected b/cpp/ql/test/experimental/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected index 72abbe99f378..dd33bd7e04f0 100644 --- a/cpp/ql/test/experimental/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected +++ b/cpp/ql/test/experimental/library-tests/rangeanalysis/signanalysis/SignAnalysis.expected @@ -497,18 +497,18 @@ | test.c:358:24:358:24 | Load: x | positive | | test.c:365:7:365:7 | Load: x | positive | | test.c:365:11:365:13 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:366:5:366:15 | Store: ... = ... | positive | +| test.c:366:5:366:15 | Store: ... = ... | positive strictlyPositive | | test.c:366:10:366:10 | Load: x | positive | -| test.c:366:10:366:15 | Load: ... ? ... : ... | positive | -| test.c:366:10:366:15 | Phi: ... ? ... : ... | positive | -| test.c:366:10:366:15 | Store: ... ? ... : ... | positive | +| test.c:366:10:366:15 | Load: ... ? ... : ... | positive strictlyPositive | +| test.c:366:10:366:15 | Phi: ... ? ... : ... | positive strictlyPositive | +| test.c:366:10:366:15 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:366:10:366:15 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:366:15:366:15 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:367:5:367:17 | Store: ... = ... | positive | +| test.c:367:5:367:17 | Store: ... = ... | positive strictlyPositive | | test.c:367:10:367:10 | Load: x | positive | -| test.c:367:10:367:17 | Load: ... ? ... : ... | positive | -| test.c:367:10:367:17 | Phi: ... ? ... : ... | positive | -| test.c:367:10:367:17 | Store: ... ? ... : ... | positive | +| test.c:367:10:367:17 | Load: ... ? ... : ... | positive strictlyPositive | +| test.c:367:10:367:17 | Phi: ... ? ... : ... | positive strictlyPositive | +| test.c:367:10:367:17 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:367:10:367:17 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:367:15:367:17 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:368:5:368:21 | Store: ... = ... | positive strictlyPositive | @@ -520,33 +520,33 @@ | test.c:368:11:368:13 | Add: ... + ... | positive strictlyPositive | | test.c:368:13:368:13 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:368:19:368:21 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:369:5:369:36 | Store: ... = ... | positive | -| test.c:369:10:369:36 | Convert: (unsigned int)... | positive | -| test.c:369:10:369:36 | Load: ... ? ... : ... | positive | -| test.c:369:10:369:36 | Phi: ... ? ... : ... | positive | -| test.c:369:10:369:36 | Store: ... ? ... : ... | positive | +| test.c:369:5:369:36 | Store: ... = ... | positive strictlyPositive | +| test.c:369:10:369:36 | Convert: (unsigned int)... | positive strictlyPositive | +| test.c:369:10:369:36 | Load: ... ? ... : ... | positive strictlyPositive | +| test.c:369:10:369:36 | Phi: ... ? ... : ... | positive strictlyPositive | +| test.c:369:10:369:36 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:369:10:369:36 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:369:11:369:30 | Convert: (unsigned char)... | positive | | test.c:369:27:369:27 | Load: x | positive | | test.c:369:27:369:29 | Add: ... + ... | positive strictlyPositive | | test.c:369:29:369:29 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:369:36:369:36 | Constant: 5 | positive strictlyPositive | -| test.c:370:5:370:38 | Store: ... = ... | positive | -| test.c:370:10:370:38 | Convert: (unsigned int)... | positive | -| test.c:370:10:370:38 | Load: ... ? ... : ... | positive | -| test.c:370:10:370:38 | Phi: ... ? ... : ... | positive | -| test.c:370:10:370:38 | Store: ... ? ... : ... | positive | +| test.c:370:5:370:38 | Store: ... = ... | positive strictlyPositive | +| test.c:370:10:370:38 | Convert: (unsigned int)... | positive strictlyPositive | +| test.c:370:10:370:38 | Load: ... ? ... : ... | positive strictlyPositive | +| test.c:370:10:370:38 | Phi: ... ? ... : ... | positive strictlyPositive | +| test.c:370:10:370:38 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:370:10:370:38 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:370:11:370:30 | Convert: (unsigned char)... | positive | | test.c:370:27:370:27 | Load: x | positive | | test.c:370:27:370:29 | Add: ... + ... | positive strictlyPositive | | test.c:370:29:370:29 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:370:36:370:38 | Constant: 500 | positive strictlyPositive | -| test.c:371:5:371:39 | Store: ... = ... | positive | -| test.c:371:10:371:39 | Convert: (unsigned int)... | positive | -| test.c:371:10:371:39 | Load: ... ? ... : ... | positive | -| test.c:371:10:371:39 | Phi: ... ? ... : ... | positive | -| test.c:371:10:371:39 | Store: ... ? ... : ... | positive | +| test.c:371:5:371:39 | Store: ... = ... | positive strictlyPositive | +| test.c:371:10:371:39 | Convert: (unsigned int)... | positive strictlyPositive | +| test.c:371:10:371:39 | Load: ... ? ... : ... | positive strictlyPositive | +| test.c:371:10:371:39 | Phi: ... ? ... : ... | positive strictlyPositive | +| test.c:371:10:371:39 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:371:10:371:39 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:371:11:371:31 | Convert: (unsigned short)... | positive | | test.c:371:28:371:28 | Load: x | positive | @@ -607,38 +607,38 @@ | test.c:383:8:383:11 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:384:7:384:7 | Load: x | positive | | test.c:384:12:384:14 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:385:5:385:21 | Store: ... = ... | positive | -| test.c:385:10:385:21 | Load: ... ? ... : ... | positive | -| test.c:385:10:385:21 | Phi: ... ? ... : ... | positive | -| test.c:385:10:385:21 | Store: ... ? ... : ... | positive | +| test.c:385:5:385:21 | Store: ... = ... | positive strictlyPositive | +| test.c:385:10:385:21 | Load: ... ? ... : ... | positive strictlyPositive | +| test.c:385:10:385:21 | Phi: ... ? ... : ... | positive strictlyPositive | +| test.c:385:10:385:21 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:385:10:385:21 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:385:11:385:11 | Load: x | positive strictlyPositive | | test.c:385:11:385:15 | Sub: ... - ... | positive | | test.c:385:13:385:15 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:385:21:385:21 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:386:5:386:21 | Store: ... = ... | positive | -| test.c:386:10:386:21 | Load: ... ? ... : ... | positive | -| test.c:386:10:386:21 | Phi: ... ? ... : ... | positive | -| test.c:386:10:386:21 | Store: ... ? ... : ... | positive | +| test.c:386:5:386:21 | Store: ... = ... | positive strictlyPositive | +| test.c:386:10:386:21 | Load: ... ? ... : ... | positive strictlyPositive | +| test.c:386:10:386:21 | Phi: ... ? ... : ... | positive strictlyPositive | +| test.c:386:10:386:21 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:386:10:386:21 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:386:11:386:11 | Load: x | positive strictlyPositive | | test.c:386:11:386:15 | Sub: ... - ... | positive | | test.c:386:13:386:15 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:386:21:386:21 | Constant: (unsigned int)... | positive strictlyPositive | -| test.c:387:5:387:38 | Store: ... = ... | positive | -| test.c:387:10:387:38 | Convert: (unsigned int)... | positive | -| test.c:387:10:387:38 | Load: ... ? ... : ... | positive | -| test.c:387:10:387:38 | Phi: ... ? ... : ... | positive | -| test.c:387:10:387:38 | Store: ... ? ... : ... | positive | +| test.c:387:5:387:38 | Store: ... = ... | positive strictlyPositive | +| test.c:387:10:387:38 | Convert: (unsigned int)... | positive strictlyPositive | +| test.c:387:10:387:38 | Load: ... ? ... : ... | positive strictlyPositive | +| test.c:387:10:387:38 | Phi: ... ? ... : ... | positive strictlyPositive | +| test.c:387:10:387:38 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:387:10:387:38 | Store: ... ? ... : ... | positive strictlyPositive | | test.c:387:11:387:32 | Convert: (unsigned char)... | positive | | test.c:387:27:387:27 | Load: x | positive strictlyPositive | | test.c:387:27:387:31 | Sub: ... - ... | positive | | test.c:387:29:387:31 | Constant: (unsigned int)... | positive strictlyPositive | | test.c:387:38:387:38 | Constant: 5 | positive strictlyPositive | -| test.c:389:3:389:32 | Phi: return ... | positive | -| test.c:389:3:389:32 | Phi: return ... | positive | -| test.c:389:3:389:32 | Phi: return ... | positive | +| test.c:389:3:389:32 | Phi: return ... | positive strictlyPositive | +| test.c:389:3:389:32 | Phi: return ... | positive strictlyPositive | +| test.c:389:3:389:32 | Phi: return ... | positive strictlyPositive | | test.c:389:10:389:11 | Load: y1 | positive strictlyPositive | | test.c:389:10:389:16 | Add: ... + ... | positive strictlyPositive | | test.c:389:10:389:21 | Add: ... + ... | positive strictlyPositive | @@ -646,9 +646,9 @@ | test.c:389:10:389:31 | Add: ... + ... | positive strictlyPositive | | test.c:389:10:389:31 | Store: ... + ... | positive strictlyPositive | | test.c:389:15:389:16 | Load: y2 | positive strictlyPositive | -| test.c:389:20:389:21 | Load: y3 | positive | -| test.c:389:25:389:26 | Load: y4 | positive | -| test.c:389:30:389:31 | Load: y5 | positive | +| test.c:389:20:389:21 | Load: y3 | positive strictlyPositive | +| test.c:389:25:389:26 | Load: y4 | positive strictlyPositive | +| test.c:389:30:389:31 | Load: y5 | positive strictlyPositive | | test.c:393:40:393:40 | InitializeParameter: x | positive | | test.c:394:20:394:20 | Load: x | positive | | test.c:394:20:394:36 | Load: ... ? ... : ... | positive | diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected index 24ce995f8133..472e48a05b0f 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -43,7 +43,9 @@ astGuardsCompare | 7 | 0 < x+0 when ... > ... is true | | 7 | 0 >= x+0 when ... > ... is false | | 7 | ... > ... != 0 when ... > ... is true | +| 7 | ... > ... != 1 when ... > ... is false | | 7 | ... > ... == 0 when ... > ... is false | +| 7 | ... > ... == 1 when ... > ... is true | | 7 | x < 0+1 when ... > ... is false | | 7 | x >= 0+1 when ... > ... is true | | 17 | 0 < x+1 when ... < ... is false | @@ -54,10 +56,16 @@ astGuardsCompare | 17 | 1 >= y+0 when ... > ... is false | | 17 | ... < ... != 0 when ... && ... is true | | 17 | ... < ... != 0 when ... < ... is true | +| 17 | ... < ... != 1 when ... < ... is false | | 17 | ... < ... == 0 when ... < ... is false | +| 17 | ... < ... == 1 when ... && ... is true | +| 17 | ... < ... == 1 when ... < ... is true | | 17 | ... > ... != 0 when ... && ... is true | | 17 | ... > ... != 0 when ... > ... is true | +| 17 | ... > ... != 1 when ... > ... is false | | 17 | ... > ... == 0 when ... > ... is false | +| 17 | ... > ... == 1 when ... && ... is true | +| 17 | ... > ... == 1 when ... > ... is true | | 17 | x < 0+0 when ... && ... is true | | 17 | x < 0+0 when ... < ... is true | | 17 | x >= 0+0 when ... < ... is false | @@ -65,17 +73,23 @@ astGuardsCompare | 17 | y >= 1+1 when ... && ... is true | | 17 | y >= 1+1 when ... > ... is true | | 18 | call to get != 0 when call to get is true | +| 18 | call to get != 1 when call to get is false | | 18 | call to get == 0 when call to get is false | +| 18 | call to get == 1 when call to get is true | | 26 | 0 < x+0 when ... > ... is true | | 26 | 0 >= x+0 when ... > ... is false | | 26 | ... > ... != 0 when ... > ... is true | +| 26 | ... > ... != 1 when ... > ... is false | | 26 | ... > ... == 0 when ... > ... is false | +| 26 | ... > ... == 1 when ... > ... is true | | 26 | x < 0+1 when ... > ... is false | | 26 | x >= 0+1 when ... > ... is true | | 31 | - ... != x+0 when ... == ... is false | | 31 | - ... == x+0 when ... == ... is true | | 31 | ... == ... != 0 when ... == ... is true | +| 31 | ... == ... != 1 when ... == ... is false | | 31 | ... == ... == 0 when ... == ... is false | +| 31 | ... == ... == 1 when ... == ... is true | | 31 | x != -1 when ... == ... is false | | 31 | x != - ...+0 when ... == ... is false | | 31 | x == -1 when ... == ... is true | @@ -83,27 +97,37 @@ astGuardsCompare | 34 | 10 < j+1 when ... < ... is false | | 34 | 10 >= j+1 when ... < ... is true | | 34 | ... < ... != 0 when ... < ... is true | +| 34 | ... < ... != 1 when ... < ... is false | | 34 | ... < ... == 0 when ... < ... is false | +| 34 | ... < ... == 1 when ... < ... is true | | 34 | j < 10+0 when ... < ... is true | | 34 | j >= 10+0 when ... < ... is false | | 42 | 10 < j+1 when ... < ... is false | | 42 | 10 >= j+1 when ... < ... is true | | 42 | ... < ... != 0 when ... < ... is true | +| 42 | ... < ... != 1 when ... < ... is false | | 42 | ... < ... == 0 when ... < ... is false | +| 42 | ... < ... == 1 when ... < ... is true | | 42 | call to getABool != 0 when call to getABool is true | +| 42 | call to getABool != 1 when call to getABool is false | | 42 | call to getABool == 0 when call to getABool is false | +| 42 | call to getABool == 1 when call to getABool is true | | 42 | j < 10+0 when ... < ... is true | | 42 | j >= 10+0 when ... < ... is false | | 44 | 0 < z+0 when ... > ... is true | | 44 | 0 >= z+0 when ... > ... is false | | 44 | ... > ... != 0 when ... > ... is true | +| 44 | ... > ... != 1 when ... > ... is false | | 44 | ... > ... == 0 when ... > ... is false | +| 44 | ... > ... == 1 when ... > ... is true | | 44 | z < 0+1 when ... > ... is false | | 44 | z >= 0+1 when ... > ... is true | | 45 | 0 < y+0 when ... > ... is true | | 45 | 0 >= y+0 when ... > ... is false | | 45 | ... > ... != 0 when ... > ... is true | +| 45 | ... > ... != 1 when ... > ... is false | | 45 | ... > ... == 0 when ... > ... is false | +| 45 | ... > ... == 1 when ... > ... is true | | 45 | y < 0+1 when ... > ... is false | | 45 | y >= 0+1 when ... > ... is true | | 58 | 0 != x+0 when ... == ... is false | @@ -113,11 +137,17 @@ astGuardsCompare | 58 | 0 == x+0 when ... == ... is true | | 58 | 0 >= y+1 when ... < ... is true | | 58 | ... < ... != 0 when ... < ... is true | +| 58 | ... < ... != 1 when ... < ... is false | +| 58 | ... < ... != 1 when ... \|\| ... is false | | 58 | ... < ... == 0 when ... < ... is false | | 58 | ... < ... == 0 when ... \|\| ... is false | +| 58 | ... < ... == 1 when ... < ... is true | | 58 | ... == ... != 0 when ... == ... is true | +| 58 | ... == ... != 1 when ... == ... is false | +| 58 | ... == ... != 1 when ... \|\| ... is false | | 58 | ... == ... == 0 when ... == ... is false | | 58 | ... == ... == 0 when ... \|\| ... is false | +| 58 | ... == ... == 1 when ... == ... is true | | 58 | x != 0 when ... == ... is false | | 58 | x != 0 when ... \|\| ... is false | | 58 | x != 0+0 when ... == ... is false | @@ -130,7 +160,9 @@ astGuardsCompare | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | | 75 | ... == ... != 0 when ... == ... is true | +| 75 | ... == ... != 1 when ... == ... is false | | 75 | ... == ... == 0 when ... == ... is false | +| 75 | ... == ... == 1 when ... == ... is true | | 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | | 75 | x == 0 when ... == ... is true | @@ -143,10 +175,16 @@ astGuardsCompare | 85 | 0 == y+0 when ... != ... is false | | 85 | ... != ... != 0 when ... != ... is true | | 85 | ... != ... != 0 when ... && ... is true | +| 85 | ... != ... != 1 when ... != ... is false | | 85 | ... != ... == 0 when ... != ... is false | +| 85 | ... != ... == 1 when ... != ... is true | +| 85 | ... != ... == 1 when ... && ... is true | | 85 | ... == ... != 0 when ... && ... is true | | 85 | ... == ... != 0 when ... == ... is true | +| 85 | ... == ... != 1 when ... == ... is false | | 85 | ... == ... == 0 when ... == ... is false | +| 85 | ... == ... == 1 when ... && ... is true | +| 85 | ... == ... == 1 when ... == ... is true | | 85 | x != 0 when ... == ... is false | | 85 | x != 0+0 when ... == ... is false | | 85 | x == 0 when ... && ... is true | @@ -162,7 +200,9 @@ astGuardsCompare | 94 | 0 != x+0 when ... != ... is true | | 94 | 0 == x+0 when ... != ... is false | | 94 | ... != ... != 0 when ... != ... is true | +| 94 | ... != ... != 1 when ... != ... is false | | 94 | ... != ... == 0 when ... != ... is false | +| 94 | ... != ... == 1 when ... != ... is true | | 94 | x != 0 when ... != ... is true | | 94 | x != 0+0 when ... != ... is true | | 94 | x == 0 when ... != ... is false | @@ -170,7 +210,9 @@ astGuardsCompare | 102 | 10 < j+1 when ... < ... is false | | 102 | 10 >= j+1 when ... < ... is true | | 102 | ... < ... != 0 when ... < ... is true | +| 102 | ... < ... != 1 when ... < ... is false | | 102 | ... < ... == 0 when ... < ... is false | +| 102 | ... < ... == 1 when ... < ... is true | | 102 | j < 10+0 when ... < ... is true | | 102 | j >= 10+0 when ... < ... is false | | 109 | 0 != x+0 when ... == ... is false | @@ -180,11 +222,17 @@ astGuardsCompare | 109 | 0 == x+0 when ... == ... is true | | 109 | 0 >= y+1 when ... < ... is true | | 109 | ... < ... != 0 when ... < ... is true | +| 109 | ... < ... != 1 when ... < ... is false | +| 109 | ... < ... != 1 when ... \|\| ... is false | | 109 | ... < ... == 0 when ... < ... is false | | 109 | ... < ... == 0 when ... \|\| ... is false | +| 109 | ... < ... == 1 when ... < ... is true | | 109 | ... == ... != 0 when ... == ... is true | +| 109 | ... == ... != 1 when ... == ... is false | +| 109 | ... == ... != 1 when ... \|\| ... is false | | 109 | ... == ... == 0 when ... == ... is false | | 109 | ... == ... == 0 when ... \|\| ... is false | +| 109 | ... == ... == 1 when ... == ... is true | | 109 | x != 0 when ... == ... is false | | 109 | x != 0 when ... \|\| ... is false | | 109 | x != 0+0 when ... == ... is false | @@ -196,29 +244,54 @@ astGuardsCompare | 109 | y >= 0+0 when ... \|\| ... is false | | 126 | 1 != 0 when 1 is true | | 126 | 1 != 0 when ... && ... is true | +| 126 | 1 != 1 when 1 is false | | 126 | 1 == 0 when 1 is false | +| 126 | 1 == 1 when 1 is true | +| 126 | 1 == 1 when ... && ... is true | | 126 | call to test3_condition != 0 when ... && ... is true | | 126 | call to test3_condition != 0 when call to test3_condition is true | +| 126 | call to test3_condition != 1 when call to test3_condition is false | | 126 | call to test3_condition == 0 when call to test3_condition is false | +| 126 | call to test3_condition == 1 when ... && ... is true | +| 126 | call to test3_condition == 1 when call to test3_condition is true | | 131 | b != 0 when b is true | +| 131 | b != 1 when b is false | | 131 | b == 0 when b is false | +| 131 | b == 1 when b is true | | 137 | 0 != 0 when 0 is true | +| 137 | 0 != 1 when 0 is false | | 137 | 0 == 0 when 0 is false | +| 137 | 0 == 1 when 0 is true | | 146 | ! ... != 0 when ! ... is true | +| 146 | ! ... != 0 when x is false | +| 146 | ! ... != 1 when ! ... is false | +| 146 | ! ... != 1 when x is true | | 146 | ! ... == 0 when ! ... is false | +| 146 | ! ... == 0 when x is true | +| 146 | ! ... == 1 when ! ... is true | +| 146 | ! ... == 1 when x is false | | 146 | x != 0 when ! ... is false | | 146 | x != 0 when x is true | +| 146 | x == 0 when ! ... is true | | 146 | x == 0 when x is false | | 152 | x != 0 when ... && ... is true | | 152 | x != 0 when x is true | +| 152 | x != 1 when x is false | | 152 | x == 0 when x is false | +| 152 | x == 1 when ... && ... is true | +| 152 | x == 1 when x is true | | 152 | y != 0 when ... && ... is true | | 152 | y != 0 when y is true | +| 152 | y != 1 when y is false | | 152 | y == 0 when y is false | +| 152 | y == 1 when ... && ... is true | +| 152 | y == 1 when y is true | | 156 | ... + ... != x+0 when ... == ... is false | | 156 | ... + ... == x+0 when ... == ... is true | | 156 | ... == ... != 0 when ... == ... is true | +| 156 | ... == ... != 1 when ... == ... is false | | 156 | ... == ... == 0 when ... == ... is false | +| 156 | ... == ... == 1 when ... == ... is true | | 156 | x != ... + ...+0 when ... == ... is false | | 156 | x != y+42 when ... == ... is false | | 156 | x == ... + ...+0 when ... == ... is true | @@ -228,7 +301,9 @@ astGuardsCompare | 159 | ... - ... != x+0 when ... == ... is false | | 159 | ... - ... == x+0 when ... == ... is true | | 159 | ... == ... != 0 when ... == ... is true | +| 159 | ... == ... != 1 when ... == ... is false | | 159 | ... == ... == 0 when ... == ... is false | +| 159 | ... == ... == 1 when ... == ... is true | | 159 | x != ... - ...+0 when ... == ... is false | | 159 | x != y+-42 when ... == ... is false | | 159 | x == ... - ...+0 when ... == ... is true | @@ -238,7 +313,9 @@ astGuardsCompare | 162 | ... + ... < x+1 when ... < ... is false | | 162 | ... + ... >= x+1 when ... < ... is true | | 162 | ... < ... != 0 when ... < ... is true | +| 162 | ... < ... != 1 when ... < ... is false | | 162 | ... < ... == 0 when ... < ... is false | +| 162 | ... < ... == 1 when ... < ... is true | | 162 | x < ... + ...+0 when ... < ... is true | | 162 | x < y+42 when ... < ... is true | | 162 | x >= ... + ...+0 when ... < ... is false | @@ -248,7 +325,9 @@ astGuardsCompare | 165 | ... - ... < x+1 when ... < ... is false | | 165 | ... - ... >= x+1 when ... < ... is true | | 165 | ... < ... != 0 when ... < ... is true | +| 165 | ... < ... != 1 when ... < ... is false | | 165 | ... < ... == 0 when ... < ... is false | +| 165 | ... < ... == 1 when ... < ... is true | | 165 | x < ... - ...+0 when ... < ... is true | | 165 | x < y+-42 when ... < ... is true | | 165 | x >= ... - ...+0 when ... < ... is false | @@ -258,13 +337,17 @@ astGuardsCompare | 175 | 0 != call to foo+0 when ... == ... is false | | 175 | 0 == call to foo+0 when ... == ... is true | | 175 | ... == ... != 0 when ... == ... is true | +| 175 | ... == ... != 1 when ... == ... is false | | 175 | ... == ... == 0 when ... == ... is false | +| 175 | ... == ... == 1 when ... == ... is true | | 175 | call to foo != 0 when ... == ... is false | | 175 | call to foo != 0+0 when ... == ... is false | | 175 | call to foo == 0 when ... == ... is true | | 175 | call to foo == 0+0 when ... == ... is true | | 181 | x != 0 when x is true | +| 181 | x != 1 when x is false | | 181 | x == 0 when x is false | +| 181 | x == 1 when x is true | astGuardsControl | test.c:7:9:7:13 | ... > ... | false | 10 | 11 | | test.c:7:9:7:13 | ... > ... | true | 7 | 9 | @@ -556,13 +639,33 @@ astGuardsEnsure | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 31 | 32 | astGuardsEnsure_const | test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | != | 0 | 7 | 9 | +| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | != | 1 | 10 | 11 | | test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | == | 0 | 10 | 11 | +| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | == | 1 | 7 | 9 | | test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | != | 0 | 17 | 17 | | test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | != | 0 | 18 | 18 | +| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | == | 1 | 17 | 17 | +| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | == | 1 | 18 | 18 | | test.c:17:8:17:21 | ... && ... | test.c:17:8:17:12 | ... < ... | != | 0 | 18 | 18 | +| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:12 | ... < ... | == | 1 | 18 | 18 | | test.c:17:8:17:21 | ... && ... | test.c:17:17:17:21 | ... > ... | != | 0 | 18 | 18 | +| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:21 | ... > ... | == | 1 | 18 | 18 | | test.c:17:17:17:21 | ... > ... | test.c:17:17:17:21 | ... > ... | != | 0 | 18 | 18 | +| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:21 | ... > ... | == | 1 | 18 | 18 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 0 | 26 | 28 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 2 | 2 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 31 | 34 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 34 | 34 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 39 | 42 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 42 | 42 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 42 | 44 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 45 | 45 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 45 | 47 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 51 | 53 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 56 | 58 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 58 | 58 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 58 | 66 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 62 | 62 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 2 | 2 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 31 | 34 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 34 | 34 | @@ -576,7 +679,19 @@ astGuardsEnsure_const | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 58 | 58 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 58 | 66 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 62 | 62 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 1 | 26 | 28 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 0 | 34 | 34 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 2 | 2 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 39 | 42 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 42 | 42 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 42 | 44 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 45 | 45 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 45 | 47 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 51 | 53 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 56 | 58 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 58 | 58 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 58 | 66 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 62 | 62 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 2 | 2 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 39 | 42 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 42 | 42 | @@ -588,48 +703,76 @@ astGuardsEnsure_const | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 58 | 58 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 58 | 66 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 62 | 62 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 1 | 34 | 34 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 42 | 42 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 42 | 44 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 45 | 45 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 45 | 47 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 51 | 53 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 42 | 42 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 42 | 44 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 45 | 45 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 45 | 47 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 51 | 53 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | 45 | 45 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | 45 | 47 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | 42 | 42 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | 51 | 53 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | 42 | 42 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | 51 | 53 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | 45 | 45 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | 45 | 47 | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | != | 0 | 45 | 47 | +| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | == | 1 | 45 | 47 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 58 | 58 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | != | 1 | 58 | 58 | +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | != | 1 | 62 | 62 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | == | 0 | 58 | 58 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | == | 0 | 62 | 62 | | test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:14 | ... == ... | != | 1 | 62 | 62 | | test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:14 | ... == ... | == | 0 | 62 | 62 | +| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:23 | ... < ... | != | 1 | 62 | 62 | | test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:23 | ... < ... | == | 0 | 62 | 62 | +| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:23 | ... < ... | != | 1 | 62 | 62 | | test.c:58:19:58:23 | ... < ... | test.c:58:19:58:23 | ... < ... | == | 0 | 62 | 62 | | test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | 0 | 78 | 79 | | test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 75 | 77 | | test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | 75 | 77 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 1 | 78 | 79 | | test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 0 | 78 | 79 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | 75 | 77 | | test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | != | 0 | 78 | 79 | | test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 75 | 77 | | test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | 75 | 77 | +| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 1 | 78 | 79 | | test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 0 | 78 | 79 | +| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | 75 | 77 | | test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 85 | 85 | | test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 86 | 86 | | test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | 85 | 85 | | test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | 85 | 85 | +| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | 86 | 86 | | test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 85 | 85 | | test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | | test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | 85 | 85 | | test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | 85 | 85 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:75:9:75:9 | x | == | 0 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:75:9:75:14 | ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:14 | ... == ... | == | 1 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:85:8:85:13 | ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:13 | ... == ... | == | 1 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:85:18:85:23 | ... != ... | != | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:23 | ... != ... | == | 1 | 86 | 86 | | test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | | test.c:85:18:85:23 | ... != ... | test.c:85:18:85:23 | ... != ... | != | 0 | 86 | 86 | +| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:23 | ... != ... | == | 1 | 86 | 86 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | 0 | 94 | 96 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 70 | 70 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 99 | 102 | @@ -639,6 +782,13 @@ astGuardsEnsure_const | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 117 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 113 | 113 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 0 | 94 | 96 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 70 | 70 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 99 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 102 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 107 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 109 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 109 | 117 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 113 | 113 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 70 | 70 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 99 | 102 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 102 | 102 | @@ -646,65 +796,106 @@ astGuardsEnsure_const | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 109 | 109 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 109 | 117 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 113 | 113 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 1 | 94 | 96 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 0 | 102 | 102 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 70 | 70 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 107 | 109 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 109 | 109 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 109 | 117 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 113 | 113 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 70 | 70 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 107 | 109 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 109 | 109 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 109 | 117 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 113 | 113 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 1 | 102 | 102 | | test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 109 | 109 | | test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | != | 1 | 109 | 109 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | != | 1 | 113 | 113 | | test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | == | 0 | 109 | 109 | | test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | == | 0 | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:14 | ... == ... | != | 1 | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:14 | ... == ... | == | 0 | 113 | 113 | +| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:23 | ... < ... | != | 1 | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:23 | ... < ... | == | 0 | 113 | 113 | +| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:23 | ... < ... | != | 1 | 113 | 113 | | test.c:109:19:109:23 | ... < ... | test.c:109:19:109:23 | ... < ... | == | 0 | 113 | 113 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 126 | 126 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 126 | 128 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 131 | 131 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 131 | 132 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 134 | 123 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 126 | 126 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 126 | 128 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 131 | 131 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 131 | 132 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 134 | 123 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 126 | 126 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 126 | 128 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 131 | 131 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 131 | 132 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 134 | 123 | | test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | == | 1 | 126 | 128 | | test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 | -| test.c:126:7:126:28 | ... && ... | test.c:127:9:127:9 | 1 | != | 0 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | == | 1 | 126 | 128 | | test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 | +| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | == | 1 | 126 | 128 | | test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 | +| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | == | 1 | 131 | 132 | +| test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | != | 1 | 142 | 136 | | test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | == | 0 | 142 | 136 | | test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | != | 0 | 146 | 147 | +| test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | == | 1 | 146 | 147 | +| test.c:146:7:146:8 | ! ... | test.c:146:8:146:8 | x | == | 0 | 146 | 147 | +| test.c:146:8:146:8 | x | test.c:146:7:146:8 | ! ... | != | 0 | 146 | 147 | +| test.c:146:8:146:8 | x | test.c:146:7:146:8 | ! ... | == | 1 | 146 | 147 | | test.c:146:8:146:8 | x | test.c:146:8:146:8 | x | == | 0 | 146 | 147 | | test.c:152:10:152:10 | x | test.c:152:10:152:10 | x | != | 0 | 151 | 152 | | test.c:152:10:152:10 | x | test.c:152:10:152:10 | x | != | 0 | 152 | 152 | +| test.c:152:10:152:10 | x | test.c:152:10:152:10 | x | == | 1 | 151 | 152 | +| test.c:152:10:152:10 | x | test.c:152:10:152:10 | x | == | 1 | 152 | 152 | | test.c:152:10:152:15 | ... && ... | test.c:152:10:152:10 | x | != | 0 | 151 | 152 | +| test.c:152:10:152:15 | ... && ... | test.c:152:10:152:10 | x | == | 1 | 151 | 152 | | test.c:152:10:152:15 | ... && ... | test.c:152:15:152:15 | y | != | 0 | 151 | 152 | +| test.c:152:10:152:15 | ... && ... | test.c:152:15:152:15 | y | == | 1 | 151 | 152 | | test.c:152:15:152:15 | y | test.c:152:15:152:15 | y | != | 0 | 151 | 152 | +| test.c:152:15:152:15 | y | test.c:152:15:152:15 | y | == | 1 | 151 | 152 | | test.c:156:9:156:19 | ... == ... | test.c:156:9:156:19 | ... == ... | != | 0 | 156 | 157 | +| test.c:156:9:156:19 | ... == ... | test.c:156:9:156:19 | ... == ... | == | 1 | 156 | 157 | | test.c:159:9:159:19 | ... == ... | test.c:159:9:159:19 | ... == ... | != | 0 | 159 | 160 | +| test.c:159:9:159:19 | ... == ... | test.c:159:9:159:19 | ... == ... | == | 1 | 159 | 160 | | test.c:162:9:162:18 | ... < ... | test.c:162:9:162:18 | ... < ... | != | 0 | 162 | 163 | +| test.c:162:9:162:18 | ... < ... | test.c:162:9:162:18 | ... < ... | == | 1 | 162 | 163 | | test.c:165:9:165:18 | ... < ... | test.c:165:9:165:18 | ... < ... | != | 0 | 165 | 166 | +| test.c:165:9:165:18 | ... < ... | test.c:165:9:165:18 | ... < ... | == | 1 | 165 | 166 | | test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | != | 0 | 175 | 175 | | test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | == | 0 | 175 | 175 | | test.c:175:13:175:32 | ... == ... | test.c:175:13:175:32 | ... == ... | != | 0 | 175 | 175 | +| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:32 | ... == ... | != | 1 | 175 | 175 | | test.c:175:13:175:32 | ... == ... | test.c:175:13:175:32 | ... == ... | == | 0 | 175 | 175 | +| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:32 | ... == ... | == | 1 | 175 | 175 | | test.c:181:9:181:9 | x | test.c:181:9:181:9 | x | != | 0 | 181 | 182 | | test.c:181:9:181:9 | x | test.c:181:9:181:9 | x | != | 0 | 186 | 180 | +| test.c:181:9:181:9 | x | test.c:181:9:181:9 | x | != | 1 | 183 | 184 | | test.c:181:9:181:9 | x | test.c:181:9:181:9 | x | == | 0 | 183 | 184 | +| test.c:181:9:181:9 | x | test.c:181:9:181:9 | x | == | 1 | 181 | 182 | +| test.c:181:9:181:9 | x | test.c:181:9:181:9 | x | == | 1 | 186 | 180 | | test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 19 | 19 | +| test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | == | 1 | 19 | 19 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 31 | 32 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 0 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 0 | 31 | 32 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 1 | 34 | 34 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 0 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 0 | 34 | 34 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | 31 | 32 | | test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 0 | 43 | 45 | +| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 1 | 53 | 53 | | test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 0 | 53 | 53 | +| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 1 | 43 | 45 | irGuards | test.c:7:9:7:13 | CompareGT: ... > ... | | test.c:17:8:17:12 | CompareLT: ... < ... | @@ -723,20 +914,19 @@ irGuards | test.c:102:16:102:21 | CompareLT: ... < ... | | test.c:109:9:109:14 | CompareEQ: ... == ... | | test.c:109:19:109:23 | CompareLT: ... < ... | -| test.c:126:7:126:7 | Constant: 1 | -| test.c:126:12:126:26 | Call: call to test3_condition | -| test.c:131:7:131:7 | Load: b | -| test.c:137:7:137:7 | Constant: 0 | -| test.c:146:7:146:8 | LogicalNot: ! ... | -| test.c:146:8:146:8 | Load: x | -| test.c:152:10:152:10 | Load: x | -| test.c:152:15:152:15 | Load: y | +| test.c:126:7:126:7 | CompareNE: 1 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | +| test.c:131:7:131:7 | CompareNE: b | +| test.c:137:7:137:7 | CompareNE: 0 | +| test.c:146:7:146:8 | CompareEQ: ! ... | +| test.c:152:10:152:10 | CompareNE: x | +| test.c:152:15:152:15 | CompareNE: y | | test.c:156:9:156:19 | CompareEQ: ... == ... | | test.c:159:9:159:19 | CompareEQ: ... == ... | | test.c:162:9:162:18 | CompareLT: ... < ... | | test.c:165:9:165:18 | CompareLT: ... < ... | | test.c:175:13:175:32 | CompareEQ: ... == ... | -| test.c:181:9:181:9 | Load: x | +| test.c:181:9:181:9 | CompareNE: x | | test.cpp:18:8:18:12 | CompareNE: (bool)... | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | | test.cpp:42:13:42:20 | Call: call to getABool | @@ -744,7 +934,9 @@ irGuardsCompare | 7 | 0 < x+0 when CompareGT: ... > ... is true | | 7 | 0 >= x+0 when CompareGT: ... > ... is false | | 7 | ... > ... != 0 when CompareGT: ... > ... is true | +| 7 | ... > ... != 1 when CompareGT: ... > ... is false | | 7 | ... > ... == 0 when CompareGT: ... > ... is false | +| 7 | ... > ... == 1 when CompareGT: ... > ... is true | | 7 | x < 0+1 when CompareGT: ... > ... is false | | 7 | x < 1 when CompareGT: ... > ... is false | | 7 | x >= 0+1 when CompareGT: ... > ... is true | @@ -754,9 +946,13 @@ irGuardsCompare | 17 | 1 < y+0 when CompareGT: ... > ... is true | | 17 | 1 >= y+0 when CompareGT: ... > ... is false | | 17 | ... < ... != 0 when CompareLT: ... < ... is true | +| 17 | ... < ... != 1 when CompareLT: ... < ... is false | | 17 | ... < ... == 0 when CompareLT: ... < ... is false | +| 17 | ... < ... == 1 when CompareLT: ... < ... is true | | 17 | ... > ... != 0 when CompareGT: ... > ... is true | +| 17 | ... > ... != 1 when CompareGT: ... > ... is false | | 17 | ... > ... == 0 when CompareGT: ... > ... is false | +| 17 | ... > ... == 1 when CompareGT: ... > ... is true | | 17 | x < 0 when CompareLT: ... < ... is true | | 17 | x < 0+0 when CompareLT: ... < ... is true | | 17 | x >= 0 when CompareLT: ... < ... is false | @@ -766,11 +962,15 @@ irGuardsCompare | 17 | y >= 1+1 when CompareGT: ... > ... is true | | 17 | y >= 2 when CompareGT: ... > ... is true | | 18 | call to get != 0 when CompareNE: (bool)... is true | +| 18 | call to get != 1 when CompareNE: (bool)... is false | | 18 | call to get == 0 when CompareNE: (bool)... is false | +| 18 | call to get == 1 when CompareNE: (bool)... is true | | 26 | 0 < x+0 when CompareGT: ... > ... is true | | 26 | 0 >= x+0 when CompareGT: ... > ... is false | | 26 | ... > ... != 0 when CompareGT: ... > ... is true | +| 26 | ... > ... != 1 when CompareGT: ... > ... is false | | 26 | ... > ... == 0 when CompareGT: ... > ... is false | +| 26 | ... > ... == 1 when CompareGT: ... > ... is true | | 26 | x < 0+1 when CompareGT: ... > ... is false | | 26 | x < 1 when CompareGT: ... > ... is false | | 26 | x >= 0+1 when CompareGT: ... > ... is true | @@ -778,7 +978,9 @@ irGuardsCompare | 31 | - ... != x+0 when CompareEQ: ... == ... is false | | 31 | - ... == x+0 when CompareEQ: ... == ... is true | | 31 | ... == ... != 0 when CompareEQ: ... == ... is true | +| 31 | ... == ... != 1 when CompareEQ: ... == ... is false | | 31 | ... == ... == 0 when CompareEQ: ... == ... is false | +| 31 | ... == ... == 1 when CompareEQ: ... == ... is true | | 31 | x != -1 when CompareEQ: ... == ... is false | | 31 | x != - ...+0 when CompareEQ: ... == ... is false | | 31 | x == -1 when CompareEQ: ... == ... is true | @@ -786,7 +988,9 @@ irGuardsCompare | 34 | 10 < j+1 when CompareLT: ... < ... is false | | 34 | 10 >= j+1 when CompareLT: ... < ... is true | | 34 | ... < ... != 0 when CompareLT: ... < ... is true | +| 34 | ... < ... != 1 when CompareLT: ... < ... is false | | 34 | ... < ... == 0 when CompareLT: ... < ... is false | +| 34 | ... < ... == 1 when CompareLT: ... < ... is true | | 34 | j < 10 when CompareLT: ... < ... is true | | 34 | j < 10+0 when CompareLT: ... < ... is true | | 34 | j >= 10 when CompareLT: ... < ... is false | @@ -794,9 +998,13 @@ irGuardsCompare | 42 | 10 < j+1 when CompareLT: ... < ... is false | | 42 | 10 >= j+1 when CompareLT: ... < ... is true | | 42 | ... < ... != 0 when CompareLT: ... < ... is true | +| 42 | ... < ... != 1 when CompareLT: ... < ... is false | | 42 | ... < ... == 0 when CompareLT: ... < ... is false | +| 42 | ... < ... == 1 when CompareLT: ... < ... is true | | 42 | call to getABool != 0 when Call: call to getABool is true | +| 42 | call to getABool != 1 when Call: call to getABool is false | | 42 | call to getABool == 0 when Call: call to getABool is false | +| 42 | call to getABool == 1 when Call: call to getABool is true | | 42 | j < 10 when CompareLT: ... < ... is true | | 42 | j < 10+0 when CompareLT: ... < ... is true | | 42 | j >= 10 when CompareLT: ... < ... is false | @@ -804,7 +1012,9 @@ irGuardsCompare | 44 | 0 < z+0 when CompareGT: ... > ... is true | | 44 | 0 >= z+0 when CompareGT: ... > ... is false | | 44 | ... > ... != 0 when CompareGT: ... > ... is true | +| 44 | ... > ... != 1 when CompareGT: ... > ... is false | | 44 | ... > ... == 0 when CompareGT: ... > ... is false | +| 44 | ... > ... == 1 when CompareGT: ... > ... is true | | 44 | z < 0+1 when CompareGT: ... > ... is false | | 44 | z < 1 when CompareGT: ... > ... is false | | 44 | z >= 0+1 when CompareGT: ... > ... is true | @@ -812,7 +1022,9 @@ irGuardsCompare | 45 | 0 < y+0 when CompareGT: ... > ... is true | | 45 | 0 >= y+0 when CompareGT: ... > ... is false | | 45 | ... > ... != 0 when CompareGT: ... > ... is true | +| 45 | ... > ... != 1 when CompareGT: ... > ... is false | | 45 | ... > ... == 0 when CompareGT: ... > ... is false | +| 45 | ... > ... == 1 when CompareGT: ... > ... is true | | 45 | y < 0+1 when CompareGT: ... > ... is false | | 45 | y < 1 when CompareGT: ... > ... is false | | 45 | y >= 0+1 when CompareGT: ... > ... is true | @@ -822,9 +1034,13 @@ irGuardsCompare | 58 | 0 == x+0 when CompareEQ: ... == ... is true | | 58 | 0 >= y+1 when CompareLT: ... < ... is true | | 58 | ... < ... != 0 when CompareLT: ... < ... is true | +| 58 | ... < ... != 1 when CompareLT: ... < ... is false | | 58 | ... < ... == 0 when CompareLT: ... < ... is false | +| 58 | ... < ... == 1 when CompareLT: ... < ... is true | | 58 | ... == ... != 0 when CompareEQ: ... == ... is true | +| 58 | ... == ... != 1 when CompareEQ: ... == ... is false | | 58 | ... == ... == 0 when CompareEQ: ... == ... is false | +| 58 | ... == ... == 1 when CompareEQ: ... == ... is true | | 58 | x != 0 when CompareEQ: ... == ... is false | | 58 | x != 0+0 when CompareEQ: ... == ... is false | | 58 | x == 0 when CompareEQ: ... == ... is true | @@ -836,7 +1052,9 @@ irGuardsCompare | 75 | 0 != x+0 when CompareEQ: ... == ... is false | | 75 | 0 == x+0 when CompareEQ: ... == ... is true | | 75 | ... == ... != 0 when CompareEQ: ... == ... is true | +| 75 | ... == ... != 1 when CompareEQ: ... == ... is false | | 75 | ... == ... == 0 when CompareEQ: ... == ... is false | +| 75 | ... == ... == 1 when CompareEQ: ... == ... is true | | 75 | x != 0 when CompareEQ: ... == ... is false | | 75 | x != 0+0 when CompareEQ: ... == ... is false | | 75 | x == 0 when CompareEQ: ... == ... is true | @@ -846,9 +1064,13 @@ irGuardsCompare | 85 | 0 == x+0 when CompareEQ: ... == ... is true | | 85 | 0 == y+0 when CompareNE: ... != ... is false | | 85 | ... != ... != 0 when CompareNE: ... != ... is true | +| 85 | ... != ... != 1 when CompareNE: ... != ... is false | | 85 | ... != ... == 0 when CompareNE: ... != ... is false | +| 85 | ... != ... == 1 when CompareNE: ... != ... is true | | 85 | ... == ... != 0 when CompareEQ: ... == ... is true | +| 85 | ... == ... != 1 when CompareEQ: ... == ... is false | | 85 | ... == ... == 0 when CompareEQ: ... == ... is false | +| 85 | ... == ... == 1 when CompareEQ: ... == ... is true | | 85 | x != 0 when CompareEQ: ... == ... is false | | 85 | x != 0+0 when CompareEQ: ... == ... is false | | 85 | x == 0 when CompareEQ: ... == ... is true | @@ -860,7 +1082,9 @@ irGuardsCompare | 94 | 0 != x+0 when CompareNE: ... != ... is true | | 94 | 0 == x+0 when CompareNE: ... != ... is false | | 94 | ... != ... != 0 when CompareNE: ... != ... is true | +| 94 | ... != ... != 1 when CompareNE: ... != ... is false | | 94 | ... != ... == 0 when CompareNE: ... != ... is false | +| 94 | ... != ... == 1 when CompareNE: ... != ... is true | | 94 | x != 0 when CompareNE: ... != ... is true | | 94 | x != 0+0 when CompareNE: ... != ... is true | | 94 | x == 0 when CompareNE: ... != ... is false | @@ -868,7 +1092,9 @@ irGuardsCompare | 102 | 10 < j+1 when CompareLT: ... < ... is false | | 102 | 10 >= j+1 when CompareLT: ... < ... is true | | 102 | ... < ... != 0 when CompareLT: ... < ... is true | +| 102 | ... < ... != 1 when CompareLT: ... < ... is false | | 102 | ... < ... == 0 when CompareLT: ... < ... is false | +| 102 | ... < ... == 1 when CompareLT: ... < ... is true | | 102 | j < 10 when CompareLT: ... < ... is true | | 102 | j < 10+0 when CompareLT: ... < ... is true | | 102 | j >= 10 when CompareLT: ... < ... is false | @@ -878,9 +1104,13 @@ irGuardsCompare | 109 | 0 == x+0 when CompareEQ: ... == ... is true | | 109 | 0 >= y+1 when CompareLT: ... < ... is true | | 109 | ... < ... != 0 when CompareLT: ... < ... is true | +| 109 | ... < ... != 1 when CompareLT: ... < ... is false | | 109 | ... < ... == 0 when CompareLT: ... < ... is false | +| 109 | ... < ... == 1 when CompareLT: ... < ... is true | | 109 | ... == ... != 0 when CompareEQ: ... == ... is true | +| 109 | ... == ... != 1 when CompareEQ: ... == ... is false | | 109 | ... == ... == 0 when CompareEQ: ... == ... is false | +| 109 | ... == ... == 1 when CompareEQ: ... == ... is true | | 109 | x != 0 when CompareEQ: ... == ... is false | | 109 | x != 0+0 when CompareEQ: ... == ... is false | | 109 | x == 0 when CompareEQ: ... == ... is true | @@ -889,27 +1119,42 @@ irGuardsCompare | 109 | y < 0+0 when CompareLT: ... < ... is true | | 109 | y >= 0 when CompareLT: ... < ... is false | | 109 | y >= 0+0 when CompareLT: ... < ... is false | -| 126 | 1 != 0 when Constant: 1 is true | -| 126 | 1 == 0 when Constant: 1 is false | -| 126 | call to test3_condition != 0 when Call: call to test3_condition is true | -| 126 | call to test3_condition == 0 when Call: call to test3_condition is false | -| 131 | b != 0 when Load: b is true | -| 131 | b == 0 when Load: b is false | -| 137 | 0 != 0 when Constant: 0 is true | -| 137 | 0 == 0 when Constant: 0 is false | -| 146 | ! ... != 0 when LogicalNot: ! ... is true | -| 146 | ! ... == 0 when LogicalNot: ! ... is false | -| 146 | x != 0 when Load: x is true | -| 146 | x != 0 when LogicalNot: ! ... is false | -| 146 | x == 0 when Load: x is false | -| 152 | x != 0 when Load: x is true | -| 152 | x == 0 when Load: x is false | -| 152 | y != 0 when Load: y is true | -| 152 | y == 0 when Load: y is false | +| 126 | 1 != 0 when CompareNE: 1 is true | +| 126 | 1 != 1 when CompareNE: 1 is false | +| 126 | 1 == 0 when CompareNE: 1 is false | +| 126 | 1 == 1 when CompareNE: 1 is true | +| 126 | call to test3_condition != 0 when CompareNE: call to test3_condition is true | +| 126 | call to test3_condition != 1 when CompareNE: call to test3_condition is false | +| 126 | call to test3_condition == 0 when CompareNE: call to test3_condition is false | +| 126 | call to test3_condition == 1 when CompareNE: call to test3_condition is true | +| 131 | b != 0 when CompareNE: b is true | +| 131 | b != 1 when CompareNE: b is false | +| 131 | b == 0 when CompareNE: b is false | +| 131 | b == 1 when CompareNE: b is true | +| 137 | 0 != 0 when CompareNE: 0 is true | +| 137 | 0 != 1 when CompareNE: 0 is false | +| 137 | 0 == 0 when CompareNE: 0 is false | +| 137 | 0 == 1 when CompareNE: 0 is true | +| 146 | ! ... != 0 when CompareEQ: ! ... is true | +| 146 | ! ... != 1 when CompareEQ: ! ... is false | +| 146 | ! ... == 0 when CompareEQ: ! ... is false | +| 146 | ! ... == 1 when CompareEQ: ! ... is true | +| 146 | x != 0 when CompareEQ: ! ... is false | +| 146 | x == 0 when CompareEQ: ! ... is true | +| 152 | x != 0 when CompareNE: x is true | +| 152 | x != 1 when CompareNE: x is false | +| 152 | x == 0 when CompareNE: x is false | +| 152 | x == 1 when CompareNE: x is true | +| 152 | y != 0 when CompareNE: y is true | +| 152 | y != 1 when CompareNE: y is false | +| 152 | y == 0 when CompareNE: y is false | +| 152 | y == 1 when CompareNE: y is true | | 156 | ... + ... != x+0 when CompareEQ: ... == ... is false | | 156 | ... + ... == x+0 when CompareEQ: ... == ... is true | | 156 | ... == ... != 0 when CompareEQ: ... == ... is true | +| 156 | ... == ... != 1 when CompareEQ: ... == ... is false | | 156 | ... == ... == 0 when CompareEQ: ... == ... is false | +| 156 | ... == ... == 1 when CompareEQ: ... == ... is true | | 156 | x != ... + ...+0 when CompareEQ: ... == ... is false | | 156 | x != y+42 when CompareEQ: ... == ... is false | | 156 | x == ... + ...+0 when CompareEQ: ... == ... is true | @@ -919,7 +1164,9 @@ irGuardsCompare | 159 | ... - ... != x+0 when CompareEQ: ... == ... is false | | 159 | ... - ... == x+0 when CompareEQ: ... == ... is true | | 159 | ... == ... != 0 when CompareEQ: ... == ... is true | +| 159 | ... == ... != 1 when CompareEQ: ... == ... is false | | 159 | ... == ... == 0 when CompareEQ: ... == ... is false | +| 159 | ... == ... == 1 when CompareEQ: ... == ... is true | | 159 | x != ... - ...+0 when CompareEQ: ... == ... is false | | 159 | x != y+-42 when CompareEQ: ... == ... is false | | 159 | x == ... - ...+0 when CompareEQ: ... == ... is true | @@ -929,7 +1176,9 @@ irGuardsCompare | 162 | ... + ... < x+1 when CompareLT: ... < ... is false | | 162 | ... + ... >= x+1 when CompareLT: ... < ... is true | | 162 | ... < ... != 0 when CompareLT: ... < ... is true | +| 162 | ... < ... != 1 when CompareLT: ... < ... is false | | 162 | ... < ... == 0 when CompareLT: ... < ... is false | +| 162 | ... < ... == 1 when CompareLT: ... < ... is true | | 162 | x < ... + ...+0 when CompareLT: ... < ... is true | | 162 | x < y+42 when CompareLT: ... < ... is true | | 162 | x >= ... + ...+0 when CompareLT: ... < ... is false | @@ -939,7 +1188,9 @@ irGuardsCompare | 165 | ... - ... < x+1 when CompareLT: ... < ... is false | | 165 | ... - ... >= x+1 when CompareLT: ... < ... is true | | 165 | ... < ... != 0 when CompareLT: ... < ... is true | +| 165 | ... < ... != 1 when CompareLT: ... < ... is false | | 165 | ... < ... == 0 when CompareLT: ... < ... is false | +| 165 | ... < ... == 1 when CompareLT: ... < ... is true | | 165 | x < ... - ...+0 when CompareLT: ... < ... is true | | 165 | x < y+-42 when CompareLT: ... < ... is true | | 165 | x >= ... - ...+0 when CompareLT: ... < ... is false | @@ -949,13 +1200,17 @@ irGuardsCompare | 175 | 0 != call to foo+0 when CompareEQ: ... == ... is false | | 175 | 0 == call to foo+0 when CompareEQ: ... == ... is true | | 175 | ... == ... != 0 when CompareEQ: ... == ... is true | +| 175 | ... == ... != 1 when CompareEQ: ... == ... is false | | 175 | ... == ... == 0 when CompareEQ: ... == ... is false | +| 175 | ... == ... == 1 when CompareEQ: ... == ... is true | | 175 | call to foo != 0 when CompareEQ: ... == ... is false | | 175 | call to foo != 0+0 when CompareEQ: ... == ... is false | | 175 | call to foo == 0 when CompareEQ: ... == ... is true | | 175 | call to foo == 0+0 when CompareEQ: ... == ... is true | -| 181 | x != 0 when Load: x is true | -| 181 | x == 0 when Load: x is false | +| 181 | x != 0 when CompareNE: x is true | +| 181 | x != 1 when CompareNE: x is false | +| 181 | x == 0 when CompareNE: x is false | +| 181 | x == 1 when CompareNE: x is true | irGuardsControl | test.c:7:9:7:13 | CompareGT: ... > ... | false | 11 | 11 | | test.c:7:9:7:13 | CompareGT: ... > ... | true | 8 | 8 | @@ -1023,26 +1278,25 @@ irGuardsControl | test.c:109:9:109:14 | CompareEQ: ... == ... | false | 109 | 109 | | test.c:109:9:109:14 | CompareEQ: ... == ... | false | 113 | 113 | | test.c:109:19:109:23 | CompareLT: ... < ... | false | 113 | 113 | -| test.c:126:7:126:7 | Constant: 1 | true | 126 | 126 | -| test.c:126:7:126:7 | Constant: 1 | true | 127 | 127 | -| test.c:126:7:126:7 | Constant: 1 | true | 131 | 131 | -| test.c:126:7:126:7 | Constant: 1 | true | 132 | 132 | -| test.c:126:7:126:7 | Constant: 1 | true | 134 | 134 | -| test.c:126:12:126:26 | Call: call to test3_condition | true | 127 | 127 | -| test.c:131:7:131:7 | Load: b | true | 132 | 132 | -| test.c:137:7:137:7 | Constant: 0 | false | 142 | 142 | -| test.c:146:7:146:8 | LogicalNot: ! ... | true | 147 | 147 | -| test.c:146:8:146:8 | Load: x | false | 147 | 147 | -| test.c:152:10:152:10 | Load: x | true | 152 | 152 | -| test.c:152:15:152:15 | Load: y | true | 152 | 152 | +| test.c:126:7:126:7 | CompareNE: 1 | true | 126 | 126 | +| test.c:126:7:126:7 | CompareNE: 1 | true | 127 | 127 | +| test.c:126:7:126:7 | CompareNE: 1 | true | 131 | 131 | +| test.c:126:7:126:7 | CompareNE: 1 | true | 132 | 132 | +| test.c:126:7:126:7 | CompareNE: 1 | true | 134 | 134 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | true | 127 | 127 | +| test.c:131:7:131:7 | CompareNE: b | true | 132 | 132 | +| test.c:137:7:137:7 | CompareNE: 0 | false | 142 | 142 | +| test.c:146:7:146:8 | CompareEQ: ! ... | true | 147 | 147 | +| test.c:152:10:152:10 | CompareNE: x | true | 152 | 152 | +| test.c:152:15:152:15 | CompareNE: y | true | 152 | 152 | | test.c:156:9:156:19 | CompareEQ: ... == ... | true | 156 | 157 | | test.c:159:9:159:19 | CompareEQ: ... == ... | true | 159 | 160 | | test.c:162:9:162:18 | CompareLT: ... < ... | true | 162 | 163 | | test.c:165:9:165:18 | CompareLT: ... < ... | true | 165 | 166 | | test.c:175:13:175:32 | CompareEQ: ... == ... | false | 175 | 175 | | test.c:175:13:175:32 | CompareEQ: ... == ... | true | 175 | 175 | -| test.c:181:9:181:9 | Load: x | false | 184 | 184 | -| test.c:181:9:181:9 | Load: x | true | 182 | 182 | +| test.c:181:9:181:9 | CompareNE: x | false | 184 | 184 | +| test.c:181:9:181:9 | CompareNE: x | true | 182 | 182 | | test.cpp:18:8:18:12 | CompareNE: (bool)... | true | 19 | 19 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | false | 34 | 34 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | true | 30 | 30 | @@ -1190,6 +1444,28 @@ irGuardsEnsure | test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:14:109:14 | Constant: 0 | != | test.c:109:9:109:9 | Load: x | 0 | 113 | 113 | | test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:19:109:19 | Load: y | >= | test.c:109:23:109:23 | Constant: (long)... | 0 | 113 | 113 | | test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:23:109:23 | Constant: (long)... | < | test.c:109:19:109:19 | Load: y | 1 | 113 | 113 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 126 | 126 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 126 | 126 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 127 | 127 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 127 | 127 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 131 | 131 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 131 | 131 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 132 | 132 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 132 | 132 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 134 | 134 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 134 | 134 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | Call: call to test3_condition | != | test.c:126:12:126:26 | Constant: call to test3_condition | 0 | 127 | 127 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | Constant: call to test3_condition | != | test.c:126:12:126:26 | Call: call to test3_condition | 0 | 127 | 127 | +| test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | Constant: b | != | test.c:131:7:131:7 | Load: b | 0 | 132 | 132 | +| test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | Load: b | != | test.c:131:7:131:7 | Constant: b | 0 | 132 | 132 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | == | test.c:137:7:137:7 | Constant: 0 | 0 | 142 | 142 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | == | test.c:137:7:137:7 | Constant: 0 | 0 | 142 | 142 | +| test.c:146:7:146:8 | CompareEQ: ! ... | test.c:146:7:146:8 | Constant: ! ... | == | test.c:146:8:146:8 | Load: x | 0 | 147 | 147 | +| test.c:146:7:146:8 | CompareEQ: ! ... | test.c:146:8:146:8 | Load: x | == | test.c:146:7:146:8 | Constant: ! ... | 0 | 147 | 147 | +| test.c:152:10:152:10 | CompareNE: x | test.c:152:10:152:10 | Constant: x | != | test.c:152:10:152:10 | Load: x | 0 | 152 | 152 | +| test.c:152:10:152:10 | CompareNE: x | test.c:152:10:152:10 | Load: x | != | test.c:152:10:152:10 | Constant: x | 0 | 152 | 152 | +| test.c:152:15:152:15 | CompareNE: y | test.c:152:15:152:15 | Constant: y | != | test.c:152:15:152:15 | Load: y | 0 | 152 | 152 | +| test.c:152:15:152:15 | CompareNE: y | test.c:152:15:152:15 | Load: y | != | test.c:152:15:152:15 | Constant: y | 0 | 152 | 152 | | test.c:156:9:156:19 | CompareEQ: ... == ... | test.c:156:9:156:9 | Load: x | == | test.c:156:14:156:14 | Load: y | 42 | 156 | 157 | | test.c:156:9:156:19 | CompareEQ: ... == ... | test.c:156:9:156:9 | Load: x | == | test.c:156:14:156:19 | PointerAdd: ... + ... | 0 | 156 | 157 | | test.c:156:9:156:19 | CompareEQ: ... == ... | test.c:156:14:156:14 | Load: y | == | test.c:156:9:156:9 | Load: x | -42 | 156 | 157 | @@ -1210,6 +1486,10 @@ irGuardsEnsure | test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | == | test.c:175:32:175:32 | Constant: 0 | 0 | 175 | 175 | | test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:32:175:32 | Constant: 0 | != | test.c:175:13:175:15 | Call: call to foo | 0 | 175 | 175 | | test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:32:175:32 | Constant: 0 | == | test.c:175:13:175:15 | Call: call to foo | 0 | 175 | 175 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | Constant: x | != | test.c:181:9:181:9 | Load: x | 0 | 182 | 182 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | Constant: x | == | test.c:181:9:181:9 | Load: x | 0 | 184 | 184 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | Load: x | != | test.c:181:9:181:9 | Constant: x | 0 | 182 | 182 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | Load: x | == | test.c:181:9:181:9 | Constant: x | 0 | 184 | 184 | | test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:10 | Call: call to get | != | test.cpp:18:8:18:12 | Constant: (bool)... | 0 | 19 | 19 | | test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:12 | Constant: (bool)... | != | test.cpp:18:8:18:10 | Call: call to get | 0 | 19 | 19 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | test.cpp:31:12:31:13 | Constant: - ... | 0 | 34 | 34 | @@ -1222,13 +1502,18 @@ irGuardsEnsure_const | test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:9 | Load: x | < | 1 | 11 | 11 | | test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:9 | Load: x | >= | 1 | 8 | 8 | | test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:13 | CompareGT: ... > ... | != | 0 | 8 | 8 | +| test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:13 | CompareGT: ... > ... | != | 1 | 11 | 11 | | test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:13 | CompareGT: ... > ... | == | 0 | 11 | 11 | +| test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:13 | CompareGT: ... > ... | == | 1 | 8 | 8 | | test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:8 | Load: x | < | 0 | 17 | 17 | | test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:8 | Load: x | < | 0 | 18 | 18 | | test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:12 | CompareLT: ... < ... | != | 0 | 17 | 17 | | test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:12 | CompareLT: ... < ... | != | 0 | 18 | 18 | +| test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:12 | CompareLT: ... < ... | == | 1 | 17 | 17 | +| test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:12 | CompareLT: ... < ... | == | 1 | 18 | 18 | | test.c:17:17:17:21 | CompareGT: ... > ... | test.c:17:17:17:17 | Load: y | >= | 2 | 18 | 18 | | test.c:17:17:17:21 | CompareGT: ... > ... | test.c:17:17:17:21 | CompareGT: ... > ... | != | 0 | 18 | 18 | +| test.c:17:17:17:21 | CompareGT: ... > ... | test.c:17:17:17:21 | CompareGT: ... > ... | == | 1 | 18 | 18 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 2 | 2 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 31 | 31 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 34 | 34 | @@ -1245,6 +1530,20 @@ irGuardsEnsure_const | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 62 | 62 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | >= | 1 | 27 | 27 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 0 | 27 | 27 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 2 | 2 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 31 | 31 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 34 | 34 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 35 | 35 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 39 | 39 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 42 | 42 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 43 | 43 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 45 | 45 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 46 | 46 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 52 | 52 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 56 | 56 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 58 | 58 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 59 | 59 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | != | 1 | 62 | 62 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 2 | 2 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 31 | 31 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 34 | 34 | @@ -1259,6 +1558,7 @@ irGuardsEnsure_const | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 58 | 58 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 59 | 59 | | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 62 | 62 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 1 | 27 | 27 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | < | 10 | 35 | 35 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 2 | 2 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 39 | 39 | @@ -1272,6 +1572,17 @@ irGuardsEnsure_const | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 59 | 59 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 62 | 62 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 0 | 35 | 35 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 2 | 2 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 39 | 39 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 42 | 42 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 43 | 43 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 45 | 45 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 46 | 46 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 52 | 52 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 56 | 56 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 58 | 58 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 59 | 59 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | != | 1 | 62 | 62 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 2 | 2 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 39 | 39 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 42 | 42 | @@ -1283,6 +1594,7 @@ irGuardsEnsure_const | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 58 | 58 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 59 | 59 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 62 | 62 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 1 | 35 | 35 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 46 | 46 | @@ -1291,38 +1603,58 @@ irGuardsEnsure_const | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 46 | 46 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 52 | 52 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 43 | 43 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 45 | 45 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 46 | 46 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | < | 1 | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 46 | 46 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 0 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 0 | 46 | 46 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 1 | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 0 | 52 | 52 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 1 | 45 | 45 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 1 | 46 | 46 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | >= | 1 | 46 | 46 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | != | 0 | 46 | 46 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | == | 1 | 46 | 46 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 58 | 58 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 62 | 62 | +| test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:14 | CompareEQ: ... == ... | != | 1 | 58 | 58 | +| test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:14 | CompareEQ: ... == ... | != | 1 | 62 | 62 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:14 | CompareEQ: ... == ... | == | 0 | 58 | 58 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:14 | CompareEQ: ... == ... | == | 0 | 62 | 62 | | test.c:58:19:58:23 | CompareLT: ... < ... | test.c:58:19:58:19 | Load: y | >= | 0 | 62 | 62 | +| test.c:58:19:58:23 | CompareLT: ... < ... | test.c:58:19:58:23 | CompareLT: ... < ... | != | 1 | 62 | 62 | | test.c:58:19:58:23 | CompareLT: ... < ... | test.c:58:19:58:23 | CompareLT: ... < ... | == | 0 | 62 | 62 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | != | 0 | 79 | 79 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | == | 0 | 76 | 76 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:14 | CompareEQ: ... == ... | != | 0 | 76 | 76 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:14 | CompareEQ: ... == ... | != | 1 | 79 | 79 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:14 | CompareEQ: ... == ... | == | 0 | 79 | 79 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:14 | CompareEQ: ... == ... | == | 1 | 76 | 76 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | != | 0 | 79 | 79 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 76 | 76 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:85:8:85:13 | CompareEQ: ... == ... | != | 0 | 76 | 76 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:85:8:85:13 | CompareEQ: ... == ... | != | 1 | 79 | 79 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:85:8:85:13 | CompareEQ: ... == ... | == | 0 | 79 | 79 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:85:8:85:13 | CompareEQ: ... == ... | == | 1 | 76 | 76 | | test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | == | 0 | 85 | 85 | | test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | == | 0 | 86 | 86 | | test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:75:9:75:14 | CompareEQ: ... == ... | != | 0 | 85 | 85 | | test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:75:9:75:14 | CompareEQ: ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:75:9:75:14 | CompareEQ: ... == ... | == | 1 | 85 | 85 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:75:9:75:14 | CompareEQ: ... == ... | == | 1 | 86 | 86 | | test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 85 | 85 | | test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 86 | 86 | | test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:13 | CompareEQ: ... == ... | != | 0 | 85 | 85 | | test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:13 | CompareEQ: ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:13 | CompareEQ: ... == ... | == | 1 | 85 | 85 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:13 | CompareEQ: ... == ... | == | 1 | 86 | 86 | | test.c:85:18:85:23 | CompareNE: ... != ... | test.c:85:18:85:18 | Load: y | != | 0 | 86 | 86 | | test.c:85:18:85:23 | CompareNE: ... != ... | test.c:85:18:85:23 | CompareNE: ... != ... | != | 0 | 86 | 86 | +| test.c:85:18:85:23 | CompareNE: ... != ... | test.c:85:18:85:23 | CompareNE: ... != ... | == | 1 | 86 | 86 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | != | 0 | 95 | 95 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 70 | 70 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 99 | 99 | @@ -1333,6 +1665,14 @@ irGuardsEnsure_const | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 110 | 110 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 113 | 113 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | != | 0 | 95 | 95 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | != | 1 | 70 | 70 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | != | 1 | 99 | 99 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | != | 1 | 102 | 102 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | != | 1 | 103 | 103 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | != | 1 | 107 | 107 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | != | 1 | 109 | 109 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | != | 1 | 110 | 110 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | != | 1 | 113 | 113 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | == | 0 | 70 | 70 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | == | 0 | 99 | 99 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | == | 0 | 102 | 102 | @@ -1341,6 +1681,7 @@ irGuardsEnsure_const | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | == | 0 | 109 | 109 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | == | 0 | 110 | 110 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | == | 0 | 113 | 113 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | == | 1 | 95 | 95 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | < | 10 | 103 | 103 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 70 | 70 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 107 | 107 | @@ -1348,62 +1689,98 @@ irGuardsEnsure_const | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 110 | 110 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 113 | 113 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | != | 0 | 103 | 103 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | != | 1 | 70 | 70 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | != | 1 | 107 | 107 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | != | 1 | 109 | 109 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | != | 1 | 110 | 110 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | != | 1 | 113 | 113 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | == | 0 | 70 | 70 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | == | 0 | 107 | 107 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | == | 0 | 109 | 109 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | == | 0 | 110 | 110 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | == | 0 | 113 | 113 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:21 | CompareLT: ... < ... | == | 1 | 103 | 103 | | test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 109 | 109 | | test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 113 | 113 | +| test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:14 | CompareEQ: ... == ... | != | 1 | 109 | 109 | +| test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:14 | CompareEQ: ... == ... | != | 1 | 113 | 113 | | test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:14 | CompareEQ: ... == ... | == | 0 | 109 | 109 | | test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:14 | CompareEQ: ... == ... | == | 0 | 113 | 113 | | test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:19:109:19 | Load: y | >= | 0 | 113 | 113 | +| test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:19:109:23 | CompareLT: ... < ... | != | 1 | 113 | 113 | | test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:19:109:23 | CompareLT: ... < ... | == | 0 | 113 | 113 | -| test.c:126:7:126:7 | Constant: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 126 | 126 | -| test.c:126:7:126:7 | Constant: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 127 | 127 | -| test.c:126:7:126:7 | Constant: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 131 | 131 | -| test.c:126:7:126:7 | Constant: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 132 | 132 | -| test.c:126:7:126:7 | Constant: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 134 | 134 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:5:127:9 | Store: ... = ... | != | 0 | 126 | 126 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:5:127:9 | Store: ... = ... | != | 0 | 127 | 127 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:5:127:9 | Store: ... = ... | != | 0 | 131 | 131 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:5:127:9 | Store: ... = ... | != | 0 | 132 | 132 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:5:127:9 | Store: ... = ... | != | 0 | 134 | 134 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:9:127:9 | Constant: 1 | != | 0 | 126 | 126 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:9:127:9 | Constant: 1 | != | 0 | 127 | 127 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:9:127:9 | Constant: 1 | != | 0 | 131 | 131 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:9:127:9 | Constant: 1 | != | 0 | 132 | 132 | -| test.c:126:7:126:7 | Constant: 1 | test.c:127:9:127:9 | Constant: 1 | != | 0 | 134 | 134 | -| test.c:126:12:126:26 | Call: call to test3_condition | test.c:126:12:126:26 | Call: call to test3_condition | != | 0 | 127 | 127 | -| test.c:131:7:131:7 | Load: b | test.c:131:7:131:7 | Load: b | != | 0 | 132 | 132 | -| test.c:131:7:131:7 | Load: b | test.c:131:7:131:7 | Phi: b | != | 0 | 132 | 132 | -| test.c:137:7:137:7 | Constant: 0 | test.c:137:7:137:7 | Constant: 0 | == | 0 | 142 | 142 | -| test.c:146:7:146:8 | LogicalNot: ! ... | test.c:146:7:146:8 | LogicalNot: ! ... | != | 0 | 147 | 147 | -| test.c:146:8:146:8 | Load: x | test.c:145:16:145:16 | InitializeParameter: x | == | 0 | 147 | 147 | -| test.c:146:8:146:8 | Load: x | test.c:146:8:146:8 | Load: x | == | 0 | 147 | 147 | -| test.c:152:10:152:10 | Load: x | test.c:151:16:151:16 | InitializeParameter: x | != | 0 | 152 | 152 | -| test.c:152:10:152:10 | Load: x | test.c:152:10:152:10 | Load: x | != | 0 | 152 | 152 | -| test.c:152:15:152:15 | Load: y | test.c:151:23:151:23 | InitializeParameter: y | != | 0 | 152 | 152 | -| test.c:152:15:152:15 | Load: y | test.c:152:15:152:15 | Load: y | != | 0 | 152 | 152 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | != | 0 | 126 | 126 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | != | 0 | 127 | 127 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | != | 0 | 131 | 131 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | != | 0 | 132 | 132 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | != | 0 | 134 | 134 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | == | 1 | 126 | 126 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | == | 1 | 127 | 127 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | == | 1 | 131 | 131 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | == | 1 | 132 | 132 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | == | 1 | 134 | 134 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 126 | 126 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 127 | 127 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 131 | 131 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 132 | 132 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 0 | 134 | 134 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 1 | 126 | 126 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 1 | 127 | 127 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 1 | 131 | 131 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 1 | 132 | 132 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 1 | 134 | 134 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | Call: call to test3_condition | != | 0 | 127 | 127 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | CompareNE: call to test3_condition | != | 0 | 127 | 127 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | CompareNE: call to test3_condition | == | 1 | 127 | 127 | +| test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | CompareNE: b | != | 0 | 132 | 132 | +| test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | CompareNE: b | == | 1 | 132 | 132 | +| test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | Load: b | != | 0 | 132 | 132 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | CompareNE: 0 | != | 1 | 142 | 142 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | CompareNE: 0 | == | 0 | 142 | 142 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | == | 0 | 142 | 142 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | == | 0 | 142 | 142 | +| test.c:146:7:146:8 | CompareEQ: ! ... | test.c:146:7:146:8 | CompareEQ: ! ... | != | 0 | 147 | 147 | +| test.c:146:7:146:8 | CompareEQ: ! ... | test.c:146:7:146:8 | CompareEQ: ! ... | == | 1 | 147 | 147 | +| test.c:146:7:146:8 | CompareEQ: ! ... | test.c:146:8:146:8 | Load: x | == | 0 | 147 | 147 | +| test.c:152:10:152:10 | CompareNE: x | test.c:152:10:152:10 | CompareNE: x | != | 0 | 152 | 152 | +| test.c:152:10:152:10 | CompareNE: x | test.c:152:10:152:10 | CompareNE: x | == | 1 | 152 | 152 | +| test.c:152:10:152:10 | CompareNE: x | test.c:152:10:152:10 | Load: x | != | 0 | 152 | 152 | +| test.c:152:15:152:15 | CompareNE: y | test.c:152:15:152:15 | CompareNE: y | != | 0 | 152 | 152 | +| test.c:152:15:152:15 | CompareNE: y | test.c:152:15:152:15 | CompareNE: y | == | 1 | 152 | 152 | +| test.c:152:15:152:15 | CompareNE: y | test.c:152:15:152:15 | Load: y | != | 0 | 152 | 152 | | test.c:156:9:156:19 | CompareEQ: ... == ... | test.c:156:9:156:19 | CompareEQ: ... == ... | != | 0 | 156 | 157 | +| test.c:156:9:156:19 | CompareEQ: ... == ... | test.c:156:9:156:19 | CompareEQ: ... == ... | == | 1 | 156 | 157 | | test.c:159:9:159:19 | CompareEQ: ... == ... | test.c:159:9:159:19 | CompareEQ: ... == ... | != | 0 | 159 | 160 | +| test.c:159:9:159:19 | CompareEQ: ... == ... | test.c:159:9:159:19 | CompareEQ: ... == ... | == | 1 | 159 | 160 | | test.c:162:9:162:18 | CompareLT: ... < ... | test.c:162:9:162:18 | CompareLT: ... < ... | != | 0 | 162 | 163 | +| test.c:162:9:162:18 | CompareLT: ... < ... | test.c:162:9:162:18 | CompareLT: ... < ... | == | 1 | 162 | 163 | | test.c:165:9:165:18 | CompareLT: ... < ... | test.c:165:9:165:18 | CompareLT: ... < ... | != | 0 | 165 | 166 | +| test.c:165:9:165:18 | CompareLT: ... < ... | test.c:165:9:165:18 | CompareLT: ... < ... | == | 1 | 165 | 166 | | test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | != | 0 | 175 | 175 | | test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | == | 0 | 175 | 175 | | test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:32 | CompareEQ: ... == ... | != | 0 | 175 | 175 | +| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:32 | CompareEQ: ... == ... | != | 1 | 175 | 175 | | test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:32 | CompareEQ: ... == ... | == | 0 | 175 | 175 | -| test.c:181:9:181:9 | Load: x | test.c:180:20:180:20 | InitializeParameter: x | != | 0 | 182 | 182 | -| test.c:181:9:181:9 | Load: x | test.c:180:20:180:20 | InitializeParameter: x | == | 0 | 184 | 184 | -| test.c:181:9:181:9 | Load: x | test.c:181:9:181:9 | Load: x | != | 0 | 182 | 182 | -| test.c:181:9:181:9 | Load: x | test.c:181:9:181:9 | Load: x | == | 0 | 184 | 184 | +| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:32 | CompareEQ: ... == ... | == | 1 | 175 | 175 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | CompareNE: x | != | 0 | 182 | 182 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | CompareNE: x | != | 1 | 184 | 184 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | CompareNE: x | == | 0 | 184 | 184 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | CompareNE: x | == | 1 | 182 | 182 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | Load: x | != | 0 | 182 | 182 | +| test.c:181:9:181:9 | CompareNE: x | test.c:181:9:181:9 | Load: x | == | 0 | 184 | 184 | | test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:10 | Call: call to get | != | 0 | 19 | 19 | | test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:12 | CompareNE: (bool)... | != | 0 | 19 | 19 | +| test.cpp:18:8:18:12 | CompareNE: (bool)... | test.cpp:18:8:18:12 | CompareNE: (bool)... | == | 1 | 19 | 19 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | -1 | 34 | 34 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 30 | 30 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 32 | 32 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:13 | CompareEQ: ... == ... | != | 0 | 30 | 30 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:13 | CompareEQ: ... == ... | != | 0 | 32 | 32 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:13 | CompareEQ: ... == ... | != | 1 | 34 | 34 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:13 | CompareEQ: ... == ... | == | 0 | 34 | 34 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:13 | CompareEQ: ... == ... | == | 1 | 30 | 30 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:13 | CompareEQ: ... == ... | == | 1 | 32 | 32 | | test.cpp:42:13:42:20 | Call: call to getABool | test.cpp:42:13:42:20 | Call: call to getABool | != | 0 | 44 | 44 | +| test.cpp:42:13:42:20 | Call: call to getABool | test.cpp:42:13:42:20 | Call: call to getABool | != | 1 | 53 | 53 | | test.cpp:42:13:42:20 | Call: call to getABool | test.cpp:42:13:42:20 | Call: call to getABool | == | 0 | 53 | 53 | +| test.cpp:42:13:42:20 | Call: call to getABool | test.cpp:42:13:42:20 | Call: call to getABool | == | 1 | 44 | 44 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected index 757356c247cd..a56d8964c095 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected @@ -32,6 +32,18 @@ | test.c:164:8:164:8 | s | | test.c:170:8:170:9 | ! ... | | test.c:170:9:170:9 | s | +| test.c:176:8:176:15 | ! ... | +| test.c:176:10:176:14 | ... < ... | +| test.c:182:8:182:34 | ! ... | +| test.c:182:10:182:20 | ... >= ... | +| test.c:182:10:182:33 | ... && ... | +| test.c:182:25:182:33 | ... < ... | +| test.c:190:7:190:8 | ! ... | +| test.c:190:8:190:8 | c | +| test.c:198:7:198:8 | ! ... | +| test.c:198:8:198:8 | b | +| test.c:206:7:206:8 | ! ... | +| test.c:206:8:206:8 | c | | test.cpp:18:8:18:10 | call to get | | test.cpp:31:7:31:13 | ... == ... | | test.cpp:42:13:42:20 | call to getABool | @@ -49,3 +61,11 @@ | test.cpp:135:6:135:21 | call to __builtin_expect | | test.cpp:141:6:141:21 | call to __builtin_expect | | test.cpp:145:6:145:21 | call to __builtin_expect | +| test.cpp:152:7:152:8 | ! ... | +| test.cpp:152:8:152:8 | b | +| test.cpp:160:7:160:8 | ! ... | +| test.cpp:160:8:160:8 | c | +| test.cpp:168:7:168:8 | ! ... | +| test.cpp:168:8:168:8 | b | +| test.cpp:176:7:176:8 | ! ... | +| test.cpp:176:8:176:8 | c | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 4f44591e0b81..f2ce7f611f39 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -1,7 +1,9 @@ | 7 | 0 < x+0 when ... > ... is true | | 7 | 0 >= x+0 when ... > ... is false | | 7 | ... > ... != 0 when ... > ... is true | +| 7 | ... > ... != 1 when ... > ... is false | | 7 | ... > ... == 0 when ... > ... is false | +| 7 | ... > ... == 1 when ... > ... is true | | 7 | x < 0+1 when ... > ... is false | | 7 | x < 1 when ... > ... is false | | 7 | x >= 0+1 when ... > ... is true | @@ -14,10 +16,16 @@ | 17 | 1 >= y+0 when ... > ... is false | | 17 | ... < ... != 0 when ... && ... is true | | 17 | ... < ... != 0 when ... < ... is true | +| 17 | ... < ... != 1 when ... < ... is false | | 17 | ... < ... == 0 when ... < ... is false | +| 17 | ... < ... == 1 when ... && ... is true | +| 17 | ... < ... == 1 when ... < ... is true | | 17 | ... > ... != 0 when ... && ... is true | | 17 | ... > ... != 0 when ... > ... is true | +| 17 | ... > ... != 1 when ... > ... is false | | 17 | ... > ... == 0 when ... > ... is false | +| 17 | ... > ... == 1 when ... && ... is true | +| 17 | ... > ... == 1 when ... > ... is true | | 17 | x < 0 when ... && ... is true | | 17 | x < 0 when ... < ... is true | | 17 | x < 0+0 when ... && ... is true | @@ -31,11 +39,15 @@ | 17 | y >= 2 when ... && ... is true | | 17 | y >= 2 when ... > ... is true | | 18 | call to get != 0 when call to get is true | +| 18 | call to get != 1 when call to get is false | | 18 | call to get == 0 when call to get is false | +| 18 | call to get == 1 when call to get is true | | 26 | 0 < x+0 when ... > ... is true | | 26 | 0 >= x+0 when ... > ... is false | | 26 | ... > ... != 0 when ... > ... is true | +| 26 | ... > ... != 1 when ... > ... is false | | 26 | ... > ... == 0 when ... > ... is false | +| 26 | ... > ... == 1 when ... > ... is true | | 26 | x < 0+1 when ... > ... is false | | 26 | x < 1 when ... > ... is false | | 26 | x >= 0+1 when ... > ... is true | @@ -43,7 +55,9 @@ | 31 | - ... != x+0 when ... == ... is false | | 31 | - ... == x+0 when ... == ... is true | | 31 | ... == ... != 0 when ... == ... is true | +| 31 | ... == ... != 1 when ... == ... is false | | 31 | ... == ... == 0 when ... == ... is false | +| 31 | ... == ... == 1 when ... == ... is true | | 31 | x != -1 when ... == ... is false | | 31 | x != - ...+0 when ... == ... is false | | 31 | x == -1 when ... == ... is true | @@ -51,7 +65,9 @@ | 34 | 10 < j+1 when ... < ... is false | | 34 | 10 >= j+1 when ... < ... is true | | 34 | ... < ... != 0 when ... < ... is true | +| 34 | ... < ... != 1 when ... < ... is false | | 34 | ... < ... == 0 when ... < ... is false | +| 34 | ... < ... == 1 when ... < ... is true | | 34 | j < 10 when ... < ... is true | | 34 | j < 10+0 when ... < ... is true | | 34 | j >= 10 when ... < ... is false | @@ -59,9 +75,13 @@ | 42 | 10 < j+1 when ... < ... is false | | 42 | 10 >= j+1 when ... < ... is true | | 42 | ... < ... != 0 when ... < ... is true | +| 42 | ... < ... != 1 when ... < ... is false | | 42 | ... < ... == 0 when ... < ... is false | +| 42 | ... < ... == 1 when ... < ... is true | | 42 | call to getABool != 0 when call to getABool is true | +| 42 | call to getABool != 1 when call to getABool is false | | 42 | call to getABool == 0 when call to getABool is false | +| 42 | call to getABool == 1 when call to getABool is true | | 42 | j < 10 when ... < ... is true | | 42 | j < 10+0 when ... < ... is true | | 42 | j >= 10 when ... < ... is false | @@ -69,7 +89,9 @@ | 44 | 0 < z+0 when ... > ... is true | | 44 | 0 >= z+0 when ... > ... is false | | 44 | ... > ... != 0 when ... > ... is true | +| 44 | ... > ... != 1 when ... > ... is false | | 44 | ... > ... == 0 when ... > ... is false | +| 44 | ... > ... == 1 when ... > ... is true | | 44 | z < 0+1 when ... > ... is false | | 44 | z < 1 when ... > ... is false | | 44 | z >= 0+1 when ... > ... is true | @@ -77,7 +99,9 @@ | 45 | 0 < y+0 when ... > ... is true | | 45 | 0 >= y+0 when ... > ... is false | | 45 | ... > ... != 0 when ... > ... is true | +| 45 | ... > ... != 1 when ... > ... is false | | 45 | ... > ... == 0 when ... > ... is false | +| 45 | ... > ... == 1 when ... > ... is true | | 45 | y < 0+1 when ... > ... is false | | 45 | y < 1 when ... > ... is false | | 45 | y >= 0+1 when ... > ... is true | @@ -89,11 +113,17 @@ | 58 | 0 == x+0 when ... == ... is true | | 58 | 0 >= y+1 when ... < ... is true | | 58 | ... < ... != 0 when ... < ... is true | +| 58 | ... < ... != 1 when ... < ... is false | +| 58 | ... < ... != 1 when ... \|\| ... is false | | 58 | ... < ... == 0 when ... < ... is false | | 58 | ... < ... == 0 when ... \|\| ... is false | +| 58 | ... < ... == 1 when ... < ... is true | | 58 | ... == ... != 0 when ... == ... is true | +| 58 | ... == ... != 1 when ... == ... is false | +| 58 | ... == ... != 1 when ... \|\| ... is false | | 58 | ... == ... == 0 when ... == ... is false | | 58 | ... == ... == 0 when ... \|\| ... is false | +| 58 | ... == ... == 1 when ... == ... is true | | 58 | x != 0 when ... == ... is false | | 58 | x != 0 when ... \|\| ... is false | | 58 | x != 0+0 when ... == ... is false | @@ -116,7 +146,9 @@ | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | | 75 | ... == ... != 0 when ... == ... is true | +| 75 | ... == ... != 1 when ... == ... is false | | 75 | ... == ... == 0 when ... == ... is false | +| 75 | ... == ... == 1 when ... == ... is true | | 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | | 75 | x == 0 when ... == ... is true | @@ -129,10 +161,16 @@ | 85 | 0 == y+0 when ... != ... is false | | 85 | ... != ... != 0 when ... != ... is true | | 85 | ... != ... != 0 when ... && ... is true | +| 85 | ... != ... != 1 when ... != ... is false | | 85 | ... != ... == 0 when ... != ... is false | +| 85 | ... != ... == 1 when ... != ... is true | +| 85 | ... != ... == 1 when ... && ... is true | | 85 | ... == ... != 0 when ... && ... is true | | 85 | ... == ... != 0 when ... == ... is true | +| 85 | ... == ... != 1 when ... == ... is false | | 85 | ... == ... == 0 when ... == ... is false | +| 85 | ... == ... == 1 when ... && ... is true | +| 85 | ... == ... == 1 when ... == ... is true | | 85 | x != 0 when ... == ... is false | | 85 | x != 0+0 when ... == ... is false | | 85 | x == 0 when ... && ... is true | @@ -146,21 +184,29 @@ | 85 | y == 0 when ... != ... is false | | 85 | y == 0+0 when ... != ... is false | | 93 | c != 0 when c is true | +| 93 | c != 1 when c is false | | 93 | c == 0 when c is false | +| 93 | c == 1 when c is true | | 94 | 0 != x+0 when ... != ... is true | | 94 | 0 == x+0 when ... != ... is false | | 94 | ... != ... != 0 when ... != ... is true | +| 94 | ... != ... != 1 when ... != ... is false | | 94 | ... != ... == 0 when ... != ... is false | +| 94 | ... != ... == 1 when ... != ... is true | | 94 | x != 0 when ... != ... is true | | 94 | x != 0+0 when ... != ... is true | | 94 | x == 0 when ... != ... is false | | 94 | x == 0+0 when ... != ... is false | | 99 | f != 0 when f is true | +| 99 | f != 1 when f is false | | 99 | f == 0 when f is false | +| 99 | f == 1 when f is true | | 102 | 10 < j+1 when ... < ... is false | | 102 | 10 >= j+1 when ... < ... is true | | 102 | ... < ... != 0 when ... < ... is true | +| 102 | ... < ... != 1 when ... < ... is false | | 102 | ... < ... == 0 when ... < ... is false | +| 102 | ... < ... == 1 when ... < ... is true | | 102 | j < 10 when ... < ... is true | | 102 | j < 10+0 when ... < ... is true | | 102 | j >= 10 when ... < ... is false | @@ -168,7 +214,9 @@ | 105 | 0.0 != f+0 when ... != ... is true | | 105 | 0.0 == f+0 when ... != ... is false | | 105 | ... != ... != 0 when ... != ... is true | +| 105 | ... != ... != 1 when ... != ... is false | | 105 | ... != ... == 0 when ... != ... is false | +| 105 | ... != ... == 1 when ... != ... is true | | 105 | f != 0.0+0 when ... != ... is true | | 105 | f == 0.0+0 when ... != ... is false | | 109 | 0 != x+0 when ... == ... is false | @@ -178,11 +226,17 @@ | 109 | 0 == x+0 when ... == ... is true | | 109 | 0 >= y+1 when ... < ... is true | | 109 | ... < ... != 0 when ... < ... is true | +| 109 | ... < ... != 1 when ... < ... is false | +| 109 | ... < ... != 1 when ... \|\| ... is false | | 109 | ... < ... == 0 when ... < ... is false | | 109 | ... < ... == 0 when ... \|\| ... is false | +| 109 | ... < ... == 1 when ... < ... is true | | 109 | ... == ... != 0 when ... == ... is true | +| 109 | ... == ... != 1 when ... == ... is false | +| 109 | ... == ... != 1 when ... \|\| ... is false | | 109 | ... == ... == 0 when ... == ... is false | | 109 | ... == ... == 0 when ... \|\| ... is false | +| 109 | ... == ... == 1 when ... == ... is true | | 109 | x != 0 when ... == ... is false | | 109 | x != 0 when ... \|\| ... is false | | 109 | x != 0+0 when ... == ... is false | @@ -198,38 +252,59 @@ | 111 | 0.0 != i+0 when ... != ... is true | | 111 | 0.0 == i+0 when ... != ... is false | | 111 | ... != ... != 0 when ... != ... is true | +| 111 | ... != ... != 1 when ... != ... is false | | 111 | ... != ... == 0 when ... != ... is false | +| 111 | ... != ... == 1 when ... != ... is true | | 111 | i != 0.0+0 when ... != ... is true | | 111 | i == 0.0+0 when ... != ... is false | | 122 | b != 0 when b is true | +| 122 | b != 1 when b is false | | 122 | b == 0 when b is false | +| 122 | b == 1 when b is true | | 125 | ! ... != 0 when ! ... is true | +| 125 | ! ... != 0 when call to safe is false | +| 125 | ! ... != 1 when ! ... is false | +| 125 | ! ... != 1 when call to safe is true | | 125 | ! ... == 0 when ! ... is false | +| 125 | ! ... == 0 when call to safe is true | +| 125 | ! ... == 1 when ! ... is true | +| 125 | ! ... == 1 when call to safe is false | | 125 | call to safe != 0 when ! ... is false | | 125 | call to safe != 0 when call to safe is true | +| 125 | call to safe != 1 when ! ... is true | +| 125 | call to safe != 1 when call to safe is false | +| 125 | call to safe == 0 when ! ... is true | | 125 | call to safe == 0 when call to safe is false | +| 125 | call to safe == 1 when ! ... is false | +| 125 | call to safe == 1 when call to safe is true | | 126 | 1 != 0 when 1 is true | | 126 | 1 != 0 when ... && ... is true | +| 126 | 1 != 1 when 1 is false | | 126 | 1 == 0 when 1 is false | +| 126 | 1 == 1 when 1 is true | +| 126 | 1 == 1 when ... && ... is true | | 126 | call to test3_condition != 0 when ... && ... is true | | 126 | call to test3_condition != 0 when call to test3_condition is true | +| 126 | call to test3_condition != 1 when call to test3_condition is false | | 126 | call to test3_condition == 0 when call to test3_condition is false | +| 126 | call to test3_condition == 1 when ... && ... is true | +| 126 | call to test3_condition == 1 when call to test3_condition is true | | 131 | ... + ... != a+0 when call to __builtin_expect is false | | 131 | ... + ... == a+0 when call to __builtin_expect is true | -| 131 | ... == ... != 0 when call to __builtin_expect is true | -| 131 | ... == ... == 0 when call to __builtin_expect is false | | 131 | a != ... + ...+0 when call to __builtin_expect is false | | 131 | a != b+42 when call to __builtin_expect is false | | 131 | a == ... + ...+0 when call to __builtin_expect is true | | 131 | a == b+42 when call to __builtin_expect is true | | 131 | b != 0 when b is true | +| 131 | b != 1 when b is false | | 131 | b != a+-42 when call to __builtin_expect is false | | 131 | b == 0 when b is false | +| 131 | b == 1 when b is true | | 131 | b == a+-42 when call to __builtin_expect is true | | 131 | call to __builtin_expect != 0 when call to __builtin_expect is true | +| 131 | call to __builtin_expect != 1 when call to __builtin_expect is false | | 131 | call to __builtin_expect == 0 when call to __builtin_expect is false | -| 135 | ... != ... != 0 when call to __builtin_expect is true | -| 135 | ... != ... == 0 when call to __builtin_expect is false | +| 131 | call to __builtin_expect == 1 when call to __builtin_expect is true | | 135 | ... + ... != a+0 when call to __builtin_expect is true | | 135 | ... + ... == a+0 when call to __builtin_expect is false | | 135 | a != ... + ...+0 when call to __builtin_expect is true | @@ -239,45 +314,290 @@ | 135 | b != a+-42 when call to __builtin_expect is true | | 135 | b == a+-42 when call to __builtin_expect is false | | 135 | call to __builtin_expect != 0 when call to __builtin_expect is true | +| 135 | call to __builtin_expect != 1 when call to __builtin_expect is false | | 135 | call to __builtin_expect == 0 when call to __builtin_expect is false | +| 135 | call to __builtin_expect == 1 when call to __builtin_expect is true | | 137 | 0 != 0 when 0 is true | +| 137 | 0 != 1 when 0 is false | | 137 | 0 == 0 when 0 is false | +| 137 | 0 == 1 when 0 is true | | 141 | 42 != a+0 when call to __builtin_expect is false | | 141 | 42 == a+0 when call to __builtin_expect is true | -| 141 | ... == ... != 0 when call to __builtin_expect is true | -| 141 | ... == ... == 0 when call to __builtin_expect is false | | 141 | a != 42 when call to __builtin_expect is false | | 141 | a != 42+0 when call to __builtin_expect is false | | 141 | a == 42 when call to __builtin_expect is true | | 141 | a == 42+0 when call to __builtin_expect is true | | 141 | call to __builtin_expect != 0 when call to __builtin_expect is true | +| 141 | call to __builtin_expect != 1 when call to __builtin_expect is false | | 141 | call to __builtin_expect == 0 when call to __builtin_expect is false | +| 141 | call to __builtin_expect == 1 when call to __builtin_expect is true | | 145 | 42 != a+0 when call to __builtin_expect is true | | 145 | 42 == a+0 when call to __builtin_expect is false | -| 145 | ... != ... != 0 when call to __builtin_expect is true | -| 145 | ... != ... == 0 when call to __builtin_expect is false | | 145 | a != 42 when call to __builtin_expect is true | | 145 | a != 42+0 when call to __builtin_expect is true | | 145 | a == 42 when call to __builtin_expect is false | | 145 | a == 42+0 when call to __builtin_expect is false | | 145 | call to __builtin_expect != 0 when call to __builtin_expect is true | +| 145 | call to __builtin_expect != 1 when call to __builtin_expect is false | | 145 | call to __builtin_expect == 0 when call to __builtin_expect is false | +| 145 | call to __builtin_expect == 1 when call to __builtin_expect is true | | 146 | ! ... != 0 when ! ... is true | +| 146 | ! ... != 0 when x is false | +| 146 | ! ... != 1 when ! ... is false | +| 146 | ! ... != 1 when x is true | | 146 | ! ... == 0 when ! ... is false | +| 146 | ! ... == 0 when x is true | +| 146 | ! ... == 1 when ! ... is true | +| 146 | ! ... == 1 when x is false | | 146 | x != 0 when ! ... is false | | 146 | x != 0 when x is true | +| 146 | x == 0 when ! ... is true | | 146 | x == 0 when x is false | +| 152 | 10 < a+1 when ! ... is true | +| 152 | 10 < a+1 when b is false | +| 152 | 10 >= a+1 when ! ... is false | +| 152 | 10 >= a+1 when b is true | +| 152 | ! ... != 0 when ! ... is true | +| 152 | ! ... != 0 when b is false | +| 152 | ! ... != 1 when ! ... is false | +| 152 | ! ... != 1 when b is true | +| 152 | ! ... == 0 when ! ... is false | +| 152 | ! ... == 0 when b is true | +| 152 | ! ... == 1 when ! ... is true | +| 152 | ! ... == 1 when b is false | +| 152 | ... < ... != 0 when ! ... is false | +| 152 | ... < ... != 0 when b is true | +| 152 | ... < ... != 1 when ! ... is true | +| 152 | ... < ... != 1 when b is false | +| 152 | ... < ... == 0 when ! ... is true | +| 152 | ... < ... == 0 when b is false | +| 152 | ... < ... == 1 when ! ... is false | +| 152 | ... < ... == 1 when b is true | +| 152 | a < 10 when ! ... is false | +| 152 | a < 10 when b is true | +| 152 | a < 10+0 when ! ... is false | +| 152 | a < 10+0 when b is true | +| 152 | a >= 10 when ! ... is true | +| 152 | a >= 10 when b is false | +| 152 | a >= 10+0 when ! ... is true | +| 152 | a >= 10+0 when b is false | +| 152 | b != 0 when ! ... is false | +| 152 | b != 0 when b is true | +| 152 | b != 1 when ! ... is true | +| 152 | b != 1 when b is false | +| 152 | b == 0 when ! ... is true | +| 152 | b == 0 when b is false | +| 152 | b == 1 when ! ... is false | +| 152 | b == 1 when b is true | | 152 | p != 0 when p is true | +| 152 | p != 1 when p is false | | 152 | p == 0 when p is false | +| 152 | p == 1 when p is true | | 158 | ! ... != 0 when ! ... is true | +| 158 | ! ... != 0 when p is false | +| 158 | ! ... != 1 when ! ... is false | +| 158 | ! ... != 1 when p is true | | 158 | ! ... == 0 when ! ... is false | +| 158 | ! ... == 0 when p is true | +| 158 | ! ... == 1 when ! ... is true | +| 158 | ! ... == 1 when p is false | | 158 | p != 0 when ! ... is false | | 158 | p != 0 when p is true | +| 158 | p == 0 when ! ... is true | | 158 | p == 0 when p is false | +| 160 | ! ... != 0 when ! ... is true | +| 160 | ! ... != 0 when c is false | +| 160 | ! ... != 1 when ! ... is false | +| 160 | ! ... != 1 when c is true | +| 160 | ! ... == 0 when ! ... is false | +| 160 | ! ... == 0 when c is true | +| 160 | ! ... == 1 when ! ... is true | +| 160 | ! ... == 1 when c is false | +| 160 | ... != ... != 0 when ! ... is false | +| 160 | ... != ... != 0 when c is true | +| 160 | ... != ... != 1 when ! ... is true | +| 160 | ... != ... != 1 when c is false | +| 160 | ... != ... == 0 when ! ... is true | +| 160 | ... != ... == 0 when c is false | +| 160 | ... != ... == 1 when ! ... is false | +| 160 | ... != ... == 1 when c is true | +| 160 | a != b+0 when ! ... is false | +| 160 | a != b+0 when c is true | +| 160 | a == b+0 when ! ... is true | +| 160 | a == b+0 when c is false | +| 160 | b != a+0 when ! ... is false | +| 160 | b != a+0 when c is true | +| 160 | b == a+0 when ! ... is true | +| 160 | b == a+0 when c is false | +| 160 | c != 0 when ! ... is false | +| 160 | c != 0 when c is true | +| 160 | c != 1 when ! ... is true | +| 160 | c != 1 when c is false | +| 160 | c == 0 when ! ... is true | +| 160 | c == 0 when c is false | +| 160 | c == 1 when ! ... is false | +| 160 | c == 1 when c is true | | 164 | s != 0 when s is true | +| 164 | s != 1 when s is false | | 164 | s == 0 when s is false | +| 164 | s == 1 when s is true | +| 168 | 10 < a+0 when ! ... is false | +| 168 | 10 < a+0 when b is true | +| 168 | 10 >= a+0 when ! ... is true | +| 168 | 10 >= a+0 when b is false | +| 168 | ! ... != 0 when ! ... is true | +| 168 | ! ... != 0 when b is false | +| 168 | ! ... != 1 when ! ... is false | +| 168 | ! ... != 1 when b is true | +| 168 | ! ... == 0 when ! ... is false | +| 168 | ! ... == 0 when b is true | +| 168 | ! ... == 1 when ! ... is true | +| 168 | ! ... == 1 when b is false | +| 168 | ... > ... != 0 when ! ... is false | +| 168 | ... > ... != 0 when b is true | +| 168 | ... > ... != 1 when ! ... is true | +| 168 | ... > ... != 1 when b is false | +| 168 | ... > ... == 0 when ! ... is true | +| 168 | ... > ... == 0 when b is false | +| 168 | ... > ... == 1 when ! ... is false | +| 168 | ... > ... == 1 when b is true | +| 168 | a < 10+1 when ! ... is true | +| 168 | a < 10+1 when b is false | +| 168 | a < 11 when ! ... is true | +| 168 | a < 11 when b is false | +| 168 | a >= 10+1 when ! ... is false | +| 168 | a >= 10+1 when b is true | +| 168 | a >= 11 when ! ... is false | +| 168 | a >= 11 when b is true | +| 168 | b != 0 when ! ... is false | +| 168 | b != 0 when b is true | +| 168 | b != 1 when ! ... is true | +| 168 | b != 1 when b is false | +| 168 | b == 0 when ! ... is true | +| 168 | b == 0 when b is false | +| 168 | b == 1 when ! ... is false | +| 168 | b == 1 when b is true | | 170 | ! ... != 0 when ! ... is true | +| 170 | ! ... != 0 when s is false | +| 170 | ! ... != 1 when ! ... is false | +| 170 | ! ... != 1 when s is true | | 170 | ! ... == 0 when ! ... is false | +| 170 | ! ... == 0 when s is true | +| 170 | ! ... == 1 when ! ... is true | +| 170 | ! ... == 1 when s is false | | 170 | s != 0 when ! ... is false | | 170 | s != 0 when s is true | +| 170 | s == 0 when ! ... is true | | 170 | s == 0 when s is false | +| 176 | ! ... != 0 when ! ... is true | +| 176 | ! ... != 0 when ... < ... is false | +| 176 | ! ... != 0 when c is false | +| 176 | ! ... != 1 when ! ... is false | +| 176 | ! ... != 1 when ... < ... is true | +| 176 | ! ... != 1 when c is true | +| 176 | ! ... == 0 when ! ... is false | +| 176 | ! ... == 0 when ... < ... is true | +| 176 | ! ... == 0 when c is true | +| 176 | ! ... == 1 when ! ... is true | +| 176 | ! ... == 1 when ... < ... is false | +| 176 | ! ... == 1 when c is false | +| 176 | ... < ... != 0 when ! ... is false | +| 176 | ... < ... != 0 when ... < ... is true | +| 176 | ... < ... == 0 when ! ... is true | +| 176 | ... < ... == 0 when ... < ... is false | +| 176 | ... > ... != 0 when ! ... is false | +| 176 | ... > ... != 0 when c is true | +| 176 | ... > ... != 1 when ! ... is true | +| 176 | ... > ... != 1 when c is false | +| 176 | ... > ... == 0 when ! ... is true | +| 176 | ... > ... == 0 when c is false | +| 176 | ... > ... == 1 when ! ... is false | +| 176 | ... > ... == 1 when c is true | +| 176 | a < b+1 when ! ... is true | +| 176 | a < b+1 when c is false | +| 176 | a >= b+1 when ! ... is false | +| 176 | a >= b+1 when c is true | +| 176 | b < a+0 when ! ... is false | +| 176 | b < a+0 when c is true | +| 176 | b >= a+0 when ! ... is true | +| 176 | b >= a+0 when c is false | +| 176 | c != 0 when ! ... is false | +| 176 | c != 0 when c is true | +| 176 | c != 1 when ! ... is true | +| 176 | c != 1 when c is false | +| 176 | c == 0 when ! ... is true | +| 176 | c == 0 when c is false | +| 176 | c == 1 when ! ... is false | +| 176 | c == 1 when c is true | +| 182 | 1.0 < foo+1 when ... < ... is false | +| 182 | 1.0 >= foo+1 when ... && ... is true | +| 182 | 1.0 >= foo+1 when ... < ... is true | +| 182 | 9.999999999999999547e-07 < foo+1 when ... && ... is true | +| 182 | 9.999999999999999547e-07 < foo+1 when ... >= ... is true | +| 182 | 9.999999999999999547e-07 >= foo+1 when ... >= ... is false | +| 182 | ! ... != 0 when ! ... is true | +| 182 | ! ... != 0 when ... && ... is false | +| 182 | ! ... != 1 when ! ... is false | +| 182 | ! ... != 1 when ... && ... is true | +| 182 | ! ... == 0 when ! ... is false | +| 182 | ! ... == 0 when ... && ... is true | +| 182 | ! ... == 1 when ! ... is true | +| 182 | ! ... == 1 when ... && ... is false | +| 182 | ... && ... != 0 when ! ... is false | +| 182 | ... && ... != 0 when ... && ... is true | +| 182 | ... && ... == 0 when ! ... is true | +| 182 | ... && ... == 0 when ... && ... is false | +| 182 | ... < ... != 0 when ... && ... is true | +| 182 | ... < ... != 0 when ... < ... is true | +| 182 | ... < ... != 1 when ... < ... is false | +| 182 | ... < ... == 0 when ... < ... is false | +| 182 | ... < ... == 1 when ... && ... is true | +| 182 | ... < ... == 1 when ... < ... is true | +| 182 | ... >= ... != 0 when ... && ... is true | +| 182 | ... >= ... != 0 when ... >= ... is true | +| 182 | ... >= ... != 1 when ... >= ... is false | +| 182 | ... >= ... == 0 when ... >= ... is false | +| 182 | ... >= ... == 1 when ... && ... is true | +| 182 | ... >= ... == 1 when ... >= ... is true | +| 182 | foo < 1.0+0 when ... && ... is true | +| 182 | foo < 1.0+0 when ... < ... is true | +| 182 | foo < 9.999999999999999547e-07+0 when ... >= ... is false | +| 182 | foo >= 1.0+0 when ... < ... is false | +| 182 | foo >= 9.999999999999999547e-07+0 when ... && ... is true | +| 182 | foo >= 9.999999999999999547e-07+0 when ... >= ... is true | +| 190 | ! ... != 0 when ! ... is true | +| 190 | ! ... != 0 when c is false | +| 190 | ! ... != 1 when ! ... is false | +| 190 | ! ... != 1 when c is true | +| 190 | ! ... == 0 when ! ... is false | +| 190 | ! ... == 0 when c is true | +| 190 | ! ... == 1 when ! ... is true | +| 190 | ! ... == 1 when c is false | +| 190 | c != 0 when ! ... is false | +| 190 | c != 0 when c is true | +| 190 | c == 0 when ! ... is true | +| 190 | c == 0 when c is false | +| 198 | ! ... != 0 when ! ... is true | +| 198 | ! ... != 0 when b is false | +| 198 | ! ... != 1 when ! ... is false | +| 198 | ! ... != 1 when b is true | +| 198 | ! ... == 0 when ! ... is false | +| 198 | ! ... == 0 when b is true | +| 198 | ! ... == 1 when ! ... is true | +| 198 | ! ... == 1 when b is false | +| 198 | b != 0 when ! ... is false | +| 198 | b != 0 when b is true | +| 198 | b == 0 when ! ... is true | +| 198 | b == 0 when b is false | +| 206 | ! ... != 0 when ! ... is true | +| 206 | ! ... != 0 when c is false | +| 206 | ! ... != 1 when ! ... is false | +| 206 | ! ... != 1 when c is true | +| 206 | ! ... == 0 when ! ... is false | +| 206 | ! ... == 0 when c is true | +| 206 | ! ... == 1 when ! ... is true | +| 206 | ! ... == 1 when c is false | +| 206 | c != 0 when ! ... is false | +| 206 | c != 0 when c is true | +| 206 | c == 0 when ! ... is true | +| 206 | c == 0 when c is false | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected index 83275c8011f9..2857bdf511bf 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected @@ -85,6 +85,20 @@ | test.c:164:8:164:8 | s | true | 164 | 166 | | test.c:170:8:170:9 | ! ... | true | 170 | 172 | | test.c:170:9:170:9 | s | false | 170 | 172 | +| test.c:176:8:176:15 | ! ... | true | 176 | 178 | +| test.c:176:10:176:14 | ... < ... | false | 176 | 178 | +| test.c:182:8:182:34 | ! ... | true | 182 | 184 | +| test.c:182:10:182:20 | ... >= ... | true | 181 | 182 | +| test.c:182:10:182:20 | ... >= ... | true | 182 | 182 | +| test.c:182:10:182:33 | ... && ... | false | 182 | 184 | +| test.c:182:10:182:33 | ... && ... | true | 181 | 182 | +| test.c:182:25:182:33 | ... < ... | true | 181 | 182 | +| test.c:190:7:190:8 | ! ... | true | 190 | 192 | +| test.c:190:8:190:8 | c | false | 190 | 192 | +| test.c:198:7:198:8 | ! ... | true | 198 | 200 | +| test.c:198:8:198:8 | b | false | 198 | 200 | +| test.c:206:7:206:8 | ! ... | true | 206 | 208 | +| test.c:206:8:206:8 | c | false | 206 | 208 | | test.cpp:18:8:18:10 | call to get | true | 19 | 19 | | test.cpp:31:7:31:13 | ... == ... | false | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | false | 34 | 34 | @@ -108,3 +122,11 @@ | test.cpp:135:6:135:21 | call to __builtin_expect | true | 135 | 136 | | test.cpp:141:6:141:21 | call to __builtin_expect | true | 141 | 142 | | test.cpp:145:6:145:21 | call to __builtin_expect | true | 145 | 146 | +| test.cpp:152:7:152:8 | ! ... | true | 152 | 153 | +| test.cpp:152:8:152:8 | b | false | 152 | 153 | +| test.cpp:160:7:160:8 | ! ... | true | 160 | 162 | +| test.cpp:160:8:160:8 | c | false | 160 | 162 | +| test.cpp:168:7:168:8 | ! ... | true | 168 | 170 | +| test.cpp:168:8:168:8 | b | false | 168 | 170 | +| test.cpp:176:7:176:8 | ! ... | true | 176 | 178 | +| test.cpp:176:8:176:8 | c | false | 176 | 178 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected index c41cdfd6063d..73a809b3175c 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected @@ -157,6 +157,16 @@ binary | test.c:109:9:109:23 | ... \|\| ... | test.c:109:23:109:23 | 0 | < | test.c:109:19:109:19 | y | 1 | 113 | 113 | | test.c:109:19:109:23 | ... < ... | test.c:109:19:109:19 | y | >= | test.c:109:23:109:23 | 0 | 0 | 113 | 113 | | test.c:109:19:109:23 | ... < ... | test.c:109:23:109:23 | 0 | < | test.c:109:19:109:19 | y | 1 | 113 | 113 | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | 181 | 182 | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | 182 | 182 | +| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | 181 | 182 | +| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | 182 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | 181 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | 181 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:25:182:27 | foo | < | test.c:182:31:182:33 | 1.0 | 0 | 181 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:31:182:33 | 1.0 | >= | test.c:182:25:182:27 | foo | 1 | 181 | 182 | +| test.c:182:25:182:33 | ... < ... | test.c:182:25:182:27 | foo | < | test.c:182:31:182:33 | 1.0 | 0 | 181 | 182 | +| test.c:182:25:182:33 | ... < ... | test.c:182:31:182:33 | 1.0 | >= | test.c:182:25:182:27 | foo | 1 | 181 | 182 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | test.cpp:31:12:31:13 | - ... | 0 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | test.cpp:31:12:31:13 | - ... | 0 | 34 | 34 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | test.cpp:31:12:31:13 | - ... | 0 | 30 | 30 | @@ -181,21 +191,44 @@ binary | test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:28:141:29 | 42 | == | test.cpp:141:23:141:23 | a | 0 | 141 | 142 | | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | test.cpp:145:28:145:29 | 42 | 0 | 145 | 146 | | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:28:145:29 | 42 | != | test.cpp:145:23:145:23 | a | 0 | 145 | 146 | +| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | 152 | 153 | +| test.cpp:152:7:152:8 | ! ... | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | 152 | 153 | +| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | 152 | 153 | +| test.cpp:152:8:152:8 | b | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | 152 | 153 | +| test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | 160 | 162 | +| test.cpp:160:7:160:8 | ! ... | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | 160 | 162 | +| test.cpp:160:8:160:8 | c | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | 160 | 162 | +| test.cpp:160:8:160:8 | c | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | 160 | 162 | +| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:12 | a | < | test.cpp:166:16:166:17 | 10 | 1 | 168 | 170 | +| test.cpp:168:7:168:8 | ! ... | test.cpp:166:16:166:17 | 10 | >= | test.cpp:166:12:166:12 | a | 0 | 168 | 170 | +| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:12 | a | < | test.cpp:166:16:166:17 | 10 | 1 | 168 | 170 | +| test.cpp:168:8:168:8 | b | test.cpp:166:16:166:17 | 10 | >= | test.cpp:166:12:166:12 | a | 0 | 168 | 170 | +| test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:12 | a | < | test.cpp:174:16:174:16 | b | 1 | 176 | 178 | +| test.cpp:176:7:176:8 | ! ... | test.cpp:174:16:174:16 | b | >= | test.cpp:174:12:174:12 | a | 0 | 176 | 178 | +| test.cpp:176:8:176:8 | c | test.cpp:174:12:174:12 | a | < | test.cpp:174:16:174:16 | b | 1 | 176 | 178 | +| test.cpp:176:8:176:8 | c | test.cpp:174:16:174:16 | b | >= | test.cpp:174:12:174:12 | a | 0 | 176 | 178 | unary | test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | 1 | 10 | 11 | | test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | 1 | 7 | 9 | | test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | != | 0 | 7 | 9 | +| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | != | 1 | 10 | 11 | | test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | == | 0 | 10 | 11 | +| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | == | 1 | 7 | 9 | | test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | 0 | 17 | 17 | | test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | 0 | 18 | 18 | | test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | != | 0 | 17 | 17 | | test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | != | 0 | 18 | 18 | +| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | == | 1 | 17 | 17 | +| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | == | 1 | 18 | 18 | | test.c:17:8:17:21 | ... && ... | test.c:17:8:17:8 | x | < | 0 | 18 | 18 | | test.c:17:8:17:21 | ... && ... | test.c:17:8:17:12 | ... < ... | != | 0 | 18 | 18 | +| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:12 | ... < ... | == | 1 | 18 | 18 | | test.c:17:8:17:21 | ... && ... | test.c:17:17:17:17 | y | >= | 2 | 18 | 18 | | test.c:17:8:17:21 | ... && ... | test.c:17:17:17:21 | ... > ... | != | 0 | 18 | 18 | +| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:21 | ... > ... | == | 1 | 18 | 18 | | test.c:17:17:17:21 | ... > ... | test.c:17:17:17:17 | y | >= | 2 | 18 | 18 | | test.c:17:17:17:21 | ... > ... | test.c:17:17:17:21 | ... > ... | != | 0 | 18 | 18 | +| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:21 | ... > ... | == | 1 | 18 | 18 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 2 | 2 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 31 | 34 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 34 | 34 | @@ -211,6 +244,19 @@ unary | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 62 | 62 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | >= | 1 | 26 | 28 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 0 | 26 | 28 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 2 | 2 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 31 | 34 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 34 | 34 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 39 | 42 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 42 | 42 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 42 | 44 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 45 | 45 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 45 | 47 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 51 | 53 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 56 | 58 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 58 | 58 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 58 | 66 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 62 | 62 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 2 | 2 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 31 | 34 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 34 | 34 | @@ -224,6 +270,7 @@ unary | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 58 | 58 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 58 | 66 | | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 62 | 62 | +| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 1 | 26 | 28 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | < | 10 | 34 | 34 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 2 | 2 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 39 | 42 | @@ -237,6 +284,17 @@ unary | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 58 | 66 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 62 | 62 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 0 | 34 | 34 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 2 | 2 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 39 | 42 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 42 | 42 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 42 | 44 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 45 | 45 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 45 | 47 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 51 | 53 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 56 | 58 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 58 | 58 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 58 | 66 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 62 | 62 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 2 | 2 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 39 | 42 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 42 | 42 | @@ -248,6 +306,7 @@ unary | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 58 | 58 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 58 | 66 | | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 62 | 62 | +| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 1 | 34 | 34 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 42 | 42 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 42 | 44 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 45 | 45 | @@ -258,50 +317,77 @@ unary | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 45 | 45 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 45 | 47 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 51 | 53 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 42 | 42 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 42 | 44 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 45 | 45 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 45 | 47 | +| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 51 | 53 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | 42 | 42 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | 51 | 53 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | 45 | 45 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | 45 | 47 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | 45 | 45 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | 45 | 47 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | 42 | 42 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | 51 | 53 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | 42 | 42 | | test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | 51 | 53 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | 45 | 45 | +| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | 45 | 47 | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | >= | 1 | 45 | 47 | | test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | != | 0 | 45 | 47 | +| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | == | 1 | 45 | 47 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 58 | 58 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | != | 1 | 58 | 58 | +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | != | 1 | 62 | 62 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | == | 0 | 58 | 58 | | test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | == | 0 | 62 | 62 | | test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:14 | ... == ... | != | 1 | 62 | 62 | | test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:14 | ... == ... | == | 0 | 62 | 62 | | test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:19 | y | >= | 0 | 62 | 62 | +| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:23 | ... < ... | != | 1 | 62 | 62 | | test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:23 | ... < ... | == | 0 | 62 | 62 | | test.c:58:19:58:23 | ... < ... | test.c:58:19:58:19 | y | >= | 0 | 62 | 62 | +| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:23 | ... < ... | != | 1 | 62 | 62 | | test.c:58:19:58:23 | ... < ... | test.c:58:19:58:23 | ... < ... | == | 0 | 62 | 62 | | test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | 0 | 78 | 79 | | test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 75 | 77 | | test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | 75 | 77 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 1 | 78 | 79 | | test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 0 | 78 | 79 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | 75 | 77 | | test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | != | 0 | 78 | 79 | | test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 75 | 77 | | test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | 75 | 77 | +| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 1 | 78 | 79 | | test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 0 | 78 | 79 | +| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | 75 | 77 | | test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 85 | 85 | | test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 86 | 86 | | test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | 85 | 85 | | test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | 85 | 85 | +| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | 86 | 86 | | test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 85 | 85 | | test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | | test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | 85 | 85 | | test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | 85 | 85 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:75:9:75:9 | x | == | 0 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:75:9:75:14 | ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:14 | ... == ... | == | 1 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:85:8:85:13 | ... == ... | != | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:13 | ... == ... | == | 1 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | | test.c:85:8:85:23 | ... && ... | test.c:85:18:85:23 | ... != ... | != | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:23 | ... != ... | == | 1 | 86 | 86 | | test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | | test.c:85:18:85:23 | ... != ... | test.c:85:18:85:23 | ... != ... | != | 0 | 86 | 86 | +| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:23 | ... != ... | == | 1 | 86 | 86 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | 0 | 94 | 96 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 70 | 70 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 99 | 102 | @@ -311,6 +397,13 @@ unary | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 117 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 113 | 113 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 0 | 94 | 96 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 70 | 70 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 99 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 102 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 107 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 109 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 109 | 117 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 113 | 113 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 70 | 70 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 99 | 102 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 102 | 102 | @@ -318,6 +411,7 @@ unary | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 109 | 109 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 109 | 117 | | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 113 | 113 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 1 | 94 | 96 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | < | 10 | 102 | 102 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 70 | 70 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 107 | 109 | @@ -325,56 +419,135 @@ unary | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 109 | 117 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 113 | 113 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 0 | 102 | 102 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 70 | 70 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 107 | 109 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 109 | 109 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 109 | 117 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 113 | 113 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 70 | 70 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 107 | 109 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 109 | 109 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 109 | 117 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 113 | 113 | +| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 1 | 102 | 102 | | test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 109 | 109 | | test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | != | 1 | 109 | 109 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | != | 1 | 113 | 113 | | test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | == | 0 | 109 | 109 | | test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | == | 0 | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:14 | ... == ... | != | 1 | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:14 | ... == ... | == | 0 | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:19 | y | >= | 0 | 113 | 113 | +| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:23 | ... < ... | != | 1 | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:23 | ... < ... | == | 0 | 113 | 113 | | test.c:109:19:109:23 | ... < ... | test.c:109:19:109:19 | y | >= | 0 | 113 | 113 | +| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:23 | ... < ... | != | 1 | 113 | 113 | | test.c:109:19:109:23 | ... < ... | test.c:109:19:109:23 | ... < ... | == | 0 | 113 | 113 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 126 | 126 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 126 | 128 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 131 | 131 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 131 | 132 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 134 | 123 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 126 | 126 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 126 | 128 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 131 | 131 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 131 | 132 | -| test.c:126:7:126:7 | 1 | test.c:127:9:127:9 | 1 | != | 0 | 134 | 123 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 126 | 126 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 126 | 128 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 131 | 131 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 131 | 132 | +| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 134 | 123 | | test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | == | 1 | 126 | 128 | | test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 | -| test.c:126:7:126:28 | ... && ... | test.c:127:9:127:9 | 1 | != | 0 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | == | 1 | 126 | 128 | | test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 | +| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | == | 1 | 126 | 128 | | test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 | +| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | == | 1 | 131 | 132 | +| test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | != | 1 | 142 | 136 | | test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | == | 0 | 142 | 136 | | test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | != | 0 | 146 | 147 | +| test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | == | 1 | 146 | 147 | +| test.c:146:7:146:8 | ! ... | test.c:146:8:146:8 | x | == | 0 | 146 | 147 | +| test.c:146:8:146:8 | x | test.c:146:7:146:8 | ! ... | != | 0 | 146 | 147 | +| test.c:146:8:146:8 | x | test.c:146:7:146:8 | ! ... | == | 1 | 146 | 147 | | test.c:146:8:146:8 | x | test.c:146:8:146:8 | x | == | 0 | 146 | 147 | | test.c:152:8:152:8 | p | test.c:152:8:152:8 | p | != | 0 | 152 | 154 | +| test.c:152:8:152:8 | p | test.c:152:8:152:8 | p | == | 1 | 152 | 154 | | test.c:158:8:158:9 | ! ... | test.c:158:8:158:9 | ! ... | != | 0 | 158 | 160 | +| test.c:158:8:158:9 | ! ... | test.c:158:8:158:9 | ! ... | == | 1 | 158 | 160 | +| test.c:158:8:158:9 | ! ... | test.c:158:9:158:9 | p | == | 0 | 158 | 160 | +| test.c:158:9:158:9 | p | test.c:158:8:158:9 | ! ... | != | 0 | 158 | 160 | +| test.c:158:9:158:9 | p | test.c:158:8:158:9 | ! ... | == | 1 | 158 | 160 | | test.c:158:9:158:9 | p | test.c:158:9:158:9 | p | == | 0 | 158 | 160 | | test.c:164:8:164:8 | s | test.c:164:8:164:8 | s | != | 0 | 164 | 166 | +| test.c:164:8:164:8 | s | test.c:164:8:164:8 | s | == | 1 | 164 | 166 | | test.c:170:8:170:9 | ! ... | test.c:170:8:170:9 | ! ... | != | 0 | 170 | 172 | +| test.c:170:8:170:9 | ! ... | test.c:170:8:170:9 | ! ... | == | 1 | 170 | 172 | +| test.c:170:8:170:9 | ! ... | test.c:170:9:170:9 | s | == | 0 | 170 | 172 | +| test.c:170:9:170:9 | s | test.c:170:8:170:9 | ! ... | != | 0 | 170 | 172 | +| test.c:170:9:170:9 | s | test.c:170:8:170:9 | ! ... | == | 1 | 170 | 172 | | test.c:170:9:170:9 | s | test.c:170:9:170:9 | s | == | 0 | 170 | 172 | +| test.c:176:8:176:15 | ! ... | test.c:176:8:176:15 | ! ... | != | 0 | 176 | 178 | +| test.c:176:8:176:15 | ! ... | test.c:176:8:176:15 | ! ... | == | 1 | 176 | 178 | +| test.c:176:8:176:15 | ! ... | test.c:176:10:176:14 | ... < ... | == | 0 | 176 | 178 | +| test.c:176:10:176:14 | ... < ... | test.c:176:8:176:15 | ! ... | != | 0 | 176 | 178 | +| test.c:176:10:176:14 | ... < ... | test.c:176:8:176:15 | ! ... | == | 1 | 176 | 178 | +| test.c:176:10:176:14 | ... < ... | test.c:176:10:176:14 | ... < ... | == | 0 | 176 | 178 | +| test.c:182:8:182:34 | ! ... | test.c:182:8:182:34 | ! ... | != | 0 | 182 | 184 | +| test.c:182:8:182:34 | ! ... | test.c:182:8:182:34 | ! ... | == | 1 | 182 | 184 | +| test.c:182:8:182:34 | ! ... | test.c:182:10:182:33 | ... && ... | == | 0 | 182 | 184 | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | != | 0 | 181 | 182 | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | != | 0 | 182 | 182 | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | == | 1 | 181 | 182 | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | == | 1 | 182 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | != | 0 | 182 | 184 | +| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | != | 1 | 181 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | == | 0 | 181 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | == | 1 | 182 | 184 | +| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:20 | ... >= ... | != | 0 | 181 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:20 | ... >= ... | == | 1 | 181 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:33 | ... && ... | != | 0 | 181 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:33 | ... && ... | == | 0 | 182 | 184 | +| test.c:182:10:182:33 | ... && ... | test.c:182:25:182:33 | ... < ... | != | 0 | 181 | 182 | +| test.c:182:10:182:33 | ... && ... | test.c:182:25:182:33 | ... < ... | == | 1 | 181 | 182 | +| test.c:182:25:182:33 | ... < ... | test.c:182:25:182:33 | ... < ... | != | 0 | 181 | 182 | +| test.c:182:25:182:33 | ... < ... | test.c:182:25:182:33 | ... < ... | == | 1 | 181 | 182 | +| test.c:190:7:190:8 | ! ... | test.c:190:7:190:8 | ! ... | != | 0 | 190 | 192 | +| test.c:190:7:190:8 | ! ... | test.c:190:7:190:8 | ! ... | == | 1 | 190 | 192 | +| test.c:190:7:190:8 | ! ... | test.c:190:8:190:8 | c | == | 0 | 190 | 192 | +| test.c:190:8:190:8 | c | test.c:190:7:190:8 | ! ... | != | 0 | 190 | 192 | +| test.c:190:8:190:8 | c | test.c:190:7:190:8 | ! ... | == | 1 | 190 | 192 | +| test.c:190:8:190:8 | c | test.c:190:8:190:8 | c | == | 0 | 190 | 192 | +| test.c:198:7:198:8 | ! ... | test.c:198:7:198:8 | ! ... | != | 0 | 198 | 200 | +| test.c:198:7:198:8 | ! ... | test.c:198:7:198:8 | ! ... | == | 1 | 198 | 200 | +| test.c:198:7:198:8 | ! ... | test.c:198:8:198:8 | b | == | 0 | 198 | 200 | +| test.c:198:8:198:8 | b | test.c:198:7:198:8 | ! ... | != | 0 | 198 | 200 | +| test.c:198:8:198:8 | b | test.c:198:7:198:8 | ! ... | == | 1 | 198 | 200 | +| test.c:198:8:198:8 | b | test.c:198:8:198:8 | b | == | 0 | 198 | 200 | +| test.c:206:7:206:8 | ! ... | test.c:206:7:206:8 | ! ... | != | 0 | 206 | 208 | +| test.c:206:7:206:8 | ! ... | test.c:206:7:206:8 | ! ... | == | 1 | 206 | 208 | +| test.c:206:7:206:8 | ! ... | test.c:206:8:206:8 | c | == | 0 | 206 | 208 | +| test.c:206:8:206:8 | c | test.c:206:7:206:8 | ! ... | != | 0 | 206 | 208 | +| test.c:206:8:206:8 | c | test.c:206:7:206:8 | ! ... | == | 1 | 206 | 208 | +| test.c:206:8:206:8 | c | test.c:206:8:206:8 | c | == | 0 | 206 | 208 | | test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 19 | 19 | +| test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | == | 1 | 19 | 19 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 31 | 32 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 0 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 0 | 31 | 32 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 1 | 34 | 34 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 0 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 0 | 34 | 34 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | 31 | 32 | | test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 0 | 43 | 45 | +| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 1 | 53 | 53 | | test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 0 | 53 | 53 | +| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 1 | 43 | 45 | | test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 0 | 62 | 64 | | test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 1 | 65 | 66 | | test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 11 | 75 | 77 | @@ -382,20 +555,84 @@ unary | test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 0 | 75 | 77 | | test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 11 | 78 | 79 | | test.cpp:93:6:93:6 | c | test.cpp:93:6:93:6 | c | != | 0 | 93 | 94 | +| test.cpp:93:6:93:6 | c | test.cpp:93:6:93:6 | c | == | 1 | 93 | 94 | | test.cpp:99:6:99:6 | f | test.cpp:99:6:99:6 | f | != | 0 | 99 | 100 | +| test.cpp:99:6:99:6 | f | test.cpp:99:6:99:6 | f | == | 1 | 99 | 100 | | test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:14 | ... != ... | != | 0 | 105 | 106 | +| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:14 | ... != ... | == | 1 | 105 | 106 | | test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:14 | ... != ... | != | 0 | 111 | 112 | +| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:14 | ... != ... | == | 1 | 111 | 112 | | test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | 123 | 125 | | test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | 125 | 125 | +| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | == | 1 | 123 | 125 | +| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | == | 1 | 125 | 125 | | test.cpp:125:13:125:20 | ! ... | test.cpp:125:13:125:20 | ! ... | != | 0 | 125 | 125 | +| test.cpp:125:13:125:20 | ! ... | test.cpp:125:13:125:20 | ! ... | == | 1 | 125 | 125 | +| test.cpp:125:13:125:20 | ! ... | test.cpp:125:14:125:17 | call to safe | != | 1 | 125 | 125 | +| test.cpp:125:13:125:20 | ! ... | test.cpp:125:14:125:17 | call to safe | == | 0 | 125 | 125 | +| test.cpp:125:14:125:17 | call to safe | test.cpp:125:13:125:20 | ! ... | != | 0 | 125 | 125 | +| test.cpp:125:14:125:17 | call to safe | test.cpp:125:13:125:20 | ! ... | == | 1 | 125 | 125 | +| test.cpp:125:14:125:17 | call to safe | test.cpp:125:14:125:17 | call to safe | != | 1 | 125 | 125 | | test.cpp:125:14:125:17 | call to safe | test.cpp:125:14:125:17 | call to safe | == | 0 | 125 | 125 | | test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:6:131:21 | call to __builtin_expect | != | 0 | 131 | 132 | -| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:23:131:33 | ... == ... | != | 0 | 131 | 132 | +| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:6:131:21 | call to __builtin_expect | == | 1 | 131 | 132 | | test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:6:135:21 | call to __builtin_expect | != | 0 | 135 | 136 | -| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:23:135:33 | ... != ... | != | 0 | 135 | 136 | +| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:6:135:21 | call to __builtin_expect | == | 1 | 135 | 136 | | test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:6:141:21 | call to __builtin_expect | != | 0 | 141 | 142 | +| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:6:141:21 | call to __builtin_expect | == | 1 | 141 | 142 | | test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:23 | a | == | 42 | 141 | 142 | -| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:29 | ... == ... | != | 0 | 141 | 142 | | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | != | 0 | 145 | 146 | +| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | == | 1 | 145 | 146 | | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | 42 | 145 | 146 | -| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:29 | ... != ... | != | 0 | 145 | 146 | +| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | 10 | 152 | 153 | +| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | != | 1 | 152 | 153 | +| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | == | 0 | 152 | 153 | +| test.cpp:152:7:152:8 | ! ... | test.cpp:152:7:152:8 | ! ... | != | 0 | 152 | 153 | +| test.cpp:152:7:152:8 | ! ... | test.cpp:152:7:152:8 | ! ... | == | 1 | 152 | 153 | +| test.cpp:152:7:152:8 | ! ... | test.cpp:152:8:152:8 | b | != | 1 | 152 | 153 | +| test.cpp:152:7:152:8 | ! ... | test.cpp:152:8:152:8 | b | == | 0 | 152 | 153 | +| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:8 | a | >= | 10 | 152 | 153 | +| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:13 | ... < ... | != | 1 | 152 | 153 | +| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:13 | ... < ... | == | 0 | 152 | 153 | +| test.cpp:152:8:152:8 | b | test.cpp:152:7:152:8 | ! ... | != | 0 | 152 | 153 | +| test.cpp:152:8:152:8 | b | test.cpp:152:7:152:8 | ! ... | == | 1 | 152 | 153 | +| test.cpp:152:8:152:8 | b | test.cpp:152:8:152:8 | b | != | 1 | 152 | 153 | +| test.cpp:152:8:152:8 | b | test.cpp:152:8:152:8 | b | == | 0 | 152 | 153 | +| test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:17 | ... != ... | != | 1 | 160 | 162 | +| test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:17 | ... != ... | == | 0 | 160 | 162 | +| test.cpp:160:7:160:8 | ! ... | test.cpp:160:7:160:8 | ! ... | != | 0 | 160 | 162 | +| test.cpp:160:7:160:8 | ! ... | test.cpp:160:7:160:8 | ! ... | == | 1 | 160 | 162 | +| test.cpp:160:7:160:8 | ! ... | test.cpp:160:8:160:8 | c | != | 1 | 160 | 162 | +| test.cpp:160:7:160:8 | ! ... | test.cpp:160:8:160:8 | c | == | 0 | 160 | 162 | +| test.cpp:160:8:160:8 | c | test.cpp:158:12:158:17 | ... != ... | != | 1 | 160 | 162 | +| test.cpp:160:8:160:8 | c | test.cpp:158:12:158:17 | ... != ... | == | 0 | 160 | 162 | +| test.cpp:160:8:160:8 | c | test.cpp:160:7:160:8 | ! ... | != | 0 | 160 | 162 | +| test.cpp:160:8:160:8 | c | test.cpp:160:7:160:8 | ! ... | == | 1 | 160 | 162 | +| test.cpp:160:8:160:8 | c | test.cpp:160:8:160:8 | c | != | 1 | 160 | 162 | +| test.cpp:160:8:160:8 | c | test.cpp:160:8:160:8 | c | == | 0 | 160 | 162 | +| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:12 | a | < | 11 | 168 | 170 | +| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:17 | ... > ... | != | 1 | 168 | 170 | +| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:17 | ... > ... | == | 0 | 168 | 170 | +| test.cpp:168:7:168:8 | ! ... | test.cpp:168:7:168:8 | ! ... | != | 0 | 168 | 170 | +| test.cpp:168:7:168:8 | ! ... | test.cpp:168:7:168:8 | ! ... | == | 1 | 168 | 170 | +| test.cpp:168:7:168:8 | ! ... | test.cpp:168:8:168:8 | b | != | 1 | 168 | 170 | +| test.cpp:168:7:168:8 | ! ... | test.cpp:168:8:168:8 | b | == | 0 | 168 | 170 | +| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:12 | a | < | 11 | 168 | 170 | +| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:17 | ... > ... | != | 1 | 168 | 170 | +| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:17 | ... > ... | == | 0 | 168 | 170 | +| test.cpp:168:8:168:8 | b | test.cpp:168:7:168:8 | ! ... | != | 0 | 168 | 170 | +| test.cpp:168:8:168:8 | b | test.cpp:168:7:168:8 | ! ... | == | 1 | 168 | 170 | +| test.cpp:168:8:168:8 | b | test.cpp:168:8:168:8 | b | != | 1 | 168 | 170 | +| test.cpp:168:8:168:8 | b | test.cpp:168:8:168:8 | b | == | 0 | 168 | 170 | +| test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:16 | ... > ... | != | 1 | 176 | 178 | +| test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:16 | ... > ... | == | 0 | 176 | 178 | +| test.cpp:176:7:176:8 | ! ... | test.cpp:176:7:176:8 | ! ... | != | 0 | 176 | 178 | +| test.cpp:176:7:176:8 | ! ... | test.cpp:176:7:176:8 | ! ... | == | 1 | 176 | 178 | +| test.cpp:176:7:176:8 | ! ... | test.cpp:176:8:176:8 | c | != | 1 | 176 | 178 | +| test.cpp:176:7:176:8 | ! ... | test.cpp:176:8:176:8 | c | == | 0 | 176 | 178 | +| test.cpp:176:8:176:8 | c | test.cpp:174:12:174:16 | ... > ... | != | 1 | 176 | 178 | +| test.cpp:176:8:176:8 | c | test.cpp:174:12:174:16 | ... > ... | == | 0 | 176 | 178 | +| test.cpp:176:8:176:8 | c | test.cpp:176:7:176:8 | ! ... | != | 0 | 176 | 178 | +| test.cpp:176:8:176:8 | c | test.cpp:176:7:176:8 | ! ... | == | 1 | 176 | 178 | +| test.cpp:176:8:176:8 | c | test.cpp:176:8:176:8 | c | != | 1 | 176 | 178 | +| test.cpp:176:8:176:8 | c | test.cpp:176:8:176:8 | c | == | 0 | 176 | 178 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/test.c b/cpp/ql/test/library-tests/controlflow/guards/test.c index 207e23baa0e3..d453b0d643ca 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/test.c +++ b/cpp/ql/test/library-tests/controlflow/guards/test.c @@ -170,4 +170,40 @@ void test9(short s) { if(!s) { } +} + +void test10(int a, int b) { + if(!(a < b)) { + + } +} + +void test11(double foo) { + if(!(foo >= 1e-6 && foo < 1.0)) { + + } +} + +void test12(int a, int b) { + int c = a != b; + + if (!c) { + + } +} + +void test13(int a) { + int b = a > 10; + + if (!b) { + + } +} + +void test14(int a, int b) { + int c = a > b; + + if (!c) { + + } } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/controlflow/guards/test.cpp b/cpp/ql/test/library-tests/controlflow/guards/test.cpp index e3e48c482371..3bdcdcc01ff5 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/test.cpp +++ b/cpp/ql/test/library-tests/controlflow/guards/test.cpp @@ -145,4 +145,35 @@ void unary_test_builtin_expected(int a) { if(__builtin_expect(a != 42, 0)) { use(a); } +} + +void test_with_reference(bool& b, int a) { + b = a < 10; + if(!b) { + use(a); + } +} + +void test_with_negated_binary_equality(int a, int b) { + bool c = a != b; + + if (!c) { + + } +} + +void test_with_negated_unary_relational(int a) { + bool b = a > 10; + + if (!b) { + + } +} + +void test_with_negated_binary_relational(int a, int b) { + bool c = a > b; + + if (!c) { + + } } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index bfb123fa6843..a0a797bc0e40 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -4351,6 +4351,33 @@ generic.c: # 28| Type = [IntType] unsigned int # 28| ValueCategory = prvalue # 29| getStmt(2): [ReturnStmt] return ... +ir-not-microsoft.c: +# 1| [TopLevelFunction] void gnuConditionalOmittedOperand() +# 1| : +# 1| getEntryPoint(): [BlockStmt] { ... } +# 2| getStmt(0): [DeclStmt] declaration +# 2| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 2| Type = [IntType] int +# 2| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 2| Type = [IntType] int +# 3| getStmt(1): [ExprStmt] ExprStmt +# 3| getExpr(): [AssignExpr] ... = ... +# 3| Type = [IntType] int +# 3| ValueCategory = prvalue +# 3| getLValue(): [VariableAccess] i +# 3| Type = [IntType] int +# 3| ValueCategory = lvalue +# 3| getRValue(): [ConditionalExpr] ... ? ... : ... +# 3| Type = [IntType] int +# 3| ValueCategory = prvalue(load) +# 3| getCondition(): [VariableAccess] j +# 3| Type = [IntType] int +# 3| ValueCategory = prvalue(load) +# 3| getElse(): [Literal] 2 +# 3| Type = [IntType] int +# 3| Value = [Literal] 2 +# 3| ValueCategory = prvalue +# 4| getStmt(2): [ReturnStmt] return ... ir.c: # 5| [TopLevelFunction] int getX(MyCoords*) # 5| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 4f340042cb9a..7803ea9e0503 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -3032,6 +3032,47 @@ generic.c: # 26| v26_8(void) = AliasedUse : m26_3 # 26| v26_9(void) = ExitFunction : +ir-not-microsoft.c: +# 1| void gnuConditionalOmittedOperand() +# 1| Block 0 +# 1| v1_1(void) = EnterFunction : +# 1| m1_2(unknown) = AliasedDefinition : +# 1| m1_3(unknown) = InitializeNonLocal : +# 1| m1_4(unknown) = Chi : total:m1_2, partial:m1_3 +# 2| r2_1(glval) = VariableAddress[i] : +# 2| m2_2(int) = Uninitialized[i] : &:r2_1 +# 2| r2_3(glval) = VariableAddress[j] : +# 2| m2_4(int) = Uninitialized[j] : &:r2_3 +# 3| r3_1(glval) = VariableAddress[j] : +# 3| r3_2(int) = Load[j] : &:r3_1, m2_4 +# 3| r3_3(int) = Constant[0] : +# 3| r3_4(bool) = CompareNE : r3_2, r3_3 +# 3| v3_5(void) = ConditionalBranch : r3_4 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 3| Block 1 +# 3| m3_6(int) = Phi : from 2:m3_12, from 3:m3_15 +# 3| r3_7(glval) = VariableAddress[#temp3:9] : +# 3| r3_8(int) = Load[#temp3:9] : &:r3_7, m3_6 +# 3| r3_9(glval) = VariableAddress[i] : +# 3| m3_10(int) = Store[i] : &:r3_9, r3_8 +# 4| v4_1(void) = NoOp : +# 1| v1_5(void) = ReturnVoid : +# 1| v1_6(void) = AliasedUse : m1_3 +# 1| v1_7(void) = ExitFunction : + +# 3| Block 2 +# 3| r3_11(glval) = VariableAddress[#temp3:9] : +# 3| m3_12(int) = Store[#temp3:9] : &:r3_11, r3_2 +#-----| Goto -> Block 1 + +# 3| Block 3 +# 3| r3_13(int) = Constant[2] : +# 3| r3_14(glval) = VariableAddress[#temp3:9] : +# 3| m3_15(int) = Store[#temp3:9] : &:r3_14, r3_13 +#-----| Goto -> Block 1 + ir.c: # 7| void MyCoordsTest(int) # 7| Block 0 @@ -3308,258 +3349,296 @@ ir.c: # 84| m84_8(int) = InitializeParameter[x2] : &:r84_7 # 85| r85_1(glval) = VariableAddress[x1] : # 85| r85_2(int) = Load[x1] : &:r85_1, m84_6 -# 85| v85_3(void) = ConditionalBranch : r85_2 +# 85| r85_3(int) = Constant[0] : +# 85| r85_4(bool) = CompareNE : r85_2, r85_3 +# 85| v85_5(void) = ConditionalBranch : r85_4 #-----| False -> Block 2 #-----| True -> Block 1 # 85| Block 1 -# 85| v85_4(void) = NoOp : +# 85| v85_6(void) = NoOp : #-----| Goto -> Block 2 # 86| Block 2 # 86| r86_1(glval) = VariableAddress[x1] : # 86| r86_2(int) = Load[x1] : &:r86_1, m84_6 -# 86| r86_3(int) = LogicalNot : r86_2 -# 86| v86_4(void) = ConditionalBranch : r86_3 +# 86| r86_3(int) = Constant[0] : +# 86| r86_4(bool) = CompareEQ : r86_2, r86_3 +# 86| v86_5(void) = ConditionalBranch : r86_4 #-----| False -> Block 4 #-----| True -> Block 3 # 86| Block 3 -# 86| v86_5(void) = NoOp : +# 86| v86_6(void) = NoOp : #-----| Goto -> Block 4 # 88| Block 4 # 88| r88_1(glval) = VariableAddress[y] : # 88| r88_2(glval) = VariableAddress[x1] : # 88| r88_3(int) = Load[x1] : &:r88_2, m84_6 -# 88| r88_4(int) = LogicalNot : r88_3 -# 88| m88_5(int) = Store[y] : &:r88_1, r88_4 +# 88| r88_4(int) = Constant[0] : +# 88| r88_5(bool) = CompareEQ : r88_3, r88_4 +# 88| m88_6(int) = Store[y] : &:r88_1, r88_5 # 89| r89_1(glval) = VariableAddress[y] : -# 89| r89_2(int) = Load[y] : &:r89_1, m88_5 -# 89| v89_3(void) = ConditionalBranch : r89_2 +# 89| r89_2(int) = Load[y] : &:r89_1, m88_6 +# 89| r89_3(int) = Constant[0] : +# 89| r89_4(bool) = CompareNE : r89_2, r89_3 +# 89| v89_5(void) = ConditionalBranch : r89_4 #-----| False -> Block 6 #-----| True -> Block 5 # 89| Block 5 -# 89| v89_4(void) = NoOp : +# 89| v89_6(void) = NoOp : #-----| Goto -> Block 6 # 90| Block 6 # 90| r90_1(glval) = VariableAddress[y] : -# 90| r90_2(int) = Load[y] : &:r90_1, m88_5 -# 90| r90_3(int) = LogicalNot : r90_2 -# 90| v90_4(void) = ConditionalBranch : r90_3 +# 90| r90_2(int) = Load[y] : &:r90_1, m88_6 +# 90| r90_3(int) = Constant[0] : +# 90| r90_4(bool) = CompareEQ : r90_2, r90_3 +# 90| v90_5(void) = ConditionalBranch : r90_4 #-----| False -> Block 8 #-----| True -> Block 7 # 90| Block 7 -# 90| v90_5(void) = NoOp : +# 90| v90_6(void) = NoOp : #-----| Goto -> Block 8 # 92| Block 8 # 92| r92_1(glval) = VariableAddress[x1] : # 92| r92_2(int) = Load[x1] : &:r92_1, m84_6 -# 92| v92_3(void) = ConditionalBranch : r92_2 +# 92| r92_3(int) = Constant[0] : +# 92| r92_4(bool) = CompareNE : r92_2, r92_3 +# 92| v92_5(void) = ConditionalBranch : r92_4 #-----| False -> Block 11 #-----| True -> Block 9 # 92| Block 9 -# 92| r92_4(glval) = VariableAddress[x2] : -# 92| r92_5(int) = Load[x2] : &:r92_4, m84_8 -# 92| v92_6(void) = ConditionalBranch : r92_5 +# 92| r92_6(glval) = VariableAddress[x2] : +# 92| r92_7(int) = Load[x2] : &:r92_6, m84_8 +# 92| r92_8(int) = Constant[0] : +# 92| r92_9(bool) = CompareNE : r92_7, r92_8 +# 92| v92_10(void) = ConditionalBranch : r92_9 #-----| False -> Block 11 #-----| True -> Block 10 # 92| Block 10 -# 92| v92_7(void) = NoOp : +# 92| v92_11(void) = NoOp : #-----| Goto -> Block 11 # 93| Block 11 # 93| r93_1(glval) = VariableAddress[x1] : # 93| r93_2(int) = Load[x1] : &:r93_1, m84_6 -# 93| r93_3(int) = LogicalNot : r93_2 -# 93| v93_4(void) = ConditionalBranch : r93_3 +# 93| r93_3(int) = Constant[0] : +# 93| r93_4(bool) = CompareEQ : r93_2, r93_3 +# 93| v93_5(void) = ConditionalBranch : r93_4 #-----| False -> Block 14 #-----| True -> Block 12 # 93| Block 12 -# 93| r93_5(glval) = VariableAddress[x2] : -# 93| r93_6(int) = Load[x2] : &:r93_5, m84_8 -# 93| v93_7(void) = ConditionalBranch : r93_6 +# 93| r93_6(glval) = VariableAddress[x2] : +# 93| r93_7(int) = Load[x2] : &:r93_6, m84_8 +# 93| r93_8(int) = Constant[0] : +# 93| r93_9(bool) = CompareNE : r93_7, r93_8 +# 93| v93_10(void) = ConditionalBranch : r93_9 #-----| False -> Block 14 #-----| True -> Block 13 # 93| Block 13 -# 93| v93_8(void) = NoOp : +# 93| v93_11(void) = NoOp : #-----| Goto -> Block 14 # 94| Block 14 # 94| r94_1(glval) = VariableAddress[x1] : # 94| r94_2(int) = Load[x1] : &:r94_1, m84_6 -# 94| v94_3(void) = ConditionalBranch : r94_2 +# 94| r94_3(int) = Constant[0] : +# 94| r94_4(bool) = CompareNE : r94_2, r94_3 +# 94| v94_5(void) = ConditionalBranch : r94_4 #-----| False -> Block 17 #-----| True -> Block 15 # 94| Block 15 -# 94| r94_4(glval) = VariableAddress[x2] : -# 94| r94_5(int) = Load[x2] : &:r94_4, m84_8 -# 94| r94_6(int) = LogicalNot : r94_5 -# 94| v94_7(void) = ConditionalBranch : r94_6 +# 94| r94_6(glval) = VariableAddress[x2] : +# 94| r94_7(int) = Load[x2] : &:r94_6, m84_8 +# 94| r94_8(int) = Constant[0] : +# 94| r94_9(bool) = CompareEQ : r94_7, r94_8 +# 94| v94_10(void) = ConditionalBranch : r94_9 #-----| False -> Block 17 #-----| True -> Block 16 # 94| Block 16 -# 94| v94_8(void) = NoOp : +# 94| v94_11(void) = NoOp : #-----| Goto -> Block 17 # 95| Block 17 # 95| r95_1(glval) = VariableAddress[x1] : # 95| r95_2(int) = Load[x1] : &:r95_1, m84_6 -# 95| r95_3(int) = LogicalNot : r95_2 -# 95| v95_4(void) = ConditionalBranch : r95_3 +# 95| r95_3(int) = Constant[0] : +# 95| r95_4(bool) = CompareEQ : r95_2, r95_3 +# 95| v95_5(void) = ConditionalBranch : r95_4 #-----| False -> Block 20 #-----| True -> Block 18 # 95| Block 18 -# 95| r95_5(glval) = VariableAddress[x2] : -# 95| r95_6(int) = Load[x2] : &:r95_5, m84_8 -# 95| r95_7(int) = LogicalNot : r95_6 -# 95| v95_8(void) = ConditionalBranch : r95_7 +# 95| r95_6(glval) = VariableAddress[x2] : +# 95| r95_7(int) = Load[x2] : &:r95_6, m84_8 +# 95| r95_8(int) = Constant[0] : +# 95| r95_9(bool) = CompareEQ : r95_7, r95_8 +# 95| v95_10(void) = ConditionalBranch : r95_9 #-----| False -> Block 20 #-----| True -> Block 19 # 95| Block 19 -# 95| v95_9(void) = NoOp : +# 95| v95_11(void) = NoOp : #-----| Goto -> Block 20 # 96| Block 20 # 96| r96_1(glval) = VariableAddress[x1] : # 96| r96_2(int) = Load[x1] : &:r96_1, m84_6 -# 96| v96_3(void) = ConditionalBranch : r96_2 +# 96| r96_3(int) = Constant[0] : +# 96| r96_4(bool) = CompareNE : r96_2, r96_3 +# 96| v96_5(void) = ConditionalBranch : r96_4 #-----| False -> Block 21 #-----| True -> Block 22 # 96| Block 21 -# 96| r96_4(glval) = VariableAddress[x2] : -# 96| r96_5(int) = Load[x2] : &:r96_4, m84_8 -# 96| v96_6(void) = ConditionalBranch : r96_5 +# 96| r96_6(glval) = VariableAddress[x2] : +# 96| r96_7(int) = Load[x2] : &:r96_6, m84_8 +# 96| r96_8(int) = Constant[0] : +# 96| r96_9(bool) = CompareNE : r96_7, r96_8 +# 96| v96_10(void) = ConditionalBranch : r96_9 #-----| False -> Block 23 #-----| True -> Block 22 # 96| Block 22 -# 96| v96_7(void) = NoOp : +# 96| v96_11(void) = NoOp : #-----| Goto -> Block 23 # 97| Block 23 # 97| r97_1(glval) = VariableAddress[x1] : # 97| r97_2(int) = Load[x1] : &:r97_1, m84_6 -# 97| r97_3(int) = LogicalNot : r97_2 -# 97| v97_4(void) = ConditionalBranch : r97_3 +# 97| r97_3(int) = Constant[0] : +# 97| r97_4(bool) = CompareEQ : r97_2, r97_3 +# 97| v97_5(void) = ConditionalBranch : r97_4 #-----| False -> Block 24 #-----| True -> Block 25 # 97| Block 24 -# 97| r97_5(glval) = VariableAddress[x2] : -# 97| r97_6(int) = Load[x2] : &:r97_5, m84_8 -# 97| v97_7(void) = ConditionalBranch : r97_6 +# 97| r97_6(glval) = VariableAddress[x2] : +# 97| r97_7(int) = Load[x2] : &:r97_6, m84_8 +# 97| r97_8(int) = Constant[0] : +# 97| r97_9(bool) = CompareNE : r97_7, r97_8 +# 97| v97_10(void) = ConditionalBranch : r97_9 #-----| False -> Block 26 #-----| True -> Block 25 # 97| Block 25 -# 97| v97_8(void) = NoOp : +# 97| v97_11(void) = NoOp : #-----| Goto -> Block 26 # 98| Block 26 # 98| r98_1(glval) = VariableAddress[x1] : # 98| r98_2(int) = Load[x1] : &:r98_1, m84_6 -# 98| v98_3(void) = ConditionalBranch : r98_2 +# 98| r98_3(int) = Constant[0] : +# 98| r98_4(bool) = CompareNE : r98_2, r98_3 +# 98| v98_5(void) = ConditionalBranch : r98_4 #-----| False -> Block 27 #-----| True -> Block 28 # 98| Block 27 -# 98| r98_4(glval) = VariableAddress[x2] : -# 98| r98_5(int) = Load[x2] : &:r98_4, m84_8 -# 98| r98_6(int) = LogicalNot : r98_5 -# 98| v98_7(void) = ConditionalBranch : r98_6 +# 98| r98_6(glval) = VariableAddress[x2] : +# 98| r98_7(int) = Load[x2] : &:r98_6, m84_8 +# 98| r98_8(int) = Constant[0] : +# 98| r98_9(bool) = CompareEQ : r98_7, r98_8 +# 98| v98_10(void) = ConditionalBranch : r98_9 #-----| False -> Block 29 #-----| True -> Block 28 # 98| Block 28 -# 98| v98_8(void) = NoOp : +# 98| v98_11(void) = NoOp : #-----| Goto -> Block 29 # 99| Block 29 # 99| r99_1(glval) = VariableAddress[x1] : # 99| r99_2(int) = Load[x1] : &:r99_1, m84_6 -# 99| r99_3(int) = LogicalNot : r99_2 -# 99| v99_4(void) = ConditionalBranch : r99_3 +# 99| r99_3(int) = Constant[0] : +# 99| r99_4(bool) = CompareEQ : r99_2, r99_3 +# 99| v99_5(void) = ConditionalBranch : r99_4 #-----| False -> Block 30 #-----| True -> Block 31 # 99| Block 30 -# 99| r99_5(glval) = VariableAddress[x2] : -# 99| r99_6(int) = Load[x2] : &:r99_5, m84_8 -# 99| r99_7(int) = LogicalNot : r99_6 -# 99| v99_8(void) = ConditionalBranch : r99_7 +# 99| r99_6(glval) = VariableAddress[x2] : +# 99| r99_7(int) = Load[x2] : &:r99_6, m84_8 +# 99| r99_8(int) = Constant[0] : +# 99| r99_9(bool) = CompareEQ : r99_7, r99_8 +# 99| v99_10(void) = ConditionalBranch : r99_9 #-----| False -> Block 32 #-----| True -> Block 31 # 99| Block 31 -# 99| v99_9(void) = NoOp : +# 99| v99_11(void) = NoOp : #-----| Goto -> Block 32 # 101| Block 32 # 101| r101_1(glval) = VariableAddress[x_1_and_2] : # 101| r101_2(glval) = VariableAddress[x1] : # 101| r101_3(int) = Load[x1] : &:r101_2, m84_6 -# 101| v101_4(void) = ConditionalBranch : r101_3 +# 101| r101_4(int) = Constant[0] : +# 101| r101_5(bool) = CompareNE : r101_3, r101_4 +# 101| v101_6(void) = ConditionalBranch : r101_5 #-----| False -> Block 33 #-----| True -> Block 36 # 101| Block 33 -# 101| r101_5(glval) = VariableAddress[#temp101:19] : -# 101| r101_6(int) = Constant[0] : -# 101| m101_7(int) = Store[#temp101:19] : &:r101_5, r101_6 +# 101| r101_7(glval) = VariableAddress[#temp101:19] : +# 101| r101_8(int) = Constant[0] : +# 101| m101_9(int) = Store[#temp101:19] : &:r101_7, r101_8 #-----| Goto -> Block 34 # 101| Block 34 -# 101| m101_8(int) = Phi : from 33:m101_7, from 35:m101_14 -# 101| r101_9(glval) = VariableAddress[#temp101:19] : -# 101| r101_10(int) = Load[#temp101:19] : &:r101_9, m101_8 -# 101| m101_11(int) = Store[x_1_and_2] : &:r101_1, r101_10 -# 102| r102_1(glval) = VariableAddress[x_1_and_2] : -# 102| r102_2(int) = Load[x_1_and_2] : &:r102_1, m101_11 -# 102| v102_3(void) = ConditionalBranch : r102_2 +# 101| m101_10(int) = Phi : from 33:m101_9, from 35:m101_16 +# 101| r101_11(glval) = VariableAddress[#temp101:19] : +# 101| r101_12(int) = Load[#temp101:19] : &:r101_11, m101_10 +# 101| m101_13(int) = Store[x_1_and_2] : &:r101_1, r101_12 +# 102| r102_1(glval) = VariableAddress[x_1_and_2] : +# 102| r102_2(int) = Load[x_1_and_2] : &:r102_1, m101_13 +# 102| r102_3(int) = Constant[0] : +# 102| r102_4(bool) = CompareNE : r102_2, r102_3 +# 102| v102_5(void) = ConditionalBranch : r102_4 #-----| False -> Block 38 #-----| True -> Block 37 # 101| Block 35 -# 101| r101_12(glval) = VariableAddress[#temp101:19] : -# 101| r101_13(int) = Constant[1] : -# 101| m101_14(int) = Store[#temp101:19] : &:r101_12, r101_13 +# 101| r101_14(glval) = VariableAddress[#temp101:19] : +# 101| r101_15(int) = Constant[1] : +# 101| m101_16(int) = Store[#temp101:19] : &:r101_14, r101_15 #-----| Goto -> Block 34 # 101| Block 36 -# 101| r101_15(glval) = VariableAddress[x2] : -# 101| r101_16(int) = Load[x2] : &:r101_15, m84_8 -# 101| v101_17(void) = ConditionalBranch : r101_16 +# 101| r101_17(glval) = VariableAddress[x2] : +# 101| r101_18(int) = Load[x2] : &:r101_17, m84_8 +# 101| r101_19(int) = Constant[0] : +# 101| r101_20(bool) = CompareNE : r101_18, r101_19 +# 101| v101_21(void) = ConditionalBranch : r101_20 #-----| False -> Block 33 #-----| True -> Block 35 # 102| Block 37 -# 102| v102_4(void) = NoOp : +# 102| v102_6(void) = NoOp : #-----| Goto -> Block 38 # 103| Block 38 # 103| r103_1(glval) = VariableAddress[x_1_and_2] : -# 103| r103_2(int) = Load[x_1_and_2] : &:r103_1, m101_11 -# 103| r103_3(int) = LogicalNot : r103_2 -# 103| v103_4(void) = ConditionalBranch : r103_3 +# 103| r103_2(int) = Load[x_1_and_2] : &:r103_1, m101_13 +# 103| r103_3(int) = Constant[0] : +# 103| r103_4(bool) = CompareEQ : r103_2, r103_3 +# 103| v103_5(void) = ConditionalBranch : r103_4 #-----| False -> Block 40 #-----| True -> Block 39 # 103| Block 39 -# 103| v103_5(void) = NoOp : +# 103| v103_6(void) = NoOp : #-----| Goto -> Block 40 # 104| Block 40 @@ -38838,7 +38917,9 @@ try_except.c: # 33| m33_3(int) = Store[x] : &:r33_1, r33_2 # 35| r35_1(glval) = VariableAddress[b] : # 35| r35_2(int) = Load[b] : &:r35_1, m32_6 -# 35| v35_3(void) = ConditionalBranch : r35_2 +# 35| r35_3(int) = Constant[0] : +# 35| r35_4(bool) = CompareNE : r35_2, r35_3 +# 35| v35_5(void) = ConditionalBranch : r35_4 #-----| False -> Block 2 #-----| True -> Block 1 diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index 7f10f2f9d7c9..b83d9ea47e38 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -30,41 +30,4 @@ thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable nonBooleanOperand -| ir.c:85:7:85:8 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:88:11:88:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:89:6:89:6 | ConditionalBranch: y | Conditional branch instruction ConditionalBranch: y with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:6:92:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:12:92:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:13:93:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:6:94:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:6:96:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:12:96:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:13:97:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:6:98:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:19:101:20 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:25:101:26 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:102:6:102:14 | ConditionalBranch: x_1_and_2 | Conditional branch instruction ConditionalBranch: x_1_and_2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| try_except.c:35:13:35:13 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | try_except.c:32:6:32:6 | void h(int) | void h(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index 7f10f2f9d7c9..b83d9ea47e38 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -30,41 +30,4 @@ thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable nonBooleanOperand -| ir.c:85:7:85:8 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:88:11:88:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:89:6:89:6 | ConditionalBranch: y | Conditional branch instruction ConditionalBranch: y with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:6:92:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:12:92:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:13:93:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:6:94:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:6:96:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:12:96:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:13:97:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:6:98:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:19:101:20 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:25:101:26 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:102:6:102:14 | ConditionalBranch: x_1_and_2 | Conditional branch instruction ConditionalBranch: x_1_and_2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| try_except.c:35:13:35:13 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | try_except.c:32:6:32:6 | void h(int) | void h(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/ir-not-microsoft.c b/cpp/ql/test/library-tests/ir/ir/ir-not-microsoft.c new file mode 100644 index 000000000000..4b42a19d26b2 --- /dev/null +++ b/cpp/ql/test/library-tests/ir/ir/ir-not-microsoft.c @@ -0,0 +1,4 @@ +void gnuConditionalOmittedOperand() { + int i, j; + i = j ? : 2; +} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index 7b5d32c65438..ee6f9f2073a7 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -39,41 +39,4 @@ thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable nonBooleanOperand -| ir.c:85:7:85:8 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:88:11:88:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:89:6:89:6 | ConditionalBranch: y | Conditional branch instruction ConditionalBranch: y with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:6:92:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:12:92:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:13:93:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:6:94:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:6:96:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:12:96:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:13:97:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:6:98:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:19:101:20 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:25:101:26 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:102:6:102:14 | ConditionalBranch: x_1_and_2 | Conditional branch instruction ConditionalBranch: x_1_and_2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| try_except.c:35:13:35:13 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | try_except.c:32:6:32:6 | void h(int) | void h(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 31faa22d9fcd..5d4e12fe5ce7 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -2808,6 +2808,45 @@ generic.c: # 26| v26_7(void) = AliasedUse : ~m? # 26| v26_8(void) = ExitFunction : +ir-not-microsoft.c: +# 1| void gnuConditionalOmittedOperand() +# 1| Block 0 +# 1| v1_1(void) = EnterFunction : +# 1| mu1_2(unknown) = AliasedDefinition : +# 1| mu1_3(unknown) = InitializeNonLocal : +# 2| r2_1(glval) = VariableAddress[i] : +# 2| mu2_2(int) = Uninitialized[i] : &:r2_1 +# 2| r2_3(glval) = VariableAddress[j] : +# 2| mu2_4(int) = Uninitialized[j] : &:r2_3 +# 3| r3_1(glval) = VariableAddress[j] : +# 3| r3_2(int) = Load[j] : &:r3_1, ~m? +# 3| r3_3(int) = Constant[0] : +# 3| r3_4(bool) = CompareNE : r3_2, r3_3 +# 3| v3_5(void) = ConditionalBranch : r3_4 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 3| Block 1 +# 3| r3_6(glval) = VariableAddress[#temp3:9] : +# 3| r3_7(int) = Load[#temp3:9] : &:r3_6, ~m? +# 3| r3_8(glval) = VariableAddress[i] : +# 3| mu3_9(int) = Store[i] : &:r3_8, r3_7 +# 4| v4_1(void) = NoOp : +# 1| v1_4(void) = ReturnVoid : +# 1| v1_5(void) = AliasedUse : ~m? +# 1| v1_6(void) = ExitFunction : + +# 3| Block 2 +# 3| r3_10(glval) = VariableAddress[#temp3:9] : +# 3| mu3_11(int) = Store[#temp3:9] : &:r3_10, r3_2 +#-----| Goto -> Block 1 + +# 3| Block 3 +# 3| r3_12(int) = Constant[2] : +# 3| r3_13(glval) = VariableAddress[#temp3:9] : +# 3| mu3_14(int) = Store[#temp3:9] : &:r3_13, r3_12 +#-----| Goto -> Block 1 + ir.c: # 7| void MyCoordsTest(int) # 7| Block 0 @@ -3106,257 +3145,295 @@ ir.c: # 84| mu84_7(int) = InitializeParameter[x2] : &:r84_6 # 85| r85_1(glval) = VariableAddress[x1] : # 85| r85_2(int) = Load[x1] : &:r85_1, ~m? -# 85| v85_3(void) = ConditionalBranch : r85_2 +# 85| r85_3(int) = Constant[0] : +# 85| r85_4(bool) = CompareNE : r85_2, r85_3 +# 85| v85_5(void) = ConditionalBranch : r85_4 #-----| False -> Block 2 #-----| True -> Block 1 # 85| Block 1 -# 85| v85_4(void) = NoOp : +# 85| v85_6(void) = NoOp : #-----| Goto -> Block 2 # 86| Block 2 # 86| r86_1(glval) = VariableAddress[x1] : # 86| r86_2(int) = Load[x1] : &:r86_1, ~m? -# 86| r86_3(int) = LogicalNot : r86_2 -# 86| v86_4(void) = ConditionalBranch : r86_3 +# 86| r86_3(int) = Constant[0] : +# 86| r86_4(bool) = CompareEQ : r86_2, r86_3 +# 86| v86_5(void) = ConditionalBranch : r86_4 #-----| False -> Block 4 #-----| True -> Block 3 # 86| Block 3 -# 86| v86_5(void) = NoOp : +# 86| v86_6(void) = NoOp : #-----| Goto -> Block 4 # 88| Block 4 # 88| r88_1(glval) = VariableAddress[y] : # 88| r88_2(glval) = VariableAddress[x1] : # 88| r88_3(int) = Load[x1] : &:r88_2, ~m? -# 88| r88_4(int) = LogicalNot : r88_3 -# 88| mu88_5(int) = Store[y] : &:r88_1, r88_4 +# 88| r88_4(int) = Constant[0] : +# 88| r88_5(bool) = CompareEQ : r88_3, r88_4 +# 88| mu88_6(int) = Store[y] : &:r88_1, r88_5 # 89| r89_1(glval) = VariableAddress[y] : # 89| r89_2(int) = Load[y] : &:r89_1, ~m? -# 89| v89_3(void) = ConditionalBranch : r89_2 +# 89| r89_3(int) = Constant[0] : +# 89| r89_4(bool) = CompareNE : r89_2, r89_3 +# 89| v89_5(void) = ConditionalBranch : r89_4 #-----| False -> Block 6 #-----| True -> Block 5 # 89| Block 5 -# 89| v89_4(void) = NoOp : +# 89| v89_6(void) = NoOp : #-----| Goto -> Block 6 # 90| Block 6 # 90| r90_1(glval) = VariableAddress[y] : # 90| r90_2(int) = Load[y] : &:r90_1, ~m? -# 90| r90_3(int) = LogicalNot : r90_2 -# 90| v90_4(void) = ConditionalBranch : r90_3 +# 90| r90_3(int) = Constant[0] : +# 90| r90_4(bool) = CompareEQ : r90_2, r90_3 +# 90| v90_5(void) = ConditionalBranch : r90_4 #-----| False -> Block 8 #-----| True -> Block 7 # 90| Block 7 -# 90| v90_5(void) = NoOp : +# 90| v90_6(void) = NoOp : #-----| Goto -> Block 8 # 92| Block 8 # 92| r92_1(glval) = VariableAddress[x1] : # 92| r92_2(int) = Load[x1] : &:r92_1, ~m? -# 92| v92_3(void) = ConditionalBranch : r92_2 +# 92| r92_3(int) = Constant[0] : +# 92| r92_4(bool) = CompareNE : r92_2, r92_3 +# 92| v92_5(void) = ConditionalBranch : r92_4 #-----| False -> Block 11 #-----| True -> Block 9 # 92| Block 9 -# 92| r92_4(glval) = VariableAddress[x2] : -# 92| r92_5(int) = Load[x2] : &:r92_4, ~m? -# 92| v92_6(void) = ConditionalBranch : r92_5 +# 92| r92_6(glval) = VariableAddress[x2] : +# 92| r92_7(int) = Load[x2] : &:r92_6, ~m? +# 92| r92_8(int) = Constant[0] : +# 92| r92_9(bool) = CompareNE : r92_7, r92_8 +# 92| v92_10(void) = ConditionalBranch : r92_9 #-----| False -> Block 11 #-----| True -> Block 10 # 92| Block 10 -# 92| v92_7(void) = NoOp : +# 92| v92_11(void) = NoOp : #-----| Goto -> Block 11 # 93| Block 11 # 93| r93_1(glval) = VariableAddress[x1] : # 93| r93_2(int) = Load[x1] : &:r93_1, ~m? -# 93| r93_3(int) = LogicalNot : r93_2 -# 93| v93_4(void) = ConditionalBranch : r93_3 +# 93| r93_3(int) = Constant[0] : +# 93| r93_4(bool) = CompareEQ : r93_2, r93_3 +# 93| v93_5(void) = ConditionalBranch : r93_4 #-----| False -> Block 14 #-----| True -> Block 12 # 93| Block 12 -# 93| r93_5(glval) = VariableAddress[x2] : -# 93| r93_6(int) = Load[x2] : &:r93_5, ~m? -# 93| v93_7(void) = ConditionalBranch : r93_6 +# 93| r93_6(glval) = VariableAddress[x2] : +# 93| r93_7(int) = Load[x2] : &:r93_6, ~m? +# 93| r93_8(int) = Constant[0] : +# 93| r93_9(bool) = CompareNE : r93_7, r93_8 +# 93| v93_10(void) = ConditionalBranch : r93_9 #-----| False -> Block 14 #-----| True -> Block 13 # 93| Block 13 -# 93| v93_8(void) = NoOp : +# 93| v93_11(void) = NoOp : #-----| Goto -> Block 14 # 94| Block 14 # 94| r94_1(glval) = VariableAddress[x1] : # 94| r94_2(int) = Load[x1] : &:r94_1, ~m? -# 94| v94_3(void) = ConditionalBranch : r94_2 +# 94| r94_3(int) = Constant[0] : +# 94| r94_4(bool) = CompareNE : r94_2, r94_3 +# 94| v94_5(void) = ConditionalBranch : r94_4 #-----| False -> Block 17 #-----| True -> Block 15 # 94| Block 15 -# 94| r94_4(glval) = VariableAddress[x2] : -# 94| r94_5(int) = Load[x2] : &:r94_4, ~m? -# 94| r94_6(int) = LogicalNot : r94_5 -# 94| v94_7(void) = ConditionalBranch : r94_6 +# 94| r94_6(glval) = VariableAddress[x2] : +# 94| r94_7(int) = Load[x2] : &:r94_6, ~m? +# 94| r94_8(int) = Constant[0] : +# 94| r94_9(bool) = CompareEQ : r94_7, r94_8 +# 94| v94_10(void) = ConditionalBranch : r94_9 #-----| False -> Block 17 #-----| True -> Block 16 # 94| Block 16 -# 94| v94_8(void) = NoOp : +# 94| v94_11(void) = NoOp : #-----| Goto -> Block 17 # 95| Block 17 # 95| r95_1(glval) = VariableAddress[x1] : # 95| r95_2(int) = Load[x1] : &:r95_1, ~m? -# 95| r95_3(int) = LogicalNot : r95_2 -# 95| v95_4(void) = ConditionalBranch : r95_3 +# 95| r95_3(int) = Constant[0] : +# 95| r95_4(bool) = CompareEQ : r95_2, r95_3 +# 95| v95_5(void) = ConditionalBranch : r95_4 #-----| False -> Block 20 #-----| True -> Block 18 # 95| Block 18 -# 95| r95_5(glval) = VariableAddress[x2] : -# 95| r95_6(int) = Load[x2] : &:r95_5, ~m? -# 95| r95_7(int) = LogicalNot : r95_6 -# 95| v95_8(void) = ConditionalBranch : r95_7 +# 95| r95_6(glval) = VariableAddress[x2] : +# 95| r95_7(int) = Load[x2] : &:r95_6, ~m? +# 95| r95_8(int) = Constant[0] : +# 95| r95_9(bool) = CompareEQ : r95_7, r95_8 +# 95| v95_10(void) = ConditionalBranch : r95_9 #-----| False -> Block 20 #-----| True -> Block 19 # 95| Block 19 -# 95| v95_9(void) = NoOp : +# 95| v95_11(void) = NoOp : #-----| Goto -> Block 20 # 96| Block 20 # 96| r96_1(glval) = VariableAddress[x1] : # 96| r96_2(int) = Load[x1] : &:r96_1, ~m? -# 96| v96_3(void) = ConditionalBranch : r96_2 +# 96| r96_3(int) = Constant[0] : +# 96| r96_4(bool) = CompareNE : r96_2, r96_3 +# 96| v96_5(void) = ConditionalBranch : r96_4 #-----| False -> Block 21 #-----| True -> Block 22 # 96| Block 21 -# 96| r96_4(glval) = VariableAddress[x2] : -# 96| r96_5(int) = Load[x2] : &:r96_4, ~m? -# 96| v96_6(void) = ConditionalBranch : r96_5 +# 96| r96_6(glval) = VariableAddress[x2] : +# 96| r96_7(int) = Load[x2] : &:r96_6, ~m? +# 96| r96_8(int) = Constant[0] : +# 96| r96_9(bool) = CompareNE : r96_7, r96_8 +# 96| v96_10(void) = ConditionalBranch : r96_9 #-----| False -> Block 23 #-----| True -> Block 22 # 96| Block 22 -# 96| v96_7(void) = NoOp : +# 96| v96_11(void) = NoOp : #-----| Goto -> Block 23 # 97| Block 23 # 97| r97_1(glval) = VariableAddress[x1] : # 97| r97_2(int) = Load[x1] : &:r97_1, ~m? -# 97| r97_3(int) = LogicalNot : r97_2 -# 97| v97_4(void) = ConditionalBranch : r97_3 +# 97| r97_3(int) = Constant[0] : +# 97| r97_4(bool) = CompareEQ : r97_2, r97_3 +# 97| v97_5(void) = ConditionalBranch : r97_4 #-----| False -> Block 24 #-----| True -> Block 25 # 97| Block 24 -# 97| r97_5(glval) = VariableAddress[x2] : -# 97| r97_6(int) = Load[x2] : &:r97_5, ~m? -# 97| v97_7(void) = ConditionalBranch : r97_6 +# 97| r97_6(glval) = VariableAddress[x2] : +# 97| r97_7(int) = Load[x2] : &:r97_6, ~m? +# 97| r97_8(int) = Constant[0] : +# 97| r97_9(bool) = CompareNE : r97_7, r97_8 +# 97| v97_10(void) = ConditionalBranch : r97_9 #-----| False -> Block 26 #-----| True -> Block 25 # 97| Block 25 -# 97| v97_8(void) = NoOp : +# 97| v97_11(void) = NoOp : #-----| Goto -> Block 26 # 98| Block 26 # 98| r98_1(glval) = VariableAddress[x1] : # 98| r98_2(int) = Load[x1] : &:r98_1, ~m? -# 98| v98_3(void) = ConditionalBranch : r98_2 +# 98| r98_3(int) = Constant[0] : +# 98| r98_4(bool) = CompareNE : r98_2, r98_3 +# 98| v98_5(void) = ConditionalBranch : r98_4 #-----| False -> Block 27 #-----| True -> Block 28 # 98| Block 27 -# 98| r98_4(glval) = VariableAddress[x2] : -# 98| r98_5(int) = Load[x2] : &:r98_4, ~m? -# 98| r98_6(int) = LogicalNot : r98_5 -# 98| v98_7(void) = ConditionalBranch : r98_6 +# 98| r98_6(glval) = VariableAddress[x2] : +# 98| r98_7(int) = Load[x2] : &:r98_6, ~m? +# 98| r98_8(int) = Constant[0] : +# 98| r98_9(bool) = CompareEQ : r98_7, r98_8 +# 98| v98_10(void) = ConditionalBranch : r98_9 #-----| False -> Block 29 #-----| True -> Block 28 # 98| Block 28 -# 98| v98_8(void) = NoOp : +# 98| v98_11(void) = NoOp : #-----| Goto -> Block 29 # 99| Block 29 # 99| r99_1(glval) = VariableAddress[x1] : # 99| r99_2(int) = Load[x1] : &:r99_1, ~m? -# 99| r99_3(int) = LogicalNot : r99_2 -# 99| v99_4(void) = ConditionalBranch : r99_3 +# 99| r99_3(int) = Constant[0] : +# 99| r99_4(bool) = CompareEQ : r99_2, r99_3 +# 99| v99_5(void) = ConditionalBranch : r99_4 #-----| False -> Block 30 #-----| True -> Block 31 # 99| Block 30 -# 99| r99_5(glval) = VariableAddress[x2] : -# 99| r99_6(int) = Load[x2] : &:r99_5, ~m? -# 99| r99_7(int) = LogicalNot : r99_6 -# 99| v99_8(void) = ConditionalBranch : r99_7 +# 99| r99_6(glval) = VariableAddress[x2] : +# 99| r99_7(int) = Load[x2] : &:r99_6, ~m? +# 99| r99_8(int) = Constant[0] : +# 99| r99_9(bool) = CompareEQ : r99_7, r99_8 +# 99| v99_10(void) = ConditionalBranch : r99_9 #-----| False -> Block 32 #-----| True -> Block 31 # 99| Block 31 -# 99| v99_9(void) = NoOp : +# 99| v99_11(void) = NoOp : #-----| Goto -> Block 32 # 101| Block 32 # 101| r101_1(glval) = VariableAddress[x_1_and_2] : # 101| r101_2(glval) = VariableAddress[x1] : # 101| r101_3(int) = Load[x1] : &:r101_2, ~m? -# 101| v101_4(void) = ConditionalBranch : r101_3 +# 101| r101_4(int) = Constant[0] : +# 101| r101_5(bool) = CompareNE : r101_3, r101_4 +# 101| v101_6(void) = ConditionalBranch : r101_5 #-----| False -> Block 33 #-----| True -> Block 36 # 101| Block 33 -# 101| r101_5(glval) = VariableAddress[#temp101:19] : -# 101| r101_6(int) = Constant[0] : -# 101| mu101_7(int) = Store[#temp101:19] : &:r101_5, r101_6 +# 101| r101_7(glval) = VariableAddress[#temp101:19] : +# 101| r101_8(int) = Constant[0] : +# 101| mu101_9(int) = Store[#temp101:19] : &:r101_7, r101_8 #-----| Goto -> Block 34 # 101| Block 34 -# 101| r101_8(glval) = VariableAddress[#temp101:19] : -# 101| r101_9(int) = Load[#temp101:19] : &:r101_8, ~m? -# 101| mu101_10(int) = Store[x_1_and_2] : &:r101_1, r101_9 -# 102| r102_1(glval) = VariableAddress[x_1_and_2] : -# 102| r102_2(int) = Load[x_1_and_2] : &:r102_1, ~m? -# 102| v102_3(void) = ConditionalBranch : r102_2 +# 101| r101_10(glval) = VariableAddress[#temp101:19] : +# 101| r101_11(int) = Load[#temp101:19] : &:r101_10, ~m? +# 101| mu101_12(int) = Store[x_1_and_2] : &:r101_1, r101_11 +# 102| r102_1(glval) = VariableAddress[x_1_and_2] : +# 102| r102_2(int) = Load[x_1_and_2] : &:r102_1, ~m? +# 102| r102_3(int) = Constant[0] : +# 102| r102_4(bool) = CompareNE : r102_2, r102_3 +# 102| v102_5(void) = ConditionalBranch : r102_4 #-----| False -> Block 38 #-----| True -> Block 37 # 101| Block 35 -# 101| r101_11(glval) = VariableAddress[#temp101:19] : -# 101| r101_12(int) = Constant[1] : -# 101| mu101_13(int) = Store[#temp101:19] : &:r101_11, r101_12 +# 101| r101_13(glval) = VariableAddress[#temp101:19] : +# 101| r101_14(int) = Constant[1] : +# 101| mu101_15(int) = Store[#temp101:19] : &:r101_13, r101_14 #-----| Goto -> Block 34 # 101| Block 36 -# 101| r101_14(glval) = VariableAddress[x2] : -# 101| r101_15(int) = Load[x2] : &:r101_14, ~m? -# 101| v101_16(void) = ConditionalBranch : r101_15 +# 101| r101_16(glval) = VariableAddress[x2] : +# 101| r101_17(int) = Load[x2] : &:r101_16, ~m? +# 101| r101_18(int) = Constant[0] : +# 101| r101_19(bool) = CompareNE : r101_17, r101_18 +# 101| v101_20(void) = ConditionalBranch : r101_19 #-----| False -> Block 33 #-----| True -> Block 35 # 102| Block 37 -# 102| v102_4(void) = NoOp : +# 102| v102_6(void) = NoOp : #-----| Goto -> Block 38 # 103| Block 38 # 103| r103_1(glval) = VariableAddress[x_1_and_2] : # 103| r103_2(int) = Load[x_1_and_2] : &:r103_1, ~m? -# 103| r103_3(int) = LogicalNot : r103_2 -# 103| v103_4(void) = ConditionalBranch : r103_3 +# 103| r103_3(int) = Constant[0] : +# 103| r103_4(bool) = CompareEQ : r103_2, r103_3 +# 103| v103_5(void) = ConditionalBranch : r103_4 #-----| False -> Block 40 #-----| True -> Block 39 # 103| Block 39 -# 103| v103_5(void) = NoOp : +# 103| v103_6(void) = NoOp : #-----| Goto -> Block 40 # 104| Block 40 @@ -37112,7 +37189,9 @@ try_except.c: # 33| mu33_3(int) = Store[x] : &:r33_1, r33_2 # 35| r35_1(glval) = VariableAddress[b] : # 35| r35_2(int) = Load[b] : &:r35_1, ~m? -# 35| v35_3(void) = ConditionalBranch : r35_2 +# 35| r35_3(int) = Constant[0] : +# 35| r35_4(bool) = CompareNE : r35_2, r35_3 +# 35| v35_5(void) = ConditionalBranch : r35_4 #-----| False -> Block 8 #-----| True -> Block 3 diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index 7f10f2f9d7c9..b83d9ea47e38 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -30,41 +30,4 @@ thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable nonBooleanOperand -| ir.c:85:7:85:8 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:88:11:88:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:89:6:89:6 | ConditionalBranch: y | Conditional branch instruction ConditionalBranch: y with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:6:92:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:12:92:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:13:93:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:6:94:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:6:96:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:12:96:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:13:97:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:6:98:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:19:101:20 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:25:101:26 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:102:6:102:14 | ConditionalBranch: x_1_and_2 | Conditional branch instruction ConditionalBranch: x_1_and_2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| try_except.c:35:13:35:13 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | try_except.c:32:6:32:6 | void h(int) | void h(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index 7f10f2f9d7c9..b83d9ea47e38 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -30,41 +30,4 @@ thisArgumentIsNonPointer | ir.cpp:2546:34:2546:34 | Call: call to operator bool | Call instruction 'Call: call to operator bool' has a `this` argument operand that is not an address, in function '$@'. | ir.cpp:2545:6:2545:23 | void this_inconsistency(bool) | void this_inconsistency(bool) | nonUniqueIRVariable nonBooleanOperand -| ir.c:85:7:85:8 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:86:6:86:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:88:11:88:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:89:6:89:6 | ConditionalBranch: y | Conditional branch instruction ConditionalBranch: y with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:90:6:90:7 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:6:92:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:92:12:92:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:6:93:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:93:13:93:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:6:94:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:94:12:94:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:6:95:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:95:13:95:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:6:96:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:96:12:96:13 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:6:97:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:97:13:97:14 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:6:98:7 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:98:12:98:14 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:6:99:8 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:99:13:99:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:19:101:20 | ConditionalBranch: x1 | Conditional branch instruction ConditionalBranch: x1 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:101:25:101:26 | ConditionalBranch: x2 | Conditional branch instruction ConditionalBranch: x2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:102:6:102:14 | ConditionalBranch: x_1_and_2 | Conditional branch instruction ConditionalBranch: x_1_and_2 with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| ir.c:103:6:103:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | ir.c:84:6:84:28 | void branch_on_integral_in_c(int, int) | void branch_on_integral_in_c(int, int) | -| try_except.c:35:13:35:13 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | try_except.c:32:6:32:6 | void h(int) | void h(int) | missingCppType diff --git a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected index 66f9c9c375f5..11d828fa1a0d 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected @@ -34,270 +34,4 @@ thisArgumentIsNonPointer | pointer_to_member.cpp:24:5:24:49 | Call: call to expression | Call instruction 'Call: call to expression' has a `this` argument operand that is not an address, in function '$@'. | pointer_to_member.cpp:14:5:14:9 | int usePM(int PM::*) | int usePM(int PM::*) | nonUniqueIRVariable nonBooleanOperand -| break_labels.c:4:9:4:14 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | break_labels.c:2:12:2:12 | int f(int) | int f(int) | -| break_labels.c:6:16:6:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | break_labels.c:2:12:2:12 | int f(int) | int f(int) | -| break_labels.c:7:17:7:24 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | break_labels.c:2:12:2:12 | int f(int) | int f(int) | -| break_labels.c:20:16:20:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | break_labels.c:16:6:16:10 | void f_for() | void f_for() | -| break_labels.c:21:13:21:18 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | break_labels.c:16:6:16:10 | void f_for() | void f_for() | -| break_labels.c:24:13:24:18 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | break_labels.c:16:6:16:10 | void f_for() | void f_for() | -| builtin.c:24:7:24:13 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | builtin.c:5:5:5:11 | int builtin(int, int) | int builtin(int, int) | -| builtin.c:28:7:28:29 | ConditionalBranch: call to __builtin_unpredictable | Conditional branch instruction ConditionalBranch: call to __builtin_unpredictable with non-Boolean condition, in function '$@'. | builtin.c:5:5:5:11 | int builtin(int, int) | int builtin(int, int) | -| builtin.c:47:7:47:22 | ConditionalBranch: call to __builtin_memchr | Conditional branch instruction ConditionalBranch: call to __builtin_memchr with non-Boolean condition, in function '$@'. | builtin.c:5:5:5:11 | int builtin(int, int) | int builtin(int, int) | -| dostmt.c:4:11:4:11 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | dostmt.c:1:6:1:17 | void always_false() | void always_false() | -| dostmt.c:28:11:28:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | dostmt.c:25:13:25:25 | void always_true_3() | void always_true_3() | -| dostmt.c:36:11:36:16 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | dostmt.c:32:13:32:18 | void normal() | void normal() | -| duff2.c:13:14:13:20 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | duff2.c:2:6:2:12 | void duff2_8(int) | void duff2_8(int) | -| duff2.c:21:14:21:20 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | duff2.c:16:6:16:12 | void duff2_2(int) | void duff2_2(int) | -| duff.c:13:22:13:28 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | duff.c:2:13:2:13 | void f(int) | void f(int) | -| dummyblock.c:2:9:2:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | dummyblock.c:1:13:1:13 | void f() | void f() | -| ifelsestmt.c:2:6:2:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifelsestmt.c:1:13:1:26 | void always_false_1() | void always_false_1() | -| ifelsestmt.c:12:6:12:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifelsestmt.c:11:13:11:26 | void always_false_2() | void always_false_2() | -| ifelsestmt.c:20:6:20:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifelsestmt.c:19:13:19:25 | void always_true_1() | void always_true_1() | -| ifelsestmt.c:30:6:30:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifelsestmt.c:29:13:29:25 | void always_true_2() | void always_true_2() | -| ifelsestmt.c:38:6:38:11 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | ifelsestmt.c:37:13:37:18 | void normal(int, int) | void normal(int, int) | -| ifstmt.c:2:6:2:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifstmt.c:1:13:1:26 | void always_false_1() | void always_false_1() | -| ifstmt.c:9:6:9:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifstmt.c:8:13:8:26 | void always_false_2() | void always_false_2() | -| ifstmt.c:15:6:15:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifstmt.c:14:13:14:25 | void always_true_1() | void always_true_1() | -| ifstmt.c:22:6:22:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifstmt.c:21:13:21:25 | void always_true_2() | void always_true_2() | -| ifstmt.c:28:6:28:11 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | ifstmt.c:27:13:27:18 | void normal(int, int) | void normal(int, int) | -| landexpr.c:3:6:3:6 | ConditionalBranch: a | Conditional branch instruction ConditionalBranch: a with non-Boolean condition, in function '$@'. | landexpr.c:1:13:1:13 | void f() | void f() | -| landexpr.c:3:11:3:11 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | landexpr.c:1:13:1:13 | void f() | void f() | -| lorexpr.c:3:6:3:6 | ConditionalBranch: a | Conditional branch instruction ConditionalBranch: a with non-Boolean condition, in function '$@'. | lorexpr.c:1:13:1:13 | void f() | void f() | -| lorexpr.c:3:11:3:11 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | lorexpr.c:1:13:1:13 | void f() | void f() | -| misc.c:22:9:22:12 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:22:17:22:20 | ConditionalBranch: argj | Conditional branch instruction ConditionalBranch: argj with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:27:9:27:12 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:27:17:27:20 | ConditionalBranch: argj | Conditional branch instruction ConditionalBranch: argj with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:32:9:32:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:32:14:32:14 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:37:9:37:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:37:14:37:14 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:44:11:44:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:47:11:47:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:47:16:47:16 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:50:11:50:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:50:16:50:16 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:53:11:53:14 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:58:13:58:13 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:61:13:61:16 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:62:16:62:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:64:11:64:16 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:93:9:93:15 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | misc.c:91:6:91:33 | void gnuConditionalOmittedOperand(someStruct*) | void gnuConditionalOmittedOperand(someStruct*) | -| misc.c:94:9:94:19 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | misc.c:91:6:91:33 | void gnuConditionalOmittedOperand(someStruct*) | void gnuConditionalOmittedOperand(someStruct*) | -| misc.c:139:10:139:18 | ConditionalBranch: ... & ... | Conditional branch instruction ConditionalBranch: ... & ... with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:139:25:139:33 | ConditionalBranch: ... & ... | Conditional branch instruction ConditionalBranch: ... & ... with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:140:9:140:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:140:14:140:14 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:140:19:140:19 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:141:9:141:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:141:14:141:14 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:141:19:141:19 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:192:11:192:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | misc.c:191:6:191:20 | void unreachable_end() | void unreachable_end() | -| pruning.c:5:9:5:9 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | pruning.c:4:6:4:8 | void f_0() | void f_0() | -| pruning.c:13:9:13:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | pruning.c:12:6:12:8 | void f_1() | void f_1() | -| pruning.c:21:9:21:11 | ConditionalBranch: 256 | Conditional branch instruction ConditionalBranch: 256 with non-Boolean condition, in function '$@'. | pruning.c:20:6:20:10 | void f_256() | void f_256() | -| pruning.c:29:9:29:18 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:28:6:28:16 | void f_uint8_t_0() | void f_uint8_t_0() | -| pruning.c:37:9:37:18 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:36:6:36:16 | void f_uint8_t_1() | void f_uint8_t_1() | -| pruning.c:45:9:45:20 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:44:6:44:18 | void f_uint8_t_256() | void f_uint8_t_256() | -| pruning.c:53:9:53:20 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:52:6:52:18 | void f_uint8_t_257() | void f_uint8_t_257() | -| pruning.c:61:9:61:26 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | pruning.c:60:6:60:21 | void f_uint8_t_minus1() | void f_uint8_t_minus1() | -| pruning.c:70:9:70:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:68:6:68:14 | void f_v_int_0() | void f_v_int_0() | -| pruning.c:79:9:79:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:77:6:77:14 | void f_v_int_1() | void f_v_int_1() | -| pruning.c:88:9:88:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:86:6:86:16 | void f_v_int_256() | void f_v_int_256() | -| pruning.c:97:9:97:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:95:6:95:18 | void f_v_uint8_t_0() | void f_v_uint8_t_0() | -| pruning.c:106:9:106:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:104:6:104:18 | void f_v_uint8_t_1() | void f_v_uint8_t_1() | -| pruning.c:115:9:115:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:113:6:113:20 | void f_v_uint8_t_256() | void f_v_uint8_t_256() | -| pruning.c:124:9:124:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:122:6:122:20 | void f_v_uint8_t_257() | void f_v_uint8_t_257() | -| pruning.c:133:9:133:16 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | pruning.c:131:6:131:23 | void f_v_uint8_t_minus1() | void f_v_uint8_t_minus1() | -| questionexpr.c:3:6:3:11 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | questionexpr.c:1:13:1:13 | void f() | void f() | -| range_analysis.c:7:10:7:10 | ConditionalBranch: p | Conditional branch instruction ConditionalBranch: p with non-Boolean condition, in function '$@'. | range_analysis.c:5:5:5:9 | int test1(List*) | int test1(List*) | -| range_analysis.c:15:10:15:10 | ConditionalBranch: p | Conditional branch instruction ConditionalBranch: p with non-Boolean condition, in function '$@'. | range_analysis.c:13:5:13:9 | int test2(List*) | int test2(List*) | -| range_analysis.c:23:10:23:10 | ConditionalBranch: p | Conditional branch instruction ConditionalBranch: p with non-Boolean condition, in function '$@'. | range_analysis.c:21:5:21:9 | int test3(List*) | int test3(List*) | -| range_analysis.c:33:15:33:19 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:30:5:30:9 | int test4() | int test4() | -| range_analysis.c:42:15:42:19 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:39:5:39:9 | int test5() | int test5() | -| range_analysis.c:51:15:51:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:48:5:48:9 | int test6() | int test6() | -| range_analysis.c:58:7:58:11 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:57:5:57:9 | int test7(int) | int test7(int) | -| range_analysis.c:59:9:59:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:57:5:57:9 | int test7(int) | int test7(int) | -| range_analysis.c:67:7:67:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:66:5:66:9 | int test8(int, int) | int test8(int, int) | -| range_analysis.c:67:20:67:25 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:66:5:66:9 | int test8(int, int) | int test8(int, int) | -| range_analysis.c:68:9:68:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:66:5:66:9 | int test8(int, int) | int test8(int, int) | -| range_analysis.c:76:7:76:12 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | range_analysis.c:75:5:75:9 | int test9(int, int) | int test9(int, int) | -| range_analysis.c:77:9:77:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:75:5:75:9 | int test9(int, int) | int test9(int, int) | -| range_analysis.c:81:9:81:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:75:5:75:9 | int test9(int, int) | int test9(int, int) | -| range_analysis.c:89:7:89:11 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:88:5:88:10 | int test10(int, int) | int test10(int, int) | -| range_analysis.c:90:9:90:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:88:5:88:10 | int test10(int, int) | int test10(int, int) | -| range_analysis.c:101:7:101:15 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:104:7:104:14 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:106:9:106:17 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:109:9:109:16 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:124:11:124:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:122:5:122:10 | int test12() | int test12() | -| range_analysis.c:154:11:154:15 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:153:11:153:16 | long long test15(long long) | long long test15(long long) | -| range_analysis.c:154:20:154:30 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | range_analysis.c:153:11:153:16 | long long test15(long long) | long long test15(long long) | -| range_analysis.c:161:7:161:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:161:17:161:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:166:7:166:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:166:17:166:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:171:7:171:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:171:18:171:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:176:7:176:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:176:18:176:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:181:7:181:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:181:18:181:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:186:7:186:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:186:18:186:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:200:7:200:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:200:17:200:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:200:28:200:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:200:38:200:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:7:204:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:17:204:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:28:204:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:38:204:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:7:208:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:17:208:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:28:208:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:40:208:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:7:212:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:17:212:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:28:212:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:40:212:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:7:216:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:17:216:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:28:216:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:40:216:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:228:7:228:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:228:17:228:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:228:28:228:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:228:38:228:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:7:232:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:17:232:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:28:232:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:38:232:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:7:236:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:17:236:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:28:236:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:40:236:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:7:240:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:17:240:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:28:240:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:40:240:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:7:244:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:17:244:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:28:244:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:40:244:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:256:7:256:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:256:19:256:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:256:30:256:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:256:40:256:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:7:260:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:19:260:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:30:260:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:40:260:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:7:264:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:19:264:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:30:264:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:42:264:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:7:268:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:19:268:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:30:268:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:42:268:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:7:272:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:19:272:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:30:272:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:42:272:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:284:7:284:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:284:19:284:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:284:29:284:34 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:284:39:284:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:7:288:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:19:288:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:29:288:34 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:39:288:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:7:292:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:19:292:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:29:292:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:41:292:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:7:296:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:19:296:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:29:296:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:41:296:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:7:300:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:19:300:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:29:300:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:41:300:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:312:7:312:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:312:19:312:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:312:30:312:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:312:40:312:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:7:316:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:19:316:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:30:316:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:40:316:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:7:320:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:19:320:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:30:320:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:42:320:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:7:324:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:19:324:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:30:324:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:42:324:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:7:328:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:19:328:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:30:328:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:42:328:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:338:7:338:11 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:342:10:342:14 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:346:7:346:11 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:347:9:347:14 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:357:8:357:14 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:358:8:358:15 | ConditionalBranch: ... >= ... | Conditional branch instruction ConditionalBranch: ... >= ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:365:7:365:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:366:10:366:15 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:367:10:367:17 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:368:10:368:21 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:369:10:369:36 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:370:10:370:38 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:371:10:371:39 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:379:8:379:14 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:380:8:380:15 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:384:7:384:14 | ConditionalBranch: ... >= ... | Conditional branch instruction ConditionalBranch: ... >= ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:385:10:385:21 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:386:10:386:21 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:387:10:387:38 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:394:20:394:26 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:393:14:393:25 | unsigned int test_comma01(unsigned int) | unsigned int test_comma01(unsigned int) | -| switchbody.c:5:11:5:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | switchbody.c:4:5:4:16 | int switch_block(int) | int switch_block(int) | -| switchbody.c:16:11:16:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | switchbody.c:15:5:15:17 | int switch_single(int) | int switch_single(int) | -| switchbody.c:28:11:28:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | switchbody.c:27:5:27:19 | int switch_notblock(int) | int switch_notblock(int) | -| test.c:3:9:3:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:2:6:2:11 | void f_if_1(int) | void f_if_1(int) | -| test.c:11:9:11:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:10:6:10:11 | void f_if_2() | void f_if_2() | -| test.c:19:9:19:9 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:18:6:18:11 | void f_if_3() | void f_if_3() | -| test.c:28:16:28:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | test.c:26:6:26:12 | void f_for_1() | void f_for_1() | -| test.c:36:16:36:16 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:34:6:34:12 | void f_for_2() | void f_for_2() | -| test.c:44:16:44:16 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:42:6:42:12 | void f_for_3() | void f_for_3() | -| test.c:51:11:51:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:50:6:50:14 | void f_while_1(int) | void f_while_1(int) | -| test.c:58:11:58:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:57:6:57:14 | void f_while_2() | void f_while_2() | -| test.c:65:11:65:11 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:64:6:64:14 | void f_while_3() | void f_while_3() | -| test.c:74:14:74:14 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:71:6:71:11 | void f_do_1(int) | void f_do_1(int) | -| test.c:81:14:81:14 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:78:6:78:11 | void f_do_2() | void f_do_2() | -| test.c:88:14:88:14 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:85:6:85:11 | void f_do_3() | void f_do_3() | -| test.c:93:13:93:13 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:92:6:92:13 | void f_cond_1(int) | void f_cond_1(int) | -| test.c:204:12:204:12 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:203:6:203:15 | void f_switch_7(int) | void f_switch_7(int) | -| test.c:219:7:219:7 | ConditionalBranch: x | Conditional branch instruction ConditionalBranch: x with non-Boolean condition, in function '$@'. | test.c:218:5:218:11 | int f_and_1(int, int) | int f_and_1(int, int) | -| test.c:219:12:219:13 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | test.c:218:5:218:11 | int f_and_1(int, int) | int f_and_1(int, int) | -| test.c:219:12:219:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | test.c:218:5:218:11 | int f_and_1(int, int) | int f_and_1(int, int) | -| test.c:226:7:226:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:226:7:226:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:226:9:226:9 | ConditionalBranch: x | Conditional branch instruction ConditionalBranch: x with non-Boolean condition, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:226:14:226:14 | ConditionalBranch: y | Conditional branch instruction ConditionalBranch: y with non-Boolean condition, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:233:7:233:7 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | test.c:232:6:232:19 | void f_if_ternary_1(int, int, int) | void f_if_ternary_1(int, int, int) | -| test.c:233:7:233:15 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | test.c:232:6:232:19 | void f_if_ternary_1(int, int, int) | void f_if_ternary_1(int, int, int) | -| test.c:245:31:245:31 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:245:24:245:24 | const void *[] a | const void *[] a | -| unaryopexpr.c:8:5:8:6 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | unaryopexpr.c:1:13:1:13 | void f() | void f() | -| whilestmt.c:2:9:2:9 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | whilestmt.c:1:13:1:26 | void always_false_1() | void always_false_1() | -| whilestmt.c:10:9:10:13 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | whilestmt.c:8:13:8:26 | void always_false_2() | void always_false_2() | -| whilestmt.c:10:9:10:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | whilestmt.c:8:13:8:26 | void always_false_2() | void always_false_2() | -| whilestmt.c:16:9:16:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | whilestmt.c:15:13:15:25 | void always_true_1() | void always_true_1() | -| whilestmt.c:24:9:24:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | whilestmt.c:23:13:23:25 | void always_true_2() | void always_true_2() | -| whilestmt.c:33:9:33:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | whilestmt.c:32:13:32:25 | void always_true_3() | void always_true_3() | -| whilestmt.c:41:9:41:14 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | whilestmt.c:39:13:39:18 | void normal() | void normal() | missingCppType diff --git a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected index dc6671af8a40..3ca442129709 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected @@ -43,279 +43,4 @@ thisArgumentIsNonPointer | pointer_to_member.cpp:24:5:24:49 | Call: call to expression | Call instruction 'Call: call to expression' has a `this` argument operand that is not an address, in function '$@'. | pointer_to_member.cpp:14:5:14:9 | int usePM(int PM::*) | int usePM(int PM::*) | nonUniqueIRVariable nonBooleanOperand -| break_labels.c:4:9:4:14 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | break_labels.c:2:12:2:12 | int f(int) | int f(int) | -| break_labels.c:6:16:6:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | break_labels.c:2:12:2:12 | int f(int) | int f(int) | -| break_labels.c:7:17:7:24 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | break_labels.c:2:12:2:12 | int f(int) | int f(int) | -| break_labels.c:20:16:20:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | break_labels.c:16:6:16:10 | void f_for() | void f_for() | -| break_labels.c:21:13:21:18 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | break_labels.c:16:6:16:10 | void f_for() | void f_for() | -| break_labels.c:24:13:24:18 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | break_labels.c:16:6:16:10 | void f_for() | void f_for() | -| builtin.c:24:7:24:13 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | builtin.c:5:5:5:11 | int builtin(int, int) | int builtin(int, int) | -| builtin.c:28:7:28:29 | ConditionalBranch: call to __builtin_unpredictable | Conditional branch instruction ConditionalBranch: call to __builtin_unpredictable with non-Boolean condition, in function '$@'. | builtin.c:5:5:5:11 | int builtin(int, int) | int builtin(int, int) | -| builtin.c:47:7:47:22 | ConditionalBranch: call to __builtin_memchr | Conditional branch instruction ConditionalBranch: call to __builtin_memchr with non-Boolean condition, in function '$@'. | builtin.c:5:5:5:11 | int builtin(int, int) | int builtin(int, int) | -| dostmt.c:4:11:4:11 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | dostmt.c:1:6:1:17 | void always_false() | void always_false() | -| dostmt.c:12:11:12:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | dostmt.c:8:13:8:25 | void always_true_1() | void always_true_1() | -| dostmt.c:21:11:21:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | dostmt.c:16:13:16:25 | void always_true_2() | void always_true_2() | -| dostmt.c:28:11:28:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | dostmt.c:25:13:25:25 | void always_true_3() | void always_true_3() | -| dostmt.c:36:11:36:16 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | dostmt.c:32:13:32:18 | void normal() | void normal() | -| duff2.c:13:14:13:20 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | duff2.c:2:6:2:12 | void duff2_8(int) | void duff2_8(int) | -| duff2.c:21:14:21:20 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | duff2.c:16:6:16:12 | void duff2_2(int) | void duff2_2(int) | -| duff.c:13:22:13:28 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | duff.c:2:13:2:13 | void f(int) | void f(int) | -| dummyblock.c:2:9:2:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | dummyblock.c:1:13:1:13 | void f() | void f() | -| ifelsestmt.c:2:6:2:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifelsestmt.c:1:13:1:26 | void always_false_1() | void always_false_1() | -| ifelsestmt.c:12:6:12:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifelsestmt.c:11:13:11:26 | void always_false_2() | void always_false_2() | -| ifelsestmt.c:20:6:20:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifelsestmt.c:19:13:19:25 | void always_true_1() | void always_true_1() | -| ifelsestmt.c:30:6:30:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifelsestmt.c:29:13:29:25 | void always_true_2() | void always_true_2() | -| ifelsestmt.c:38:6:38:11 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | ifelsestmt.c:37:13:37:18 | void normal(int, int) | void normal(int, int) | -| ifstmt.c:2:6:2:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifstmt.c:1:13:1:26 | void always_false_1() | void always_false_1() | -| ifstmt.c:9:6:9:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifstmt.c:8:13:8:26 | void always_false_2() | void always_false_2() | -| ifstmt.c:15:6:15:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifstmt.c:14:13:14:25 | void always_true_1() | void always_true_1() | -| ifstmt.c:22:6:22:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifstmt.c:21:13:21:25 | void always_true_2() | void always_true_2() | -| ifstmt.c:28:6:28:11 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | ifstmt.c:27:13:27:18 | void normal(int, int) | void normal(int, int) | -| landexpr.c:3:6:3:6 | ConditionalBranch: a | Conditional branch instruction ConditionalBranch: a with non-Boolean condition, in function '$@'. | landexpr.c:1:13:1:13 | void f() | void f() | -| landexpr.c:3:11:3:11 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | landexpr.c:1:13:1:13 | void f() | void f() | -| lorexpr.c:3:6:3:6 | ConditionalBranch: a | Conditional branch instruction ConditionalBranch: a with non-Boolean condition, in function '$@'. | lorexpr.c:1:13:1:13 | void f() | void f() | -| lorexpr.c:3:11:3:11 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | lorexpr.c:1:13:1:13 | void f() | void f() | -| misc.c:22:9:22:12 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:22:17:22:20 | ConditionalBranch: argj | Conditional branch instruction ConditionalBranch: argj with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:27:9:27:12 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:27:17:27:20 | ConditionalBranch: argj | Conditional branch instruction ConditionalBranch: argj with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:32:9:32:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:32:14:32:14 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:37:9:37:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:37:14:37:14 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:44:11:44:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:47:11:47:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:47:16:47:16 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:50:11:50:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:50:16:50:16 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:53:11:53:14 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:58:13:58:13 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:61:13:61:16 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:62:16:62:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:64:11:64:16 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:68:16:68:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:72:11:72:16 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:86:9:86:13 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:87:9:87:10 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:87:9:87:10 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:88:9:88:9 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:93:9:93:15 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | misc.c:91:6:91:33 | void gnuConditionalOmittedOperand(someStruct*) | void gnuConditionalOmittedOperand(someStruct*) | -| misc.c:94:9:94:19 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | misc.c:91:6:91:33 | void gnuConditionalOmittedOperand(someStruct*) | void gnuConditionalOmittedOperand(someStruct*) | -| misc.c:139:10:139:18 | ConditionalBranch: ... & ... | Conditional branch instruction ConditionalBranch: ... & ... with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:139:25:139:33 | ConditionalBranch: ... & ... | Conditional branch instruction ConditionalBranch: ... & ... with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:140:9:140:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:140:14:140:14 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:140:19:140:19 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:141:9:141:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:141:14:141:14 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:141:19:141:19 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:192:11:192:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | misc.c:191:6:191:20 | void unreachable_end() | void unreachable_end() | -| pruning.c:5:9:5:9 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | pruning.c:4:6:4:8 | void f_0() | void f_0() | -| pruning.c:13:9:13:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | pruning.c:12:6:12:8 | void f_1() | void f_1() | -| pruning.c:21:9:21:11 | ConditionalBranch: 256 | Conditional branch instruction ConditionalBranch: 256 with non-Boolean condition, in function '$@'. | pruning.c:20:6:20:10 | void f_256() | void f_256() | -| pruning.c:29:9:29:18 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:28:6:28:16 | void f_uint8_t_0() | void f_uint8_t_0() | -| pruning.c:37:9:37:18 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:36:6:36:16 | void f_uint8_t_1() | void f_uint8_t_1() | -| pruning.c:45:9:45:20 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:44:6:44:18 | void f_uint8_t_256() | void f_uint8_t_256() | -| pruning.c:53:9:53:20 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:52:6:52:18 | void f_uint8_t_257() | void f_uint8_t_257() | -| pruning.c:61:9:61:26 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | pruning.c:60:6:60:21 | void f_uint8_t_minus1() | void f_uint8_t_minus1() | -| pruning.c:70:9:70:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:68:6:68:14 | void f_v_int_0() | void f_v_int_0() | -| pruning.c:79:9:79:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:77:6:77:14 | void f_v_int_1() | void f_v_int_1() | -| pruning.c:88:9:88:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:86:6:86:16 | void f_v_int_256() | void f_v_int_256() | -| pruning.c:97:9:97:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:95:6:95:18 | void f_v_uint8_t_0() | void f_v_uint8_t_0() | -| pruning.c:106:9:106:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:104:6:104:18 | void f_v_uint8_t_1() | void f_v_uint8_t_1() | -| pruning.c:115:9:115:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:113:6:113:20 | void f_v_uint8_t_256() | void f_v_uint8_t_256() | -| pruning.c:124:9:124:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:122:6:122:20 | void f_v_uint8_t_257() | void f_v_uint8_t_257() | -| pruning.c:133:9:133:16 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | pruning.c:131:6:131:23 | void f_v_uint8_t_minus1() | void f_v_uint8_t_minus1() | -| questionexpr.c:3:6:3:11 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | questionexpr.c:1:13:1:13 | void f() | void f() | -| range_analysis.c:7:10:7:10 | ConditionalBranch: p | Conditional branch instruction ConditionalBranch: p with non-Boolean condition, in function '$@'. | range_analysis.c:5:5:5:9 | int test1(List*) | int test1(List*) | -| range_analysis.c:15:10:15:10 | ConditionalBranch: p | Conditional branch instruction ConditionalBranch: p with non-Boolean condition, in function '$@'. | range_analysis.c:13:5:13:9 | int test2(List*) | int test2(List*) | -| range_analysis.c:23:10:23:10 | ConditionalBranch: p | Conditional branch instruction ConditionalBranch: p with non-Boolean condition, in function '$@'. | range_analysis.c:21:5:21:9 | int test3(List*) | int test3(List*) | -| range_analysis.c:33:15:33:19 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:30:5:30:9 | int test4() | int test4() | -| range_analysis.c:42:15:42:19 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:39:5:39:9 | int test5() | int test5() | -| range_analysis.c:51:15:51:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:48:5:48:9 | int test6() | int test6() | -| range_analysis.c:58:7:58:11 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:57:5:57:9 | int test7(int) | int test7(int) | -| range_analysis.c:59:9:59:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:57:5:57:9 | int test7(int) | int test7(int) | -| range_analysis.c:67:7:67:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:66:5:66:9 | int test8(int, int) | int test8(int, int) | -| range_analysis.c:67:20:67:25 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:66:5:66:9 | int test8(int, int) | int test8(int, int) | -| range_analysis.c:68:9:68:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:66:5:66:9 | int test8(int, int) | int test8(int, int) | -| range_analysis.c:76:7:76:12 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | range_analysis.c:75:5:75:9 | int test9(int, int) | int test9(int, int) | -| range_analysis.c:77:9:77:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:75:5:75:9 | int test9(int, int) | int test9(int, int) | -| range_analysis.c:81:9:81:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:75:5:75:9 | int test9(int, int) | int test9(int, int) | -| range_analysis.c:89:7:89:11 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:88:5:88:10 | int test10(int, int) | int test10(int, int) | -| range_analysis.c:90:9:90:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:88:5:88:10 | int test10(int, int) | int test10(int, int) | -| range_analysis.c:101:7:101:15 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:104:7:104:14 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:106:9:106:17 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:109:9:109:16 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:124:11:124:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:122:5:122:10 | int test12() | int test12() | -| range_analysis.c:154:11:154:15 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:153:11:153:16 | long long test15(long long) | long long test15(long long) | -| range_analysis.c:154:20:154:30 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | range_analysis.c:153:11:153:16 | long long test15(long long) | long long test15(long long) | -| range_analysis.c:161:7:161:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:161:17:161:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:166:7:166:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:166:17:166:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:171:7:171:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:171:18:171:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:176:7:176:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:176:18:176:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:181:7:181:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:181:18:181:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:186:7:186:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:186:18:186:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:200:7:200:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:200:17:200:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:200:28:200:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:200:38:200:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:7:204:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:17:204:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:28:204:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:38:204:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:7:208:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:17:208:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:28:208:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:40:208:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:7:212:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:17:212:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:28:212:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:40:212:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:7:216:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:17:216:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:28:216:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:40:216:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:228:7:228:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:228:17:228:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:228:28:228:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:228:38:228:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:7:232:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:17:232:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:28:232:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:38:232:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:7:236:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:17:236:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:28:236:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:40:236:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:7:240:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:17:240:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:28:240:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:40:240:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:7:244:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:17:244:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:28:244:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:40:244:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:256:7:256:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:256:19:256:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:256:30:256:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:256:40:256:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:7:260:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:19:260:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:30:260:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:40:260:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:7:264:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:19:264:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:30:264:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:42:264:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:7:268:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:19:268:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:30:268:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:42:268:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:7:272:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:19:272:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:30:272:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:42:272:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:284:7:284:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:284:19:284:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:284:29:284:34 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:284:39:284:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:7:288:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:19:288:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:29:288:34 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:39:288:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:7:292:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:19:292:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:29:292:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:41:292:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:7:296:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:19:296:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:29:296:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:41:296:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:7:300:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:19:300:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:29:300:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:41:300:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:312:7:312:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:312:19:312:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:312:30:312:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:312:40:312:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:7:316:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:19:316:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:30:316:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:40:316:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:7:320:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:19:320:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:30:320:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:42:320:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:7:324:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:19:324:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:30:324:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:42:324:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:7:328:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:19:328:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:30:328:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:42:328:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:338:7:338:11 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:342:10:342:14 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:346:7:346:11 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:347:9:347:14 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:357:8:357:14 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:358:8:358:15 | ConditionalBranch: ... >= ... | Conditional branch instruction ConditionalBranch: ... >= ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:365:7:365:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:366:10:366:15 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:367:10:367:17 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:368:10:368:21 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:369:10:369:36 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:370:10:370:38 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:371:10:371:39 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:379:8:379:14 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:380:8:380:15 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:384:7:384:14 | ConditionalBranch: ... >= ... | Conditional branch instruction ConditionalBranch: ... >= ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:385:10:385:21 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:386:10:386:21 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:387:10:387:38 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:394:20:394:26 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:393:14:393:25 | unsigned int test_comma01(unsigned int) | unsigned int test_comma01(unsigned int) | -| switchbody.c:5:11:5:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | switchbody.c:4:5:4:16 | int switch_block(int) | int switch_block(int) | -| switchbody.c:16:11:16:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | switchbody.c:15:5:15:17 | int switch_single(int) | int switch_single(int) | -| switchbody.c:28:11:28:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | switchbody.c:27:5:27:19 | int switch_notblock(int) | int switch_notblock(int) | -| switchbody.c:29:9:29:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | switchbody.c:27:5:27:19 | int switch_notblock(int) | int switch_notblock(int) | -| test.c:3:9:3:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:2:6:2:11 | void f_if_1(int) | void f_if_1(int) | -| test.c:11:9:11:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:10:6:10:11 | void f_if_2() | void f_if_2() | -| test.c:19:9:19:9 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:18:6:18:11 | void f_if_3() | void f_if_3() | -| test.c:28:16:28:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | test.c:26:6:26:12 | void f_for_1() | void f_for_1() | -| test.c:36:16:36:16 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:34:6:34:12 | void f_for_2() | void f_for_2() | -| test.c:44:16:44:16 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:42:6:42:12 | void f_for_3() | void f_for_3() | -| test.c:51:11:51:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:50:6:50:14 | void f_while_1(int) | void f_while_1(int) | -| test.c:58:11:58:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:57:6:57:14 | void f_while_2() | void f_while_2() | -| test.c:65:11:65:11 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:64:6:64:14 | void f_while_3() | void f_while_3() | -| test.c:74:14:74:14 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:71:6:71:11 | void f_do_1(int) | void f_do_1(int) | -| test.c:81:14:81:14 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:78:6:78:11 | void f_do_2() | void f_do_2() | -| test.c:88:14:88:14 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:85:6:85:11 | void f_do_3() | void f_do_3() | -| test.c:93:13:93:13 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:92:6:92:13 | void f_cond_1(int) | void f_cond_1(int) | -| test.c:204:12:204:12 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:203:6:203:15 | void f_switch_7(int) | void f_switch_7(int) | -| test.c:219:7:219:7 | ConditionalBranch: x | Conditional branch instruction ConditionalBranch: x with non-Boolean condition, in function '$@'. | test.c:218:5:218:11 | int f_and_1(int, int) | int f_and_1(int, int) | -| test.c:219:12:219:13 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | test.c:218:5:218:11 | int f_and_1(int, int) | int f_and_1(int, int) | -| test.c:219:12:219:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | test.c:218:5:218:11 | int f_and_1(int, int) | int f_and_1(int, int) | -| test.c:226:7:226:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:226:7:226:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:226:9:226:9 | ConditionalBranch: x | Conditional branch instruction ConditionalBranch: x with non-Boolean condition, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:226:14:226:14 | ConditionalBranch: y | Conditional branch instruction ConditionalBranch: y with non-Boolean condition, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:233:7:233:7 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | test.c:232:6:232:19 | void f_if_ternary_1(int, int, int) | void f_if_ternary_1(int, int, int) | -| test.c:233:7:233:15 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | test.c:232:6:232:19 | void f_if_ternary_1(int, int, int) | void f_if_ternary_1(int, int, int) | -| test.c:245:31:245:31 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:245:24:245:24 | const void *[] a | const void *[] a | -| unaryopexpr.c:8:5:8:6 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | unaryopexpr.c:1:13:1:13 | void f() | void f() | -| whilestmt.c:2:9:2:9 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | whilestmt.c:1:13:1:26 | void always_false_1() | void always_false_1() | -| whilestmt.c:10:9:10:13 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | whilestmt.c:8:13:8:26 | void always_false_2() | void always_false_2() | -| whilestmt.c:10:9:10:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | whilestmt.c:8:13:8:26 | void always_false_2() | void always_false_2() | -| whilestmt.c:16:9:16:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | whilestmt.c:15:13:15:25 | void always_true_1() | void always_true_1() | -| whilestmt.c:24:9:24:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | whilestmt.c:23:13:23:25 | void always_true_2() | void always_true_2() | -| whilestmt.c:33:9:33:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | whilestmt.c:32:13:32:25 | void always_true_3() | void always_true_3() | -| whilestmt.c:41:9:41:14 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | whilestmt.c:39:13:39:18 | void normal() | void normal() | missingCppType diff --git a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected index 66f9c9c375f5..11d828fa1a0d 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected @@ -34,270 +34,4 @@ thisArgumentIsNonPointer | pointer_to_member.cpp:24:5:24:49 | Call: call to expression | Call instruction 'Call: call to expression' has a `this` argument operand that is not an address, in function '$@'. | pointer_to_member.cpp:14:5:14:9 | int usePM(int PM::*) | int usePM(int PM::*) | nonUniqueIRVariable nonBooleanOperand -| break_labels.c:4:9:4:14 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | break_labels.c:2:12:2:12 | int f(int) | int f(int) | -| break_labels.c:6:16:6:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | break_labels.c:2:12:2:12 | int f(int) | int f(int) | -| break_labels.c:7:17:7:24 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | break_labels.c:2:12:2:12 | int f(int) | int f(int) | -| break_labels.c:20:16:20:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | break_labels.c:16:6:16:10 | void f_for() | void f_for() | -| break_labels.c:21:13:21:18 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | break_labels.c:16:6:16:10 | void f_for() | void f_for() | -| break_labels.c:24:13:24:18 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | break_labels.c:16:6:16:10 | void f_for() | void f_for() | -| builtin.c:24:7:24:13 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | builtin.c:5:5:5:11 | int builtin(int, int) | int builtin(int, int) | -| builtin.c:28:7:28:29 | ConditionalBranch: call to __builtin_unpredictable | Conditional branch instruction ConditionalBranch: call to __builtin_unpredictable with non-Boolean condition, in function '$@'. | builtin.c:5:5:5:11 | int builtin(int, int) | int builtin(int, int) | -| builtin.c:47:7:47:22 | ConditionalBranch: call to __builtin_memchr | Conditional branch instruction ConditionalBranch: call to __builtin_memchr with non-Boolean condition, in function '$@'. | builtin.c:5:5:5:11 | int builtin(int, int) | int builtin(int, int) | -| dostmt.c:4:11:4:11 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | dostmt.c:1:6:1:17 | void always_false() | void always_false() | -| dostmt.c:28:11:28:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | dostmt.c:25:13:25:25 | void always_true_3() | void always_true_3() | -| dostmt.c:36:11:36:16 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | dostmt.c:32:13:32:18 | void normal() | void normal() | -| duff2.c:13:14:13:20 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | duff2.c:2:6:2:12 | void duff2_8(int) | void duff2_8(int) | -| duff2.c:21:14:21:20 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | duff2.c:16:6:16:12 | void duff2_2(int) | void duff2_2(int) | -| duff.c:13:22:13:28 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | duff.c:2:13:2:13 | void f(int) | void f(int) | -| dummyblock.c:2:9:2:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | dummyblock.c:1:13:1:13 | void f() | void f() | -| ifelsestmt.c:2:6:2:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifelsestmt.c:1:13:1:26 | void always_false_1() | void always_false_1() | -| ifelsestmt.c:12:6:12:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifelsestmt.c:11:13:11:26 | void always_false_2() | void always_false_2() | -| ifelsestmt.c:20:6:20:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifelsestmt.c:19:13:19:25 | void always_true_1() | void always_true_1() | -| ifelsestmt.c:30:6:30:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifelsestmt.c:29:13:29:25 | void always_true_2() | void always_true_2() | -| ifelsestmt.c:38:6:38:11 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | ifelsestmt.c:37:13:37:18 | void normal(int, int) | void normal(int, int) | -| ifstmt.c:2:6:2:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifstmt.c:1:13:1:26 | void always_false_1() | void always_false_1() | -| ifstmt.c:9:6:9:6 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | ifstmt.c:8:13:8:26 | void always_false_2() | void always_false_2() | -| ifstmt.c:15:6:15:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifstmt.c:14:13:14:25 | void always_true_1() | void always_true_1() | -| ifstmt.c:22:6:22:6 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | ifstmt.c:21:13:21:25 | void always_true_2() | void always_true_2() | -| ifstmt.c:28:6:28:11 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | ifstmt.c:27:13:27:18 | void normal(int, int) | void normal(int, int) | -| landexpr.c:3:6:3:6 | ConditionalBranch: a | Conditional branch instruction ConditionalBranch: a with non-Boolean condition, in function '$@'. | landexpr.c:1:13:1:13 | void f() | void f() | -| landexpr.c:3:11:3:11 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | landexpr.c:1:13:1:13 | void f() | void f() | -| lorexpr.c:3:6:3:6 | ConditionalBranch: a | Conditional branch instruction ConditionalBranch: a with non-Boolean condition, in function '$@'. | lorexpr.c:1:13:1:13 | void f() | void f() | -| lorexpr.c:3:11:3:11 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | lorexpr.c:1:13:1:13 | void f() | void f() | -| misc.c:22:9:22:12 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:22:17:22:20 | ConditionalBranch: argj | Conditional branch instruction ConditionalBranch: argj with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:27:9:27:12 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:27:17:27:20 | ConditionalBranch: argj | Conditional branch instruction ConditionalBranch: argj with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:32:9:32:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:32:14:32:14 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:37:9:37:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:37:14:37:14 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:44:11:44:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:47:11:47:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:47:16:47:16 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:50:11:50:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:50:16:50:16 | ConditionalBranch: j | Conditional branch instruction ConditionalBranch: j with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:53:11:53:14 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:58:13:58:13 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:61:13:61:16 | ConditionalBranch: argi | Conditional branch instruction ConditionalBranch: argi with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:62:16:62:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:64:11:64:16 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | misc.c:16:6:16:10 | void misc1(int, int) | void misc1(int, int) | -| misc.c:93:9:93:15 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | misc.c:91:6:91:33 | void gnuConditionalOmittedOperand(someStruct*) | void gnuConditionalOmittedOperand(someStruct*) | -| misc.c:94:9:94:19 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | misc.c:91:6:91:33 | void gnuConditionalOmittedOperand(someStruct*) | void gnuConditionalOmittedOperand(someStruct*) | -| misc.c:139:10:139:18 | ConditionalBranch: ... & ... | Conditional branch instruction ConditionalBranch: ... & ... with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:139:25:139:33 | ConditionalBranch: ... & ... | Conditional branch instruction ConditionalBranch: ... & ... with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:140:9:140:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:140:14:140:14 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:140:19:140:19 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:141:9:141:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:141:14:141:14 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:141:19:141:19 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | -| misc.c:192:11:192:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | misc.c:191:6:191:20 | void unreachable_end() | void unreachable_end() | -| pruning.c:5:9:5:9 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | pruning.c:4:6:4:8 | void f_0() | void f_0() | -| pruning.c:13:9:13:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | pruning.c:12:6:12:8 | void f_1() | void f_1() | -| pruning.c:21:9:21:11 | ConditionalBranch: 256 | Conditional branch instruction ConditionalBranch: 256 with non-Boolean condition, in function '$@'. | pruning.c:20:6:20:10 | void f_256() | void f_256() | -| pruning.c:29:9:29:18 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:28:6:28:16 | void f_uint8_t_0() | void f_uint8_t_0() | -| pruning.c:37:9:37:18 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:36:6:36:16 | void f_uint8_t_1() | void f_uint8_t_1() | -| pruning.c:45:9:45:20 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:44:6:44:18 | void f_uint8_t_256() | void f_uint8_t_256() | -| pruning.c:53:9:53:20 | ConditionalBranch: (uint8_t)... | Conditional branch instruction ConditionalBranch: (uint8_t)... with non-Boolean condition, in function '$@'. | pruning.c:52:6:52:18 | void f_uint8_t_257() | void f_uint8_t_257() | -| pruning.c:61:9:61:26 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | pruning.c:60:6:60:21 | void f_uint8_t_minus1() | void f_uint8_t_minus1() | -| pruning.c:70:9:70:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:68:6:68:14 | void f_v_int_0() | void f_v_int_0() | -| pruning.c:79:9:79:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:77:6:77:14 | void f_v_int_1() | void f_v_int_1() | -| pruning.c:88:9:88:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:86:6:86:16 | void f_v_int_256() | void f_v_int_256() | -| pruning.c:97:9:97:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:95:6:95:18 | void f_v_uint8_t_0() | void f_v_uint8_t_0() | -| pruning.c:106:9:106:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:104:6:104:18 | void f_v_uint8_t_1() | void f_v_uint8_t_1() | -| pruning.c:115:9:115:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:113:6:113:20 | void f_v_uint8_t_256() | void f_v_uint8_t_256() | -| pruning.c:124:9:124:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | pruning.c:122:6:122:20 | void f_v_uint8_t_257() | void f_v_uint8_t_257() | -| pruning.c:133:9:133:16 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | pruning.c:131:6:131:23 | void f_v_uint8_t_minus1() | void f_v_uint8_t_minus1() | -| questionexpr.c:3:6:3:11 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | questionexpr.c:1:13:1:13 | void f() | void f() | -| range_analysis.c:7:10:7:10 | ConditionalBranch: p | Conditional branch instruction ConditionalBranch: p with non-Boolean condition, in function '$@'. | range_analysis.c:5:5:5:9 | int test1(List*) | int test1(List*) | -| range_analysis.c:15:10:15:10 | ConditionalBranch: p | Conditional branch instruction ConditionalBranch: p with non-Boolean condition, in function '$@'. | range_analysis.c:13:5:13:9 | int test2(List*) | int test2(List*) | -| range_analysis.c:23:10:23:10 | ConditionalBranch: p | Conditional branch instruction ConditionalBranch: p with non-Boolean condition, in function '$@'. | range_analysis.c:21:5:21:9 | int test3(List*) | int test3(List*) | -| range_analysis.c:33:15:33:19 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:30:5:30:9 | int test4() | int test4() | -| range_analysis.c:42:15:42:19 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:39:5:39:9 | int test5() | int test5() | -| range_analysis.c:51:15:51:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:48:5:48:9 | int test6() | int test6() | -| range_analysis.c:58:7:58:11 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:57:5:57:9 | int test7(int) | int test7(int) | -| range_analysis.c:59:9:59:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:57:5:57:9 | int test7(int) | int test7(int) | -| range_analysis.c:67:7:67:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:66:5:66:9 | int test8(int, int) | int test8(int, int) | -| range_analysis.c:67:20:67:25 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:66:5:66:9 | int test8(int, int) | int test8(int, int) | -| range_analysis.c:68:9:68:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:66:5:66:9 | int test8(int, int) | int test8(int, int) | -| range_analysis.c:76:7:76:12 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | range_analysis.c:75:5:75:9 | int test9(int, int) | int test9(int, int) | -| range_analysis.c:77:9:77:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:75:5:75:9 | int test9(int, int) | int test9(int, int) | -| range_analysis.c:81:9:81:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:75:5:75:9 | int test9(int, int) | int test9(int, int) | -| range_analysis.c:89:7:89:11 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:88:5:88:10 | int test10(int, int) | int test10(int, int) | -| range_analysis.c:90:9:90:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:88:5:88:10 | int test10(int, int) | int test10(int, int) | -| range_analysis.c:101:7:101:15 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:104:7:104:14 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:106:9:106:17 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:109:9:109:16 | ConditionalBranch: ... != ... | Conditional branch instruction ConditionalBranch: ... != ... with non-Boolean condition, in function '$@'. | range_analysis.c:98:5:98:10 | int test11(char*) | int test11(char*) | -| range_analysis.c:124:11:124:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:122:5:122:10 | int test12() | int test12() | -| range_analysis.c:154:11:154:15 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:153:11:153:16 | long long test15(long long) | long long test15(long long) | -| range_analysis.c:154:20:154:30 | ConditionalBranch: ... == ... | Conditional branch instruction ConditionalBranch: ... == ... with non-Boolean condition, in function '$@'. | range_analysis.c:153:11:153:16 | long long test15(long long) | long long test15(long long) | -| range_analysis.c:161:7:161:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:161:17:161:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:166:7:166:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:166:17:166:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:171:7:171:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:171:18:171:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:176:7:176:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:176:18:176:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:181:7:181:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:181:18:181:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:186:7:186:13 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:186:18:186:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:158:5:158:14 | int test_unary(int) | int test_unary(int) | -| range_analysis.c:200:7:200:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:200:17:200:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:200:28:200:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:200:38:200:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:7:204:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:17:204:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:28:204:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:204:38:204:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:7:208:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:17:208:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:28:208:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:208:40:208:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:7:212:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:17:212:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:28:212:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:212:40:212:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:7:216:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:17:216:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:28:216:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:216:40:216:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:197:5:197:15 | int test_mult01(int, int) | int test_mult01(int, int) | -| range_analysis.c:228:7:228:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:228:17:228:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:228:28:228:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:228:38:228:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:7:232:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:17:232:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:28:232:33 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:232:38:232:44 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:7:236:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:17:236:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:28:236:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:236:40:236:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:7:240:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:17:240:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:28:240:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:240:40:240:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:7:244:12 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:17:244:23 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:28:244:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:244:40:244:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:225:5:225:15 | int test_mult02(int, int) | int test_mult02(int, int) | -| range_analysis.c:256:7:256:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:256:19:256:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:256:30:256:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:256:40:256:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:7:260:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:19:260:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:30:260:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:260:40:260:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:7:264:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:19:264:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:30:264:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:264:42:264:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:7:268:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:19:268:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:30:268:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:268:42:268:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:7:272:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:19:272:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:30:272:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:272:42:272:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:253:5:253:15 | int test_mult03(int, int) | int test_mult03(int, int) | -| range_analysis.c:284:7:284:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:284:19:284:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:284:29:284:34 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:284:39:284:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:7:288:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:19:288:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:29:288:34 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:288:39:288:45 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:7:292:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:19:292:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:29:292:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:292:41:292:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:7:296:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:19:296:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:29:296:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:296:41:296:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:7:300:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:19:300:24 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:29:300:36 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:300:41:300:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:281:5:281:15 | int test_mult04(int, int) | int test_mult04(int, int) | -| range_analysis.c:312:7:312:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:312:19:312:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:312:30:312:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:312:40:312:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:7:316:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:19:316:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:30:316:35 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:316:40:316:46 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:7:320:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:19:320:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:30:320:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:320:42:320:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:7:324:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:19:324:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:30:324:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:324:42:324:47 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:7:328:14 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:19:328:25 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:30:328:37 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:328:42:328:48 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:309:5:309:15 | int test_mult05(int, int) | int test_mult05(int, int) | -| range_analysis.c:338:7:338:11 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:342:10:342:14 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:346:7:346:11 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:347:9:347:14 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:336:5:336:10 | int test16(int) | int test16(int) | -| range_analysis.c:357:8:357:14 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:358:8:358:15 | ConditionalBranch: ... >= ... | Conditional branch instruction ConditionalBranch: ... >= ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:365:7:365:13 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:366:10:366:15 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:367:10:367:17 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:368:10:368:21 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:369:10:369:36 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:370:10:370:38 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:371:10:371:39 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:355:14:355:27 | unsigned int test_ternary01(unsigned int) | unsigned int test_ternary01(unsigned int) | -| range_analysis.c:379:8:379:14 | ConditionalBranch: ... > ... | Conditional branch instruction ConditionalBranch: ... > ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:380:8:380:15 | ConditionalBranch: ... <= ... | Conditional branch instruction ConditionalBranch: ... <= ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:384:7:384:14 | ConditionalBranch: ... >= ... | Conditional branch instruction ConditionalBranch: ... >= ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:385:10:385:21 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:386:10:386:21 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:387:10:387:38 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | range_analysis.c:377:14:377:27 | unsigned int test_ternary02(unsigned int) | unsigned int test_ternary02(unsigned int) | -| range_analysis.c:394:20:394:26 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | range_analysis.c:393:14:393:25 | unsigned int test_comma01(unsigned int) | unsigned int test_comma01(unsigned int) | -| switchbody.c:5:11:5:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | switchbody.c:4:5:4:16 | int switch_block(int) | int switch_block(int) | -| switchbody.c:16:11:16:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | switchbody.c:15:5:15:17 | int switch_single(int) | int switch_single(int) | -| switchbody.c:28:11:28:15 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | switchbody.c:27:5:27:19 | int switch_notblock(int) | int switch_notblock(int) | -| test.c:3:9:3:9 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:2:6:2:11 | void f_if_1(int) | void f_if_1(int) | -| test.c:11:9:11:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:10:6:10:11 | void f_if_2() | void f_if_2() | -| test.c:19:9:19:9 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:18:6:18:11 | void f_if_3() | void f_if_3() | -| test.c:28:16:28:21 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | test.c:26:6:26:12 | void f_for_1() | void f_for_1() | -| test.c:36:16:36:16 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:34:6:34:12 | void f_for_2() | void f_for_2() | -| test.c:44:16:44:16 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:42:6:42:12 | void f_for_3() | void f_for_3() | -| test.c:51:11:51:11 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:50:6:50:14 | void f_while_1(int) | void f_while_1(int) | -| test.c:58:11:58:11 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:57:6:57:14 | void f_while_2() | void f_while_2() | -| test.c:65:11:65:11 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:64:6:64:14 | void f_while_3() | void f_while_3() | -| test.c:74:14:74:14 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:71:6:71:11 | void f_do_1(int) | void f_do_1(int) | -| test.c:81:14:81:14 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | test.c:78:6:78:11 | void f_do_2() | void f_do_2() | -| test.c:88:14:88:14 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:85:6:85:11 | void f_do_3() | void f_do_3() | -| test.c:93:13:93:13 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:92:6:92:13 | void f_cond_1(int) | void f_cond_1(int) | -| test.c:204:12:204:12 | ConditionalBranch: i | Conditional branch instruction ConditionalBranch: i with non-Boolean condition, in function '$@'. | test.c:203:6:203:15 | void f_switch_7(int) | void f_switch_7(int) | -| test.c:219:7:219:7 | ConditionalBranch: x | Conditional branch instruction ConditionalBranch: x with non-Boolean condition, in function '$@'. | test.c:218:5:218:11 | int f_and_1(int, int) | int f_and_1(int, int) | -| test.c:219:12:219:13 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | test.c:218:5:218:11 | int f_and_1(int, int) | int f_and_1(int, int) | -| test.c:219:12:219:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | test.c:218:5:218:11 | int f_and_1(int, int) | int f_and_1(int, int) | -| test.c:226:7:226:15 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:226:7:226:15 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:226:9:226:9 | ConditionalBranch: x | Conditional branch instruction ConditionalBranch: x with non-Boolean condition, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:226:14:226:14 | ConditionalBranch: y | Conditional branch instruction ConditionalBranch: y with non-Boolean condition, in function '$@'. | test.c:225:5:225:11 | int f_and_2(int, int) | int f_and_2(int, int) | -| test.c:233:7:233:7 | ConditionalBranch: b | Conditional branch instruction ConditionalBranch: b with non-Boolean condition, in function '$@'. | test.c:232:6:232:19 | void f_if_ternary_1(int, int, int) | void f_if_ternary_1(int, int, int) | -| test.c:233:7:233:15 | ConditionalBranch: ... ? ... : ... | Conditional branch instruction ConditionalBranch: ... ? ... : ... with non-Boolean condition, in function '$@'. | test.c:232:6:232:19 | void f_if_ternary_1(int, int, int) | void f_if_ternary_1(int, int, int) | -| test.c:245:31:245:31 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | test.c:245:24:245:24 | const void *[] a | const void *[] a | -| unaryopexpr.c:8:5:8:6 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | unaryopexpr.c:1:13:1:13 | void f() | void f() | -| whilestmt.c:2:9:2:9 | ConditionalBranch: 0 | Conditional branch instruction ConditionalBranch: 0 with non-Boolean condition, in function '$@'. | whilestmt.c:1:13:1:26 | void always_false_1() | void always_false_1() | -| whilestmt.c:10:9:10:13 | ConditionalBranch: ! ... | Conditional branch instruction ConditionalBranch: ! ... with non-Boolean condition, in function '$@'. | whilestmt.c:8:13:8:26 | void always_false_2() | void always_false_2() | -| whilestmt.c:10:9:10:13 | LogicalNot: ! ... | Logical Not instruction LogicalNot: ! ... with non-Boolean operand, in function '$@'. | whilestmt.c:8:13:8:26 | void always_false_2() | void always_false_2() | -| whilestmt.c:16:9:16:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | whilestmt.c:15:13:15:25 | void always_true_1() | void always_true_1() | -| whilestmt.c:24:9:24:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | whilestmt.c:23:13:23:25 | void always_true_2() | void always_true_2() | -| whilestmt.c:33:9:33:9 | ConditionalBranch: 1 | Conditional branch instruction ConditionalBranch: 1 with non-Boolean condition, in function '$@'. | whilestmt.c:32:13:32:25 | void always_true_3() | void always_true_3() | -| whilestmt.c:41:9:41:14 | ConditionalBranch: ... < ... | Conditional branch instruction ConditionalBranch: ... < ... with non-Boolean condition, in function '$@'. | whilestmt.c:39:13:39:18 | void normal() | void normal() | missingCppType diff --git a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.c b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.c index e77dc8c5586a..f0b2dff13308 100644 --- a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.c +++ b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.c @@ -1,4 +1,4 @@ -// semmle-extractor-options: -std=c11 +// semmle-extractor-options: -std=c23 int f1(void) { int x = 1; return 2; @@ -110,3 +110,27 @@ int f17() { if (__builtin_expect(1, 0)) __builtin_unreachable(); // GOOD } + +[[_Noreturn]] void f18(); + +int f19() { + f18(); // GOOD +} + +[[___Noreturn__]] void f20(); + +int f21() { + f20(); // GOOD +} + +[[noreturn]] void f22(); + +int f23() { + f22(); // GOOD +} + +[[__noreturn__]] void f24(); + +int f25() { + f24(); // GOOD +} diff --git a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp index c19c5de13f90..0c7e02ce9ac0 100644 --- a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp +++ b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp @@ -188,3 +188,10 @@ int g22() { int g23() { Aborting().a(); // GOOD [FALSE POSITIVE] } + +[[__noreturn__]] +int g24(); + +int g25() { + g24(); // GOOD +} diff --git a/go/documentation/library-coverage/coverage.csv b/go/documentation/library-coverage/coverage.csv index fa7497e1d78b..300df940a98d 100644 --- a/go/documentation/library-coverage/coverage.csv +++ b/go/documentation/library-coverage/coverage.csv @@ -1,142 +1,142 @@ -package,sink,source,summary,sink:command-injection,sink:credentials-key,sink:jwt,sink:log-injection,sink:nosql-injection,sink:path-injection,sink:regex-use[0],sink:regex-use[1],sink:regex-use[c],sink:request-forgery,sink:request-forgery[TCP Addr + Port],sink:sql-injection,sink:url-redirection,sink:url-redirection[0],sink:url-redirection[receiver],sink:xpath-injection,source:commandargs,source:environment,source:file,source:remote,source:stdin,summary:taint,summary:value -,,,8,,,,,,,,,,,,,,,,,,,,,,3,5 -archive/tar,,,5,,,,,,,,,,,,,,,,,,,,,,5, -archive/zip,,,6,,,,,,,,,,,,,,,,,,,,,,6, -bufio,,,17,,,,,,,,,,,,,,,,,,,,,,17, -bytes,,,43,,,,,,,,,,,,,,,,,,,,,,43, -clevergo.tech/clevergo,1,,,,,,,,,,,,,,,,,1,,,,,,,, -compress/bzip2,,,1,,,,,,,,,,,,,,,,,,,,,,1, -compress/flate,,,4,,,,,,,,,,,,,,,,,,,,,,4, -compress/gzip,,,3,,,,,,,,,,,,,,,,,,,,,,3, -compress/lzw,,,1,,,,,,,,,,,,,,,,,,,,,,1, -compress/zlib,,,4,,,,,,,,,,,,,,,,,,,,,,4, -container/heap,,,5,,,,,,,,,,,,,,,,,,,,,,5, -container/list,,,20,,,,,,,,,,,,,,,,,,,,,,20, -container/ring,,,5,,,,,,,,,,,,,,,,,,,,,,5, -context,,,5,,,,,,,,,,,,,,,,,,,,,,5, -crypto,,,10,,,,,,,,,,,,,,,,,,,,,,10, -database/sql,30,,11,,,,,,,,,,,,30,,,,,,,,,,11, -encoding,,,77,,,,,,,,,,,,,,,,,,,,,,77, -errors,,,3,,,,,,,,,,,,,,,,,,,,,,3, -expvar,,,6,,,,,,,,,,,,,,,,,,,,,,6, -fmt,3,,16,,,,3,,,,,,,,,,,,,,,,,,16, -github.com/ChrisTrenkamp/goxpath,3,,,,,,,,,,,,,,,,,,3,,,,,,, -github.com/Masterminds/squirrel,32,,,,,,,,,,,,,,32,,,,,,,,,,, -github.com/Sirupsen/logrus,145,,,,,,145,,,,,,,,,,,,,,,,,,, -github.com/antchfx/htmlquery,4,,,,,,,,,,,,,,,,,,4,,,,,,, -github.com/antchfx/jsonquery,4,,,,,,,,,,,,,,,,,,4,,,,,,, -github.com/antchfx/xmlquery,8,,,,,,,,,,,,,,,,,,8,,,,,,, -github.com/antchfx/xpath,4,,,,,,,,,,,,,,,,,,4,,,,,,, -github.com/appleboy/gin-jwt,1,,,,1,,,,,,,,,,,,,,,,,,,,, -github.com/astaxie/beego,71,21,21,,,,34,,5,,,,,,30,2,,,,,,,21,,21, -github.com/beego/beego,142,42,42,,,,68,,10,,,,,,60,4,,,,,,,42,,42, -github.com/caarlos0/env,,5,2,,,,,,,,,,,,,,,,,,5,,,,1,1 -github.com/clevergo/clevergo,1,,,,,,,,,,,,,,,,,1,,,,,,,, -github.com/codeskyblue/go-sh,4,,,4,,,,,,,,,,,,,,,,,,,,,, -github.com/couchbase/gocb,8,,18,,,,,8,,,,,,,,,,,,,,,,,18, -github.com/couchbaselabs/gocb,8,,18,,,,,8,,,,,,,,,,,,,,,,,18, -github.com/crankycoder/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,, -github.com/cristalhq/jwt,1,,,,1,,,,,,,,,,,,,,,,,,,,, -github.com/davecgh/go-spew/spew,9,,,,,,9,,,,,,,,,,,,,,,,,,, -github.com/dgrijalva/jwt-go,3,,9,,2,1,,,,,,,,,,,,,,,,,,,9, -github.com/elazarl/goproxy,2,2,2,,,,2,,,,,,,,,,,,,,,,2,,2, -github.com/emicklei/go-restful,,7,,,,,,,,,,,,,,,,,,,,,7,,, -github.com/evanphx/json-patch,,,12,,,,,,,,,,,,,,,,,,,,,,12, -github.com/form3tech-oss/jwt-go,2,,,,2,,,,,,,,,,,,,,,,,,,,, -github.com/gin-gonic/gin,3,46,2,,,,,,3,,,,,,,,,,,,,,46,,2, -github.com/go-chi/chi,,3,,,,,,,,,,,,,,,,,,,,,3,,, -github.com/go-chi/jwtauth,1,,,,1,,,,,,,,,,,,,,,,,,,,, -github.com/go-gorm/gorm,13,,,,,,,,,,,,,,13,,,,,,,,,,, -github.com/go-jose/go-jose,3,,4,,2,1,,,,,,,,,,,,,,,,,,,4, -github.com/go-kit/kit/auth/jwt,1,,,,1,,,,,,,,,,,,,,,,,,,,, -github.com/go-pg/pg/orm,,,6,,,,,,,,,,,,,,,,,,,,,,6, -github.com/go-xmlpath/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,, -github.com/go-xorm/xorm,34,,,,,,,,,,,,,,34,,,,,,,,,,, -github.com/gobuffalo/envy,,7,,,,,,,,,,,,,,,,,,,7,,,,, -github.com/gobwas/ws,,2,,,,,,,,,,,,,,,,,,,,,2,,, -github.com/gofiber/fiber,5,,,,,,,,4,,,,,,,,,1,,,,,,,, -github.com/gogf/gf-jwt,1,,,,1,,,,,,,,,,,,,,,,,,,,, -github.com/gogf/gf/database/gdb,51,,,,,,,,,,,,,,51,,,,,,,,,,, -github.com/going/toolkit/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,, -github.com/golang-jwt/jwt,3,,11,,2,1,,,,,,,,,,,,,,,,,,,11, -github.com/golang/glog,90,,,,,,90,,,,,,,,,,,,,,,,,,, -github.com/golang/protobuf/proto,,,4,,,,,,,,,,,,,,,,,,,,,,4, -github.com/gorilla/mux,,1,,,,,,,,,,,,,,,,,,,,,1,,, -github.com/gorilla/websocket,,3,,,,,,,,,,,,,,,,,,,,,3,,, -github.com/hashicorp/go-envparse,,1,,,,,,,,,,,,,,,,,,,1,,,,, -github.com/jbowtie/gokogiri/xml,4,,,,,,,,,,,,,,,,,,4,,,,,,, -github.com/jbowtie/gokogiri/xpath,1,,,,,,,,,,,,,,,,,,1,,,,,,, -github.com/jinzhu/gorm,13,,,,,,,,,,,,,,13,,,,,,,,,,, -github.com/jmoiron/sqlx,12,,,,,,,,,,,,,,12,,,,,,,,,,, -github.com/joho/godotenv,,4,,,,,,,,,,,,,,,,,,,4,,,,, -github.com/json-iterator/go,,,4,,,,,,,,,,,,,,,,,,,,,,4, -github.com/kataras/iris/context,6,,,,,,,,6,,,,,,,,,,,,,,,,, -github.com/kataras/iris/middleware/jwt,2,,,,2,,,,,,,,,,,,,,,,,,,,, -github.com/kataras/iris/server/web/context,6,,,,,,,,6,,,,,,,,,,,,,,,,, -github.com/kataras/jwt,5,,,,5,,,,,,,,,,,,,,,,,,,,, -github.com/kelseyhightower/envconfig,,6,,,,,,,,,,,,,,,,,,,6,,,,, -github.com/labstack/echo,3,12,2,,,,,,2,,,,,,,1,,,,,,,12,,2, -github.com/lann/squirrel,32,,,,,,,,,,,,,,32,,,,,,,,,,, -github.com/lestrrat-go/jwx,2,,,,2,,,,,,,,,,,,,,,,,,,,, -github.com/lestrrat-go/libxml2/parser,3,,,,,,,,,,,,,,,,,,3,,,,,,, -github.com/lestrrat/go-jwx/jwk,1,,,,1,,,,,,,,,,,,,,,,,,,,, -github.com/masterzen/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,, -github.com/moovweb/gokogiri/xml,4,,,,,,,,,,,,,,,,,,4,,,,,,, -github.com/moovweb/gokogiri/xpath,1,,,,,,,,,,,,,,,,,,1,,,,,,, -github.com/ory/fosite/token/jwt,2,,,,2,,,,,,,,,,,,,,,,,,,,, -github.com/raindog308/gorqlite,24,,,,,,,,,,,,,,24,,,,,,,,,,, -github.com/revel/revel,2,23,10,,,,,,1,,,,,,,1,,,,,,,23,,10, -github.com/robfig/revel,2,23,10,,,,,,1,,,,,,,1,,,,,,,23,,10, -github.com/rqlite/gorqlite,24,,,,,,,,,,,,,,24,,,,,,,,,,, -github.com/santhosh-tekuri/xpathparser,2,,,,,,,,,,,,,,,,,,2,,,,,,, -github.com/sendgrid/sendgrid-go/helpers/mail,,,1,,,,,,,,,,,,,,,,,,,,,,1, -github.com/sirupsen/logrus,145,,,,,,145,,,,,,,,,,,,,,,,,,, -github.com/spf13/afero,34,,,,,,,,34,,,,,,,,,,,,,,,,, -github.com/square/go-jose,3,,4,,2,1,,,,,,,,,,,,,,,,,,,4, -github.com/uptrace/bun,63,,,,,,,,,,,,,,63,,,,,,,,,,, -github.com/valyala/fasthttp,35,50,5,,,,,,8,,,,17,8,,2,,,,,,,50,,5, -go.mongodb.org/mongo-driver/mongo,14,,,,,,,14,,,,,,,,,,,,,,,,,, -go.uber.org/zap,33,,11,,,,33,,,,,,,,,,,,,,,,,,11, -golang.org/x/crypto/ssh,4,,,4,,,,,,,,,,,,,,,,,,,,,, -golang.org/x/net/context,,,5,,,,,,,,,,,,,,,,,,,,,,5, -golang.org/x/net/html,,,16,,,,,,,,,,,,,,,,,,,,,,16, -golang.org/x/net/websocket,,2,,,,,,,,,,,,,,,,,,,,,2,,, -google.golang.org/protobuf/internal/encoding/text,,,1,,,,,,,,,,,,,,,,,,,,,,1, -google.golang.org/protobuf/internal/impl,,,2,,,,,,,,,,,,,,,,,,,,,,2, -google.golang.org/protobuf/proto,,,8,,,,,,,,,,,,,,,,,,,,,,8, -google.golang.org/protobuf/reflect/protoreflect,,,1,,,,,,,,,,,,,,,,,,,,,,1, -gopkg.in/Masterminds/squirrel,32,,,,,,,,,,,,,,32,,,,,,,,,,, -gopkg.in/couchbase/gocb,8,,18,,,,,8,,,,,,,,,,,,,,,,,18, -gopkg.in/glog,90,,,,,,90,,,,,,,,,,,,,,,,,,, -gopkg.in/go-jose/go-jose,3,,4,,2,1,,,,,,,,,,,,,,,,,,,4, -gopkg.in/go-xmlpath/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,, -gopkg.in/macaron,1,12,1,,,,,,,,,,,,,,,1,,,,,12,,1, -gopkg.in/square/go-jose,3,,4,,2,1,,,,,,,,,,,,,,,,,,,4, -gopkg.in/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,, -gopkg.in/yaml,,,9,,,,,,,,,,,,,,,,,,,,,,9, -gorm.io/gorm,13,,,,,,,,,,,,,,13,,,,,,,,,,, -html,,,8,,,,,,,,,,,,,,,,,,,,,,8, -io,5,4,34,,,,,,5,,,,,,,,,,,,,4,,,34, -k8s.io/api/core,,,10,,,,,,,,,,,,,,,,,,,,,,10, -k8s.io/apimachinery/pkg/runtime,,,47,,,,,,,,,,,,,,,,,,,,,,47, -k8s.io/klog,90,,,,,,90,,,,,,,,,,,,,,,,,,, -launchpad.net/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,, -log,20,,3,,,,20,,,,,,,,,,,,,,,,,,3, -math/big,,,1,,,,,,,,,,,,,,,,,,,,,,1, -mime,,,14,,,,,,,,,,,,,,,,,,,,,,14, -net,2,16,100,,,,,,1,,,,,,,,1,,,,,,16,,100, -nhooyr.io/websocket,,2,,,,,,,,,,,,,,,,,,,,,2,,, -os,29,12,6,3,,,,,26,,,,,,,,,,,1,7,3,,1,6, -path,,,18,,,,,,,,,,,,,,,,,,,,,,18, -reflect,,,37,,,,,,,,,,,,,,,,,,,,,,37, -regexp,10,,20,,,,,,,3,3,4,,,,,,,,,,,,,20, -slices,,,17,,,,,,,,,,,,,,,,,,,,,,,17 -sort,,,1,,,,,,,,,,,,,,,,,,,,,,1, -strconv,,,9,,,,,,,,,,,,,,,,,,,,,,9, -strings,,,34,,,,,,,,,,,,,,,,,,,,,,34, -sync,,,34,,,,,,,,,,,,,,,,,,,,,,34, -syscall,5,2,8,5,,,,,,,,,,,,,,,,,2,,,,8, -text/scanner,,,3,,,,,,,,,,,,,,,,,,,,,,3, -text/tabwriter,,,1,,,,,,,,,,,,,,,,,,,,,,1, -text/template,,,6,,,,,,,,,,,,,,,,,,,,,,6, -xorm.io/xorm,34,,,,,,,,,,,,,,34,,,,,,,,,,, +package,sink,source,summary,sink:command-injection,sink:credentials-key,sink:jwt,sink:log-injection,sink:nosql-injection,sink:path-injection,sink:regex-use[0],sink:regex-use[1],sink:regex-use[c],sink:request-forgery,sink:request-forgery[TCP Addr + Port],sink:sql-injection,sink:url-redirection,sink:url-redirection[0],sink:url-redirection[receiver],sink:xpath-injection,source:commandargs,source:database,source:environment,source:file,source:remote,source:stdin,summary:taint,summary:value +,,,8,,,,,,,,,,,,,,,,,,,,,,,3,5 +archive/tar,,,5,,,,,,,,,,,,,,,,,,,,,,,5, +archive/zip,,,6,,,,,,,,,,,,,,,,,,,,,,,6, +bufio,,,17,,,,,,,,,,,,,,,,,,,,,,,17, +bytes,,,43,,,,,,,,,,,,,,,,,,,,,,,43, +clevergo.tech/clevergo,1,,,,,,,,,,,,,,,,,1,,,,,,,,, +compress/bzip2,,,1,,,,,,,,,,,,,,,,,,,,,,,1, +compress/flate,,,4,,,,,,,,,,,,,,,,,,,,,,,4, +compress/gzip,,,3,,,,,,,,,,,,,,,,,,,,,,,3, +compress/lzw,,,1,,,,,,,,,,,,,,,,,,,,,,,1, +compress/zlib,,,4,,,,,,,,,,,,,,,,,,,,,,,4, +container/heap,,,5,,,,,,,,,,,,,,,,,,,,,,,5, +container/list,,,20,,,,,,,,,,,,,,,,,,,,,,,20, +container/ring,,,5,,,,,,,,,,,,,,,,,,,,,,,5, +context,,,5,,,,,,,,,,,,,,,,,,,,,,,5, +crypto,,,10,,,,,,,,,,,,,,,,,,,,,,,10, +database/sql,30,18,12,,,,,,,,,,,,30,,,,,,18,,,,,12, +encoding,,,77,,,,,,,,,,,,,,,,,,,,,,,77, +errors,,,3,,,,,,,,,,,,,,,,,,,,,,,3, +expvar,,,6,,,,,,,,,,,,,,,,,,,,,,,6, +fmt,3,,16,,,,3,,,,,,,,,,,,,,,,,,,16, +github.com/ChrisTrenkamp/goxpath,3,,,,,,,,,,,,,,,,,,3,,,,,,,, +github.com/Masterminds/squirrel,32,,,,,,,,,,,,,,32,,,,,,,,,,,, +github.com/Sirupsen/logrus,145,,,,,,145,,,,,,,,,,,,,,,,,,,, +github.com/antchfx/htmlquery,4,,,,,,,,,,,,,,,,,,4,,,,,,,, +github.com/antchfx/jsonquery,4,,,,,,,,,,,,,,,,,,4,,,,,,,, +github.com/antchfx/xmlquery,8,,,,,,,,,,,,,,,,,,8,,,,,,,, +github.com/antchfx/xpath,4,,,,,,,,,,,,,,,,,,4,,,,,,,, +github.com/appleboy/gin-jwt,1,,,,1,,,,,,,,,,,,,,,,,,,,,, +github.com/astaxie/beego,71,34,21,,,,34,,5,,,,,,30,2,,,,,13,,,21,,21, +github.com/beego/beego,142,68,42,,,,68,,10,,,,,,60,4,,,,,26,,,42,,42, +github.com/caarlos0/env,,5,2,,,,,,,,,,,,,,,,,,,5,,,,1,1 +github.com/clevergo/clevergo,1,,,,,,,,,,,,,,,,,1,,,,,,,,, +github.com/codeskyblue/go-sh,4,,,4,,,,,,,,,,,,,,,,,,,,,,, +github.com/couchbase/gocb,8,,18,,,,,8,,,,,,,,,,,,,,,,,,18, +github.com/couchbaselabs/gocb,8,,18,,,,,8,,,,,,,,,,,,,,,,,,18, +github.com/crankycoder/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,,, +github.com/cristalhq/jwt,1,,,,1,,,,,,,,,,,,,,,,,,,,,, +github.com/davecgh/go-spew/spew,9,,,,,,9,,,,,,,,,,,,,,,,,,,, +github.com/dgrijalva/jwt-go,3,,9,,2,1,,,,,,,,,,,,,,,,,,,,9, +github.com/elazarl/goproxy,2,2,2,,,,2,,,,,,,,,,,,,,,,,2,,2, +github.com/emicklei/go-restful,,7,,,,,,,,,,,,,,,,,,,,,,7,,, +github.com/evanphx/json-patch,,,12,,,,,,,,,,,,,,,,,,,,,,,12, +github.com/form3tech-oss/jwt-go,2,,,,2,,,,,,,,,,,,,,,,,,,,,, +github.com/gin-gonic/gin,3,46,2,,,,,,3,,,,,,,,,,,,,,,46,,2, +github.com/go-chi/chi,,3,,,,,,,,,,,,,,,,,,,,,,3,,, +github.com/go-chi/jwtauth,1,,,,1,,,,,,,,,,,,,,,,,,,,,, +github.com/go-gorm/gorm,13,15,1,,,,,,,,,,,,13,,,,,,15,,,,,1, +github.com/go-jose/go-jose,3,,4,,2,1,,,,,,,,,,,,,,,,,,,,4, +github.com/go-kit/kit/auth/jwt,1,,,,1,,,,,,,,,,,,,,,,,,,,,, +github.com/go-pg/pg/orm,,,6,,,,,,,,,,,,,,,,,,,,,,,6, +github.com/go-xmlpath/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,,, +github.com/go-xorm/xorm,34,,,,,,,,,,,,,,34,,,,,,,,,,,, +github.com/gobuffalo/envy,,7,,,,,,,,,,,,,,,,,,,,7,,,,, +github.com/gobwas/ws,,2,,,,,,,,,,,,,,,,,,,,,,2,,, +github.com/gofiber/fiber,5,,,,,,,,4,,,,,,,,,1,,,,,,,,, +github.com/gogf/gf-jwt,1,,,,1,,,,,,,,,,,,,,,,,,,,,, +github.com/gogf/gf/database/gdb,51,,,,,,,,,,,,,,51,,,,,,,,,,,, +github.com/going/toolkit/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,,, +github.com/golang-jwt/jwt,3,,11,,2,1,,,,,,,,,,,,,,,,,,,,11, +github.com/golang/glog,90,,,,,,90,,,,,,,,,,,,,,,,,,,, +github.com/golang/protobuf/proto,,,4,,,,,,,,,,,,,,,,,,,,,,,4, +github.com/gorilla/mux,,1,,,,,,,,,,,,,,,,,,,,,,1,,, +github.com/gorilla/websocket,,3,,,,,,,,,,,,,,,,,,,,,,3,,, +github.com/hashicorp/go-envparse,,1,,,,,,,,,,,,,,,,,,,,1,,,,, +github.com/jbowtie/gokogiri/xml,4,,,,,,,,,,,,,,,,,,4,,,,,,,, +github.com/jbowtie/gokogiri/xpath,1,,,,,,,,,,,,,,,,,,1,,,,,,,, +github.com/jinzhu/gorm,13,15,1,,,,,,,,,,,,13,,,,,,15,,,,,1, +github.com/jmoiron/sqlx,12,49,11,,,,,,,,,,,,12,,,,,,49,,,,,11, +github.com/joho/godotenv,,4,,,,,,,,,,,,,,,,,,,,4,,,,, +github.com/json-iterator/go,,,4,,,,,,,,,,,,,,,,,,,,,,,4, +github.com/kataras/iris/context,6,,,,,,,,6,,,,,,,,,,,,,,,,,, +github.com/kataras/iris/middleware/jwt,2,,,,2,,,,,,,,,,,,,,,,,,,,,, +github.com/kataras/iris/server/web/context,6,,,,,,,,6,,,,,,,,,,,,,,,,,, +github.com/kataras/jwt,5,,,,5,,,,,,,,,,,,,,,,,,,,,, +github.com/kelseyhightower/envconfig,,6,,,,,,,,,,,,,,,,,,,,6,,,,, +github.com/labstack/echo,3,12,2,,,,,,2,,,,,,,1,,,,,,,,12,,2, +github.com/lann/squirrel,32,,,,,,,,,,,,,,32,,,,,,,,,,,, +github.com/lestrrat-go/jwx,2,,,,2,,,,,,,,,,,,,,,,,,,,,, +github.com/lestrrat-go/libxml2/parser,3,,,,,,,,,,,,,,,,,,3,,,,,,,, +github.com/lestrrat/go-jwx/jwk,1,,,,1,,,,,,,,,,,,,,,,,,,,,, +github.com/masterzen/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,,, +github.com/moovweb/gokogiri/xml,4,,,,,,,,,,,,,,,,,,4,,,,,,,, +github.com/moovweb/gokogiri/xpath,1,,,,,,,,,,,,,,,,,,1,,,,,,,, +github.com/ory/fosite/token/jwt,2,,,,2,,,,,,,,,,,,,,,,,,,,,, +github.com/raindog308/gorqlite,24,,,,,,,,,,,,,,24,,,,,,,,,,,, +github.com/revel/revel,2,23,10,,,,,,1,,,,,,,1,,,,,,,,23,,10, +github.com/robfig/revel,2,23,10,,,,,,1,,,,,,,1,,,,,,,,23,,10, +github.com/rqlite/gorqlite,24,,,,,,,,,,,,,,24,,,,,,,,,,,, +github.com/santhosh-tekuri/xpathparser,2,,,,,,,,,,,,,,,,,,2,,,,,,,, +github.com/sendgrid/sendgrid-go/helpers/mail,,,1,,,,,,,,,,,,,,,,,,,,,,,1, +github.com/sirupsen/logrus,145,,,,,,145,,,,,,,,,,,,,,,,,,,, +github.com/spf13/afero,34,,,,,,,,34,,,,,,,,,,,,,,,,,, +github.com/square/go-jose,3,,4,,2,1,,,,,,,,,,,,,,,,,,,,4, +github.com/uptrace/bun,63,,,,,,,,,,,,,,63,,,,,,,,,,,, +github.com/valyala/fasthttp,35,50,5,,,,,,8,,,,17,8,,2,,,,,,,,50,,5, +go.mongodb.org/mongo-driver/mongo,14,,,,,,,14,,,,,,,,,,,,,,,,,,, +go.uber.org/zap,33,,11,,,,33,,,,,,,,,,,,,,,,,,,11, +golang.org/x/crypto/ssh,4,,,4,,,,,,,,,,,,,,,,,,,,,,, +golang.org/x/net/context,,,5,,,,,,,,,,,,,,,,,,,,,,,5, +golang.org/x/net/html,,,16,,,,,,,,,,,,,,,,,,,,,,,16, +golang.org/x/net/websocket,,2,,,,,,,,,,,,,,,,,,,,,,2,,, +google.golang.org/protobuf/internal/encoding/text,,,1,,,,,,,,,,,,,,,,,,,,,,,1, +google.golang.org/protobuf/internal/impl,,,2,,,,,,,,,,,,,,,,,,,,,,,2, +google.golang.org/protobuf/proto,,,8,,,,,,,,,,,,,,,,,,,,,,,8, +google.golang.org/protobuf/reflect/protoreflect,,,1,,,,,,,,,,,,,,,,,,,,,,,1, +gopkg.in/Masterminds/squirrel,32,,,,,,,,,,,,,,32,,,,,,,,,,,, +gopkg.in/couchbase/gocb,8,,18,,,,,8,,,,,,,,,,,,,,,,,,18, +gopkg.in/glog,90,,,,,,90,,,,,,,,,,,,,,,,,,,, +gopkg.in/go-jose/go-jose,3,,4,,2,1,,,,,,,,,,,,,,,,,,,,4, +gopkg.in/go-xmlpath/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,,, +gopkg.in/macaron,1,12,1,,,,,,,,,,,,,,,1,,,,,,12,,1, +gopkg.in/square/go-jose,3,,4,,2,1,,,,,,,,,,,,,,,,,,,,4, +gopkg.in/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,,, +gopkg.in/yaml,,,9,,,,,,,,,,,,,,,,,,,,,,,9, +gorm.io/gorm,13,15,1,,,,,,,,,,,,13,,,,,,15,,,,,1, +html,,,8,,,,,,,,,,,,,,,,,,,,,,,8, +io,5,4,34,,,,,,5,,,,,,,,,,,,,,4,,,34, +k8s.io/api/core,,,10,,,,,,,,,,,,,,,,,,,,,,,10, +k8s.io/apimachinery/pkg/runtime,,,47,,,,,,,,,,,,,,,,,,,,,,,47, +k8s.io/klog,90,,,,,,90,,,,,,,,,,,,,,,,,,,, +launchpad.net/xmlpath,2,,,,,,,,,,,,,,,,,,2,,,,,,,, +log,20,,3,,,,20,,,,,,,,,,,,,,,,,,,3, +math/big,,,1,,,,,,,,,,,,,,,,,,,,,,,1, +mime,,,14,,,,,,,,,,,,,,,,,,,,,,,14, +net,2,16,100,,,,,,1,,,,,,,,1,,,,,,,16,,100, +nhooyr.io/websocket,,2,,,,,,,,,,,,,,,,,,,,,,2,,, +os,29,12,6,3,,,,,26,,,,,,,,,,,1,,7,3,,1,6, +path,,,18,,,,,,,,,,,,,,,,,,,,,,,18, +reflect,,,37,,,,,,,,,,,,,,,,,,,,,,,37, +regexp,10,,20,,,,,,,3,3,4,,,,,,,,,,,,,,20, +slices,,,17,,,,,,,,,,,,,,,,,,,,,,,,17 +sort,,,1,,,,,,,,,,,,,,,,,,,,,,,1, +strconv,,,9,,,,,,,,,,,,,,,,,,,,,,,9, +strings,,,34,,,,,,,,,,,,,,,,,,,,,,,34, +sync,,,34,,,,,,,,,,,,,,,,,,,,,,,34, +syscall,5,2,8,5,,,,,,,,,,,,,,,,,,2,,,,8, +text/scanner,,,3,,,,,,,,,,,,,,,,,,,,,,,3, +text/tabwriter,,,1,,,,,,,,,,,,,,,,,,,,,,,1, +text/template,,,6,,,,,,,,,,,,,,,,,,,,,,,6, +xorm.io/xorm,34,,,,,,,,,,,,,,34,,,,,,,,,,,, diff --git a/go/documentation/library-coverage/coverage.rst b/go/documentation/library-coverage/coverage.rst index 480e9cbd947b..452e578bb088 100644 --- a/go/documentation/library-coverage/coverage.rst +++ b/go/documentation/library-coverage/coverage.rst @@ -26,10 +26,10 @@ Go framework & library support `Macaron `_,``gopkg.in/macaron*``,12,1,1 `Revel `_,"``github.com/revel/revel*``, ``github.com/robfig/revel*``",46,20,4 `SendGrid `_,``github.com/sendgrid/sendgrid-go*``,,1, - `Standard library `_,"````, ``archive/*``, ``bufio``, ``bytes``, ``cmp``, ``compress/*``, ``container/*``, ``context``, ``crypto``, ``crypto/*``, ``database/*``, ``debug/*``, ``embed``, ``encoding``, ``encoding/*``, ``errors``, ``expvar``, ``flag``, ``fmt``, ``go/*``, ``hash``, ``hash/*``, ``html``, ``html/*``, ``image``, ``image/*``, ``index/*``, ``io``, ``io/*``, ``log``, ``log/*``, ``maps``, ``math``, ``math/*``, ``mime``, ``mime/*``, ``net``, ``net/*``, ``os``, ``os/*``, ``path``, ``path/*``, ``plugin``, ``reflect``, ``reflect/*``, ``regexp``, ``regexp/*``, ``slices``, ``sort``, ``strconv``, ``strings``, ``sync``, ``sync/*``, ``syscall``, ``syscall/*``, ``testing``, ``testing/*``, ``text/*``, ``time``, ``time/*``, ``unicode``, ``unicode/*``, ``unsafe``",34,604,104 + `Standard library `_,"````, ``archive/*``, ``bufio``, ``bytes``, ``cmp``, ``compress/*``, ``container/*``, ``context``, ``crypto``, ``crypto/*``, ``database/*``, ``debug/*``, ``embed``, ``encoding``, ``encoding/*``, ``errors``, ``expvar``, ``flag``, ``fmt``, ``go/*``, ``hash``, ``hash/*``, ``html``, ``html/*``, ``image``, ``image/*``, ``index/*``, ``io``, ``io/*``, ``log``, ``log/*``, ``maps``, ``math``, ``math/*``, ``mime``, ``mime/*``, ``net``, ``net/*``, ``os``, ``os/*``, ``path``, ``path/*``, ``plugin``, ``reflect``, ``reflect/*``, ``regexp``, ``regexp/*``, ``slices``, ``sort``, ``strconv``, ``strings``, ``sync``, ``sync/*``, ``syscall``, ``syscall/*``, ``testing``, ``testing/*``, ``text/*``, ``time``, ``time/*``, ``unicode``, ``unicode/*``, ``unsafe``",52,605,104 `XPath `_,``github.com/antchfx/xpath*``,,,4 `appleboy/gin-jwt `_,``github.com/appleboy/gin-jwt*``,,,1 - `beego `_,"``github.com/astaxie/beego*``, ``github.com/beego/beego*``",63,63,213 + `beego `_,"``github.com/astaxie/beego*``, ``github.com/beego/beego*``",102,63,213 `chi `_,``github.com/go-chi/chi*``,3,, `cristalhq/jwt `_,``github.com/cristalhq/jwt*``,,,1 `fasthttp `_,``github.com/valyala/fasthttp*``,50,5,35 @@ -60,6 +60,6 @@ Go framework & library support `xpathparser `_,``github.com/santhosh-tekuri/xpathparser*``,,,2 `yaml `_,``gopkg.in/yaml*``,,9, `zap `_,``go.uber.org/zap*``,,11,33 - Others,"``github.com/Masterminds/squirrel``, ``github.com/caarlos0/env``, ``github.com/go-gorm/gorm``, ``github.com/go-xorm/xorm``, ``github.com/gobuffalo/envy``, ``github.com/gogf/gf/database/gdb``, ``github.com/hashicorp/go-envparse``, ``github.com/jinzhu/gorm``, ``github.com/jmoiron/sqlx``, ``github.com/joho/godotenv``, ``github.com/kelseyhightower/envconfig``, ``github.com/lann/squirrel``, ``github.com/raindog308/gorqlite``, ``github.com/rqlite/gorqlite``, ``github.com/uptrace/bun``, ``go.mongodb.org/mongo-driver/mongo``, ``gopkg.in/Masterminds/squirrel``, ``gorm.io/gorm``, ``xorm.io/xorm``",23,2,391 - Totals,,308,928,1532 + Others,"``github.com/Masterminds/squirrel``, ``github.com/caarlos0/env``, ``github.com/go-gorm/gorm``, ``github.com/go-xorm/xorm``, ``github.com/gobuffalo/envy``, ``github.com/gogf/gf/database/gdb``, ``github.com/hashicorp/go-envparse``, ``github.com/jinzhu/gorm``, ``github.com/jmoiron/sqlx``, ``github.com/joho/godotenv``, ``github.com/kelseyhightower/envconfig``, ``github.com/lann/squirrel``, ``github.com/raindog308/gorqlite``, ``github.com/rqlite/gorqlite``, ``github.com/uptrace/bun``, ``go.mongodb.org/mongo-driver/mongo``, ``gopkg.in/Masterminds/squirrel``, ``gorm.io/gorm``, ``xorm.io/xorm``",117,16,391 + Totals,,459,943,1532 diff --git a/javascript/extractor/src/com/semmle/js/extractor/HTMLExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/HTMLExtractor.java index bcc0e4b6af63..9e66e3232eb4 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/HTMLExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/HTMLExtractor.java @@ -186,7 +186,7 @@ private boolean isAngularTemplateAttributeName(String name) { /** Attribute names that look valid in HTML or in one of the template languages we support, like Vue and Angular. */ private static final Pattern VALID_ATTRIBUTE_NAME = - Pattern.compile("[*:@]?\\[?\\(?[\\w:_\\-.]+\\]?\\)?"); + Pattern.compile("[*:@]?\\[?\\(?[\\w:_\\-.]+\\)?\\]?"); /** List of HTML attributes whose value is interpreted as JavaScript. */ private static final Pattern JS_ATTRIBUTE = diff --git a/javascript/extractor/src/com/semmle/js/extractor/Main.java b/javascript/extractor/src/com/semmle/js/extractor/Main.java index 4b2575b47f31..b455a2c9e099 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/Main.java +++ b/javascript/extractor/src/com/semmle/js/extractor/Main.java @@ -41,7 +41,7 @@ public class Main { * A version identifier that should be updated every time the extractor changes in such a way that * it may produce different tuples for the same file under the same {@link ExtractorConfig}. */ - public static final String EXTRACTOR_VERSION = "2024-10-29"; + public static final String EXTRACTOR_VERSION = "2025-01-09"; public static final Pattern NEWLINE = Pattern.compile("\n"); diff --git a/javascript/ql/lib/semmle/javascript/DOM.qll b/javascript/ql/lib/semmle/javascript/DOM.qll index 3dbe734b0fb2..6c6d70fede87 100644 --- a/javascript/ql/lib/semmle/javascript/DOM.qll +++ b/javascript/ql/lib/semmle/javascript/DOM.qll @@ -388,23 +388,33 @@ module DOM { } } - /** - * Gets a reference to a DOM event. - */ - private DataFlow::SourceNode domEventSource() { - // e.g.
e.target}/> - exists(JsxAttribute attr | attr.getName().matches("on%") | - result = attr.getValue().flow().getABoundFunctionValue(0).getParameter(0) - ) - or - // node.addEventListener("submit", e => e.target) - result = domValueRef().getAMethodCall("addEventListener").getABoundCallbackParameter(1, 0) - or - // node.onSubmit = (e => e.target); - exists(DataFlow::PropWrite write | write = domValueRef().getAPropertyWrite() | - write.getPropertyName().matches("on%") and - result = write.getRhs().getAFunctionValue().getParameter(0) - ) + /** A data flow node that is a source of DOM events. */ + class DomEventSource extends DataFlow::Node instanceof DomEventSource::Range { } + + /** Companion module to the `DomEventSource` class. */ + module DomEventSource { + /** + * A data flow node that should be considered a source of DOM events. + */ + abstract class Range extends DataFlow::Node { } + + private class DefaultRange extends Range { + DefaultRange() { + // e.g. e.target}/> + exists(JsxAttribute attr | attr.getName().matches("on%") | + this = attr.getValue().flow().getABoundFunctionValue(0).getParameter(0) + ) + or + // node.addEventListener("submit", e => e.target) + this = domValueRef().getAMethodCall("addEventListener").getABoundCallbackParameter(1, 0) + or + // node.onSubmit = (e => e.target); + exists(DataFlow::PropWrite write | write = domValueRef().getAPropertyWrite() | + write.getPropertyName().matches("on%") and + this = write.getRhs().getAFunctionValue().getParameter(0) + ) + } + } } /** Gets a data flow node that refers directly to a value from the DOM. */ @@ -419,7 +429,7 @@ module DOM { result = domValueRef().getAMethodCall(["item", "namedItem"]) or t.startInProp("target") and - result = domEventSource() + result instanceof DomEventSource or t.startInProp(DataFlow::PseudoProperties::arrayElement()) and result = domElementCollection() diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Angular2.qll b/javascript/ql/lib/semmle/javascript/frameworks/Angular2.qll index 16430ff0475a..3ac3d947aced 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Angular2.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Angular2.qll @@ -554,4 +554,25 @@ module Angular2 { this = API::Node::ofType("@angular/core", "ElementRef").getMember("nativeElement").asSource() } } + + /** + * A source of DOM events originating from the `$event` variable in an event handler installed in an Angular template. + */ + private class DomEventSources extends DOM::DomEventSource::Range { + DomEventSources() { + exists(HTML::Element elm, string attributeName | + elm = any(ComponentClass cls).getATemplateElement() and + // Ignore instantiations of known element (mainly focus on native DOM elements) + not elm = any(ComponentClass cls).getATemplateInstantiation() and + not elm.getName().matches("ng-%") and + this = + elm.getAttributeByName(attributeName) + .getCodeInAttribute() + .(TemplateTopLevel) + .getAVariableUse("$event") and + attributeName.matches("(%)") and // event handler attribute + not attributeName.matches("(ng%)") // exclude NG events which aren't necessarily DOM events + ) + } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll index 95f027684564..865324ed8d5b 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll @@ -232,6 +232,15 @@ module XssThroughDom { ) } } + + /** + * An object containing input values from an Angular form, accessed through an `NgForm` object. + */ + class AngularFormSource extends Source { + AngularFormSource() { + this = API::Node::ofType("@angular/forms", "NgForm").getMember("value").asSource() + } + } } /** @@ -261,4 +270,16 @@ module XssThroughDom { this = getSelectionCall(DataFlow::TypeTracker::end()).getAMethodCall("toString") } } + + /** + * A source of DOM input originating from an Angular two-way data binding. + */ + private class AngularNgModelSource extends Source { + AngularNgModelSource() { + exists(Angular2::ComponentClass component, string fieldName | + fieldName = component.getATemplateElement().getAttributeByName("[(ngModel)]").getValue() and + this = component.getFieldInputNode(fieldName) + ) + } + } } diff --git a/javascript/ql/src/change-notes/2025-01-09-angular2-xss-through-dom.md b/javascript/ql/src/change-notes/2025-01-09-angular2-xss-through-dom.md new file mode 100644 index 000000000000..b88a3ca3de65 --- /dev/null +++ b/javascript/ql/src/change-notes/2025-01-09-angular2-xss-through-dom.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* The `js/xss-through-dom` query now recognises sources of DOM input originating from Angular templates. diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.expected b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.expected index 8341636994e4..90d4e925d21e 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.expected +++ b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.expected @@ -1,28 +1,29 @@ | tst-IncompleteHostnameRegExp.js:3:3:3:28 | ^http:\\/\\/test.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:3:2:3:29 | /^http: ... le.com/ | here | -| tst-IncompleteHostnameRegExp.js:5:3:5:28 | ^http:\\/\\/test.example.net | This regular expression has an unescaped '.' before 'example.net', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:5:2:5:29 | /^http: ... le.net/ | here | -| tst-IncompleteHostnameRegExp.js:6:3:6:42 | ^http:\\/\\/test.(example-a\|example-b).com | This regular expression has an unescaped '.' before '(example-a\|example-b).com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:6:2:6:43 | /^http: ... b).com/ | here | -| tst-IncompleteHostnameRegExp.js:7:3:7:30 | ^http:\\/\\/(.+).example.com\\/ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:7:2:7:31 | /^http: ... .com\\// | here | -| tst-IncompleteHostnameRegExp.js:7:3:7:30 | ^http:\\/\\/(.+).example.com\\/ | This regular expression has an unrestricted wildcard '.+' which may cause 'example.com' to be matched anywhere in the URL, outside the hostname. | tst-IncompleteHostnameRegExp.js:7:2:7:31 | /^http: ... .com\\// | here | -| tst-IncompleteHostnameRegExp.js:10:3:10:36 | ^http:\\/\\/test.example.com\\/(?:.*) | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:10:2:10:37 | /^http: ... (?:.*)/ | here | -| tst-IncompleteHostnameRegExp.js:11:14:11:37 | ^http://test.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:11:13:11:38 | "^http: ... le.com" | here | -| tst-IncompleteHostnameRegExp.js:12:15:12:38 | ^http://test.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:12:14:12:39 | "^http: ... le.com" | here | -| tst-IncompleteHostnameRegExp.js:15:23:15:46 | ^http://test.example.com | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:15:13:15:50 | id(id(i ... com"))) | here | -| tst-IncompleteHostnameRegExp.js:19:18:19:34 | ^test.example.com | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:20:13:20:26 | `${hostname}$` | here | -| tst-IncompleteHostnameRegExp.js:22:28:22:44 | test.example.com$ | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:23:13:23:27 | domain.hostname | here | -| tst-IncompleteHostnameRegExp.js:28:24:28:40 | test.example.com$ | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:26:21:26:35 | domain.hostname | here | -| tst-IncompleteHostnameRegExp.js:30:31:30:47 | test.example.com$ | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:32:21:32:35 | domain.hostname | here | -| tst-IncompleteHostnameRegExp.js:37:3:37:53 | ^(https?:)?\\/\\/((service\|www).)?example.com(?=$\|\\/) | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:37:2:37:54 | /^(http ... =$\|\\/)/ | here | -| tst-IncompleteHostnameRegExp.js:38:3:38:43 | ^(http\|https):\\/\\/www.example.com\\/p\\/f\\/ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:38:2:38:44 | /^(http ... p\\/f\\// | here | -| tst-IncompleteHostnameRegExp.js:39:5:39:30 | http:\\/\\/sub.example.com\\/ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:39:2:39:33 | /^(http ... om\\/)/g | here | -| tst-IncompleteHostnameRegExp.js:40:3:40:29 | ^https?:\\/\\/api.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:40:2:40:30 | /^https ... le.com/ | here | -| tst-IncompleteHostnameRegExp.js:41:42:41:48 | ^https?://.+\\.example\\.com/ | This regular expression has an unrestricted wildcard '.+' which may cause 'example\\.com/' to be matched anywhere in the URL, outside the hostname. | tst-IncompleteHostnameRegExp.js:41:13:41:71 | '^http: ... \\.com/' | here | -| tst-IncompleteHostnameRegExp.js:43:3:43:32 | ^https:\\/\\/[a-z]*.example.com$ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:43:2:43:33 | /^https ... e.com$/ | here | -| tst-IncompleteHostnameRegExp.js:44:32:44:45 | .+.example.net | This regular expression has an unescaped '.' before 'example.net', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:44:9:44:101 | '^proto ... ernal)' | here | -| tst-IncompleteHostnameRegExp.js:44:47:44:62 | .+.example-a.com | This regular expression has an unescaped '.' before 'example-a.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:44:9:44:101 | '^proto ... ernal)' | here | -| tst-IncompleteHostnameRegExp.js:44:64:44:79 | .+.example-b.com | This regular expression has an unescaped '.' before 'example-b.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:44:9:44:101 | '^proto ... ernal)' | here | -| tst-IncompleteHostnameRegExp.js:48:42:48:47 | ^https?://.+.example\\.com/ | This regular expression has an unescaped '.' before 'example\\.com/', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:48:13:48:69 | '^http: ... \\.com/' | here | -| tst-IncompleteHostnameRegExp.js:48:42:48:47 | ^https?://.+.example\\.com/ | This regular expression has an unrestricted wildcard '.+' which may cause 'example\\.com/' to be matched anywhere in the URL, outside the hostname. | tst-IncompleteHostnameRegExp.js:48:13:48:69 | '^http: ... \\.com/' | here | -| tst-IncompleteHostnameRegExp.js:53:14:53:35 | test.example.com$ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:53:13:53:36 | 'test.' ... e.com$' | here | -| tst-IncompleteHostnameRegExp.js:55:14:55:38 | ^http://test.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:55:13:55:39 | '^http: ... le.com' | here | -| tst-IncompleteHostnameRegExp.js:59:5:59:20 | foo.example\\.com | This regular expression has an unescaped '.' before 'example\\.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:59:2:59:32 | /^(foo. ... ever)$/ | here | -| tst-IncompleteHostnameRegExp.js:61:18:61:41 | ^http://test.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:61:17:61:42 | "^http: ... le.com" | here | +| tst-IncompleteHostnameRegExp.js:6:3:6:28 | ^http:\\/\\/test.example.net | This regular expression has an unescaped '.' before 'example.net', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:6:2:6:29 | /^http: ... le.net/ | here | +| tst-IncompleteHostnameRegExp.js:7:3:7:42 | ^http:\\/\\/test.(example-a\|example-b).com | This regular expression has an unescaped '.' before '(example-a\|example-b).com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:7:2:7:43 | /^http: ... b).com/ | here | +| tst-IncompleteHostnameRegExp.js:8:3:8:30 | ^http:\\/\\/(.+).example.com\\/ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:8:2:8:31 | /^http: ... .com\\// | here | +| tst-IncompleteHostnameRegExp.js:8:3:8:30 | ^http:\\/\\/(.+).example.com\\/ | This regular expression has an unrestricted wildcard '.+' which may cause 'example.com' to be matched anywhere in the URL, outside the hostname. | tst-IncompleteHostnameRegExp.js:8:2:8:31 | /^http: ... .com\\// | here | +| tst-IncompleteHostnameRegExp.js:10:3:10:39 | ^http:\\/\\/(?:.+)\\.test\\.example.com\\/ | This regular expression has an unrestricted wildcard '.+' which may cause 'example.com' to be matched anywhere in the URL, outside the hostname. | tst-IncompleteHostnameRegExp.js:10:2:10:40 | /^http: ... .com\\// | here | +| tst-IncompleteHostnameRegExp.js:11:3:11:36 | ^http:\\/\\/test.example.com\\/(?:.*) | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:11:2:11:37 | /^http: ... (?:.*)/ | here | +| tst-IncompleteHostnameRegExp.js:12:14:12:37 | ^http://test.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:12:13:12:38 | "^http: ... le.com" | here | +| tst-IncompleteHostnameRegExp.js:13:15:13:38 | ^http://test.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:13:14:13:39 | "^http: ... le.com" | here | +| tst-IncompleteHostnameRegExp.js:16:23:16:46 | ^http://test.example.com | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:16:13:16:50 | id(id(i ... com"))) | here | +| tst-IncompleteHostnameRegExp.js:20:18:20:34 | ^test.example.com | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:21:13:21:26 | `${hostname}$` | here | +| tst-IncompleteHostnameRegExp.js:23:28:23:44 | test.example.com$ | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:24:13:24:27 | domain.hostname | here | +| tst-IncompleteHostnameRegExp.js:29:24:29:40 | test.example.com$ | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:27:21:27:35 | domain.hostname | here | +| tst-IncompleteHostnameRegExp.js:31:31:31:47 | test.example.com$ | This string, which is used as a regular expression $@, has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:33:21:33:35 | domain.hostname | here | +| tst-IncompleteHostnameRegExp.js:38:3:38:53 | ^(https?:)?\\/\\/((service\|www).)?example.com(?=$\|\\/) | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:38:2:38:54 | /^(http ... =$\|\\/)/ | here | +| tst-IncompleteHostnameRegExp.js:39:3:39:43 | ^(http\|https):\\/\\/www.example.com\\/p\\/f\\/ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:39:2:39:44 | /^(http ... p\\/f\\// | here | +| tst-IncompleteHostnameRegExp.js:40:5:40:30 | http:\\/\\/sub.example.com\\/ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:40:2:40:33 | /^(http ... om\\/)/g | here | +| tst-IncompleteHostnameRegExp.js:41:3:41:29 | ^https?:\\/\\/api.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:41:2:41:30 | /^https ... le.com/ | here | +| tst-IncompleteHostnameRegExp.js:42:42:42:48 | ^https?://.+\\.example\\.com/ | This regular expression has an unrestricted wildcard '.+' which may cause 'example\\.com/' to be matched anywhere in the URL, outside the hostname. | tst-IncompleteHostnameRegExp.js:42:13:42:71 | '^http: ... \\.com/' | here | +| tst-IncompleteHostnameRegExp.js:44:3:44:32 | ^https:\\/\\/[a-z]*.example.com$ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:44:2:44:33 | /^https ... e.com$/ | here | +| tst-IncompleteHostnameRegExp.js:45:32:45:45 | .+.example.net | This regular expression has an unescaped '.' before 'example.net', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:45:9:45:101 | '^proto ... ernal)' | here | +| tst-IncompleteHostnameRegExp.js:45:47:45:62 | .+.example-a.com | This regular expression has an unescaped '.' before 'example-a.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:45:9:45:101 | '^proto ... ernal)' | here | +| tst-IncompleteHostnameRegExp.js:45:64:45:79 | .+.example-b.com | This regular expression has an unescaped '.' before 'example-b.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:45:9:45:101 | '^proto ... ernal)' | here | +| tst-IncompleteHostnameRegExp.js:49:42:49:47 | ^https?://.+.example\\.com/ | This regular expression has an unescaped '.' before 'example\\.com/', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:49:13:49:69 | '^http: ... \\.com/' | here | +| tst-IncompleteHostnameRegExp.js:49:42:49:47 | ^https?://.+.example\\.com/ | This regular expression has an unrestricted wildcard '.+' which may cause 'example\\.com/' to be matched anywhere in the URL, outside the hostname. | tst-IncompleteHostnameRegExp.js:49:13:49:69 | '^http: ... \\.com/' | here | +| tst-IncompleteHostnameRegExp.js:54:14:54:35 | test.example.com$ | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:54:13:54:36 | 'test.' ... e.com$' | here | +| tst-IncompleteHostnameRegExp.js:56:14:56:38 | ^http://test.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:56:13:56:39 | '^http: ... le.com' | here | +| tst-IncompleteHostnameRegExp.js:60:5:60:20 | foo.example\\.com | This regular expression has an unescaped '.' before 'example\\.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:60:2:60:32 | /^(foo. ... ever)$/ | here | +| tst-IncompleteHostnameRegExp.js:62:18:62:41 | ^http://test.example.com | This regular expression has an unescaped '.' before 'example.com', so it might match more hosts than expected. | tst-IncompleteHostnameRegExp.js:62:17:62:42 | "^http: ... le.com" | here | diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.qlref b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.qlref index e818d9472521..d1afa3858252 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.qlref +++ b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.qlref @@ -1 +1,2 @@ -Security/CWE-020/IncompleteHostnameRegExp.ql \ No newline at end of file +query: Security/CWE-020/IncompleteHostnameRegExp.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/tst-IncompleteHostnameRegExp.js b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/tst-IncompleteHostnameRegExp.js index 51c2c9914209..320175ab1d42 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/tst-IncompleteHostnameRegExp.js +++ b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/tst-IncompleteHostnameRegExp.js @@ -1,62 +1,63 @@ (function() { - /^http:\/\/example.com/; // OK - /^http:\/\/test.example.com/; // NOT OK - /^http:\/\/test\\.example.com/; // OK - /^http:\/\/test.example.net/; // NOT OK - /^http:\/\/test.(example-a|example-b).com/; // NOT OK - /^http:\/\/(.+).example.com\//; // NOT OK - /^http:\/\/(\\.+)\\.example.com/; // OK - /^http:\/\/(?:.+)\\.test\\.example.com\//; // NOT OK - /^http:\/\/test.example.com\/(?:.*)/; // OK - new RegExp("^http://test.example.com"); // NOT OK - if (s.match("^http://test.example.com")) {} // NOT OK + /^http:\/\/example.com/; + /^http:\/\/test.example.com/; // $ Alert + /^http:\/\/test\.example.com/; // OK - escaped dot + /^http:\/\/test\\.example.com/; // OK - contains actual backslash, so not really a hostname + /^http:\/\/test.example.net/; // $ Alert + /^http:\/\/test.(example-a|example-b).com/; // $ Alert + /^http:\/\/(.+).example.com\//; // $ Alert + /^http:\/\/(\.+)\.example.com/; + /^http:\/\/(?:.+)\.test\.example.com\//; // $ Alert + /^http:\/\/test.example.com\/(?:.*)/; // $ Alert + new RegExp("^http://test.example.com"); // $ Alert + if (s.match("^http://test.example.com")) {} // $ Alert function id(e) { return e; } - new RegExp(id(id(id("^http://test.example.com")))); // NOT OK + new RegExp(id(id(id("^http://test.example.com")))); // $ Alert - new RegExp(`test.example.com$`); // NOT OK + new RegExp(`test.example.com$`); // $ MISSING: Alert - let hostname = '^test.example.com'; // NOT OK + let hostname = '^test.example.com'; // $ Alert new RegExp(`${hostname}$`); - let domain = { hostname: 'test.example.com$' }; // NOT OK + let domain = { hostname: 'test.example.com$' }; // $ Alert new RegExp(domain.hostname); function convert1(domain) { return new RegExp(domain.hostname); } - convert1({ hostname: 'test.example.com$' }); // NOT OK + convert1({ hostname: 'test.example.com$' }); // $ Alert - let domains = [ { hostname: 'test.example.com$' } ]; // NOT OK + let domains = [ { hostname: 'test.example.com$' } ]; // $ Alert function convert2(domain) { return new RegExp(domain.hostname); } domains.map(d => convert2(d)); - /^(.+\.(?:example-a|example-b)\.com)\//; // NOT OK - /^(https?:)?\/\/((service|www).)?example.com(?=$|\/)/; // NOT OK - /^(http|https):\/\/www.example.com\/p\/f\//; // NOT OK - /^(http:\/\/sub.example.com\/)/g; // NOT OK - /^https?:\/\/api.example.com/; // NOT OK - new RegExp('^http://localhost:8000|' + '^https?://.+\\.example\\.com/'); // NOT OK - new RegExp('^http[s]?:\/\/?sub1\\.sub2\\.example\\.com\/f\/(.+)'); // NOT OK - /^https:\/\/[a-z]*.example.com$/; // NOT OK - RegExp('^protos?://(localhost|.+.example.net|.+.example-a.com|.+.example-b.com|.+.example.internal)'); // NOT OK + /^(.+\.(?:example-a|example-b)\.com)\//; // $ MISSING: Alert + /^(https?:)?\/\/((service|www).)?example.com(?=$|\/)/; // $ Alert + /^(http|https):\/\/www.example.com\/p\/f\//; // $ Alert + /^(http:\/\/sub.example.com\/)/g; // $ Alert + /^https?:\/\/api.example.com/; // $ Alert + new RegExp('^http://localhost:8000|' + '^https?://.+\\.example\\.com/'); // $ Alert + new RegExp('^http[s]?:\/\/?sub1\\.sub2\\.example\\.com\/f\/(.+)'); + /^https:\/\/[a-z]*.example.com$/; // $ Alert + RegExp('^protos?://(localhost|.+.example.net|.+.example-a.com|.+.example-b.com|.+.example.internal)'); // $ Alert /^(example.dev|example.com)/; // OK - new RegExp('^http://localhost:8000|' + '^https?://.+.example\\.com/'); // NOT OK + new RegExp('^http://localhost:8000|' + '^https?://.+.example\\.com/'); // $ Alert var primary = 'example.com$'; - new RegExp('test.' + primary); // NOT OK, but not detected + new RegExp('test.' + primary); // $ MISSING: Alert - new RegExp('test.' + 'example.com$'); // NOT OK + new RegExp('test.' + 'example.com$'); // $ Alert - new RegExp('^http://test\.example.com'); // NOT OK + new RegExp('^http://test\.example.com'); // $ Alert /^http:\/\/(..|...)\.example\.com\/index\.html/; // OK, wildcards are intentional /^http:\/\/.\.example\.com\/index\.html/; // OK, the wildcard is intentional - /^(foo.example\.com|whatever)$/; // kinda OK - one disjunction doesn't even look like a hostname + /^(foo.example\.com|whatever)$/; // $ Alert (but kinda OK - one disjunction doesn't even look like a hostname) - if (s.matchAll("^http://test.example.com")) {} // NOT OK + if (s.matchAll("^http://test.example.com")) {} // $ Alert }); diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.expected b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.expected index 5f563bfcd8f5..92b5410f2c83 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.expected +++ b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.expected @@ -11,5 +11,5 @@ | IncompleteUrlSchemeCheck.js:87:7:87:40 | /^(java ... scheme) | This check does not consider vbscript:. | | IncompleteUrlSchemeCheck.js:94:10:94:15 | scheme | This check does not consider vbscript:. | | IncompleteUrlSchemeCheck.js:104:6:104:39 | /^(java ... scheme) | This check does not consider vbscript:. | -| IncompleteUrlSchemeCheck.js:110:12:112:29 | url // ... :/, "") | This check does not consider vbscript:. | +| IncompleteUrlSchemeCheck.js:110:12:112:29 | url\\n ... :/, "") | This check does not consider vbscript:. | | IncompleteUrlSchemeCheck.js:124:11:124:34 | url.rep ... :/, "") | This check does not consider vbscript:. | diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.js b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.js index 197e45e7b5dd..a4c6ed190f8f 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.js +++ b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.js @@ -2,7 +2,7 @@ import * as dummy from 'dummy'; function sanitizeUrl(url) { let u = decodeURI(url).trim().toLowerCase(); - if (u.startsWith("javascript:")) // NOT OK + if (u.startsWith("javascript:")) // $ Alert return "about:blank"; return url; } @@ -13,28 +13,28 @@ let badProtocolsGood = ['javascript:', 'data:', 'vbscript:']; function test2(url) { let protocol = new URL(url).protocol; - if (badProtocols.includes(protocol)) // NOT OK + if (badProtocols.includes(protocol)) // $ Alert return "about:blank"; return url; } function test3(url) { let scheme = goog.uri.utils.getScheme(url); - if (badProtocolNoColon.includes(scheme)) // NOT OK + if (badProtocolNoColon.includes(scheme)) // $ Alert return "about:blank"; return url; } function test4(url) { let scheme = url.split(':')[0]; - if (badProtocolNoColon.includes(scheme)) // NOT OK + if (badProtocolNoColon.includes(scheme)) // $ Alert return "about:blank"; return url; } function test5(url) { let scheme = url.split(':')[0]; - if (scheme === "javascript") // NOT OK + if (scheme === "javascript") // $ Alert return "about:blank"; return url; } @@ -48,35 +48,35 @@ function test6(url) { function test7(url) { let scheme = url.split(/:/)[0]; - if (scheme === "javascript") // NOT OK + if (scheme === "javascript") // $ Alert return "about:blank"; return url; } function test8(url) { let scheme = goog.uri.utils.getScheme(url); - if ("javascript|data".split("|").indexOf(scheme) !== -1) // NOT OK + if ("javascript|data".split("|").indexOf(scheme) !== -1) // $ Alert return "about:blank"; return url; } function test9(url) { let scheme = goog.uri.utils.getScheme(url); - if ("javascript" === scheme || "data" === scheme) // NOT OK + if ("javascript" === scheme || "data" === scheme) // $ Alert return "about:blank"; return url; } function test10(url) { let scheme = goog.uri.utils.getScheme(url); - if (/^(javascript|data)$/.exec(scheme) !== null) // NOT OK + if (/^(javascript|data)$/.exec(scheme) !== null) // $ Alert return "about:blank"; return url; } function test11(url) { let scheme = goog.uri.utils.getScheme(url); - if (/^(javascript|data)$/.exec(scheme) === null) // NOT OK + if (/^(javascript|data)$/.exec(scheme) === null) // $ Alert return url; return "about:blank"; } @@ -84,15 +84,15 @@ function test11(url) { function test12(url) { let scheme = goog.uri.utils.getScheme(url); - if (!/^(javascript|data)$/.exec(scheme)) // NOT OK + if (!/^(javascript|data)$/.exec(scheme)) // $ Alert return url; return "about:blank"; } function test13(url) { let scheme = goog.uri.utils.getScheme(url); - switch (scheme) { - case "javascript": // NOT OK + switch (scheme) { // $ Alert + case "javascript": case "data": return "about:blank"; default: @@ -101,15 +101,15 @@ function test13(url) { } function test14(url) { let scheme = goog.uri.utils.getScheme(url); - if (/^(javascript|data)$/.exec(scheme)) // NOT OK + if (/^(javascript|data)$/.exec(scheme)) // $ Alert return "about:blank"; return url; } function chain1(url) { - return url // NOT OK + return url .replace(/javascript:/, "") - .replace(/data:/, ""); + .replace(/data:/, ""); // $ Alert } function chain2(url) { @@ -121,10 +121,10 @@ function chain2(url) { function chain3(url) { url = url.replace(/javascript:/, "") - url = url.replace(/data:/, ""); // NOT OK + url = url.replace(/data:/, ""); // $ Alert return url; } function chain4(url) { - return url.replace(/(javascript|data):/, ""); // NOT OK - but not flagged [INCONSISTENCY] -} \ No newline at end of file + return url.replace(/(javascript|data):/, ""); // $ MISSING: Alert +} diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.qlref b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.qlref index 99a744188b50..0c088087e994 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.qlref +++ b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.qlref @@ -1 +1,2 @@ -Security/CWE-020/IncompleteUrlSchemeCheck.ql \ No newline at end of file +query: Security/CWE-020/IncompleteUrlSchemeCheck.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/IncompleteUrlSubstringSanitization.qlref b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/IncompleteUrlSubstringSanitization.qlref index 3fa6794419d7..1c4c23821534 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/IncompleteUrlSubstringSanitization.qlref +++ b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/IncompleteUrlSubstringSanitization.qlref @@ -1 +1,2 @@ -Security/CWE-020/IncompleteUrlSubstringSanitization.ql \ No newline at end of file +query: Security/CWE-020/IncompleteUrlSubstringSanitization.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/tst-IncompleteUrlSubstringSanitization.js b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/tst-IncompleteUrlSubstringSanitization.js index efbaaff19865..f719a0835a6d 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/tst-IncompleteUrlSubstringSanitization.js +++ b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/tst-IncompleteUrlSubstringSanitization.js @@ -1,76 +1,76 @@ (function(x){ - x.indexOf("internal") !== -1; // NOT OK, but not flagged - x.indexOf("localhost") !== -1; // NOT OK, but not flagged - x.indexOf("secure.com") !== -1; // NOT OK - x.indexOf("secure.net") !== -1; // NOT OK - x.indexOf(".secure.com") !== -1; // NOT OK - x.indexOf("sub.secure.") !== -1; // NOT OK, but not flagged - x.indexOf(".sub.secure.") !== -1; // NOT OK, but not flagged + x.indexOf("internal") !== -1; // $ MISSING: Alert + x.indexOf("localhost") !== -1; // $ MISSING: Alert + x.indexOf("secure.com") !== -1; // $ Alert + x.indexOf("secure.net") !== -1; // $ Alert + x.indexOf(".secure.com") !== -1; // $ Alert + x.indexOf("sub.secure.") !== -1; // $ MISSING: Alert + x.indexOf(".sub.secure.") !== -1; // $ MISSING: Alert - x.indexOf("secure.com") === -1; // NOT OK - x.indexOf("secure.com") === 0; // NOT OK - x.indexOf("secure.com") >= 0; // NOT OK + x.indexOf("secure.com") === -1; // $ Alert + x.indexOf("secure.com") === 0; // $ Alert + x.indexOf("secure.com") >= 0; // $ Alert - x.startsWith("https://secure.com"); // NOT OK - x.endsWith("secure.com"); // NOT OK - x.endsWith(".secure.com"); // OK - x.startsWith("secure.com/"); // OK - x.indexOf("secure.com/") === 0; // OK + x.startsWith("https://secure.com"); // $ Alert + x.endsWith("secure.com"); // $ Alert + x.endsWith(".secure.com"); + x.startsWith("secure.com/"); + x.indexOf("secure.com/") === 0; - x.includes("secure.com"); // NOT OK + x.includes("secure.com"); // $ Alert - x.indexOf("#") !== -1; // OK - x.indexOf(":") !== -1; // OK - x.indexOf(":/") !== -1; // OK - x.indexOf("://") !== -1; // OK - x.indexOf("//") !== -1; // OK - x.indexOf(":443") !== -1; // OK - x.indexOf("/some/path/") !== -1; // OK - x.indexOf("some/path") !== -1; // OK - x.indexOf("/index.html") !== -1; // OK - x.indexOf(":template:") !== -1; // OK - x.indexOf("https://secure.com") !== -1; // NOT OK - x.indexOf("https://secure.com:443") !== -1; // NOT OK - x.indexOf("https://secure.com/") !== -1; // NOT OK + x.indexOf("#") !== -1; + x.indexOf(":") !== -1; + x.indexOf(":/") !== -1; + x.indexOf("://") !== -1; + x.indexOf("//") !== -1; + x.indexOf(":443") !== -1; + x.indexOf("/some/path/") !== -1; + x.indexOf("some/path") !== -1; + x.indexOf("/index.html") !== -1; + x.indexOf(":template:") !== -1; + x.indexOf("https://secure.com") !== -1; // $ Alert + x.indexOf("https://secure.com:443") !== -1; // $ Alert + x.indexOf("https://secure.com/") !== -1; // $ Alert - x.indexOf(".cn") !== -1; // NOT OK, but not flagged - x.indexOf(".jpg") !== -1; // OK - x.indexOf("index.html") !== -1; // OK - x.indexOf("index.js") !== -1; // OK - x.indexOf("index.php") !== -1; // OK - x.indexOf("index.css") !== -1; // OK + x.indexOf(".cn") !== -1; // $ MISSING: Alert + x.indexOf(".jpg") !== -1; + x.indexOf("index.html") !== -1; + x.indexOf("index.js") !== -1; + x.indexOf("index.php") !== -1; + x.indexOf("index.css") !== -1; x.indexOf("secure=true") !== -1; // OK (query param) x.indexOf("&auth=") !== -1; // OK (query param) - x.indexOf(getCurrentDomain()) !== -1; // NOT OK, but not flagged - x.indexOf(location.origin) !== -1; // NOT OK, but not flagged + x.indexOf(getCurrentDomain()) !== -1; // $ MISSING: Alert + x.indexOf(location.origin) !== -1; // $ MISSING: Alert - x.indexOf("tar.gz") + offset; // OK - x.indexOf("tar.gz") - offset; // OK + x.indexOf("tar.gz") + offset; + x.indexOf("tar.gz") - offset; - x.indexOf("https://example.internal") !== -1; // NOT OK - x.indexOf("https://") !== -1; // OK + x.indexOf("https://example.internal") !== -1; // $ Alert + x.indexOf("https://") !== -1; - x.startsWith("https://example.internal"); // NOT OK - x.indexOf('https://example.internal.org') !== 0; // NOT OK - x.indexOf('https://example.internal.org') === 0; // NOT OK - x.endsWith("internal.com"); // NOT OK - x.startsWith("https://example.internal:80"); // OK + x.startsWith("https://example.internal"); // $ Alert + x.indexOf('https://example.internal.org') !== 0; // $ Alert + x.indexOf('https://example.internal.org') === 0; // $ Alert + x.endsWith("internal.com"); // $ Alert + x.startsWith("https://example.internal:80"); - x.indexOf("secure.com") !== -1; // NOT OK - x.indexOf("secure.com") === -1; // OK - !(x.indexOf("secure.com") !== -1); // OK - !x.includes("secure.com"); // OK + x.indexOf("secure.com") !== -1; // $ Alert + x.indexOf("secure.com") === -1; // $ Alert + !(x.indexOf("secure.com") !== -1); // $ Alert + !x.includes("secure.com"); // $ Alert - if(!x.includes("secure.com")) { // NOT OK + if(!x.includes("secure.com")) { // $ Alert } else { doSomeThingWithTrustedURL(x); } - + x.startsWith("https://secure.com/foo/bar"); // OK - a forward slash after the domain makes prefix checks safe. - x.indexOf("https://secure.com/foo/bar") >= 0 // NOT OK - the url can be anywhere in the string. - x.indexOf("https://secure.com") >= 0 // NOT OK - x.indexOf("https://secure.com/foo/bar-baz") >= 0 // NOT OK - the url can be anywhere in the string. + x.indexOf("https://secure.com/foo/bar") >= 0 // $ Alert - the url can be anywhere in the string. + x.indexOf("https://secure.com") >= 0 // $ Alert + x.indexOf("https://secure.com/foo/bar-baz") >= 0 // $ Alert - the url can be anywhere in the string. }); diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected index 5880071e4e0f..1b53311a3d69 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected @@ -1,4 +1,6 @@ edges +| angular.ts:12:5:12:23 | field: string = ""; | angular.ts:33:24:33:33 | this.field | provenance | | +| angular.ts:29:24:29:33 | form.value | angular.ts:29:24:29:37 | form.value.foo | provenance | | | forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values | provenance | | | forms.js:9:31:9:36 | values | forms.js:9:31:9:40 | values.foo | provenance | | | forms.js:11:24:11:29 | values | forms.js:12:31:12:36 | values | provenance | | @@ -42,6 +44,12 @@ edges | xss-through-dom.js:154:25:154:27 | msg | xss-through-dom.js:155:27:155:29 | msg | provenance | | | xss-through-dom.js:159:34:159:52 | $("textarea").val() | xss-through-dom.js:154:25:154:27 | msg | provenance | | nodes +| angular.ts:12:5:12:23 | field: string = ""; | semmle.label | field: string = ""; | +| angular.ts:16:24:16:41 | event.target.value | semmle.label | event.target.value | +| angular.ts:20:24:20:35 | target.value | semmle.label | target.value | +| angular.ts:29:24:29:33 | form.value | semmle.label | form.value | +| angular.ts:29:24:29:37 | form.value.foo | semmle.label | form.value.foo | +| angular.ts:33:24:33:33 | this.field | semmle.label | this.field | | forms.js:8:23:8:28 | values | semmle.label | values | | forms.js:9:31:9:36 | values | semmle.label | values | | forms.js:9:31:9:40 | values.foo | semmle.label | values.foo | @@ -124,6 +132,10 @@ nodes | xss-through-dom.js:159:34:159:52 | $("textarea").val() | semmle.label | $("textarea").val() | subpaths #select +| angular.ts:16:24:16:41 | event.target.value | angular.ts:16:24:16:41 | event.target.value | angular.ts:16:24:16:41 | event.target.value | $@ is reinterpreted as HTML without escaping meta-characters. | angular.ts:16:24:16:41 | event.target.value | DOM text | +| angular.ts:20:24:20:35 | target.value | angular.ts:20:24:20:35 | target.value | angular.ts:20:24:20:35 | target.value | $@ is reinterpreted as HTML without escaping meta-characters. | angular.ts:20:24:20:35 | target.value | DOM text | +| angular.ts:29:24:29:37 | form.value.foo | angular.ts:29:24:29:33 | form.value | angular.ts:29:24:29:37 | form.value.foo | $@ is reinterpreted as HTML without escaping meta-characters. | angular.ts:29:24:29:33 | form.value | DOM text | +| angular.ts:33:24:33:33 | this.field | angular.ts:12:5:12:23 | field: string = ""; | angular.ts:33:24:33:33 | this.field | $@ is reinterpreted as HTML without escaping meta-characters. | angular.ts:12:5:12:23 | field: string = ""; | DOM text | | forms.js:9:31:9:40 | values.foo | forms.js:8:23:8:28 | values | forms.js:9:31:9:40 | values.foo | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:8:23:8:28 | values | DOM text | | forms.js:12:31:12:40 | values.bar | forms.js:11:24:11:29 | values | forms.js:12:31:12:40 | values.bar | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:11:24:11:29 | values | DOM text | | forms.js:25:23:25:34 | values.email | forms.js:24:15:24:20 | values | forms.js:25:23:25:34 | values.email | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:24:15:24:20 | values | DOM text | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/angular.ts b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/angular.ts new file mode 100644 index 000000000000..15207cb5059c --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/angular.ts @@ -0,0 +1,36 @@ +import { Component } from "@angular/core"; +import { NgForm } from "@angular/forms"; + +@Component({ + template: ` + + + + ` +}) +export class Foo { + field: string = ""; + safeField: string = ""; + + setInput1(event) { + document.write(event.target.value); // NOT OK + } + + setInput2(target) { + document.write(target.value); // NOT OK + } + + setOtherInput(e) { + document.write(e.target.value); // OK + document.write(e.value); // OK + } + + blah(form: NgForm) { + document.write(form.value.foo); // NOT OK + } + + useField() { + document.write(this.field); // NOT OK + document.write(this.safeField); // OK + } +} diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel index 92b287c801cf..de5a5384509d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel @@ -283,6 +283,12 @@ alias( tags = ["manual"], ) +alias( + name = "toml", + actual = "@vendor__toml-0.8.19//:toml", + tags = ["manual"], +) + alias( name = "tracing", actual = "@vendor__tracing-0.1.41//:tracing", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.8.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.8.bazel new file mode 100644 index 000000000000..637213b7916d --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.8.bazel @@ -0,0 +1,87 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "serde_spanned", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "serde", + ], + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=serde_spanned", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.6.8", + deps = [ + "@vendor__serde-1.0.217//:serde", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.19.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.19.bazel new file mode 100644 index 000000000000..dad1d24c6226 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.19.bazel @@ -0,0 +1,92 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "toml", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "default", + "display", + "parse", + ], + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=toml", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.8.19", + deps = [ + "@vendor__serde-1.0.217//:serde", + "@vendor__serde_spanned-0.6.8//:serde_spanned", + "@vendor__toml_datetime-0.6.8//:toml_datetime", + "@vendor__toml_edit-0.22.22//:toml_edit", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.8.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.8.bazel new file mode 100644 index 000000000000..f703efd62d84 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.8.bazel @@ -0,0 +1,87 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "toml_datetime", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "serde", + ], + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=toml_datetime", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.6.8", + deps = [ + "@vendor__serde-1.0.217//:serde", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.22.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.22.bazel new file mode 100644 index 000000000000..b2cb3e6f5919 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.22.bazel @@ -0,0 +1,93 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "toml_edit", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "display", + "parse", + "serde", + ], + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=toml_edit", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.22.22", + deps = [ + "@vendor__indexmap-2.7.0//:indexmap", + "@vendor__serde-1.0.217//:serde", + "@vendor__serde_spanned-0.6.8//:serde_spanned", + "@vendor__toml_datetime-0.6.8//:toml_datetime", + "@vendor__winnow-0.6.24//:winnow", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.6.24.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.6.24.bazel new file mode 100644 index 000000000000..282e6bc20571 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.6.24.bazel @@ -0,0 +1,86 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "winnow", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "alloc", + "default", + "std", + ], + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=winnow", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.6.24", +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl index 74874b1b5ab6..a4be23b9edad 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl @@ -353,6 +353,7 @@ _NORMAL_DEPENDENCIES = { "serde_json": Label("@vendor__serde_json-1.0.135//:serde_json"), "serde_with": Label("@vendor__serde_with-3.12.0//:serde_with"), "stderrlog": Label("@vendor__stderrlog-0.6.0//:stderrlog"), + "toml": Label("@vendor__toml-0.8.19//:toml"), "triomphe": Label("@vendor__triomphe-0.1.14//:triomphe"), }, }, @@ -2599,6 +2600,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde_json-1.0.135.bazel"), ) + maybe( + http_archive, + name = "vendor__serde_spanned-0.6.8", + sha256 = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1", + type = "tar.gz", + urls = ["https://static.crates.io/crates/serde_spanned/0.6.8/download"], + strip_prefix = "serde_spanned-0.6.8", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde_spanned-0.6.8.bazel"), + ) + maybe( http_archive, name = "vendor__serde_with-3.12.0", @@ -2819,6 +2830,36 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.time-macros-0.2.19.bazel"), ) + maybe( + http_archive, + name = "vendor__toml-0.8.19", + sha256 = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e", + type = "tar.gz", + urls = ["https://static.crates.io/crates/toml/0.8.19/download"], + strip_prefix = "toml-0.8.19", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.toml-0.8.19.bazel"), + ) + + maybe( + http_archive, + name = "vendor__toml_datetime-0.6.8", + sha256 = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41", + type = "tar.gz", + urls = ["https://static.crates.io/crates/toml_datetime/0.6.8/download"], + strip_prefix = "toml_datetime-0.6.8", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.toml_datetime-0.6.8.bazel"), + ) + + maybe( + http_archive, + name = "vendor__toml_edit-0.22.22", + sha256 = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5", + type = "tar.gz", + urls = ["https://static.crates.io/crates/toml_edit/0.22.22/download"], + strip_prefix = "toml_edit-0.22.22", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.toml_edit-0.22.22.bazel"), + ) + maybe( http_archive, name = "vendor__tracing-0.1.41", @@ -3359,6 +3400,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows_x86_64_msvc-0.52.6.bazel"), ) + maybe( + http_archive, + name = "vendor__winnow-0.6.24", + sha256 = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a", + type = "tar.gz", + urls = ["https://static.crates.io/crates/winnow/0.6.24/download"], + strip_prefix = "winnow-0.6.24", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winnow-0.6.24.bazel"), + ) + maybe( http_archive, name = "vendor__yansi-1.0.1", @@ -3431,6 +3482,7 @@ def crate_repositories(): struct(repo = "vendor__serde_with-3.12.0", is_dev_dep = False), struct(repo = "vendor__stderrlog-0.6.0", is_dev_dep = False), struct(repo = "vendor__syn-2.0.96", is_dev_dep = False), + struct(repo = "vendor__toml-0.8.19", is_dev_dep = False), struct(repo = "vendor__tracing-0.1.41", is_dev_dep = False), struct(repo = "vendor__tracing-subscriber-0.3.19", is_dev_dep = False), struct(repo = "vendor__tree-sitter-0.24.6", is_dev_dep = False), diff --git a/python/ql/test/query-tests/Functions/return_values/ConsistentReturns.expected b/python/ql/test/query-tests/Functions/return_values/ConsistentReturns.expected index 62289acfe3fb..1bb6a25860be 100644 --- a/python/ql/test/query-tests/Functions/return_values/ConsistentReturns.expected +++ b/python/ql/test/query-tests/Functions/return_values/ConsistentReturns.expected @@ -1,3 +1,4 @@ | functions_test.py:18:1:18:11 | Function cr1 | Mixing implicit and explicit returns may indicate an error as implicit returns always return None. | | functions_test.py:22:1:22:11 | Function cr2 | Mixing implicit and explicit returns may indicate an error as implicit returns always return None. | | functions_test.py:336:1:336:16 | Function ok_match | Mixing implicit and explicit returns may indicate an error as implicit returns always return None. | +| functions_test.py:344:1:344:17 | Function ok_match2 | Mixing implicit and explicit returns may indicate an error as implicit returns always return None. | diff --git a/python/ql/test/query-tests/Functions/return_values/functions_test.py b/python/ql/test/query-tests/Functions/return_values/functions_test.py index 409cbb30fd97..24b1943feeb5 100644 --- a/python/ql/test/query-tests/Functions/return_values/functions_test.py +++ b/python/ql/test/query-tests/Functions/return_values/functions_test.py @@ -339,3 +339,11 @@ def ok_match(x): # FP return 0 case _: raise ValueError(x) + + +def ok_match2(x): # FP + match x: + case None: + return 0 + case _: + return 1 diff --git a/python/ql/test/query-tests/Statements/unreachable/UnreachableCode.expected b/python/ql/test/query-tests/Statements/unreachable/UnreachableCode.expected index 2417041f472d..f5e74fab8d49 100644 --- a/python/ql/test/query-tests/Statements/unreachable/UnreachableCode.expected +++ b/python/ql/test/query-tests/Statements/unreachable/UnreachableCode.expected @@ -4,3 +4,6 @@ | test.py:21:5:21:38 | For | This statement is unreachable. | | test.py:28:9:28:21 | ExprStmt | This statement is unreachable. | | test.py:84:5:84:21 | ExceptStmt | This statement is unreachable. | +| test.py:158:9:159:16 | Case | This statement is unreachable. | +| test.py:162:13:162:16 | Pass | This statement is unreachable. | +| test.py:167:13:167:16 | Pass | This statement is unreachable. | diff --git a/python/ql/test/query-tests/Statements/unreachable/test.py b/python/ql/test/query-tests/Statements/unreachable/test.py index a58f4172b1b3..71f277988956 100755 --- a/python/ql/test/query-tests/Statements/unreachable/test.py +++ b/python/ql/test/query-tests/Statements/unreachable/test.py @@ -141,8 +141,29 @@ def unreachable_catch_all_raise(x): def ok_match(x): match x: case False: - pass # FP + pass case True: pass + case _: + pass + + match x: + case "true": + pass + case _: + pass + match x: + case 42: + pass case _: # FP pass + match x: + case None: + pass # FP + case _: + pass + match x: + case 0.0: + pass # FP + case _: + pass diff --git a/rust/extractor/Cargo.toml b/rust/extractor/Cargo.toml index cc99db538bb9..310ffefb7784 100644 --- a/rust/extractor/Cargo.toml +++ b/rust/extractor/Cargo.toml @@ -36,3 +36,4 @@ glob = "0.3.2" chrono = { version = "0.4.39", features = ["serde"] } serde_json = "1.0.135" dunce = "1.0.5" +toml = "0.8.19" diff --git a/rust/extractor/src/diagnostics.rs b/rust/extractor/src/diagnostics.rs index 92743a923d4a..0e202e95bbd0 100644 --- a/rust/extractor/src/diagnostics.rs +++ b/rust/extractor/src/diagnostics.rs @@ -79,6 +79,7 @@ pub struct Diagnostics { pub enum ExtractionStepKind { #[default] LoadManifest, + FindManifests, LoadSource, Parse, Extract, @@ -88,12 +89,12 @@ pub enum ExtractionStepKind { #[serde(rename_all = "camelCase")] pub struct ExtractionStep { pub action: ExtractionStepKind, - pub file: PathBuf, + pub file: Option, pub ms: u128, } impl ExtractionStep { - fn new(start: Instant, action: ExtractionStepKind, file: PathBuf) -> Self { + fn new(start: Instant, action: ExtractionStepKind, file: Option) -> Self { let ret = ExtractionStep { action, file, @@ -107,20 +108,36 @@ impl ExtractionStep { Self::new( start, ExtractionStepKind::LoadManifest, - PathBuf::from(target.manifest_path()), + Some(PathBuf::from(target.manifest_path())), ) } pub fn parse(start: Instant, target: &Path) -> Self { - Self::new(start, ExtractionStepKind::Parse, PathBuf::from(target)) + Self::new( + start, + ExtractionStepKind::Parse, + Some(PathBuf::from(target)), + ) } pub fn extract(start: Instant, target: &Path) -> Self { - Self::new(start, ExtractionStepKind::Extract, PathBuf::from(target)) + Self::new( + start, + ExtractionStepKind::Extract, + Some(PathBuf::from(target)), + ) } pub fn load_source(start: Instant, target: &Path) -> Self { - Self::new(start, ExtractionStepKind::LoadSource, PathBuf::from(target)) + Self::new( + start, + ExtractionStepKind::LoadSource, + Some(PathBuf::from(target)), + ) + } + + pub fn find_manifests(start: Instant) -> Self { + Self::new(start, ExtractionStepKind::FindManifests, None) } } diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 531f5146cf85..ed3819821738 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs f042175b9f2dc4092ed04dde2073735560a9c3050a2f07ee79193c492e91cabc f042175b9f2dc4092ed04dde2073735560a9c3050a2f07ee79193c492e91cabc +top.rs 97b9c3c5485196cc7949ec1b67c5844b7ff7af67bc2339276adbdafb03789ac0 97b9c3c5485196cc7949ec1b67c5844b7ff7af67bc2339276adbdafb03789ac0 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index bd125a07df2e..5e962ad77ea6 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -26,7 +26,7 @@ impl trap::TrapClass for Element { pub struct ExtractorStep { pub id: trap::TrapId, pub action: String, - pub file: trap::Label, + pub file: Option>, pub duration_ms: usize, } @@ -36,7 +36,10 @@ impl trap::TrapEntry for ExtractorStep { } fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("extractor_steps", vec![id.into(), self.action.into(), self.file.into(), self.duration_ms.into()]); + out.add_tuple("extractor_steps", vec![id.into(), self.action.into(), self.duration_ms.into()]); + if let Some(v) = self.file { + out.add_tuple("extractor_step_files", vec![id.into(), v.into()]); + } } } diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index d721ea2c6bd9..1b5ec515d0e7 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -145,7 +145,7 @@ impl<'a> Extractor<'a> { emit_extraction_diagnostics(start, cfg, &self.steps)?; let mut trap = self.traps.create("diagnostics", "extraction"); for step in self.steps { - let file = trap.emit_file(&step.file); + let file = step.file.as_ref().map(|f| trap.emit_file(f)); let duration_ms = usize::try_from(step.ms).unwrap_or_else(|_e| { warn!("extraction step duration overflowed ({step:?})"); i32::MAX as usize @@ -160,6 +160,13 @@ impl<'a> Extractor<'a> { trap.commit()?; Ok(()) } + + pub fn find_manifests(&mut self, files: &[PathBuf]) -> anyhow::Result> { + let before = Instant::now(); + let ret = rust_analyzer::find_project_manifests(files); + self.steps.push(ExtractionStep::find_manifests(before)); + ret + } } fn cwd() -> anyhow::Result { @@ -199,7 +206,7 @@ fn main() -> anyhow::Result<()> { dunce::canonicalize(&file).unwrap_or(file) }) .collect(); - let manifests = rust_analyzer::find_project_manifests(&files)?; + let manifests = extractor.find_manifests(&files)?; let mut map: HashMap<&Path, (&ProjectManifest, Vec<&Path>)> = manifests .iter() .map(|x| (x.manifest_path().parent().as_ref(), (x, Vec::new()))) diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index 735bacb27c12..5d03bcc156db 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -1,12 +1,12 @@ use itertools::Itertools; -use log::{debug, info}; +use log::{debug, error, info, warn}; use ra_ap_base_db::SourceDatabase; use ra_ap_hir::Semantics; use ra_ap_ide_db::RootDatabase; use ra_ap_load_cargo::{load_workspace_at, LoadCargoConfig, ProcMacroServerChoice}; use ra_ap_paths::Utf8PathBuf; -use ra_ap_project_model::CargoConfig; use ra_ap_project_model::ProjectManifest; +use ra_ap_project_model::{CargoConfig, ManifestPath}; use ra_ap_span::Edition; use ra_ap_span::EditionedFileId; use ra_ap_span::TextRange; @@ -16,8 +16,12 @@ use ra_ap_syntax::SyntaxError; use ra_ap_vfs::Vfs; use ra_ap_vfs::VfsPath; use ra_ap_vfs::{AbsPathBuf, FileId}; +use serde::Deserialize; use std::borrow::Cow; +use std::collections::{HashMap, HashSet}; +use std::fs; use std::path::{Path, PathBuf}; +use std::rc::Rc; use triomphe::Arc; pub enum RustAnalyzer<'a> { @@ -128,6 +132,91 @@ impl<'a> RustAnalyzer<'a> { } } +#[derive(Deserialize)] +struct CargoManifestMembersSlice { + #[serde(default)] + members: Vec, +} + +#[derive(Deserialize)] +struct CargoManifestSlice { + workspace: Option, +} + +struct TomlReader { + cache: HashMap>, +} + +impl TomlReader { + fn new() -> Self { + Self { + cache: HashMap::new(), + } + } + + fn read(&mut self, manifest: &ManifestPath) -> anyhow::Result> { + if let Some(table) = self.cache.get(manifest) { + return Ok(table.clone()); + } + let content = fs::read_to_string(manifest).map_err(|e| { + error!("failed to read {} ({e})", manifest.as_str()); + e + })?; + let table = Rc::::new(toml::from_str(&content).map_err(|e| { + error!("failed to parse {} ({e})", manifest.as_str()); + e + })?); + self.cache.insert(manifest.clone(), table.clone()); + Ok(table) + } +} + +fn find_workspace(reader: &mut TomlReader, manifest: &ProjectManifest) -> Option { + let ProjectManifest::CargoToml(cargo) = manifest else { + return None; + }; + let parsed_cargo = reader.read(cargo).ok()?; + if parsed_cargo.workspace.is_some() { + debug!("{cargo} is a workspace"); + return Some(manifest.clone()); + } + let Some(parent_dir) = cargo.parent().parent() else { + warn!("no parent dir for {cargo}"); + return None; + }; + let discovered = ProjectManifest::discover(parent_dir) + .map_err(|e| { + error!( + "encountered error while searching for manifests under {}: {e}", + parent_dir.as_str() + ); + e + }) + .ok()?; + discovered + .iter() + .find_map(|it| match it { + ProjectManifest::CargoToml(other) + if cargo.starts_with(other.parent()) + && reader.read(other).is_ok_and(|it| { + it.workspace.as_ref().is_some_and(|w| { + w.members + .iter() + .any(|m| other.parent().join(m) == cargo.parent()) + }) + }) => + { + debug!("found workspace {other} containing {cargo}"); + Some(it.clone()) + } + _ => None, + }) + .or_else(|| { + debug!("no workspace found for {cargo}"); + None + }) +} + pub fn find_project_manifests( files: &[PathBuf], ) -> anyhow::Result> { @@ -136,7 +225,13 @@ pub fn find_project_manifests( .iter() .map(|path| AbsPathBuf::assert_utf8(current.join(path))) .collect(); - let ret = ra_ap_project_model::ProjectManifest::discover_all(&abs_files); + let discovered = ra_ap_project_model::ProjectManifest::discover_all(&abs_files); + let mut ret = HashSet::new(); + let mut reader = TomlReader::new(); + for manifest in discovered { + let workspace = find_workspace(&mut reader, &manifest).unwrap_or(manifest); + ret.insert(workspace); + } let iter = || ret.iter().map(|m| format!(" {m}")); const LOG_LIMIT: usize = 10; if ret.len() <= LOG_LIMIT { @@ -152,8 +247,9 @@ pub fn find_project_manifests( iter().dropping(LOG_LIMIT).join("\n") ); } - Ok(ret) + Ok(ret.into_iter().collect()) } + fn from_utf8_lossy(v: &[u8]) -> (Cow<'_, str>, Option) { let mut iter = v.utf8_chunks(); let (first_valid, first_invalid) = if let Some(chunk) = iter.next() { diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index e1e6b655a316..8d1f4d244d56 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -515,7 +515,7 @@ lib/codeql/rust/elements/internal/generated/ExternBlock.qll c292d804a1f8d2cf6a44 lib/codeql/rust/elements/internal/generated/ExternCrate.qll 35fea4e810a896c1656adb4682c4c3bc20283768073e26ae064189ce310433c8 fc504dff79ba758d89b10cd5049539fbc766ee9862ff495066cea26abf0b5e0b lib/codeql/rust/elements/internal/generated/ExternItem.qll 749b064ad60f32197d5b85e25929afe18e56e12f567b73e21e43e2fdf4c447e3 e2c2d423876675cf2dae399ca442aef7b2860319da9bfadeff29f2c6946f8de7 lib/codeql/rust/elements/internal/generated/ExternItemList.qll 6bc97fdae6c411cab5c501129c1d6c2321c1011cccb119515d75d07dc55c253b 6b5aa808025c0a4270cac540c07ba6faede1b3c70b8db5fd89ec5d46df9041b2 -lib/codeql/rust/elements/internal/generated/ExtractorStep.qll b83ce7f18009bdd36374260652c2a8a5cd5a9b5404a1c147bbec49ad251e43f3 e6e55595300126f9c5a6fd7bde5321b2a0026b491326114d16fcc2395a1fc483 +lib/codeql/rust/elements/internal/generated/ExtractorStep.qll 61cd504a1aab98b1c977ee8cff661258351d11ca1fec77038c0a17d359f5810e 5e57b50f3e8e3114a55159fb11a524c6944363f5f8a380abccc8b220dedc70ca lib/codeql/rust/elements/internal/generated/FieldExpr.qll 3e506b5cb93793ec30f56bb637a600db869fcba6181b068516a671d55c362739 7bbf953696d763ad6b210f378f487ba85b875fa115b22c0c0508599a63633502 lib/codeql/rust/elements/internal/generated/FieldList.qll 43c13c6e3c9ba75a7a4cb870fc4f18752001584d48b9df0734055a6ebb789331 7c51b0b13eb02f1286d3365e53a976ba2655c4dbd8e735bc11c8b205c829e1ee lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll d490ab9f2e3654d9abde18a06e534abd99ca62f518ca08670b696a97e9d5c592 01500319820f66cb4bbda6fe7c26270f76ea934efff4bb3cbf88e9b1e07e8be2 @@ -594,7 +594,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbff lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll db71278eea846cffd8748f1650493822d95108609a5c055bfaed7af4f42011c1 fabbf440a40ff5b1e9da26a95d20db89fbe7d33717bbc4f02ef518fc9dfd1e54 +lib/codeql/rust/elements/internal/generated/Raw.qll c75c7811d041897c2d6aae1e0e55b46af6182565e1d0dd624062c5ca499e9325 79e6ded808f14dd622076b75d8e4985c7b90f2d5e964d0750519b510463b47ba lib/codeql/rust/elements/internal/generated/RecordExpr.qll 2131b2cb336caa76170082e69776011bf02576bbfdd34ba68ca84af24209250a 39a2e3ec32352b594c43cc1295e0e8b3f9808173322d3d73cb7d48ef969d5565 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 diff --git a/rust/ql/integration-tests/hello-project/diagnostics.expected b/rust/ql/integration-tests/hello-project/diagnostics.expected index f938b5b8ab5b..5455d51f2797 100644 --- a/rust/ql/integration-tests/hello-project/diagnostics.expected +++ b/rust/ql/integration-tests/hello-project/diagnostics.expected @@ -5,6 +5,10 @@ "ms": "__REDACTED__", "pretty": "__REDACTED__" }, + "findManifests": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + }, "loadManifest": { "ms": "__REDACTED__", "pretty": "__REDACTED__" diff --git a/rust/ql/integration-tests/hello-project/steps.cargo.expected b/rust/ql/integration-tests/hello-project/steps.cargo.expected index 61987aa564bb..958079845eb5 100644 --- a/rust/ql/integration-tests/hello-project/steps.cargo.expected +++ b/rust/ql/integration-tests/hello-project/steps.cargo.expected @@ -1,4 +1,5 @@ | Cargo.toml:0:0:0:0 | LoadManifest(Cargo.toml) | +| file://:0:0:0:0 | FindManifests | | src/directory_module/mod.rs:0:0:0:0 | Extract(src/directory_module/mod.rs) | | src/directory_module/mod.rs:0:0:0:0 | LoadSource(src/directory_module/mod.rs) | | src/directory_module/mod.rs:0:0:0:0 | Parse(src/directory_module/mod.rs) | diff --git a/rust/ql/integration-tests/hello-project/steps.rust-project.expected b/rust/ql/integration-tests/hello-project/steps.rust-project.expected index d1d2e9ddee3f..3ebf60a82de0 100644 --- a/rust/ql/integration-tests/hello-project/steps.rust-project.expected +++ b/rust/ql/integration-tests/hello-project/steps.rust-project.expected @@ -1,3 +1,4 @@ +| file://:0:0:0:0 | FindManifests | | rust-project.json:0:0:0:0 | LoadManifest(rust-project.json) | | src/directory_module/mod.rs:0:0:0:0 | Extract(src/directory_module/mod.rs) | | src/directory_module/mod.rs:0:0:0:0 | LoadSource(src/directory_module/mod.rs) | diff --git a/rust/ql/integration-tests/hello-project/summary.expected b/rust/ql/integration-tests/hello-project/summary.expected index 07c48c7a5b75..4b584a4c7953 100644 --- a/rust/ql/integration-tests/hello-project/summary.expected +++ b/rust/ql/integration-tests/hello-project/summary.expected @@ -1,4 +1,4 @@ -| Elements extracted | 65 | +| Elements extracted | 66 | | Elements unextracted | 0 | | Extraction errors | 0 | | Extraction warnings | 1 | diff --git a/rust/ql/integration-tests/hello-workspace/diagnostics.cargo.expected b/rust/ql/integration-tests/hello-workspace/diagnostics.cargo.expected index 7d44256db5a4..af11fd2f2e8e 100644 --- a/rust/ql/integration-tests/hello-workspace/diagnostics.cargo.expected +++ b/rust/ql/integration-tests/hello-workspace/diagnostics.cargo.expected @@ -5,6 +5,10 @@ "ms": "__REDACTED__", "pretty": "__REDACTED__" }, + "findManifests": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + }, "loadManifest": { "ms": "__REDACTED__", "pretty": "__REDACTED__" @@ -23,7 +27,7 @@ } }, "numberOfFiles": 4, - "numberOfManifests": 2 + "numberOfManifests": 1 }, "severity": "note", "source": { diff --git a/rust/ql/integration-tests/hello-workspace/diagnostics.rust-project.expected b/rust/ql/integration-tests/hello-workspace/diagnostics.rust-project.expected index 4c5dbc75d84b..af11fd2f2e8e 100644 --- a/rust/ql/integration-tests/hello-workspace/diagnostics.rust-project.expected +++ b/rust/ql/integration-tests/hello-workspace/diagnostics.rust-project.expected @@ -5,6 +5,10 @@ "ms": "__REDACTED__", "pretty": "__REDACTED__" }, + "findManifests": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + }, "loadManifest": { "ms": "__REDACTED__", "pretty": "__REDACTED__" diff --git a/rust/ql/integration-tests/hello-workspace/steps.cargo.expected b/rust/ql/integration-tests/hello-workspace/steps.cargo.expected index 138bd77b690d..a2f125948098 100644 --- a/rust/ql/integration-tests/hello-workspace/steps.cargo.expected +++ b/rust/ql/integration-tests/hello-workspace/steps.cargo.expected @@ -1,11 +1,11 @@ -| exe/Cargo.toml:0:0:0:0 | LoadManifest(exe/Cargo.toml) | +| Cargo.toml:0:0:0:0 | LoadManifest(Cargo.toml) | | exe/src/a_module.rs:0:0:0:0 | Extract(exe/src/a_module.rs) | | exe/src/a_module.rs:0:0:0:0 | LoadSource(exe/src/a_module.rs) | | exe/src/a_module.rs:0:0:0:0 | Parse(exe/src/a_module.rs) | | exe/src/main.rs:0:0:0:0 | Extract(exe/src/main.rs) | | exe/src/main.rs:0:0:0:0 | LoadSource(exe/src/main.rs) | | exe/src/main.rs:0:0:0:0 | Parse(exe/src/main.rs) | -| lib/Cargo.toml:0:0:0:0 | LoadManifest(lib/Cargo.toml) | +| file://:0:0:0:0 | FindManifests | | lib/src/a_module/mod.rs:0:0:0:0 | Extract(lib/src/a_module/mod.rs) | | lib/src/a_module/mod.rs:0:0:0:0 | LoadSource(lib/src/a_module/mod.rs) | | lib/src/a_module/mod.rs:0:0:0:0 | Parse(lib/src/a_module/mod.rs) | diff --git a/rust/ql/integration-tests/hello-workspace/steps.rust-project.expected b/rust/ql/integration-tests/hello-workspace/steps.rust-project.expected index 09620925ce96..c0958b56523e 100644 --- a/rust/ql/integration-tests/hello-workspace/steps.rust-project.expected +++ b/rust/ql/integration-tests/hello-workspace/steps.rust-project.expected @@ -4,6 +4,7 @@ | exe/src/main.rs:0:0:0:0 | Extract(exe/src/main.rs) | | exe/src/main.rs:0:0:0:0 | LoadSource(exe/src/main.rs) | | exe/src/main.rs:0:0:0:0 | Parse(exe/src/main.rs) | +| file://:0:0:0:0 | FindManifests | | lib/src/a_module/mod.rs:0:0:0:0 | Extract(lib/src/a_module/mod.rs) | | lib/src/a_module/mod.rs:0:0:0:0 | LoadSource(lib/src/a_module/mod.rs) | | lib/src/a_module/mod.rs:0:0:0:0 | Parse(lib/src/a_module/mod.rs) | diff --git a/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected b/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected index 5c57c488fda0..eb8f861f9358 100644 --- a/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected +++ b/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected @@ -1,4 +1,4 @@ -| Elements extracted | 85 | +| Elements extracted | 86 | | Elements unextracted | 0 | | Extraction errors | 0 | | Extraction warnings | 0 | diff --git a/rust/ql/lib/codeql/rust/elements/internal/ExtractorStepImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ExtractorStepImpl.qll index 95c677e845e9..0f98299c5754 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ExtractorStepImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ExtractorStepImpl.qll @@ -14,6 +14,8 @@ module Impl { class ExtractorStep extends Generated::ExtractorStep { override string toString() { result = this.getAction() + "(" + this.getFile().getAbsolutePath() + ")" + or + not this.hasFile() and result = this.getAction() } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ExtractorStep.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ExtractorStep.qll index c2d7838865be..e74b0e9680f1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ExtractorStep.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ExtractorStep.qll @@ -29,12 +29,17 @@ module Generated { } /** - * Gets the file of this extractor step. + * Gets the file of this extractor step, if it exists. */ File getFile() { result = Synth::convertExtractorStepToRaw(this).(Raw::ExtractorStep).getFile() } + /** + * Holds if `getFile()` exists. + */ + final predicate hasFile() { exists(this.getFile()) } + /** * Gets the duration ms of this extractor step. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index deb5cf0764be..a1655224a17f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -21,17 +21,17 @@ module Raw { /** * Gets the action of this extractor step. */ - string getAction() { extractor_steps(this, result, _, _) } + string getAction() { extractor_steps(this, result, _) } /** - * Gets the file of this extractor step. + * Gets the file of this extractor step, if it exists. */ - File getFile() { extractor_steps(this, _, result, _) } + File getFile() { extractor_step_files(this, result) } /** * Gets the duration ms of this extractor step. */ - int getDurationMs() { extractor_steps(this, _, _, result) } + int getDurationMs() { extractor_steps(this, _, result) } } /** diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 6cb586f2f821..6cd197193bee 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -128,10 +128,15 @@ locatable_locations( extractor_steps( unique int id: @extractor_step, string action: string ref, - int file: @file ref, int duration_ms: int ref ); +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + @locatable = @ast_node ; diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index c8c0fe398aaf..78bfeb9322c7 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -1,4 +1,4 @@ -| Elements extracted | 404 | +| Elements extracted | 405 | | Elements unextracted | 0 | | Extraction errors | 0 | | Extraction warnings | 7 | diff --git a/rust/schema/prelude.py b/rust/schema/prelude.py index ec67d7357ab4..c0637826fa25 100644 --- a/rust/schema/prelude.py +++ b/rust/schema/prelude.py @@ -107,5 +107,5 @@ class PathAstNode(Resolvable): @ql.internal class ExtractorStep(Element): action: string - file: File + file: optional[File] duration_ms: int diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 455a5b5bc131..b9840504615f 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2154,8 +2154,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate storeStepFwd(NodeEx node1, Ap ap1, Content c, NodeEx node2, Ap ap2) { fwdFlowStore(node1, _, ap1, _, c, _, _, node2, _, _, _) and - ap2 = apCons(c, ap1) and - readStepFwd(_, ap2, c, _, _) + readStepFwd(_, ap2, c, _, ap1) } pragma[nomagic] @@ -4393,6 +4392,7 @@ module MakeImpl Lang> { Typ getTyp(DataFlowType t) { result = t } bindingset[c, tail] + pragma[inline_late] Ap apCons(Content c, Ap tail) { result.isCons(c, tail) } class ApHeadContent = Content; @@ -4462,6 +4462,7 @@ module MakeImpl Lang> { abstract Content getHead(); /** Holds if this is a representation of `head` followed by `tail`. */ + pragma[nomagic] abstract predicate isCons(Content head, AccessPath tail); /** Gets the front of this access path. */ diff --git a/shared/util/codeql/util/test/InlineExpectationsTest.qll b/shared/util/codeql/util/test/InlineExpectationsTest.qll index 415450c16032..8dde42b51678 100644 --- a/shared/util/codeql/util/test/InlineExpectationsTest.qll +++ b/shared/util/codeql/util/test/InlineExpectationsTest.qll @@ -583,6 +583,9 @@ private string expectationPattern() { ) } +/** Gets the string `#select` or `problems`, which are equivalent result sets for a `problem` or `path-problem` query. */ +private string mainResultSet() { result = ["#select", "problems"] } + /** * Provides logic for creating a `@kind test-postprocess` query that checks * inline test expectations using `$ Alert` markers. @@ -650,8 +653,8 @@ module TestPostProcessing { */ private string getSourceTag(int row) { getQueryKind() = "path-problem" and - exists(string loc | queryResults("#select", row, 2, loc) | - if queryResults("#select", row, 0, loc) then result = "Alert" else result = "Source" + exists(string loc | queryResults(mainResultSet(), row, 2, loc) | + if queryResults(mainResultSet(), row, 0, loc) then result = "Alert" else result = "Source" ) } @@ -663,8 +666,8 @@ module TestPostProcessing { */ private string getSinkTag(int row) { getQueryKind() = "path-problem" and - exists(string loc | queryResults("#select", row, 4, loc) | - if queryResults("#select", row, 0, loc) then result = "Alert" else result = "Sink" + exists(string loc | queryResults(mainResultSet(), row, 4, loc) | + if queryResults(mainResultSet(), row, 0, loc) then result = "Alert" else result = "Sink" ) } @@ -717,8 +720,8 @@ module TestPostProcessing { ) { getQueryKind() = "path-problem" and exists(string loc | - queryResults("#select", row, 2, loc) and - queryResults("#select", row, 3, element) and + queryResults(mainResultSet(), row, 2, loc) and + queryResults(mainResultSet(), row, 3, element) and tag = getSourceTag(row) and value = "" and Input2::getRelativeUrl(location) = loc @@ -757,8 +760,8 @@ module TestPostProcessing { ) { getQueryKind() = "path-problem" and exists(string loc | - queryResults("#select", row, 4, loc) and - queryResults("#select", row, 5, element) and + queryResults(mainResultSet(), row, 4, loc) and + queryResults(mainResultSet(), row, 5, element) and tag = getSinkTag(row) and Input2::getRelativeUrl(location) = loc ) @@ -767,8 +770,8 @@ module TestPostProcessing { private predicate hasAlert(int row, Input::Location location, string element, string tag) { getQueryKind() = ["problem", "path-problem"] and exists(string loc | - queryResults("#select", row, 0, loc) and - queryResults("#select", row, 2, element) and + queryResults(mainResultSet(), row, 0, loc) and + queryResults(mainResultSet(), row, 2, element) and tag = "Alert" and Input2::getRelativeUrl(location) = loc and not hasPathProblemSource(row, location, _, _, _) and