From 781a7e1fc65bcd38e14ebc3e89c055cd82c6c98e Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Nov 2024 10:54:49 +0000 Subject: [PATCH 01/14] C++: Split out 'NotExpr' to its own class. --- .../raw/internal/TranslatedExpr.qll | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) 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 e7ccac24eb92..f5339600ec34 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 @@ -1262,9 +1262,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 +1299,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 +1311,51 @@ class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr { } } +class TranslatedNotExpr extends TranslatedNonConstantExpr { + override NotExpr expr; + + final override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getOperand().getFirstInstruction(kind) + } + + override Instruction getALastInstructionInternal() { + result = this.getInstruction(OnlyInstructionTag()) + } + + final override TranslatedElement getChildInternal(int id) { + id = 0 and result = this.getOperand() + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + tag = OnlyInstructionTag() and + opcode instanceof Opcode::LogicalNot and + resultType = getBoolType() + } + + final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = OnlyInstructionTag() and + result = this.getParent().getChildSuccessor(this, kind) + } + + final override Instruction getChildSuccessorInternal(TranslatedElement child, EdgeKind kind) { + child = this.getOperand() and + kind instanceof GotoEdge and + result = this.getInstruction(OnlyInstructionTag()) + } + + final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + tag = OnlyInstructionTag() and + operandTag instanceof UnaryOperandTag and + result = this.getOperand().getResult() + } + + private TranslatedExpr getOperand() { + result = getTranslatedExpr(expr.getOperand().getFullyConverted()) + } + + final override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } +} + /** * IR translation of a `co_await` or `co_yield` expression. * From a2ab190b49fe8785d2a24632b178ef75a151dc88 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Nov 2024 10:55:53 +0000 Subject: [PATCH 02/14] C++: Provide a hook for overriding 'getResultType'. --- .../implementation/raw/internal/TranslatedExpr.qll | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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 f5339600ec34..24172d9ef54d 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. */ From 515d89684e2803d0b5f7b549383384ddfa7b7e40 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Nov 2024 11:00:43 +0000 Subject: [PATCH 03/14] C++: Adjust the result type at 'NotExpr' and at comparisons. --- .../cpp/ir/implementation/raw/internal/TranslatedExpr.qll | 8 ++++++++ 1 file changed, 8 insertions(+) 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 24172d9ef54d..2052a0b7ffaf 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 @@ -1323,6 +1323,8 @@ class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr { class TranslatedNotExpr extends TranslatedNonConstantExpr { override NotExpr expr; + override Type getExprType() { result instanceof BoolType } + final override Instruction getFirstInstruction(EdgeKind kind) { result = this.getOperand().getFirstInstruction(kind) } @@ -1807,6 +1809,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 | From ff0767ff47ecf3efc557a4d7b259c15944929485 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Nov 2024 11:04:51 +0000 Subject: [PATCH 04/14] C++: Accept test changes. --- .../library-tests/ir/ir/aliased_ir.expected | 24 +-- .../ir/ir/aliased_ssa_consistency.expected | 11 -- .../aliased_ssa_consistency_unsound.expected | 11 -- .../ir/ir/raw_consistency.expected | 11 -- .../test/library-tests/ir/ir/raw_ir.expected | 24 +-- .../ir/ir/unaliased_ssa_consistency.expected | 11 -- ...unaliased_ssa_consistency_unsound.expected | 11 -- .../aliased_ssa_consistency.expected | 168 ----------------- .../syntax-zoo/raw_consistency.expected | 172 ------------------ .../unaliased_ssa_consistency.expected | 168 ----------------- 10 files changed, 24 insertions(+), 587 deletions(-) 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 28fde3672d9b..9f6d1fae275a 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -3319,7 +3319,7 @@ ir.c: # 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| r86_3(bool) = LogicalNot : r86_2 # 86| v86_4(void) = ConditionalBranch : r86_3 #-----| False -> Block 4 #-----| True -> Block 3 @@ -3332,7 +3332,7 @@ ir.c: # 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| r88_4(bool) = LogicalNot : r88_3 # 88| m88_5(int) = Store[y] : &:r88_1, r88_4 # 89| r89_1(glval) = VariableAddress[y] : # 89| r89_2(int) = Load[y] : &:r89_1, m88_5 @@ -3347,7 +3347,7 @@ ir.c: # 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| r90_3(bool) = LogicalNot : r90_2 # 90| v90_4(void) = ConditionalBranch : r90_3 #-----| False -> Block 8 #-----| True -> Block 7 @@ -3377,7 +3377,7 @@ ir.c: # 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| r93_3(bool) = LogicalNot : r93_2 # 93| v93_4(void) = ConditionalBranch : r93_3 #-----| False -> Block 14 #-----| True -> Block 12 @@ -3403,7 +3403,7 @@ ir.c: # 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| r94_6(bool) = LogicalNot : r94_5 # 94| v94_7(void) = ConditionalBranch : r94_6 #-----| False -> Block 17 #-----| True -> Block 16 @@ -3415,7 +3415,7 @@ ir.c: # 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| r95_3(bool) = LogicalNot : r95_2 # 95| v95_4(void) = ConditionalBranch : r95_3 #-----| False -> Block 20 #-----| True -> Block 18 @@ -3423,7 +3423,7 @@ ir.c: # 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| r95_7(bool) = LogicalNot : r95_6 # 95| v95_8(void) = ConditionalBranch : r95_7 #-----| False -> Block 20 #-----| True -> Block 19 @@ -3453,7 +3453,7 @@ ir.c: # 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| r97_3(bool) = LogicalNot : r97_2 # 97| v97_4(void) = ConditionalBranch : r97_3 #-----| False -> Block 24 #-----| True -> Block 25 @@ -3479,7 +3479,7 @@ ir.c: # 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| r98_6(bool) = LogicalNot : r98_5 # 98| v98_7(void) = ConditionalBranch : r98_6 #-----| False -> Block 29 #-----| True -> Block 28 @@ -3491,7 +3491,7 @@ ir.c: # 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| r99_3(bool) = LogicalNot : r99_2 # 99| v99_4(void) = ConditionalBranch : r99_3 #-----| False -> Block 30 #-----| True -> Block 31 @@ -3499,7 +3499,7 @@ ir.c: # 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| r99_7(bool) = LogicalNot : r99_6 # 99| v99_8(void) = ConditionalBranch : r99_7 #-----| False -> Block 32 #-----| True -> Block 31 @@ -3553,7 +3553,7 @@ ir.c: # 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| r103_3(bool) = LogicalNot : r103_2 # 103| v103_4(void) = ConditionalBranch : r103_3 #-----| False -> Block 40 #-----| True -> Block 39 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..1fbde03badf5 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 @@ -31,40 +31,29 @@ thisArgumentIsNonPointer 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..1fbde03badf5 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 @@ -31,40 +31,29 @@ thisArgumentIsNonPointer 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_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index 7b5d32c65438..52f850c1d97d 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -40,40 +40,29 @@ thisArgumentIsNonPointer 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 0093a108577a..415004d7cead 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -3117,7 +3117,7 @@ ir.c: # 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| r86_3(bool) = LogicalNot : r86_2 # 86| v86_4(void) = ConditionalBranch : r86_3 #-----| False -> Block 4 #-----| True -> Block 3 @@ -3130,7 +3130,7 @@ ir.c: # 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| r88_4(bool) = LogicalNot : r88_3 # 88| mu88_5(int) = Store[y] : &:r88_1, r88_4 # 89| r89_1(glval) = VariableAddress[y] : # 89| r89_2(int) = Load[y] : &:r89_1, ~m? @@ -3145,7 +3145,7 @@ ir.c: # 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| r90_3(bool) = LogicalNot : r90_2 # 90| v90_4(void) = ConditionalBranch : r90_3 #-----| False -> Block 8 #-----| True -> Block 7 @@ -3175,7 +3175,7 @@ ir.c: # 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| r93_3(bool) = LogicalNot : r93_2 # 93| v93_4(void) = ConditionalBranch : r93_3 #-----| False -> Block 14 #-----| True -> Block 12 @@ -3201,7 +3201,7 @@ ir.c: # 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| r94_6(bool) = LogicalNot : r94_5 # 94| v94_7(void) = ConditionalBranch : r94_6 #-----| False -> Block 17 #-----| True -> Block 16 @@ -3213,7 +3213,7 @@ ir.c: # 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| r95_3(bool) = LogicalNot : r95_2 # 95| v95_4(void) = ConditionalBranch : r95_3 #-----| False -> Block 20 #-----| True -> Block 18 @@ -3221,7 +3221,7 @@ ir.c: # 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| r95_7(bool) = LogicalNot : r95_6 # 95| v95_8(void) = ConditionalBranch : r95_7 #-----| False -> Block 20 #-----| True -> Block 19 @@ -3251,7 +3251,7 @@ ir.c: # 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| r97_3(bool) = LogicalNot : r97_2 # 97| v97_4(void) = ConditionalBranch : r97_3 #-----| False -> Block 24 #-----| True -> Block 25 @@ -3277,7 +3277,7 @@ ir.c: # 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| r98_6(bool) = LogicalNot : r98_5 # 98| v98_7(void) = ConditionalBranch : r98_6 #-----| False -> Block 29 #-----| True -> Block 28 @@ -3289,7 +3289,7 @@ ir.c: # 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| r99_3(bool) = LogicalNot : r99_2 # 99| v99_4(void) = ConditionalBranch : r99_3 #-----| False -> Block 30 #-----| True -> Block 31 @@ -3297,7 +3297,7 @@ ir.c: # 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| r99_7(bool) = LogicalNot : r99_6 # 99| v99_8(void) = ConditionalBranch : r99_7 #-----| False -> Block 32 #-----| True -> Block 31 @@ -3350,7 +3350,7 @@ ir.c: # 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| r103_3(bool) = LogicalNot : r103_2 # 103| v103_4(void) = ConditionalBranch : r103_3 #-----| False -> Block 40 #-----| True -> Block 39 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..1fbde03badf5 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 @@ -31,40 +31,29 @@ thisArgumentIsNonPointer 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..1fbde03badf5 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 @@ -31,40 +31,29 @@ thisArgumentIsNonPointer 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..8a25a2edce5d 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,32 +34,19 @@ 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() | @@ -80,8 +67,6 @@ nonBooleanOperand | 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() | @@ -108,170 +93,21 @@ nonBooleanOperand | 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) | @@ -283,9 +119,7 @@ nonBooleanOperand | 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) | @@ -294,10 +128,8 @@ nonBooleanOperand | 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..1d23bf6fd3aa 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected @@ -43,34 +43,21 @@ 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() | @@ -91,12 +78,6 @@ nonBooleanOperand | 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*) | @@ -125,171 +106,22 @@ nonBooleanOperand | 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) | @@ -301,9 +133,7 @@ nonBooleanOperand | 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) | @@ -312,10 +142,8 @@ nonBooleanOperand | 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..8a25a2edce5d 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,32 +34,19 @@ 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() | @@ -80,8 +67,6 @@ nonBooleanOperand | 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() | @@ -108,170 +93,21 @@ nonBooleanOperand | 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) | @@ -283,9 +119,7 @@ nonBooleanOperand | 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) | @@ -294,10 +128,8 @@ nonBooleanOperand | 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 From e89d6a3da1f2e950942b6d065eed07c47fbc2aa9 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Nov 2024 11:10:48 +0000 Subject: [PATCH 05/14] C++: Insert int-to-bool conversions at conditions. --- .../raw/internal/InstructionTag.qll | 6 +++ .../raw/internal/TranslatedCondition.qll | 53 +++++++++++++++++-- 2 files changed, 56 insertions(+), 3 deletions(-) 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..b90b04ad96cf 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,6 +38,8 @@ newtype TInstructionTag = AllocationSizeTag() or AllocationElementSizeTag() or AllocationExtentConvertTag() or + ValueConditionCompareTag() or + ValueConditionConstantTag() or ValueConditionConditionalBranchTag() or ConditionValueTrueTempAddressTag() or ConditionValueTrueConstantTag() or @@ -167,6 +169,10 @@ string getInstructionTagId(TInstructionTag tag) { or tag = ValueConditionConditionalBranchTag() and result = "ValCondCondBranch" or + tag = ValueConditionCompareTag() and result = "ValCondCondCompare" + or + tag = ValueConditionConstantTag() and result = "ValCondConstant" + or tag = ConditionValueTrueTempAddressTag() and result = "CondValTrueTempAddr" or tag = ConditionValueTrueConstantTag() and result = "CondValTrueConst" 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) } From ebf6c38b9f80679426cb87f8db47578347b05be0 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Nov 2024 11:12:17 +0000 Subject: [PATCH 06/14] C++: Accept test changes. --- .../library-tests/ir/ir/aliased_ir.expected | 128 +++++++++++------- .../ir/ir/aliased_ssa_consistency.expected | 14 -- .../aliased_ssa_consistency_unsound.expected | 14 -- .../ir/ir/raw_consistency.expected | 14 -- .../test/library-tests/ir/ir/raw_ir.expected | 124 ++++++++++------- .../ir/ir/unaliased_ssa_consistency.expected | 14 -- ...unaliased_ssa_consistency_unsound.expected | 14 -- .../aliased_ssa_consistency.expected | 83 ------------ .../syntax-zoo/raw_consistency.expected | 87 ------------ .../unaliased_ssa_consistency.expected | 83 ------------ 10 files changed, 154 insertions(+), 421 deletions(-) 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 9f6d1fae275a..579c0a8e7872 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -3308,12 +3308,14 @@ 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 @@ -3336,12 +3338,14 @@ ir.c: # 88| m88_5(int) = Store[y] : &:r88_1, r88_4 # 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_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 @@ -3359,19 +3363,23 @@ ir.c: # 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 @@ -3385,31 +3393,35 @@ ir.c: # 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_7(int) = Constant[0] : +# 93| r93_8(bool) = CompareNE : r93_6, r93_7 +# 93| v93_9(void) = ConditionalBranch : r93_8 #-----| False -> Block 14 #-----| True -> Block 13 # 93| Block 13 -# 93| v93_8(void) = NoOp : +# 93| v93_10(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(bool) = 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(bool) = LogicalNot : r94_7 +# 94| v94_9(void) = ConditionalBranch : r94_8 #-----| False -> Block 17 #-----| True -> Block 16 # 94| Block 16 -# 94| v94_8(void) = NoOp : +# 94| v94_10(void) = NoOp : #-----| Goto -> Block 17 # 95| Block 17 @@ -3435,19 +3447,23 @@ ir.c: # 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 @@ -3461,31 +3477,35 @@ ir.c: # 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_7(int) = Constant[0] : +# 97| r97_8(bool) = CompareNE : r97_6, r97_7 +# 97| v97_9(void) = ConditionalBranch : r97_8 #-----| False -> Block 26 #-----| True -> Block 25 # 97| Block 25 -# 97| v97_8(void) = NoOp : +# 97| v97_10(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(bool) = 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(bool) = LogicalNot : r98_7 +# 98| v98_9(void) = ConditionalBranch : r98_8 #-----| False -> Block 29 #-----| True -> Block 28 # 98| Block 28 -# 98| v98_8(void) = NoOp : +# 98| v98_10(void) = NoOp : #-----| Goto -> Block 29 # 99| Block 29 @@ -3512,47 +3532,53 @@ ir.c: # 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_2(int) = Load[x_1_and_2] : &:r103_1, m101_13 # 103| r103_3(bool) = LogicalNot : r103_2 # 103| v103_4(void) = ConditionalBranch : r103_3 #-----| False -> Block 40 @@ -38811,7 +38837,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 1fbde03badf5..a03c48dcab09 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,30 +30,16 @@ 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 1fbde03badf5..a03c48dcab09 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,30 +30,16 @@ 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index 52f850c1d97d..72497133026b 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -39,30 +39,16 @@ 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 415004d7cead..62bfcc9c15aa 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -3106,12 +3106,14 @@ 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 @@ -3134,12 +3136,14 @@ ir.c: # 88| mu88_5(int) = Store[y] : &:r88_1, r88_4 # 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 @@ -3157,19 +3161,23 @@ ir.c: # 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 @@ -3183,31 +3191,35 @@ ir.c: # 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_7(int) = Constant[0] : +# 93| r93_8(bool) = CompareNE : r93_6, r93_7 +# 93| v93_9(void) = ConditionalBranch : r93_8 #-----| False -> Block 14 #-----| True -> Block 13 # 93| Block 13 -# 93| v93_8(void) = NoOp : +# 93| v93_10(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(bool) = 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(bool) = LogicalNot : r94_7 +# 94| v94_9(void) = ConditionalBranch : r94_8 #-----| False -> Block 17 #-----| True -> Block 16 # 94| Block 16 -# 94| v94_8(void) = NoOp : +# 94| v94_10(void) = NoOp : #-----| Goto -> Block 17 # 95| Block 17 @@ -3233,19 +3245,23 @@ ir.c: # 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 @@ -3259,31 +3275,35 @@ ir.c: # 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_7(int) = Constant[0] : +# 97| r97_8(bool) = CompareNE : r97_6, r97_7 +# 97| v97_9(void) = ConditionalBranch : r97_8 #-----| False -> Block 26 #-----| True -> Block 25 # 97| Block 25 -# 97| v97_8(void) = NoOp : +# 97| v97_10(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(bool) = 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(bool) = LogicalNot : r98_7 +# 98| v98_9(void) = ConditionalBranch : r98_8 #-----| False -> Block 29 #-----| True -> Block 28 # 98| Block 28 -# 98| v98_8(void) = NoOp : +# 98| v98_10(void) = NoOp : #-----| Goto -> Block 29 # 99| Block 29 @@ -3310,41 +3330,47 @@ ir.c: # 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 @@ -37088,7 +37114,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 1fbde03badf5..a03c48dcab09 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,30 +30,16 @@ 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 1fbde03badf5..a03c48dcab09 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,30 +30,16 @@ 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 8a25a2edce5d..960dc503c192 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,68 +34,8 @@ 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 -| 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() | -| 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() | -| 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() | -| 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: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() | -| 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: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) | @@ -105,31 +45,8 @@ nonBooleanOperand | 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) | -| 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: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 | 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 | 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 | 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() | 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 1d23bf6fd3aa..f7cc94c086ec 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected @@ -43,72 +43,9 @@ 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 -| 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() | -| 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() | -| 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() | -| 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: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() | -| 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: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) | @@ -118,32 +55,8 @@ nonBooleanOperand | 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) | -| 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: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 | 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 | 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 | 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() | 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 8a25a2edce5d..960dc503c192 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,68 +34,8 @@ 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 -| 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() | -| 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() | -| 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() | -| 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: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() | -| 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: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) | @@ -105,31 +45,8 @@ nonBooleanOperand | 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) | -| 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: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 | 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 | 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 | 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() | missingCppType From 3498d7b8aa6ad584663d1e5f451d439aa2898824 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Nov 2024 11:00:33 +0000 Subject: [PATCH 07/14] C++: Insert int-to-bool conversions at 'NotExpr's. --- .../raw/internal/InstructionTag.qll | 6 ++ .../raw/internal/TranslatedExpr.qll | 67 ++++++++++++++++--- 2 files changed, 63 insertions(+), 10 deletions(-) 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 b90b04ad96cf..b984a5c7e1bf 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 @@ -51,6 +51,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 @@ -193,6 +195,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/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index 2052a0b7ffaf..c6d590e828ec 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 @@ -1320,17 +1320,36 @@ 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(OnlyInstructionTag()) + result = this.getInstruction(NotExprOperationTag()) } final override TranslatedElement getChildInternal(int id) { @@ -1338,33 +1357,61 @@ class TranslatedNotExpr extends TranslatedNonConstantExpr { } override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { - tag = OnlyInstructionTag() and - opcode instanceof Opcode::LogicalNot and - resultType = getBoolType() + 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 = OnlyInstructionTag() and + 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 - result = this.getInstruction(OnlyInstructionTag()) + if this.shouldGenerateEq() + then result = this.getInstruction(NotExprConstantTag()) + else result = this.getInstruction(NotExprOperationTag()) } final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { - tag = OnlyInstructionTag() and - operandTag instanceof UnaryOperandTag and - result = this.getOperand().getResult() + 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(OnlyInstructionTag()) } + final override Instruction getResult() { result = this.getInstruction(NotExprOperationTag()) } + + override string getInstructionConstantValue(InstructionTag tag) { + this.shouldGenerateEq() and + tag = NotExprConstantTag() and + result = "0" + } } /** From d58c48484c9c90780bff0571298a6b5c92faf350 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Nov 2024 11:16:47 +0000 Subject: [PATCH 08/14] C++: Accept test changes. --- .../library-tests/ir/ir/aliased_ir.expected | 110 ++++++++++-------- .../ir/ir/aliased_ssa_consistency.expected | 12 -- .../aliased_ssa_consistency_unsound.expected | 12 -- .../ir/ir/raw_consistency.expected | 12 -- .../test/library-tests/ir/ir/raw_ir.expected | 106 +++++++++-------- .../ir/ir/unaliased_ssa_consistency.expected | 12 -- ...unaliased_ssa_consistency_unsound.expected | 12 -- .../aliased_ssa_consistency.expected | 4 - .../syntax-zoo/raw_consistency.expected | 5 - .../unaliased_ssa_consistency.expected | 4 - 10 files changed, 120 insertions(+), 169 deletions(-) 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 579c0a8e7872..fc3068acd3d3 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -3321,23 +3321,25 @@ ir.c: # 86| Block 2 # 86| r86_1(glval) = VariableAddress[x1] : # 86| r86_2(int) = Load[x1] : &:r86_1, m84_6 -# 86| r86_3(bool) = 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(bool) = 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| 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 @@ -3350,14 +3352,15 @@ ir.c: # 90| Block 6 # 90| r90_1(glval) = VariableAddress[y] : -# 90| r90_2(int) = Load[y] : &:r90_1, m88_5 -# 90| r90_3(bool) = 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 @@ -3385,22 +3388,23 @@ ir.c: # 93| Block 11 # 93| r93_1(glval) = VariableAddress[x1] : # 93| r93_2(int) = Load[x1] : &:r93_1, m84_6 -# 93| r93_3(bool) = 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| r93_7(int) = Constant[0] : -# 93| r93_8(bool) = CompareNE : r93_6, r93_7 -# 93| v93_9(void) = ConditionalBranch : r93_8 +# 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_10(void) = NoOp : +# 93| v93_11(void) = NoOp : #-----| Goto -> Block 14 # 94| Block 14 @@ -3415,33 +3419,36 @@ ir.c: # 94| Block 15 # 94| r94_6(glval) = VariableAddress[x2] : # 94| r94_7(int) = Load[x2] : &:r94_6, m84_8 -# 94| r94_8(bool) = LogicalNot : r94_7 -# 94| v94_9(void) = ConditionalBranch : r94_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_10(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(bool) = 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(bool) = 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 @@ -3469,22 +3476,23 @@ ir.c: # 97| Block 23 # 97| r97_1(glval) = VariableAddress[x1] : # 97| r97_2(int) = Load[x1] : &:r97_1, m84_6 -# 97| r97_3(bool) = 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| r97_7(int) = Constant[0] : -# 97| r97_8(bool) = CompareNE : r97_6, r97_7 -# 97| v97_9(void) = ConditionalBranch : r97_8 +# 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_10(void) = NoOp : +# 97| v97_11(void) = NoOp : #-----| Goto -> Block 26 # 98| Block 26 @@ -3499,33 +3507,36 @@ ir.c: # 98| Block 27 # 98| r98_6(glval) = VariableAddress[x2] : # 98| r98_7(int) = Load[x2] : &:r98_6, m84_8 -# 98| r98_8(bool) = LogicalNot : r98_7 -# 98| v98_9(void) = ConditionalBranch : r98_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_10(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(bool) = 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(bool) = 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 @@ -3579,13 +3590,14 @@ ir.c: # 103| Block 38 # 103| r103_1(glval) = VariableAddress[x_1_and_2] : # 103| r103_2(int) = Load[x_1_and_2] : &:r103_1, m101_13 -# 103| r103_3(bool) = 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 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 a03c48dcab09..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,16 +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: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: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: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: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 | 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 | 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: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: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 | 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 | 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: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) | 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 a03c48dcab09..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,16 +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: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: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: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: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 | 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 | 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: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: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 | 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 | 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: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) | missingCppType 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 72497133026b..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,16 +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: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: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: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: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 | 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 | 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: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: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 | 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 | 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: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) | 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 62bfcc9c15aa..3dd8b13196a1 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -3119,21 +3119,23 @@ ir.c: # 86| Block 2 # 86| r86_1(glval) = VariableAddress[x1] : # 86| r86_2(int) = Load[x1] : &:r86_1, ~m? -# 86| r86_3(bool) = 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(bool) = 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| r89_3(int) = Constant[0] : @@ -3149,13 +3151,14 @@ ir.c: # 90| Block 6 # 90| r90_1(glval) = VariableAddress[y] : # 90| r90_2(int) = Load[y] : &:r90_1, ~m? -# 90| r90_3(bool) = 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 @@ -3183,22 +3186,23 @@ ir.c: # 93| Block 11 # 93| r93_1(glval) = VariableAddress[x1] : # 93| r93_2(int) = Load[x1] : &:r93_1, ~m? -# 93| r93_3(bool) = 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| r93_7(int) = Constant[0] : -# 93| r93_8(bool) = CompareNE : r93_6, r93_7 -# 93| v93_9(void) = ConditionalBranch : r93_8 +# 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_10(void) = NoOp : +# 93| v93_11(void) = NoOp : #-----| Goto -> Block 14 # 94| Block 14 @@ -3213,33 +3217,36 @@ ir.c: # 94| Block 15 # 94| r94_6(glval) = VariableAddress[x2] : # 94| r94_7(int) = Load[x2] : &:r94_6, ~m? -# 94| r94_8(bool) = LogicalNot : r94_7 -# 94| v94_9(void) = ConditionalBranch : r94_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_10(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(bool) = 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(bool) = 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 @@ -3267,22 +3274,23 @@ ir.c: # 97| Block 23 # 97| r97_1(glval) = VariableAddress[x1] : # 97| r97_2(int) = Load[x1] : &:r97_1, ~m? -# 97| r97_3(bool) = 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| r97_7(int) = Constant[0] : -# 97| r97_8(bool) = CompareNE : r97_6, r97_7 -# 97| v97_9(void) = ConditionalBranch : r97_8 +# 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_10(void) = NoOp : +# 97| v97_11(void) = NoOp : #-----| Goto -> Block 26 # 98| Block 26 @@ -3297,33 +3305,36 @@ ir.c: # 98| Block 27 # 98| r98_6(glval) = VariableAddress[x2] : # 98| r98_7(int) = Load[x2] : &:r98_6, ~m? -# 98| r98_8(bool) = LogicalNot : r98_7 -# 98| v98_9(void) = ConditionalBranch : r98_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_10(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(bool) = 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(bool) = 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 @@ -3376,13 +3387,14 @@ ir.c: # 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(bool) = 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 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 a03c48dcab09..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,16 +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: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: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: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: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 | 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 | 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: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: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 | 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 | 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: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) | 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 a03c48dcab09..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,16 +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: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: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: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: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 | 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 | 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: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: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 | 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 | 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: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) | 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 960dc503c192..27eee75a823a 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 @@ -45,8 +45,4 @@ nonBooleanOperand | 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) | -| 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 | 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) | -| 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: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() | 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 f7cc94c086ec..72e60a16ff29 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected @@ -43,7 +43,6 @@ 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 -| 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: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*) | | 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) | @@ -55,8 +54,4 @@ nonBooleanOperand | 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) | -| 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 | 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) | -| 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: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() | 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 960dc503c192..27eee75a823a 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 @@ -45,8 +45,4 @@ nonBooleanOperand | 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) | -| 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 | 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) | -| 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: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() | missingCppType From b7144e3ac2dd002b2438fd8205749976132de20b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Nov 2024 11:06:07 +0000 Subject: [PATCH 09/14] C++: Insert int-to-bool conversions at binary conditional expressions. --- .../raw/internal/InstructionTag.qll | 6 +++ .../raw/internal/TranslatedExpr.qll | 51 ++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) 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 b984a5c7e1bf..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 @@ -41,6 +41,8 @@ newtype TInstructionTag = ValueConditionCompareTag() or ValueConditionConstantTag() or ValueConditionConditionalBranchTag() or + ValueConditionConditionalConstantTag() or + ValueConditionConditionalCompareTag() or ConditionValueTrueTempAddressTag() or ConditionValueTrueConstantTag() or ConditionValueTrueStoreTag() or @@ -171,6 +173,10 @@ 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" 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 c6d590e828ec..e9f28c31917c 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 @@ -2965,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 @@ -2972,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 @@ -2992,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) { @@ -3000,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() { @@ -3017,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" + } } /** From f1a17ae55184b2b49b546f703e37d7cf0c7cb2fc Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Nov 2024 11:19:01 +0000 Subject: [PATCH 10/14] C++: Accept test changes. --- .../syntax-zoo/aliased_ssa_consistency.expected | 11 ----------- .../library-tests/syntax-zoo/raw_consistency.expected | 11 ----------- .../syntax-zoo/unaliased_ssa_consistency.expected | 11 ----------- 3 files changed, 33 deletions(-) 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 27eee75a823a..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,15 +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 -| 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*) | -| 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: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) | 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 72e60a16ff29..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,15 +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 -| 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*) | -| 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: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) | 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 27eee75a823a..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,15 +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 -| 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*) | -| 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: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) | missingCppType From dc46d45471e7408bd1e361717eb253ecbd6a24a5 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Nov 2024 16:59:29 +0000 Subject: [PATCH 11/14] C++: Accept Guards test changes. --- .../controlflow/guards-ir/tests.expected | 243 +++++++----------- .../controlflow/guards/Guards.expected | 10 - .../controlflow/guards/GuardsCompare.expected | 23 +- .../controlflow/guards/GuardsControl.expected | 14 - .../controlflow/guards/GuardsEnsure.expected | 24 +- 5 files changed, 105 insertions(+), 209 deletions(-) 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..aad0f2f63f69 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -20,22 +20,12 @@ astGuards | test.c:109:9:109:14 | ... == ... | | test.c:109:9:109:23 | ... \|\| ... | | test.c:109:19:109:23 | ... < ... | -| test.c:126:7:126:7 | 1 | -| test.c:126:7:126:28 | ... && ... | -| test.c:126:12:126:26 | call to test3_condition | -| test.c:131:7:131:7 | b | -| test.c:137:7:137:7 | 0 | | test.c:146:7:146:8 | ! ... | -| test.c:146:8:146:8 | x | -| test.c:152:10:152:10 | x | -| test.c:152:10:152:15 | ... && ... | -| test.c:152:15:152:15 | y | | test.c:156:9:156:19 | ... == ... | | test.c:159:9:159:19 | ... == ... | | test.c:162:9:162:18 | ... < ... | | test.c:165:9:165:18 | ... < ... | | test.c:175:13:175:32 | ... == ... | -| test.c:181:9:181:9 | x | | test.cpp:18:8:18:10 | call to get | | test.cpp:31:7:31:13 | ... == ... | | test.cpp:42:13:42:20 | call to getABool | @@ -194,27 +184,10 @@ astGuardsCompare | 109 | y < 0+0 when ... < ... is true | | 109 | y >= 0+0 when ... < ... is false | | 109 | y >= 0+0 when ... \|\| ... is false | -| 126 | 1 != 0 when 1 is true | -| 126 | 1 != 0 when ... && ... is true | -| 126 | 1 == 0 when 1 is false | -| 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 == 0 when call to test3_condition is false | -| 131 | b != 0 when b is true | -| 131 | b == 0 when b is false | -| 137 | 0 != 0 when 0 is true | -| 137 | 0 == 0 when 0 is false | | 146 | ! ... != 0 when ! ... is true | | 146 | ! ... == 0 when ! ... is false | | 146 | x != 0 when ! ... is false | -| 146 | x != 0 when x is true | -| 146 | x == 0 when x is false | -| 152 | x != 0 when ... && ... is true | -| 152 | x != 0 when x is true | -| 152 | x == 0 when x is false | -| 152 | y != 0 when ... && ... is true | -| 152 | y != 0 when y is true | -| 152 | y == 0 when y is false | +| 146 | x == 0 when ! ... is true | | 156 | ... + ... != x+0 when ... == ... is false | | 156 | ... + ... == x+0 when ... == ... is true | | 156 | ... == ... != 0 when ... == ... is true | @@ -263,8 +236,6 @@ astGuardsCompare | 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 == 0 when x is false | astGuardsControl | test.c:7:9:7:13 | ... > ... | false | 10 | 11 | | test.c:7:9:7:13 | ... > ... | true | 7 | 9 | @@ -336,30 +307,13 @@ astGuardsControl | test.c:109:9:109:14 | ... == ... | false | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | false | 113 | 113 | | test.c:109:19:109:23 | ... < ... | false | 113 | 113 | -| test.c:126:7:126:7 | 1 | true | 126 | 126 | -| test.c:126:7:126:7 | 1 | true | 126 | 128 | -| test.c:126:7:126:7 | 1 | true | 131 | 131 | -| test.c:126:7:126:7 | 1 | true | 131 | 132 | -| test.c:126:7:126:7 | 1 | true | 134 | 123 | -| test.c:126:7:126:28 | ... && ... | true | 126 | 128 | -| test.c:126:12:126:26 | call to test3_condition | true | 126 | 128 | -| test.c:131:7:131:7 | b | true | 131 | 132 | -| test.c:137:7:137:7 | 0 | false | 142 | 136 | | test.c:146:7:146:8 | ! ... | true | 146 | 147 | -| test.c:146:8:146:8 | x | false | 146 | 147 | -| test.c:152:10:152:10 | x | true | 151 | 152 | -| test.c:152:10:152:10 | x | true | 152 | 152 | -| test.c:152:10:152:15 | ... && ... | true | 151 | 152 | -| test.c:152:15:152:15 | y | true | 151 | 152 | | test.c:156:9:156:19 | ... == ... | true | 156 | 157 | | test.c:159:9:159:19 | ... == ... | true | 159 | 160 | | test.c:162:9:162:18 | ... < ... | true | 162 | 163 | | test.c:165:9:165:18 | ... < ... | true | 165 | 166 | | test.c:175:13:175:32 | ... == ... | false | 175 | 175 | | test.c:175:13:175:32 | ... == ... | true | 175 | 175 | -| test.c:181:9:181:9 | x | false | 183 | 184 | -| test.c:181:9:181:9 | x | true | 181 | 182 | -| test.c:181:9:181:9 | x | true | 186 | 180 | | 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 | @@ -660,29 +614,8 @@ astGuardsEnsure_const | 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 | ... < ... | == | 0 | 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:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | 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:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 | -| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 | -| 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: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:15 | ... && ... | test.c:152:10:152:10 | x | != | 0 | 151 | 152 | -| test.c:152:10:152:15 | ... && ... | test.c:152:15:152:15 | y | != | 0 | 151 | 152 | -| test.c:152:15:152:15 | y | test.c:152:15:152:15 | y | != | 0 | 151 | 152 | +| test.c:146:7:146:8 | ! ... | test.c:146:8:146:8 | x | == | 0 | 146 | 147 | | test.c:156:9:156:19 | ... == ... | test.c:156:9:156:19 | ... == ... | != | 0 | 156 | 157 | | test.c:159:9:159:19 | ... == ... | test.c:159:9:159:19 | ... == ... | != | 0 | 159 | 160 | | test.c:162:9:162:18 | ... < ... | test.c:162:9:162:18 | ... < ... | != | 0 | 162 | 163 | @@ -691,9 +624,6 @@ astGuardsEnsure_const | 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 | ... == ... | == | 0 | 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 | == | 0 | 183 | 184 | | test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 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 | @@ -723,20 +653,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 | @@ -889,23 +818,22 @@ 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 == 0 when CompareNE: 1 is false | +| 126 | call to test3_condition != 0 when CompareNE: call to test3_condition is true | +| 126 | call to test3_condition == 0 when CompareNE: call to test3_condition is false | +| 131 | b != 0 when CompareNE: b is true | +| 131 | b == 0 when CompareNE: b is false | +| 137 | 0 != 0 when CompareNE: 0 is true | +| 137 | 0 == 0 when CompareNE: 0 is false | +| 146 | ! ... != 0 when CompareEQ: ! ... is true | +| 146 | ! ... == 0 when CompareEQ: ! ... is false | +| 146 | x != 0 when CompareEQ: ! ... is false | +| 146 | x == 0 when CompareEQ: ! ... is true | +| 152 | x != 0 when CompareNE: x is true | +| 152 | x == 0 when CompareNE: x is false | +| 152 | y != 0 when CompareNE: y is true | +| 152 | y == 0 when CompareNE: y is false | | 156 | ... + ... != x+0 when CompareEQ: ... == ... is false | | 156 | ... + ... == x+0 when CompareEQ: ... == ... is true | | 156 | ... == ... != 0 when CompareEQ: ... == ... is true | @@ -954,8 +882,8 @@ irGuardsCompare | 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 == 0 when CompareNE: x is false | irGuardsControl | test.c:7:9:7:13 | CompareGT: ... > ... | false | 11 | 11 | | test.c:7:9:7:13 | CompareGT: ... > ... | true | 8 | 8 | @@ -1023,26 +951,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 +1117,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 +1159,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 | @@ -1359,32 +1312,34 @@ irGuardsEnsure_const | 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: ... < ... | == | 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 | 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: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 | Load: b | != | 0 | 132 | 132 | +| 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: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 | 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 | Load: y | != | 0 | 152 | 152 | | test.c:156:9:156:19 | CompareEQ: ... == ... | test.c:156:9:156:19 | CompareEQ: ... == ... | != | 0 | 156 | 157 | | test.c:159:9:159:19 | CompareEQ: ... == ... | test.c:159:9:159:19 | CompareEQ: ... == ... | != | 0 | 159 | 160 | | test.c:162:9:162:18 | CompareLT: ... < ... | test.c:162:9:162:18 | CompareLT: ... < ... | != | 0 | 162 | 163 | @@ -1393,10 +1348,10 @@ irGuardsEnsure_const | 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: ... == ... | == | 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: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 | == | 0 | 184 | 184 | +| 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:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | -1 | 34 | 34 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected index 757356c247cd..9fe0a81430da 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected @@ -19,19 +19,9 @@ | test.c:109:9:109:14 | ... == ... | | test.c:109:9:109:23 | ... \|\| ... | | test.c:109:19:109:23 | ... < ... | -| test.c:126:7:126:7 | 1 | -| test.c:126:7:126:28 | ... && ... | -| test.c:126:12:126:26 | call to test3_condition | -| test.c:131:7:131:7 | b | -| test.c:137:7:137:7 | 0 | | test.c:146:7:146:8 | ! ... | -| test.c:146:8:146:8 | x | -| test.c:152:8:152:8 | p | | test.c:158:8:158:9 | ! ... | -| test.c:158:9:158:9 | p | -| test.c:164:8:164:8 | s | | test.c:170:8:170:9 | ! ... | -| test.c:170:9:170:9 | s | | test.cpp:18:8:18:10 | call to get | | test.cpp:31:7:31:13 | ... == ... | | test.cpp:42:13:42:20 | call to getABool | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 4f44591e0b81..3546c0af0ac8 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -208,12 +208,6 @@ | 125 | call to safe != 0 when ! ... is false | | 125 | call to safe != 0 when call to safe is true | | 125 | call to safe == 0 when call to safe is false | -| 126 | 1 != 0 when 1 is true | -| 126 | 1 != 0 when ... && ... is true | -| 126 | 1 == 0 when 1 is false | -| 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 == 0 when call to test3_condition is false | | 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 | @@ -222,9 +216,7 @@ | 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 != a+-42 when call to __builtin_expect is false | -| 131 | b == 0 when b is false | | 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 == 0 when call to __builtin_expect is false | @@ -240,8 +232,6 @@ | 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 == 0 when call to __builtin_expect is false | -| 137 | 0 != 0 when 0 is true | -| 137 | 0 == 0 when 0 is false | | 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 | @@ -265,19 +255,12 @@ | 146 | ! ... != 0 when ! ... is true | | 146 | ! ... == 0 when ! ... is false | | 146 | x != 0 when ! ... is false | -| 146 | x != 0 when x is true | -| 146 | x == 0 when x is false | -| 152 | p != 0 when p is true | -| 152 | p == 0 when p is false | +| 146 | x == 0 when ! ... is true | | 158 | ! ... != 0 when ! ... is true | | 158 | ! ... == 0 when ! ... is false | | 158 | p != 0 when ! ... is false | -| 158 | p != 0 when p is true | -| 158 | p == 0 when p is false | -| 164 | s != 0 when s is true | -| 164 | s == 0 when s is false | +| 158 | p == 0 when ! ... is true | | 170 | ! ... != 0 when ! ... is true | | 170 | ! ... == 0 when ! ... is false | | 170 | s != 0 when ! ... is false | -| 170 | s != 0 when s is true | -| 170 | s == 0 when s is false | +| 170 | s == 0 when ! ... is true | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected index 83275c8011f9..44c6bf1f802a 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected @@ -68,23 +68,9 @@ | test.c:109:9:109:14 | ... == ... | false | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | false | 113 | 113 | | test.c:109:19:109:23 | ... < ... | false | 113 | 113 | -| test.c:126:7:126:7 | 1 | true | 126 | 126 | -| test.c:126:7:126:7 | 1 | true | 126 | 128 | -| test.c:126:7:126:7 | 1 | true | 131 | 131 | -| test.c:126:7:126:7 | 1 | true | 131 | 132 | -| test.c:126:7:126:7 | 1 | true | 134 | 123 | -| test.c:126:7:126:28 | ... && ... | true | 126 | 128 | -| test.c:126:12:126:26 | call to test3_condition | true | 126 | 128 | -| test.c:131:7:131:7 | b | true | 131 | 132 | -| test.c:137:7:137:7 | 0 | false | 142 | 136 | | test.c:146:7:146:8 | ! ... | true | 146 | 147 | -| test.c:146:8:146:8 | x | false | 146 | 147 | -| test.c:152:8:152:8 | p | true | 152 | 154 | | test.c:158:8:158:9 | ! ... | true | 158 | 160 | -| test.c:158:9:158:9 | p | false | 158 | 160 | -| 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.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 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected index c41cdfd6063d..62718db35677 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected @@ -340,30 +340,12 @@ unary | 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 | ... < ... | == | 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:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | 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:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 | -| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 | -| 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: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:146:7:146:8 | ! ... | test.c:146:8:146:8 | x | == | 0 | 146 | 147 | | test.c:158:8:158:9 | ! ... | test.c:158:8:158:9 | ! ... | != | 0 | 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:158:8:158:9 | ! ... | test.c:158:9:158:9 | p | == | 0 | 158 | 160 | | test.c:170:8:170:9 | ! ... | test.c:170:8:170:9 | ! ... | != | 0 | 170 | 172 | -| test.c:170:9:170:9 | s | test.c:170:9:170:9 | s | == | 0 | 170 | 172 | +| test.c:170:8:170:9 | ! ... | test.c:170:9:170:9 | s | == | 0 | 170 | 172 | | test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 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 | From 9787712f98a6e1da96365d1d2d6cf5bf2c0d902e Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Nov 2024 13:04:47 +0000 Subject: [PATCH 12/14] C++: Remove the 'inNonZeroCase' column. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 97 ++---- .../controlflow/guards-ir/tests.expected | 300 ++++++++++++++++++ .../controlflow/guards/GuardsCompare.expected | 87 +++++ .../controlflow/guards/GuardsEnsure.expected | 107 +++++++ 4 files changed, 519 insertions(+), 72 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index f16dbd3d49df..b90ec6019a9b 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -681,7 +681,7 @@ class IRGuardCondition extends Instruction { /** Holds if (determined by this guard) `op == k` evaluates to `areEqual` if this expression evaluates to `value`. */ cached 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) } /** @@ -703,7 +703,7 @@ class IRGuardCondition extends Instruction { cached 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) ) } @@ -729,7 +729,7 @@ class IRGuardCondition extends Instruction { cached 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) ) } @@ -866,72 +866,34 @@ private predicate compares_eq( /** * 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. */ private 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) + unary_compares_eq(test.(BuiltinExpectCallValueNumber).getCondition(), op, k, areEqual, value) } /** Rearrange various simple comparisons into `left == right + k` form. */ @@ -1000,27 +962,24 @@ private predicate isRelevantUnaryComparisonOperand(Operand op) { /** 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 - value.(BooleanValue).getValue() = true and - inNonZeroCase = true + value.(BooleanValue).getValue() = true or k = 0 and - value.(BooleanValue).getValue() = false and - inNonZeroCase = false + value.(BooleanValue).getValue() = false ) } @@ -1074,13 +1033,12 @@ private predicate complex_eq( * 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 @@ -1091,13 +1049,13 @@ private predicate unary_builtin_expect_eq( } 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) } /* @@ -1357,19 +1315,17 @@ private predicate sub_eq( // 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 @@ -1424,12 +1380,10 @@ private predicate add_eq( // 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 @@ -1438,9 +1392,8 @@ private predicate unary_add_eq( 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/test/library-tests/controlflow/guards-ir/tests.expected b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected index aad0f2f63f69..f891caeeb048 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -33,7 +33,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 | @@ -44,10 +46,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 | @@ -55,17 +63,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 | @@ -73,27 +87,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 | @@ -103,11 +127,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 | @@ -120,7 +150,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 | @@ -133,10 +165,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 | @@ -152,7 +190,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 | @@ -160,7 +200,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 | @@ -170,11 +212,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 | @@ -185,13 +233,17 @@ astGuardsCompare | 109 | y >= 0+0 when ... < ... is false | | 109 | y >= 0+0 when ... \|\| ... is false | | 146 | ! ... != 0 when ! ... is true | +| 146 | ! ... != 1 when ! ... is false | | 146 | ! ... == 0 when ! ... is false | +| 146 | ! ... == 1 when ! ... is true | | 146 | x != 0 when ! ... is false | | 146 | x == 0 when ! ... 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 | @@ -201,7 +253,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 | @@ -211,7 +265,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 | @@ -221,7 +277,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 | @@ -231,7 +289,9 @@ 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 | @@ -510,13 +570,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 | @@ -530,7 +610,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 | @@ -542,48 +634,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 | @@ -593,6 +713,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 | @@ -600,41 +727,67 @@ 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: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: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.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: ... < ... | @@ -673,7 +826,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 | @@ -683,9 +838,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 | @@ -695,11 +854,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 | @@ -707,7 +870,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 | @@ -715,7 +880,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 | @@ -723,9 +890,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 | @@ -733,7 +904,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 | @@ -741,7 +914,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 | @@ -751,9 +926,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 | @@ -765,7 +944,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 | @@ -775,9 +956,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 | @@ -789,7 +974,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 | @@ -797,7 +984,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 | @@ -807,9 +996,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 | @@ -827,7 +1020,9 @@ irGuardsCompare | 137 | 0 != 0 when CompareNE: 0 is true | | 137 | 0 == 0 when CompareNE: 0 is false | | 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 | @@ -837,7 +1032,9 @@ irGuardsCompare | 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 | @@ -847,7 +1044,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 | @@ -857,7 +1056,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 | @@ -867,7 +1068,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 | @@ -877,7 +1080,9 @@ 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 | @@ -1175,13 +1380,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 | @@ -1198,6 +1408,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 | @@ -1212,6 +1436,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 | @@ -1225,6 +1450,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 | @@ -1236,6 +1472,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 | @@ -1244,38 +1481,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 | @@ -1286,6 +1543,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 | @@ -1294,6 +1559,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 | @@ -1301,22 +1567,36 @@ 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 | 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 | @@ -1329,36 +1609,56 @@ irGuardsEnsure_const | 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: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/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 3546c0af0ac8..0faeb1bdb076 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,20 +252,33 @@ | 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 | ! ... != 1 when ! ... is false | | 125 | ! ... == 0 when ! ... is false | +| 125 | ! ... == 1 when ! ... is true | | 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 | | 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 | ... == ... != 1 when call to __builtin_expect is false | | 131 | ... == ... == 0 when call to __builtin_expect is false | +| 131 | ... == ... == 1 when call to __builtin_expect is true | | 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 | @@ -219,9 +286,13 @@ | 131 | b != a+-42 when call to __builtin_expect is false | | 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 | +| 131 | call to __builtin_expect == 1 when call to __builtin_expect is true | | 135 | ... != ... != 0 when call to __builtin_expect is true | +| 135 | ... != ... != 1 when call to __builtin_expect is false | | 135 | ... != ... == 0 when call to __builtin_expect is false | +| 135 | ... != ... == 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 | @@ -231,36 +302,52 @@ | 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 | | 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 | ... == ... != 1 when call to __builtin_expect is false | | 141 | ... == ... == 0 when call to __builtin_expect is false | +| 141 | ... == ... == 1 when call to __builtin_expect is true | | 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 | ... != ... != 1 when call to __builtin_expect is false | | 145 | ... != ... == 0 when call to __builtin_expect is false | +| 145 | ... != ... == 1 when call to __builtin_expect is true | | 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 | ! ... != 1 when ! ... is false | | 146 | ! ... == 0 when ! ... is false | +| 146 | ! ... == 1 when ! ... is true | | 146 | x != 0 when ! ... is false | | 146 | x == 0 when ! ... is true | | 158 | ! ... != 0 when ! ... is true | +| 158 | ! ... != 1 when ! ... is false | | 158 | ! ... == 0 when ! ... is false | +| 158 | ! ... == 1 when ! ... is true | | 158 | p != 0 when ! ... is false | | 158 | p == 0 when ! ... is true | | 170 | ! ... != 0 when ! ... is true | +| 170 | ! ... != 1 when ! ... is false | | 170 | ! ... == 0 when ! ... is false | +| 170 | ! ... == 1 when ! ... is true | | 170 | s != 0 when ! ... is false | | 170 | s == 0 when ! ... is true | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected index 62718db35677..833712230e83 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected @@ -185,17 +185,24 @@ 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 +218,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 +244,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 +258,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 +280,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 +291,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 +371,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 +385,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,38 +393,59 @@ 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: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: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: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.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 | @@ -364,20 +453,38 @@ 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: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:6:131:21 | call to __builtin_expect | == | 1 | 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:23:131:33 | ... == ... | == | 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:6:135:21 | call to __builtin_expect | == | 1 | 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:23:135:33 | ... != ... | == | 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:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:29 | ... == ... | == | 1 | 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:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:29 | ... != ... | == | 1 | 145 | 146 | From 93e78f509a2d08368c85d9dd93c8999ed0f693a5 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Nov 2024 14:52:52 +0000 Subject: [PATCH 13/14] C++: Remove the C specific things in the Guards library. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 61 +- .../controlflow/guards-ir/tests.expected | 595 ------------------ .../controlflow/guards/GuardsCompare.expected | 160 ----- .../controlflow/guards/GuardsEnsure.expected | 206 ------ 4 files changed, 5 insertions(+), 1017 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index b90ec6019a9b..2154813b7faa 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -911,55 +911,6 @@ private predicate simple_comparison_eq( value.(BooleanValue).getValue() = false } -/** - * 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) - or - // If `!x` is a relevant unary comparison then so is `x`. - exists(LogicalNotInstruction logicalNot | - isRelevantUnaryComparisonOperand(unique( | | logicalNot.getAUse())) and - logicalNot.getUnaryOperand() = op - ) - 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() - ) - 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() - ) - 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() - ) -} - /** Rearrange various simple comparisons into `op == k` form. */ private predicate unary_simple_comparison_eq( ValueNumber test, Operand op, int k, AbstractValue value @@ -972,14 +923,12 @@ private predicate unary_simple_comparison_eq( case.getValue().toInt() = k ) or - isRelevantUnaryComparisonOperand(op) and - op.getDef() = test.getAnInstruction() and - ( - k = 1 and - value.(BooleanValue).getValue() = true + exists(Instruction const | int_value(const) = k | + value.(BooleanValue).getValue() = true and + test.(CompareEQValueNumber).hasOperands(op, const.getAUse()) or - k = 0 and - value.(BooleanValue).getValue() = false + value.(BooleanValue).getValue() = false and + test.(CompareNEValueNumber).hasOperands(op, const.getAUse()) ) } 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 f891caeeb048..b08194691c6d 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -32,10 +32,6 @@ astGuards 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 | @@ -44,18 +40,6 @@ astGuardsCompare | 17 | 1 < y+0 when ... && ... is true | | 17 | 1 < y+0 when ... > ... is true | | 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 | @@ -63,61 +47,31 @@ 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 | | 31 | x == - ...+0 when ... == ... is true | | 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 | @@ -126,18 +80,6 @@ astGuardsCompare | 58 | 0 < y+1 when ... \|\| ... is false | | 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 | @@ -149,10 +91,6 @@ astGuardsCompare | 58 | y >= 0+0 when ... \|\| ... is false | | 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 | @@ -163,18 +101,6 @@ astGuardsCompare | 85 | 0 == x+0 when ... && ... is true | | 85 | 0 == x+0 when ... == ... is true | | 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 | @@ -189,20 +115,12 @@ astGuardsCompare | 85 | y == 0+0 when ... != ... is false | | 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 | | 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 | @@ -211,18 +129,6 @@ astGuardsCompare | 109 | 0 < y+1 when ... \|\| ... is false | | 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 | @@ -232,18 +138,10 @@ astGuardsCompare | 109 | y < 0+0 when ... < ... is true | | 109 | y >= 0+0 when ... < ... is false | | 109 | y >= 0+0 when ... \|\| ... is false | -| 146 | ! ... != 0 when ! ... is true | -| 146 | ! ... != 1 when ! ... is false | -| 146 | ! ... == 0 when ! ... is false | -| 146 | ! ... == 1 when ! ... is true | | 146 | x != 0 when ! ... is false | | 146 | x == 0 when ! ... 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 | @@ -252,10 +150,6 @@ astGuardsCompare | 156 | y == x+-42 when ... == ... is true | | 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 | @@ -264,10 +158,6 @@ astGuardsCompare | 159 | y == x+42 when ... == ... is true | | 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 | @@ -276,10 +166,6 @@ astGuardsCompare | 162 | y >= x+-41 when ... < ... is true | | 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 | @@ -288,10 +174,6 @@ astGuardsCompare | 165 | y >= x+43 when ... < ... is true | | 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 | @@ -569,141 +451,21 @@ astGuardsEnsure | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 30 | 30 | | 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 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 39 | 42 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 42 | 42 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 42 | 44 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 45 | 45 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 45 | 47 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 51 | 53 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 56 | 58 | -| 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 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 42 | 44 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 45 | 45 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 45 | 47 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 51 | 53 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 56 | 58 | -| 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 | @@ -712,82 +474,17 @@ astGuardsEnsure_const | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 109 | | 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 | -| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 107 | 109 | -| 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: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: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.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: ... < ... | @@ -825,10 +522,6 @@ irGuards 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 | @@ -837,14 +530,6 @@ irGuardsCompare | 17 | 0 >= x+1 when CompareLT: ... < ... is true | | 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 | @@ -854,69 +539,39 @@ 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 | | 26 | x >= 1 when CompareGT: ... > ... is true | | 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 | | 31 | x == - ...+0 when CompareEQ: ... == ... is true | | 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 | | 34 | j >= 10+0 when CompareLT: ... < ... is false | | 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 | | 42 | j >= 10+0 when CompareLT: ... < ... is false | | 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 | | 44 | z >= 1 when CompareGT: ... > ... is true | | 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 | @@ -925,14 +580,6 @@ irGuardsCompare | 58 | 0 < y+1 when CompareLT: ... < ... is false | | 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 | @@ -943,10 +590,6 @@ irGuardsCompare | 58 | y >= 0+0 when CompareLT: ... < ... is false | | 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 | @@ -955,14 +598,6 @@ irGuardsCompare | 85 | 0 != y+0 when CompareNE: ... != ... is true | | 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 | @@ -973,20 +608,12 @@ irGuardsCompare | 85 | y == 0+0 when CompareNE: ... != ... is false | | 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 | | 94 | x == 0+0 when CompareNE: ... != ... is false | | 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 | @@ -995,14 +622,6 @@ irGuardsCompare | 109 | 0 < y+1 when CompareLT: ... < ... is false | | 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 | @@ -1019,10 +638,6 @@ irGuardsCompare | 131 | b == 0 when CompareNE: b is false | | 137 | 0 != 0 when CompareNE: 0 is true | | 137 | 0 == 0 when CompareNE: 0 is false | -| 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 | @@ -1031,10 +646,6 @@ irGuardsCompare | 152 | y == 0 when CompareNE: y is false | | 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 | @@ -1043,10 +654,6 @@ irGuardsCompare | 156 | y == x+-42 when CompareEQ: ... == ... is true | | 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 | @@ -1055,10 +662,6 @@ irGuardsCompare | 159 | y == x+42 when CompareEQ: ... == ... is true | | 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 | @@ -1067,10 +670,6 @@ irGuardsCompare | 162 | y >= x+-41 when CompareLT: ... < ... is true | | 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 | @@ -1079,10 +678,6 @@ irGuardsCompare | 165 | y >= x+43 when CompareLT: ... < ... is true | | 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 | @@ -1379,19 +974,9 @@ irGuardsEnsure 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 | @@ -1407,36 +992,6 @@ irGuardsEnsure_const | test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 59 | 59 | | 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 | -| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 35 | 35 | -| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 39 | 39 | -| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 42 | 42 | -| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 43 | 43 | -| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 45 | 45 | -| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 46 | 46 | -| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 52 | 52 | -| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:15 | CompareGT: ... > ... | == | 0 | 56 | 56 | -| 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 | @@ -1449,90 +1004,26 @@ irGuardsEnsure_const | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 58 | 58 | | 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 | -| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 43 | 43 | -| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 45 | 45 | -| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 46 | 46 | -| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 52 | 52 | -| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 56 | 56 | -| 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 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 52 | 52 | -| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 43 | 43 | -| 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 | @@ -1542,61 +1033,15 @@ irGuardsEnsure_const | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 109 | 109 | | 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 | -| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | == | 0 | 103 | 103 | -| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:16 | CompareNE: ... != ... | == | 0 | 107 | 107 | -| 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 | | test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 109 | 109 | | 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 | 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 | @@ -1608,57 +1053,17 @@ irGuardsEnsure_const | 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: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/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 0faeb1bdb076..e97045715998 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -1,9 +1,5 @@ | 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,18 +10,6 @@ | 17 | 1 < y+0 when ... && ... is true | | 17 | 1 < y+0 when ... > ... is true | | 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 | @@ -39,69 +23,39 @@ | 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 | | 26 | x >= 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 | | 31 | x == - ...+0 when ... == ... is true | | 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 | | 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 when ... < ... is true | | 42 | j < 10+0 when ... < ... is true | | 42 | j >= 10 when ... < ... is false | | 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 < 1 when ... > ... is false | | 44 | z >= 0+1 when ... > ... is true | | 44 | z >= 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 < 1 when ... > ... is false | | 45 | y >= 0+1 when ... > ... is true | @@ -112,18 +66,6 @@ | 58 | 0 < y+1 when ... \|\| ... is false | | 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 | @@ -145,10 +87,6 @@ | 74 | i >= 11 when i is Case[11..20] | | 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 | @@ -159,18 +97,6 @@ | 85 | 0 == x+0 when ... && ... is true | | 85 | 0 == x+0 when ... == ... is true | | 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 | @@ -184,39 +110,21 @@ | 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 | | 102 | j >= 10+0 when ... < ... is false | | 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 | @@ -225,18 +133,6 @@ | 109 | 0 < y+1 when ... \|\| ... is false | | 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 | @@ -251,34 +147,10 @@ | 109 | y >= 0+0 when ... \|\| ... is false | | 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 | ! ... != 1 when ! ... is false | -| 125 | ! ... == 0 when ! ... is false | -| 125 | ! ... == 1 when ! ... is true | -| 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 | | 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 | ... == ... != 1 when call to __builtin_expect is false | -| 131 | ... == ... == 0 when call to __builtin_expect is false | -| 131 | ... == ... == 1 when call to __builtin_expect is true | | 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 | @@ -286,13 +158,7 @@ | 131 | b != a+-42 when call to __builtin_expect is false | | 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 | -| 131 | call to __builtin_expect == 1 when call to __builtin_expect is true | -| 135 | ... != ... != 0 when call to __builtin_expect is true | -| 135 | ... != ... != 1 when call to __builtin_expect is false | -| 135 | ... != ... == 0 when call to __builtin_expect is false | -| 135 | ... != ... == 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 | @@ -302,52 +168,26 @@ | 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 | | 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 | ... == ... != 1 when call to __builtin_expect is false | -| 141 | ... == ... == 0 when call to __builtin_expect is false | -| 141 | ... == ... == 1 when call to __builtin_expect is true | | 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 | ... != ... != 1 when call to __builtin_expect is false | -| 145 | ... != ... == 0 when call to __builtin_expect is false | -| 145 | ... != ... == 1 when call to __builtin_expect is true | | 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 | ! ... != 1 when ! ... is false | -| 146 | ! ... == 0 when ! ... is false | -| 146 | ! ... == 1 when ! ... is true | | 146 | x != 0 when ! ... is false | | 146 | x == 0 when ! ... is true | -| 158 | ! ... != 0 when ! ... is true | -| 158 | ! ... != 1 when ! ... is false | -| 158 | ! ... == 0 when ! ... is false | -| 158 | ! ... == 1 when ! ... is true | | 158 | p != 0 when ! ... is false | | 158 | p == 0 when ! ... is true | -| 170 | ! ... != 0 when ! ... is true | -| 170 | ! ... != 1 when ! ... is false | -| 170 | ! ... == 0 when ! ... is false | -| 170 | ! ... == 1 when ! ... is true | | 170 | s != 0 when ! ... is false | | 170 | s == 0 when ! ... is true | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected index 833712230e83..8d4d78f02a14 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected @@ -184,25 +184,11 @@ binary 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 | @@ -217,34 +203,6 @@ unary | test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 58 | 66 | | 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 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 39 | 42 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 42 | 42 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 42 | 44 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 45 | 45 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 45 | 47 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 51 | 53 | -| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 56 | 58 | -| 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 | @@ -257,111 +215,33 @@ unary | test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 58 | 58 | | 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 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 42 | 44 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 45 | 45 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 45 | 47 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 51 | 53 | -| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 56 | 58 | -| 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 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 45 | 47 | | test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 51 | 53 | -| 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: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 | @@ -370,82 +250,25 @@ unary | test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 109 | | 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 | -| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 107 | 109 | -| 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 | | test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 109 | 109 | | 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: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: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: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.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 | @@ -453,38 +276,9 @@ 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: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:6:131:21 | call to __builtin_expect | == | 1 | 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:23:131:33 | ... == ... | == | 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:6:135:21 | call to __builtin_expect | == | 1 | 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:23:135:33 | ... != ... | == | 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:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:29 | ... == ... | == | 1 | 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:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:29 | ... != ... | == | 1 | 145 | 146 | From c9b478b6b75983c45ba932b50311421c001dabe6 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Nov 2024 14:54:13 +0000 Subject: [PATCH 14/14] C++: Make 'getInstructionConvertedResultExpression' equivalent in C and C++. --- .../raw/internal/IRConstruction.qll | 14 +++++ .../controlflow/guards-ir/tests.expected | 61 +++++++++++++++++++ .../controlflow/guards/Guards.expected | 7 +++ .../controlflow/guards/GuardsCompare.expected | 14 +++++ .../controlflow/guards/GuardsControl.expected | 11 ++++ .../controlflow/guards/GuardsEnsure.expected | 12 ++++ 6 files changed, 119 insertions(+) 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..c068425a96e2 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,20 @@ 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 `getInstructionUnconvertedResultExpression` + // is the `BoolConversion`. Thus, calling `getInstructionConvertedResultExpression` 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. + exists(TranslatedValueCondition translatedValueCondition | + translatedValueCondition = getTranslatedCondition(result) and + translatedValueCondition.shouldGenerateCompareNE() and + instruction = translatedValueCondition.getInstruction(ValueConditionCompareTag()) + ) } cached 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 b08194691c6d..12e33f3a0a89 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -20,12 +20,21 @@ astGuards | test.c:109:9:109:14 | ... == ... | | test.c:109:9:109:23 | ... \|\| ... | | test.c:109:19:109:23 | ... < ... | +| test.c:126:7:126:7 | 1 | +| test.c:126:7:126:28 | ... && ... | +| test.c:126:12:126:26 | call to test3_condition | +| test.c:131:7:131:7 | b | +| test.c:137:7:137:7 | 0 | | test.c:146:7:146:8 | ! ... | +| test.c:152:10:152:10 | x | +| test.c:152:10:152:15 | ... && ... | +| test.c:152:15:152:15 | y | | test.c:156:9:156:19 | ... == ... | | test.c:159:9:159:19 | ... == ... | | test.c:162:9:162:18 | ... < ... | | test.c:165:9:165:18 | ... < ... | | test.c:175:13:175:32 | ... == ... | +| test.c:181:9:181:9 | x | | test.cpp:18:8:18:10 | call to get | | test.cpp:31:7:31:13 | ... == ... | | test.cpp:42:13:42:20 | call to getABool | @@ -138,8 +147,24 @@ astGuardsCompare | 109 | y < 0+0 when ... < ... is true | | 109 | y >= 0+0 when ... < ... is false | | 109 | y >= 0+0 when ... \|\| ... is false | +| 126 | 1 != 0 when 1 is true | +| 126 | 1 != 0 when ... && ... is true | +| 126 | 1 == 0 when 1 is false | +| 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 == 0 when call to test3_condition is false | +| 131 | b != 0 when b is true | +| 131 | b == 0 when b is false | +| 137 | 0 != 0 when 0 is true | +| 137 | 0 == 0 when 0 is false | | 146 | x != 0 when ! ... is false | | 146 | x == 0 when ! ... is true | +| 152 | x != 0 when ... && ... is true | +| 152 | x != 0 when x is true | +| 152 | x == 0 when x is false | +| 152 | y != 0 when ... && ... is true | +| 152 | y != 0 when y is true | +| 152 | y == 0 when y is false | | 156 | ... + ... != x+0 when ... == ... is false | | 156 | ... + ... == x+0 when ... == ... is true | | 156 | x != ... + ...+0 when ... == ... is false | @@ -178,6 +203,8 @@ astGuardsCompare | 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 == 0 when x is false | astGuardsControl | test.c:7:9:7:13 | ... > ... | false | 10 | 11 | | test.c:7:9:7:13 | ... > ... | true | 7 | 9 | @@ -249,13 +276,29 @@ astGuardsControl | test.c:109:9:109:14 | ... == ... | false | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | false | 113 | 113 | | test.c:109:19:109:23 | ... < ... | false | 113 | 113 | +| test.c:126:7:126:7 | 1 | true | 126 | 126 | +| test.c:126:7:126:7 | 1 | true | 126 | 128 | +| test.c:126:7:126:7 | 1 | true | 131 | 131 | +| test.c:126:7:126:7 | 1 | true | 131 | 132 | +| test.c:126:7:126:7 | 1 | true | 134 | 123 | +| test.c:126:7:126:28 | ... && ... | true | 126 | 128 | +| test.c:126:12:126:26 | call to test3_condition | true | 126 | 128 | +| test.c:131:7:131:7 | b | true | 131 | 132 | +| test.c:137:7:137:7 | 0 | false | 142 | 136 | | test.c:146:7:146:8 | ! ... | true | 146 | 147 | +| test.c:152:10:152:10 | x | true | 151 | 152 | +| test.c:152:10:152:10 | x | true | 152 | 152 | +| test.c:152:10:152:15 | ... && ... | true | 151 | 152 | +| test.c:152:15:152:15 | y | true | 151 | 152 | | test.c:156:9:156:19 | ... == ... | true | 156 | 157 | | test.c:159:9:159:19 | ... == ... | true | 159 | 160 | | test.c:162:9:162:18 | ... < ... | true | 162 | 163 | | test.c:165:9:165:18 | ... < ... | true | 165 | 166 | | test.c:175:13:175:32 | ... == ... | false | 175 | 175 | | test.c:175:13:175:32 | ... == ... | true | 175 | 175 | +| test.c:181:9:181:9 | x | false | 183 | 184 | +| test.c:181:9:181:9 | x | true | 181 | 182 | +| test.c:181:9:181:9 | x | true | 186 | 180 | | 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 | @@ -477,9 +520,27 @@ astGuardsEnsure_const | 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:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 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:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | 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 | != | 0 | 126 | 128 | +| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 | +| 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: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:15 | ... && ... | test.c:152:10:152:10 | x | != | 0 | 151 | 152 | +| test.c:152:10:152:15 | ... && ... | test.c:152:15:152:15 | y | != | 0 | 151 | 152 | +| test.c:152:15:152:15 | y | test.c:152:15:152:15 | y | != | 0 | 151 | 152 | | 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: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 | == | 0 | 183 | 184 | | test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 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 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected index 9fe0a81430da..c72ecf5d1186 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected @@ -19,8 +19,15 @@ | test.c:109:9:109:14 | ... == ... | | test.c:109:9:109:23 | ... \|\| ... | | test.c:109:19:109:23 | ... < ... | +| test.c:126:7:126:7 | 1 | +| test.c:126:7:126:28 | ... && ... | +| test.c:126:12:126:26 | call to test3_condition | +| test.c:131:7:131:7 | b | +| test.c:137:7:137:7 | 0 | | test.c:146:7:146:8 | ! ... | +| test.c:152:8:152:8 | p | | test.c:158:8:158:9 | ! ... | +| test.c:164:8:164:8 | s | | test.c:170:8:170:9 | ! ... | | test.cpp:18:8:18:10 | call to get | | test.cpp:31:7:31:13 | ... == ... | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index e97045715998..42bec6497b22 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -149,13 +149,21 @@ | 111 | 0.0 == i+0 when ... != ... is false | | 111 | i != 0.0+0 when ... != ... is true | | 111 | i == 0.0+0 when ... != ... is false | +| 126 | 1 != 0 when 1 is true | +| 126 | 1 != 0 when ... && ... is true | +| 126 | 1 == 0 when 1 is false | +| 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 == 0 when call to test3_condition is false | | 131 | ... + ... != a+0 when call to __builtin_expect is false | | 131 | ... + ... == a+0 when call to __builtin_expect is true | | 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 != a+-42 when call to __builtin_expect is false | +| 131 | b == 0 when b is false | | 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 == 0 when call to __builtin_expect is false | @@ -169,6 +177,8 @@ | 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 == 0 when call to __builtin_expect is false | +| 137 | 0 != 0 when 0 is true | +| 137 | 0 == 0 when 0 is false | | 141 | 42 != a+0 when call to __builtin_expect is false | | 141 | 42 == a+0 when call to __builtin_expect is true | | 141 | a != 42 when call to __builtin_expect is false | @@ -187,7 +197,11 @@ | 145 | call to __builtin_expect == 0 when call to __builtin_expect is false | | 146 | x != 0 when ! ... is false | | 146 | x == 0 when ! ... is true | +| 152 | p != 0 when p is true | +| 152 | p == 0 when p is false | | 158 | p != 0 when ! ... is false | | 158 | p == 0 when ! ... is true | +| 164 | s != 0 when s is true | +| 164 | s == 0 when s is false | | 170 | s != 0 when ! ... is false | | 170 | s == 0 when ! ... is true | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected index 44c6bf1f802a..3de83c6e2beb 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected @@ -68,8 +68,19 @@ | test.c:109:9:109:14 | ... == ... | false | 113 | 113 | | test.c:109:9:109:23 | ... \|\| ... | false | 113 | 113 | | test.c:109:19:109:23 | ... < ... | false | 113 | 113 | +| test.c:126:7:126:7 | 1 | true | 126 | 126 | +| test.c:126:7:126:7 | 1 | true | 126 | 128 | +| test.c:126:7:126:7 | 1 | true | 131 | 131 | +| test.c:126:7:126:7 | 1 | true | 131 | 132 | +| test.c:126:7:126:7 | 1 | true | 134 | 123 | +| test.c:126:7:126:28 | ... && ... | true | 126 | 128 | +| test.c:126:12:126:26 | call to test3_condition | true | 126 | 128 | +| test.c:131:7:131:7 | b | true | 131 | 132 | +| test.c:137:7:137:7 | 0 | false | 142 | 136 | | test.c:146:7:146:8 | ! ... | true | 146 | 147 | +| test.c:152:8:152:8 | p | true | 152 | 154 | | test.c:158:8:158:9 | ! ... | true | 158 | 160 | +| test.c:164:8:164:8 | s | true | 164 | 166 | | test.c:170:8:170:9 | ! ... | true | 170 | 172 | | test.cpp:18:8:18:10 | call to get | true | 19 | 19 | | test.cpp:31:7:31:13 | ... == ... | false | 30 | 30 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected index 8d4d78f02a14..6963216d077d 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected @@ -261,8 +261,20 @@ unary | 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:19:109:19 | y | >= | 0 | 113 | 113 | | test.c:109:19:109:23 | ... < ... | test.c:109:19:109:19 | y | >= | 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:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | 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 | != | 0 | 126 | 128 | +| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 | +| 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: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:158:8:158:9 | ! ... | 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:170:8:170:9 | ! ... | test.c:170:9:170:9 | s | == | 0 | 170 | 172 | | test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 19 | 19 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 |