mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
Guards: Use shared SuccessorType.
This commit is contained in:
@@ -139,10 +139,6 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre
|
||||
)
|
||||
}
|
||||
|
||||
private module SuccessorTypes implements SharedGuards::SuccessorTypesSig {
|
||||
import codeql.controlflow.SuccessorType
|
||||
}
|
||||
|
||||
private module GuardsInput implements SharedGuards::InputSig<Location, ControlFlowNode, BasicBlock> {
|
||||
private import java as J
|
||||
private import semmle.code.java.dataflow.internal.BaseSSA
|
||||
@@ -379,7 +375,7 @@ private module GuardsInput implements SharedGuards::InputSig<Location, ControlFl
|
||||
}
|
||||
}
|
||||
|
||||
private module GuardsImpl = SharedGuards::Make<Location, Cfg, SuccessorTypes, GuardsInput>;
|
||||
private module GuardsImpl = SharedGuards::Make<Location, Cfg, GuardsInput>;
|
||||
|
||||
private module LogicInputCommon {
|
||||
private import semmle.code.java.dataflow.NullGuards as NullGuards
|
||||
|
||||
@@ -51,26 +51,13 @@ overlay[local?]
|
||||
module;
|
||||
|
||||
private import codeql.controlflow.BasicBlock as BB
|
||||
private import codeql.controlflow.SuccessorType as ST
|
||||
private import codeql.controlflow.SuccessorType
|
||||
private import codeql.util.Boolean
|
||||
private import codeql.util.Location
|
||||
private import codeql.util.Unit
|
||||
|
||||
signature class TypSig;
|
||||
|
||||
signature module SuccessorTypesSig {
|
||||
class ExceptionSuccessor extends ST::SuccessorType;
|
||||
|
||||
class ConditionalSuccessor extends ST::SuccessorType {
|
||||
/** Gets the Boolean value of this successor. */
|
||||
boolean getValue();
|
||||
}
|
||||
|
||||
class BooleanSuccessor extends ConditionalSuccessor;
|
||||
|
||||
class NullnessSuccessor extends ConditionalSuccessor;
|
||||
}
|
||||
|
||||
signature module InputSig<LocationSig Location, TypSig ControlFlowNode, TypSig BasicBlock> {
|
||||
/** A control flow node indicating normal termination of a callable. */
|
||||
class NormalExitNode extends ControlFlowNode;
|
||||
@@ -205,13 +192,12 @@ signature module InputSig<LocationSig Location, TypSig ControlFlowNode, TypSig B
|
||||
|
||||
/** Provides guards-related predicates and classes. */
|
||||
module Make<
|
||||
LocationSig Location, BB::CfgSig<Location> Cfg, SuccessorTypesSig SuccessorTypes,
|
||||
LocationSig Location, BB::CfgSig<Location> Cfg,
|
||||
InputSig<Location, Cfg::ControlFlowNode, Cfg::BasicBlock> Input>
|
||||
{
|
||||
private module Cfg_ = Cfg;
|
||||
|
||||
private import Cfg_
|
||||
private import SuccessorTypes
|
||||
private import Input
|
||||
|
||||
private newtype TAbstractSingleValue =
|
||||
@@ -320,7 +306,7 @@ module Make<
|
||||
}
|
||||
|
||||
private predicate exceptionBranchPoint(BasicBlock bb1, BasicBlock normalSucc, BasicBlock excSucc) {
|
||||
exists(ST::SuccessorType norm, ExceptionSuccessor exc |
|
||||
exists(SuccessorType norm, ExceptionSuccessor exc |
|
||||
bb1.getASuccessor(norm) = normalSucc and
|
||||
bb1.getASuccessor(exc) = excSucc and
|
||||
normalSucc != excSucc and
|
||||
|
||||
Reference in New Issue
Block a user