From 481bf77d5fa283db94f75c350531bd7483ea7e95 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 27 Jun 2019 11:53:12 +0200 Subject: [PATCH] CIL: Speedup consistency tests - Make `InstructionViolation` abstract to avoid computing `getInstructionsUpTo()` for all instructions in the database. - Enable `consistency.ql`, which reports all consistency violations, and remove all other specialized tests. --- .../src/semmle/code/cil/ConsistencyChecks.qll | 177 ++++++++---------- ...trolflow.expected => consistency.expected} | 11 +- ...consistency.ql.disabled => consistency.ql} | 0 .../cil/consistency/controlflow.ql | 4 - .../cil/consistency/instructions.expected | 5 - .../cil/consistency/instructions.ql | 4 - .../cil/consistency/members.expected | 0 .../library-tests/cil/consistency/members.ql | 4 - .../cil/consistency/missingcil.expected | 0 .../cil/consistency/missingcil.ql | 4 - .../cil/consistency/missingentity.expected | 0 .../cil/consistency/missingentity.ql | 4 - .../cil/consistency/types.expected | 0 .../library-tests/cil/consistency/types.ql | 4 - 14 files changed, 83 insertions(+), 134 deletions(-) rename csharp/ql/test/library-tests/cil/consistency/{controlflow.expected => consistency.expected} (89%) rename csharp/ql/test/library-tests/cil/consistency/{consistency.ql.disabled => consistency.ql} (100%) delete mode 100644 csharp/ql/test/library-tests/cil/consistency/controlflow.ql delete mode 100644 csharp/ql/test/library-tests/cil/consistency/instructions.expected delete mode 100644 csharp/ql/test/library-tests/cil/consistency/instructions.ql delete mode 100644 csharp/ql/test/library-tests/cil/consistency/members.expected delete mode 100644 csharp/ql/test/library-tests/cil/consistency/members.ql delete mode 100644 csharp/ql/test/library-tests/cil/consistency/missingcil.expected delete mode 100644 csharp/ql/test/library-tests/cil/consistency/missingcil.ql delete mode 100644 csharp/ql/test/library-tests/cil/consistency/missingentity.expected delete mode 100644 csharp/ql/test/library-tests/cil/consistency/missingentity.ql delete mode 100644 csharp/ql/test/library-tests/cil/consistency/types.expected delete mode 100644 csharp/ql/test/library-tests/cil/consistency/types.ql diff --git a/csharp/ql/src/semmle/code/cil/ConsistencyChecks.qll b/csharp/ql/src/semmle/code/cil/ConsistencyChecks.qll index 1ca83005fa8..8831abf3a11 100644 --- a/csharp/ql/src/semmle/code/cil/ConsistencyChecks.qll +++ b/csharp/ql/src/semmle/code/cil/ConsistencyChecks.qll @@ -24,36 +24,33 @@ abstract class ConsistencyViolation extends ConsistencyCheck { /** * A check that is deliberately disabled. */ -abstract class DisabledCheck extends ConsistencyCheck { +abstract class DisabledCheck extends ConsistencyViolation { DisabledCheck() { none() } - - abstract string toString(); } /** * A consistency violation on a control flow node. */ -class CfgViolation extends ConsistencyViolation, CfgCheck { - ControlFlowNode getNode() { this = CfgCheck(result) } +abstract class CfgViolation extends ConsistencyViolation, CfgCheck { + ControlFlowNode node; - override string toString() { result = getNode().toString() } + CfgViolation() { this = CfgCheck(node) } - abstract override string getMessage(); + override string toString() { result = node.toString() } } /** * A consistency violation in a specific instruction. */ -class InstructionViolation extends CfgViolation, CfgCheck { - InstructionViolation() { exists(Instruction i | this = CfgCheck(i)) } +abstract class InstructionViolation extends CfgViolation, CfgCheck { + Instruction instruction; - /** Gets the instruction containing the violation. */ - Instruction getInstruction() { this = CfgCheck(result) } + InstructionViolation() { this = CfgCheck(instruction) } private string getInstructionsUpTo() { result = concat(Instruction i | - i.getIndex() <= this.getInstruction().getIndex() and - i.getImplementation() = this.getInstruction().getImplementation() + i.getIndex() <= instruction.getIndex() and + i.getImplementation() = instruction.getImplementation() | i.toString() + " [push: " + i.getPushCount() + ", pop: " + i.getPopCount() + "]", "; " order by @@ -62,18 +59,16 @@ class InstructionViolation extends CfgViolation, CfgCheck { } override string toString() { - result = getInstruction().getImplementation().getMethod().toStringWithTypes() + ": " + - getInstruction().toString() + ", " + getInstructionsUpTo() + result = instruction.getImplementation().getMethod().toStringWithTypes() + ": " + + instruction.toString() + ", " + getInstructionsUpTo() } - - abstract override string getMessage(); } /** * A literal that does not have exactly one `getValue()`. */ class MissingValue extends InstructionViolation { - MissingValue() { exists(Literal l | l = this.getInstruction() | count(l.getValue()) != 1) } + MissingValue() { exists(Literal l | l = instruction | count(l.getValue()) != 1) } override string getMessage() { result = "Literal has invalid getValue()" } } @@ -82,7 +77,7 @@ class MissingValue extends InstructionViolation { * A call that does not have exactly one `getTarget()`. */ class MissingCallTarget extends InstructionViolation { - MissingCallTarget() { exists(Call c | c = this.getInstruction() | count(c.getTarget()) != 1) } + MissingCallTarget() { exists(Call c | c = instruction | count(c.getTarget()) != 1) } override string getMessage() { result = "Call has invalid target" } } @@ -91,14 +86,14 @@ class MissingCallTarget extends InstructionViolation { * An instruction that has not been assigned a specific QL class. */ class MissingOpCode extends InstructionViolation { - MissingOpCode() { not exists(this.getInstruction().getOpcodeName()) } + MissingOpCode() { not exists(instruction.getOpcodeName()) } override string getMessage() { - result = "Opcode " + this.getInstruction().getOpcode() + " is missing a QL class" + result = "Opcode " + instruction.getOpcode() + " is missing a QL class" } override string toString() { - result = "Unknown instruction in " + getInstruction().getImplementation().getMethod().toString() + result = "Unknown instruction in " + instruction.getImplementation().getMethod().toString() } } @@ -112,14 +107,14 @@ class MissingOpCode extends InstructionViolation { */ class MissingOperand extends InstructionViolation { MissingOperand() { - exists(Instruction i, int op | i = getInstruction() and op in [0 .. i.getPopCount() - 1] | - not exists(i.getOperand(op)) and not i instanceof DeadInstruction + exists(int op | op in [0 .. instruction.getPopCount() - 1] | + not exists(instruction.getOperand(op)) and not instruction instanceof DeadInstruction ) } int getMissingOperand() { - result in [0 .. getInstruction().getPopCount() - 1] and - not exists(getInstruction().getOperand(result)) + result in [0 .. instruction.getPopCount() - 1] and + not exists(instruction.getOperand(result)) } override string getMessage() { @@ -143,11 +138,9 @@ class DeadInstruction extends Instruction { * Disabled, because Mono compiler sometimes emits dead instructions. */ class DeadInstructionViolation extends InstructionViolation, DisabledCheck { - DeadInstructionViolation() { getInstruction() instanceof DeadInstruction } + DeadInstructionViolation() { instruction instanceof DeadInstruction } override string getMessage() { result = "This instruction is not reachable" } - - override string toString() { result = InstructionViolation.super.toString() } } class YesNoBranch extends ConditionalBranch { @@ -161,12 +154,11 @@ class InvalidBranchSuccessors extends InstructionViolation { InvalidBranchSuccessors() { // Mono compiler sometimes generates branches to the next instruction, which is just wrong. // However it is valid CIL. - exists(YesNoBranch i | i = getInstruction() | not count(i.getASuccessor()) in [1 .. 2]) + exists(YesNoBranch i | i = instruction | not count(i.getASuccessor()) in [1 .. 2]) } override string getMessage() { - result = "Conditional branch has " + count(this.getInstruction().getASuccessor()) + - " successors" + result = "Conditional branch has " + count(instruction.getASuccessor()) + " successors" } } @@ -175,10 +167,8 @@ class InvalidBranchSuccessors extends InstructionViolation { */ class OnlyYesNoBranchHasTrueFalseSuccessors extends InstructionViolation { OnlyYesNoBranchHasTrueFalseSuccessors() { - exists(Instruction i | i = getInstruction() | - (exists(i.getTrueSuccessor()) or exists(i.getFalseSuccessor())) and - not i instanceof YesNoBranch - ) + (exists(instruction.getTrueSuccessor()) or exists(instruction.getFalseSuccessor())) and + not instruction instanceof YesNoBranch } override string getMessage() { result = "This instruction has getTrue/FalseSuccessor()" } @@ -189,11 +179,11 @@ class OnlyYesNoBranchHasTrueFalseSuccessors extends InstructionViolation { */ class UnconditionalBranchSuccessors extends InstructionViolation { UnconditionalBranchSuccessors() { - exists(UnconditionalBranch i | i = getInstruction() | count(i.getASuccessor()) != 1) + exists(UnconditionalBranch i | i = instruction | count(i.getASuccessor()) != 1) } override string getMessage() { - result = "Unconditional branch has " + count(getInstruction().getASuccessor()) + " successors" + result = "Unconditional branch has " + count(instruction.getASuccessor()) + " successors" } } @@ -201,9 +191,7 @@ class UnconditionalBranchSuccessors extends InstructionViolation { * A branch instruction that does not have a true successor. */ class NoTrueSuccessor extends InstructionViolation { - NoTrueSuccessor() { - exists(YesNoBranch i | i = getInstruction() | not exists(i.getTrueSuccessor())) - } + NoTrueSuccessor() { exists(YesNoBranch i | i = instruction | not exists(i.getTrueSuccessor())) } override string getMessage() { result = "Missing a true successor" } } @@ -212,9 +200,7 @@ class NoTrueSuccessor extends InstructionViolation { * A branch instruction that does not have a false successor. */ class NoFalseSuccessor extends InstructionViolation { - NoFalseSuccessor() { - exists(YesNoBranch i | i = getInstruction() | not exists(i.getFalseSuccessor())) - } + NoFalseSuccessor() { exists(YesNoBranch i | i = instruction | not exists(i.getFalseSuccessor())) } override string getMessage() { result = "Missing a false successor" } } @@ -224,9 +210,8 @@ class NoFalseSuccessor extends InstructionViolation { */ class TrueSuccessorIsSuccessor extends InstructionViolation { TrueSuccessorIsSuccessor() { - exists(Instruction i | i = getInstruction() | - exists(i.getTrueSuccessor()) and not i.getTrueSuccessor() = i.getASuccessor() - ) + exists(instruction.getTrueSuccessor()) and + not instruction.getTrueSuccessor() = instruction.getASuccessor() } override string getMessage() { result = "True successor isn't a successor" } @@ -237,9 +222,8 @@ class TrueSuccessorIsSuccessor extends InstructionViolation { */ class FalseSuccessorIsSuccessor extends InstructionViolation { FalseSuccessorIsSuccessor() { - exists(Instruction i | i = getInstruction() | - exists(i.getTrueSuccessor()) and not i.getTrueSuccessor() = i.getASuccessor() - ) + exists(instruction.getFalseSuccessor()) and + not instruction.getFalseSuccessor() = instruction.getASuccessor() } override string getMessage() { result = "True successor isn't a successor" } @@ -249,7 +233,7 @@ class FalseSuccessorIsSuccessor extends InstructionViolation { * An access that does not have exactly one target. */ class AccessMissingTarget extends InstructionViolation { - AccessMissingTarget() { exists(Access i | i = getInstruction() | count(i.getTarget()) != 1) } + AccessMissingTarget() { exists(Access i | i = instruction | count(i.getTarget()) != 1) } override string getMessage() { result = "Access has invalid getTarget()" } } @@ -258,9 +242,7 @@ class AccessMissingTarget extends InstructionViolation { * A catch handler that doesn't have a caught exception type. */ class CatchHandlerMissingType extends CfgViolation { - CatchHandlerMissingType() { - exists(CatchHandler h | h = getNode() | not exists(h.getCaughtType())) - } + CatchHandlerMissingType() { exists(CatchHandler h | h = node | not exists(h.getCaughtType())) } override string getMessage() { result = "Catch handler missing caught type" } } @@ -270,11 +252,11 @@ class CatchHandlerMissingType extends CfgViolation { */ class MissingStackSize extends CfgViolation { MissingStackSize() { - exists(ControlFlowNode node | node = getNode() | + ( not exists(node.getStackSizeAfter()) or not exists(node.getStackSizeBefore()) ) and - not getNode() instanceof DeadInstruction + not node instanceof DeadInstruction } override string getMessage() { result = "Inconsistent stack size" } @@ -286,31 +268,27 @@ class MissingStackSize extends CfgViolation { */ class InvalidStackSize extends CfgViolation, DisabledCheck { InvalidStackSize() { - exists(ControlFlowNode node | node = getNode() | + ( count(node.getStackSizeAfter()) != 1 or count(node.getStackSizeBefore()) != 1 ) and - not getNode() instanceof DeadInstruction + not node instanceof DeadInstruction } override string getMessage() { - result = "Inconsistent stack sizes " + count(getNode().getStackSizeBefore()) + " before and " + - count(getNode().getStackSizeAfter()) + " after" + result = "Inconsistent stack sizes " + count(node.getStackSizeBefore()) + " before and " + + count(node.getStackSizeAfter()) + " after" } - - override string toString() { result = CfgViolation.super.toString() } } /** * A CFG node that does not have exactly 1 `getPopCount()`. */ class InconsistentPopCount extends CfgViolation { - InconsistentPopCount() { - exists(ControlFlowNode node | node = getNode() | count(node.getPopCount()) != 1) - } + InconsistentPopCount() { count(node.getPopCount()) != 1 } override string getMessage() { - result = "Cfg node has " + count(getNode().getPopCount()) + " pop counts" + result = "Cfg node has " + count(node.getPopCount()) + " pop counts" } } @@ -318,20 +296,18 @@ class InconsistentPopCount extends CfgViolation { * A CFG node that does not have exactly one `getPushCount()`. */ class InconsistentPushCount extends CfgViolation { - InconsistentPushCount() { - exists(ControlFlowNode node | node = getNode() | count(node.getPushCount()) != 1) - } + InconsistentPushCount() { count(node.getPushCount()) != 1 } override string getMessage() { - result = "Cfg node has " + count(getNode().getPushCount()) + " push counts" + result = "Cfg node has " + count(node.getPushCount()) + " push counts" } } /** * A return instruction that does not have a stack size of 0 after it. */ -class InvalidReturn extends CfgViolation { - InvalidReturn() { getNode() instanceof Return and getNode().getStackSizeAfter() != 0 } +class InvalidReturn extends InstructionViolation { + InvalidReturn() { instruction instanceof Return and instruction.getStackSizeAfter() != 0 } override string getMessage() { result = "Return has invalid stack size" } } @@ -339,10 +315,12 @@ class InvalidReturn extends CfgViolation { /** * A throw instruction that does not have a stack size of 0 after it. */ -class InvalidThrow extends CfgViolation { - InvalidThrow() { getNode() instanceof Throw and getNode().getStackSizeAfter() != 0 } +class InvalidThrow extends InstructionViolation { + InvalidThrow() { instruction instanceof Throw and instruction.getStackSizeAfter() != 0 } - override string getMessage() { result = "Throw has invalid stack size" } + override string getMessage() { + result = "Throw has invalid stack size: " + instruction.getStackSizeAfter() + } } /** @@ -350,7 +328,7 @@ class InvalidThrow extends CfgViolation { */ class StaticFieldTarget extends InstructionViolation { StaticFieldTarget() { - exists(FieldAccess i | i = getInstruction() | + exists(FieldAccess i | i = instruction | (i instanceof Opcodes::Stfld or i instanceof Opcodes::Stfld) and i.getTarget().isStatic() ) @@ -364,7 +342,7 @@ class StaticFieldTarget extends InstructionViolation { */ class BranchWithoutTarget extends InstructionViolation { BranchWithoutTarget() { - getInstruction() = any(Branch b | not exists(b.getTarget()) and not b instanceof Opcodes::Switch) + instruction = any(Branch b | not exists(b.getTarget()) and not b instanceof Opcodes::Switch) } override string getMessage() { result = "Branch without target" } @@ -462,15 +440,16 @@ class MissingObjectViolation extends MissingEntityViolation { * An override that is invalid because the overridden method is not in a base class. */ class InvalidOverride extends MethodViolation { + private Method base; + InvalidOverride() { - exists(Method base | base = getMethod().getOverriddenMethod() | - not getMethod().getDeclaringType().getABaseType+() = getMethod() - .getOverriddenMethod() - .getDeclaringType() - ) + base = getMethod().getOverriddenMethod() and + not getMethod().getDeclaringType().getABaseType+() = base.getDeclaringType() } - override string getMessage() { result = "Overridden method is not in a base type" } + override string getMessage() { + result = "Overridden method from " + base.getDeclaringType() + " is not in a base type" + } } /** @@ -528,15 +507,15 @@ class PropertyWithNoAccessors extends DeclarationViolation { */ class ExprPushCount extends InstructionViolation { ExprPushCount() { - this.getInstruction() instanceof Expr and - not this.getInstruction() instanceof Opcodes::Dup and - if this.getInstruction() instanceof Call - then not this.getInstruction().getPushCount() in [0 .. 1] - else this.getInstruction().(Expr).getPushCount() != 1 + instruction instanceof Expr and + not instruction instanceof Opcodes::Dup and + if instruction instanceof Call + then not instruction.getPushCount() in [0 .. 1] + else instruction.(Expr).getPushCount() != 1 } override string getMessage() { - result = "Instruction has unexpected push count " + this.getInstruction().getPushCount() + result = "Instruction has unexpected push count " + instruction.getPushCount() } } @@ -547,13 +526,13 @@ class ExprPushCount extends InstructionViolation { class ExprMissingType extends InstructionViolation { ExprMissingType() { // Don't have types for the following op codes: - not getInstruction() instanceof Opcodes::Ldftn and - not getInstruction() instanceof Opcodes::Localloc and - not getInstruction() instanceof Opcodes::Ldvirtftn and - not getInstruction() instanceof Opcodes::Arglist and - not getInstruction() instanceof Opcodes::Refanytype and - this.getInstruction().getPushCount() = 1 and - count(this.getInstruction().getType()) != 1 + not instruction instanceof Opcodes::Ldftn and + not instruction instanceof Opcodes::Localloc and + not instruction instanceof Opcodes::Ldvirtftn and + not instruction instanceof Opcodes::Arglist and + not instruction instanceof Opcodes::Refanytype and + instruction.getPushCount() = 1 and + count(instruction.getType()) != 1 } override string getMessage() { result = "Expression is missing getType()" } @@ -564,8 +543,8 @@ class ExprMissingType extends InstructionViolation { */ class InvalidExpressionViolation extends InstructionViolation { InvalidExpressionViolation() { - getInstruction().getPushCount() = 0 and - exists(Instruction expr | getInstruction() = expr.getAnOperand()) + instruction.getPushCount() = 0 and + exists(Instruction expr | instruction = expr.getAnOperand()) } override string getMessage() { @@ -596,8 +575,6 @@ class TypeMultiplyDefined extends TypeViolation, DisabledCheck { t.toStringWithTypes() = this.getType().toStringWithTypes() ) + " entities" } - - override string toString() { result = TypeViolation.super.toString() } } /** diff --git a/csharp/ql/test/library-tests/cil/consistency/controlflow.expected b/csharp/ql/test/library-tests/cil/consistency/consistency.expected similarity index 89% rename from csharp/ql/test/library-tests/cil/consistency/controlflow.expected rename to csharp/ql/test/library-tests/cil/consistency/consistency.expected index bbd24ae4c65..5adb77d40a2 100644 --- a/csharp/ql/test/library-tests/cil/consistency/controlflow.expected +++ b/csharp/ql/test/library-tests/cil/consistency/consistency.expected @@ -1,5 +1,6 @@ -| System.Guid System.Guid.ParseExact(System.String,System.String): 11: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: brtrue.s 5: [push: 0, pop: 1]; 2: ldstr "input" [push: 1, pop: 0]; 3: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 4: throw [push: 0, pop: 1]; 5: ldarg.0 [push: 1, pop: 0]; 6: call System.String.op_Implicit [push: 1, pop: 1]; 7: ldarg.1 [push: 1, pop: 0]; 8: brtrue.s 12: [push: 0, pop: 1]; 9: ldstr "format" [push: 1, pop: 0]; 10: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 11: throw [push: 0, pop: 1] | Throw has invalid stack size | -| System.Threading.CancellationTokenRegistration System.Threading.CancellationToken.Register(System.Action): 8: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: ldsfld s_actionToActionObjShunt [push: 1, pop: 0]; 2: ldarg.1 [push: 1, pop: 0]; 3: dup [push: 2, pop: 1]; 4: brtrue.s 9: [push: 0, pop: 1]; 5: pop [push: 0, pop: 1]; 6: ldstr "callback" [push: 1, pop: 0]; 7: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 8: throw [push: 0, pop: 1] | Throw has invalid stack size | -| System.Threading.CancellationTokenRegistration System.Threading.CancellationToken.Register(System.Action,System.Boolean): 8: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: ldsfld s_actionToActionObjShunt [push: 1, pop: 0]; 2: ldarg.1 [push: 1, pop: 0]; 3: dup [push: 2, pop: 1]; 4: brtrue.s 9: [push: 0, pop: 1]; 5: pop [push: 0, pop: 1]; 6: ldstr "callback" [push: 1, pop: 0]; 7: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 8: throw [push: 0, pop: 1] | Throw has invalid stack size | -| System.Void System.Guid..ctor(System.Byte[]): 7: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: ldarg.1 [push: 1, pop: 0]; 2: dup [push: 2, pop: 1]; 3: brtrue.s 8: [push: 0, pop: 1]; 4: pop [push: 0, pop: 1]; 5: ldstr "b" [push: 1, pop: 0]; 6: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 7: throw [push: 0, pop: 1] | Throw has invalid stack size | -| System.Void System.TermInfo.Database..ctor(System.String,System.Byte[]): 33: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: call System.Object..ctor [push: 0, pop: 1]; 2: ldarg.0 [push: 1, pop: 0]; 3: ldarg.1 [push: 1, pop: 0]; 4: stfld _term [push: 0, pop: 2]; 5: ldarg.0 [push: 1, pop: 0]; 6: ldarg.2 [push: 1, pop: 0]; 7: stfld _data [push: 0, pop: 2]; 8: ldarg.2 [push: 1, pop: 0]; 9: ldc.i4.0 [push: 1, pop: 0]; 10: call System.TermInfo.Database.ReadInt16 [push: 1, pop: 2]; 11: stloc.0 L0 [push: 0, pop: 1]; 12: ldarg.0 [push: 1, pop: 0]; 13: ldloc.0 [push: 1, pop: 0]; 14: ldc.i4 72224 [push: 1, pop: 0]; 15: beq.s 36: [push: 0, pop: 2]; 16: ldloc.0 [push: 1, pop: 0]; 17: ldc.i4 138784 [push: 1, pop: 0]; 18: beq.s 34: [push: 0, pop: 2]; 19: call System.SR.get_IO_TermInfoInvalidMagicNumber [push: 1, pop: 0]; 20: ldc.i4.1 [push: 1, pop: 0]; 21: newarr System.String [push: 1, pop: 1]; 22: dup [push: 2, pop: 1]; 23: ldc.i4.0 [push: 1, pop: 0]; 24: ldstr "O" [push: 1, pop: 0]; 25: ldloc.0 [push: 1, pop: 0]; 26: ldc.i4.8 [push: 1, pop: 0]; 27: call System.Convert.ToString [push: 1, pop: 2]; 28: call System.String.Concat [push: 1, pop: 2]; 29: stelem.ref [push: 0, pop: 3]; 30: call System.String.Concat [push: 1, pop: 1]; 31: call System.SR.Format [push: 1, pop: 2]; 32: newobj System.InvalidOperationException..ctor [push: 1, pop: 1]; 33: throw [push: 0, pop: 1] | Throw has invalid stack size | +| System.Guid System.Guid.ParseExact(System.String,System.String): 11: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: brtrue.s 5: [push: 0, pop: 1]; 2: ldstr "input" [push: 1, pop: 0]; 3: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 4: throw [push: 0, pop: 1]; 5: ldarg.0 [push: 1, pop: 0]; 6: call System.String.op_Implicit [push: 1, pop: 1]; 7: ldarg.1 [push: 1, pop: 0]; 8: brtrue.s 12: [push: 0, pop: 1]; 9: ldstr "format" [push: 1, pop: 0]; 10: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 11: throw [push: 0, pop: 1] | Throw has invalid stack size: 1 | +| System.Runtime.CompilerServices.AsyncTaskMethodBuilder.DebugFinalizableAsyncStateMachineBox.Finalize | Overridden method from System.Object is not in a base type | +| System.Threading.CancellationTokenRegistration System.Threading.CancellationToken.Register(System.Action): 8: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: ldsfld s_actionToActionObjShunt [push: 1, pop: 0]; 2: ldarg.1 [push: 1, pop: 0]; 3: dup [push: 2, pop: 1]; 4: brtrue.s 9: [push: 0, pop: 1]; 5: pop [push: 0, pop: 1]; 6: ldstr "callback" [push: 1, pop: 0]; 7: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 8: throw [push: 0, pop: 1] | Throw has invalid stack size: 2 | +| System.Threading.CancellationTokenRegistration System.Threading.CancellationToken.Register(System.Action,System.Boolean): 8: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: ldsfld s_actionToActionObjShunt [push: 1, pop: 0]; 2: ldarg.1 [push: 1, pop: 0]; 3: dup [push: 2, pop: 1]; 4: brtrue.s 9: [push: 0, pop: 1]; 5: pop [push: 0, pop: 1]; 6: ldstr "callback" [push: 1, pop: 0]; 7: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 8: throw [push: 0, pop: 1] | Throw has invalid stack size: 2 | +| System.Void System.Guid..ctor(System.Byte[]): 7: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: ldarg.1 [push: 1, pop: 0]; 2: dup [push: 2, pop: 1]; 3: brtrue.s 8: [push: 0, pop: 1]; 4: pop [push: 0, pop: 1]; 5: ldstr "b" [push: 1, pop: 0]; 6: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 7: throw [push: 0, pop: 1] | Throw has invalid stack size: 1 | +| System.Void System.TermInfo.Database..ctor(System.String,System.Byte[]): 33: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: call System.Object..ctor [push: 0, pop: 1]; 2: ldarg.0 [push: 1, pop: 0]; 3: ldarg.1 [push: 1, pop: 0]; 4: stfld _term [push: 0, pop: 2]; 5: ldarg.0 [push: 1, pop: 0]; 6: ldarg.2 [push: 1, pop: 0]; 7: stfld _data [push: 0, pop: 2]; 8: ldarg.2 [push: 1, pop: 0]; 9: ldc.i4.0 [push: 1, pop: 0]; 10: call System.TermInfo.Database.ReadInt16 [push: 1, pop: 2]; 11: stloc.0 L0 [push: 0, pop: 1]; 12: ldarg.0 [push: 1, pop: 0]; 13: ldloc.0 [push: 1, pop: 0]; 14: ldc.i4 72224 [push: 1, pop: 0]; 15: beq.s 36: [push: 0, pop: 2]; 16: ldloc.0 [push: 1, pop: 0]; 17: ldc.i4 138784 [push: 1, pop: 0]; 18: beq.s 34: [push: 0, pop: 2]; 19: call System.SR.get_IO_TermInfoInvalidMagicNumber [push: 1, pop: 0]; 20: ldc.i4.1 [push: 1, pop: 0]; 21: newarr System.String [push: 1, pop: 1]; 22: dup [push: 2, pop: 1]; 23: ldc.i4.0 [push: 1, pop: 0]; 24: ldstr "O" [push: 1, pop: 0]; 25: ldloc.0 [push: 1, pop: 0]; 26: ldc.i4.8 [push: 1, pop: 0]; 27: call System.Convert.ToString [push: 1, pop: 2]; 28: call System.String.Concat [push: 1, pop: 2]; 29: stelem.ref [push: 0, pop: 3]; 30: call System.String.Concat [push: 1, pop: 1]; 31: call System.SR.Format [push: 1, pop: 2]; 32: newobj System.InvalidOperationException..ctor [push: 1, pop: 1]; 33: throw [push: 0, pop: 1] | Throw has invalid stack size: 1 | diff --git a/csharp/ql/test/library-tests/cil/consistency/consistency.ql.disabled b/csharp/ql/test/library-tests/cil/consistency/consistency.ql similarity index 100% rename from csharp/ql/test/library-tests/cil/consistency/consistency.ql.disabled rename to csharp/ql/test/library-tests/cil/consistency/consistency.ql diff --git a/csharp/ql/test/library-tests/cil/consistency/controlflow.ql b/csharp/ql/test/library-tests/cil/consistency/controlflow.ql deleted file mode 100644 index 3898e3ce5b0..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/controlflow.ql +++ /dev/null @@ -1,4 +0,0 @@ -import semmle.code.cil.ConsistencyChecks - -from CfgViolation v -select v, v.getMessage() diff --git a/csharp/ql/test/library-tests/cil/consistency/instructions.expected b/csharp/ql/test/library-tests/cil/consistency/instructions.expected deleted file mode 100644 index bbd24ae4c65..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/instructions.expected +++ /dev/null @@ -1,5 +0,0 @@ -| System.Guid System.Guid.ParseExact(System.String,System.String): 11: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: brtrue.s 5: [push: 0, pop: 1]; 2: ldstr "input" [push: 1, pop: 0]; 3: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 4: throw [push: 0, pop: 1]; 5: ldarg.0 [push: 1, pop: 0]; 6: call System.String.op_Implicit [push: 1, pop: 1]; 7: ldarg.1 [push: 1, pop: 0]; 8: brtrue.s 12: [push: 0, pop: 1]; 9: ldstr "format" [push: 1, pop: 0]; 10: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 11: throw [push: 0, pop: 1] | Throw has invalid stack size | -| System.Threading.CancellationTokenRegistration System.Threading.CancellationToken.Register(System.Action): 8: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: ldsfld s_actionToActionObjShunt [push: 1, pop: 0]; 2: ldarg.1 [push: 1, pop: 0]; 3: dup [push: 2, pop: 1]; 4: brtrue.s 9: [push: 0, pop: 1]; 5: pop [push: 0, pop: 1]; 6: ldstr "callback" [push: 1, pop: 0]; 7: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 8: throw [push: 0, pop: 1] | Throw has invalid stack size | -| System.Threading.CancellationTokenRegistration System.Threading.CancellationToken.Register(System.Action,System.Boolean): 8: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: ldsfld s_actionToActionObjShunt [push: 1, pop: 0]; 2: ldarg.1 [push: 1, pop: 0]; 3: dup [push: 2, pop: 1]; 4: brtrue.s 9: [push: 0, pop: 1]; 5: pop [push: 0, pop: 1]; 6: ldstr "callback" [push: 1, pop: 0]; 7: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 8: throw [push: 0, pop: 1] | Throw has invalid stack size | -| System.Void System.Guid..ctor(System.Byte[]): 7: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: ldarg.1 [push: 1, pop: 0]; 2: dup [push: 2, pop: 1]; 3: brtrue.s 8: [push: 0, pop: 1]; 4: pop [push: 0, pop: 1]; 5: ldstr "b" [push: 1, pop: 0]; 6: newobj System.ArgumentNullException..ctor [push: 1, pop: 1]; 7: throw [push: 0, pop: 1] | Throw has invalid stack size | -| System.Void System.TermInfo.Database..ctor(System.String,System.Byte[]): 33: throw, 0: ldarg.0 [push: 1, pop: 0]; 1: call System.Object..ctor [push: 0, pop: 1]; 2: ldarg.0 [push: 1, pop: 0]; 3: ldarg.1 [push: 1, pop: 0]; 4: stfld _term [push: 0, pop: 2]; 5: ldarg.0 [push: 1, pop: 0]; 6: ldarg.2 [push: 1, pop: 0]; 7: stfld _data [push: 0, pop: 2]; 8: ldarg.2 [push: 1, pop: 0]; 9: ldc.i4.0 [push: 1, pop: 0]; 10: call System.TermInfo.Database.ReadInt16 [push: 1, pop: 2]; 11: stloc.0 L0 [push: 0, pop: 1]; 12: ldarg.0 [push: 1, pop: 0]; 13: ldloc.0 [push: 1, pop: 0]; 14: ldc.i4 72224 [push: 1, pop: 0]; 15: beq.s 36: [push: 0, pop: 2]; 16: ldloc.0 [push: 1, pop: 0]; 17: ldc.i4 138784 [push: 1, pop: 0]; 18: beq.s 34: [push: 0, pop: 2]; 19: call System.SR.get_IO_TermInfoInvalidMagicNumber [push: 1, pop: 0]; 20: ldc.i4.1 [push: 1, pop: 0]; 21: newarr System.String [push: 1, pop: 1]; 22: dup [push: 2, pop: 1]; 23: ldc.i4.0 [push: 1, pop: 0]; 24: ldstr "O" [push: 1, pop: 0]; 25: ldloc.0 [push: 1, pop: 0]; 26: ldc.i4.8 [push: 1, pop: 0]; 27: call System.Convert.ToString [push: 1, pop: 2]; 28: call System.String.Concat [push: 1, pop: 2]; 29: stelem.ref [push: 0, pop: 3]; 30: call System.String.Concat [push: 1, pop: 1]; 31: call System.SR.Format [push: 1, pop: 2]; 32: newobj System.InvalidOperationException..ctor [push: 1, pop: 1]; 33: throw [push: 0, pop: 1] | Throw has invalid stack size | diff --git a/csharp/ql/test/library-tests/cil/consistency/instructions.ql b/csharp/ql/test/library-tests/cil/consistency/instructions.ql deleted file mode 100644 index 02f1dae405f..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/instructions.ql +++ /dev/null @@ -1,4 +0,0 @@ -import semmle.code.cil.ConsistencyChecks - -from InstructionViolation v -select v, v.getMessage() diff --git a/csharp/ql/test/library-tests/cil/consistency/members.expected b/csharp/ql/test/library-tests/cil/consistency/members.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/csharp/ql/test/library-tests/cil/consistency/members.ql b/csharp/ql/test/library-tests/cil/consistency/members.ql deleted file mode 100644 index 04f7f6a4c92..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/members.ql +++ /dev/null @@ -1,4 +0,0 @@ -import semmle.code.cil.ConsistencyChecks - -from DeclarationViolation v -select v, v.getMessage() diff --git a/csharp/ql/test/library-tests/cil/consistency/missingcil.expected b/csharp/ql/test/library-tests/cil/consistency/missingcil.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/csharp/ql/test/library-tests/cil/consistency/missingcil.ql b/csharp/ql/test/library-tests/cil/consistency/missingcil.ql deleted file mode 100644 index 71f2151d9e3..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/missingcil.ql +++ /dev/null @@ -1,4 +0,0 @@ -import semmle.code.cil.ConsistencyChecks - -from MissingCilDeclaration v -select v, v.getMessage() diff --git a/csharp/ql/test/library-tests/cil/consistency/missingentity.expected b/csharp/ql/test/library-tests/cil/consistency/missingentity.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/csharp/ql/test/library-tests/cil/consistency/missingentity.ql b/csharp/ql/test/library-tests/cil/consistency/missingentity.ql deleted file mode 100644 index 807f972407a..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/missingentity.ql +++ /dev/null @@ -1,4 +0,0 @@ -import semmle.code.cil.ConsistencyChecks - -from MissingEntityViolation v -select v, v.getMessage() diff --git a/csharp/ql/test/library-tests/cil/consistency/types.expected b/csharp/ql/test/library-tests/cil/consistency/types.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/csharp/ql/test/library-tests/cil/consistency/types.ql b/csharp/ql/test/library-tests/cil/consistency/types.ql deleted file mode 100644 index 009603641b7..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/types.ql +++ /dev/null @@ -1,4 +0,0 @@ -import semmle.code.cil.ConsistencyChecks - -from TypeViolation v -select v, v.getMessage()