|
| 1 | +/** |
| 2 | + * @name Count IR inconsistencies |
| 3 | + * @description Counts the various IR inconsistencies that may occur. |
| 4 | + * This query is for internal use only and may change without notice. |
| 5 | + * @kind table |
| 6 | + * @id cpp/count-ir-inconsistencies |
| 7 | + */ |
| 8 | + |
| 9 | +import cpp |
| 10 | +import semmle.code.cpp.ir.implementation.aliased_ssa.IR |
| 11 | +import semmle.code.cpp.ir.implementation.aliased_ssa.IRConsistency as IRConsistency |
| 12 | + |
| 13 | +select count(Instruction i | IRConsistency::missingOperand(i, _, _, _) | i) as missingOperand, |
| 14 | + count(Instruction i | IRConsistency::unexpectedOperand(i, _, _, _) | i) as unexpectedOperand, |
| 15 | + count(Instruction i | IRConsistency::duplicateOperand(i, _, _, _) | i) as duplicateOperand, |
| 16 | + count(PhiInstruction i | IRConsistency::missingPhiOperand(i, _, _, _) | i) as missingPhiOperand, |
| 17 | + count(Operand o | IRConsistency::missingOperandType(o, _, _, _) | o) as missingOperandType, |
| 18 | + count(ChiInstruction i | IRConsistency::duplicateChiOperand(i, _, _, _) | i) as duplicateChiOperand, |
| 19 | + count(Instruction i | IRConsistency::sideEffectWithoutPrimary(i, _, _, _) | i) as sideEffectWithoutPrimary, |
| 20 | + count(Instruction i | IRConsistency::instructionWithoutSuccessor(i, _, _, _) | i) as instructionWithoutSuccessor, |
| 21 | + count(Instruction i | IRConsistency::ambiguousSuccessors(i, _, _, _) | i) as ambiguousSuccessors, |
| 22 | + count(Instruction i | IRConsistency::unexplainedLoop(i, _, _, _) | i) as unexplainedLoop, |
| 23 | + count(PhiInstruction i | IRConsistency::unnecessaryPhiInstruction(i, _, _, _) | i) as unnecessaryPhiInstruction, |
| 24 | + count(Instruction i | IRConsistency::memoryOperandDefinitionIsUnmodeled(i, _, _, _) | i) as memoryOperandDefinitionIsUnmodeled, |
| 25 | + count(Operand o | IRConsistency::operandAcrossFunctions(o, _, _, _, _, _) | o) as operandAcrossFunctions, |
| 26 | + count(IRFunction f | IRConsistency::containsLoopOfForwardEdges(f, _) | f) as containsLoopOfForwardEdges, |
| 27 | + count(IRBlock i | IRConsistency::lostReachability(i, _, _, _) | i) as lostReachability, |
| 28 | + count(string m | IRConsistency::backEdgeCountMismatch(_, m) | m) as backEdgeCountMismatch, |
| 29 | + count(Operand o | IRConsistency::useNotDominatedByDefinition(o, _, _, _) | o) as useNotDominatedByDefinition, |
| 30 | + count(SwitchInstruction i | IRConsistency::switchInstructionWithoutDefaultEdge(i, _, _, _) | i) as switchInstructionWithoutDefaultEdge, |
| 31 | + count(Instruction i | IRConsistency::notMarkedAsConflated(i, _, _, _) | i) as notMarkedAsConflated, |
| 32 | + count(Instruction i | IRConsistency::wronglyMarkedAsConflated(i, _, _, _) | i) as wronglyMarkedAsConflated, |
| 33 | + count(MemoryOperand o | IRConsistency::invalidOverlap(o, _, _, _) | o) as invalidOverlap, |
| 34 | + count(Instruction i | IRConsistency::nonUniqueEnclosingIRFunction(i, _, _, _) | i) as nonUniqueEnclosingIRFunction, |
| 35 | + count(FieldAddressInstruction i | IRConsistency::fieldAddressOnNonPointer(i, _, _, _) | i) as fieldAddressOnNonPointer, |
| 36 | + count(Instruction i | IRConsistency::thisArgumentIsNonPointer(i, _, _, _) | i) as thisArgumentIsNonPointer, |
| 37 | + count(Instruction i | IRConsistency::nonUniqueIRVariable(i, _, _, _) | i) as nonUniqueIRVariable |
0 commit comments