CodeQL library for C#
codeql/csharp-all 5.4.8 (changelog, source)
Search

Class Guard

An expression whose value may control the execution of another element.

Import path

import semmle.code.csharp.controlflow.Guards

Direct supertypes

Indirect supertypes

Known direct subtypes

    Predicates

    controlsBasicBlock

    Holds if basic block bb is guarded by this expression having value v.

    controlsNode

    Holds if cfn is guarded by this expression having value v.

    controlsNode

    Holds if cfn is guarded by this expression having value v, where sub is a sub expression of this expression that is structurally equal to the expression belonging to cfn.

    getAValue

    Gets a valid value for this guard. For example, if this guard is a test, then it can have Boolean values true and false.

    Inherited predicates

    controls

    Holds if this guard evaluating to branch controls the basic block bb. That is, execution of bb implies that this guard evaluated to branch.

    from Guard
    controlsBlock

    DEPRECATED: Use Guard class instead.

    from ControlFlowElement
    controlsBranchEdge

    Holds if this guard evaluating to branch controls the control-flow branch edge from bb1 to bb2. That is, following the edge from bb1 to bb2 implies that this guard evaluated to branch.

    from Guard
    directlyControls

    Holds if this guard evaluating to branch directly controls the basic block bb.

    from PreGuard
    directlyValueControls

    Holds if this guard evaluating to v directly controls the basic block bb.

    from PreGuard
    fromLibrary

    Holds if this element is from an assembly.

    from Element
    fromSource

    Holds if this element is from source code.

    from Element
    getAChild

    Gets a child of this element, if any.

    from Element
    getAChildExpr

    Gets a child expression of this element, if any.

    from ExprOrStmtParent
    getAChildStmt

    Gets a child statement of this element, if any.

    from ExprOrStmtParent
    getAControlFlowEntryNode

    Gets a first control flow node executed within this element.

    from ControlFlowElement
    getAControlFlowExitNode

    Gets a potential last control flow node executed within this element.

    from ControlFlowElement
    getAControlFlowNode

    Gets a control flow node for this element. That is, a node in the control flow graph that corresponds to this element.

    from ControlFlowElement
    getALocation

    Gets a location of this element, including sources and assemblies.

    from Element
    getAPrimaryQlClass

    Gets the name of a primary CodeQL class to which this element belongs.

    from Element
    getAReachableElement

    Gets an element that is reachable from this element.

    from ControlFlowElement
    getAssembly

    Gets the assembly that this element was compiled into.

    from ControlFlowElement
    getBasicBlock

    Gets the basic block of this guard. For expressions, this is the basic block of the expression itself, and for switch cases, this is the basic block of the expression being compared against the cases.

    from PreGuard
    getChild

    Gets the ith child of this element (zero-based).

    from ExprOrStmtParent
    getChildExpr

    Gets the ith child expression of this element (zero-based).

    from ExprOrStmtParent
    getChildStmt

    Gets the ith child statement of this element (zero-based).

    from ExprOrStmtParent
    getControlFlowNode

    Gets the control flow node for this element.

    from ControlFlowElement
    getEnclosingCallable

    Gets the enclosing callable of this element, if any.

    from ControlFlowElement
    getFile

    Gets the file containing this element.

    from Element
    getIndex

    Gets the index of this element among its parent’s other children (zero-based).

    from Element
    getLocation

    Gets the location of this element. Where an element has locations in source and assemblies, choose the source location. If there are multiple assembly locations, choose only one.

    from Element
    getNumberOfChildren

    Gets the number of children of this element.

    from Element
    getParent

    Gets the parent of this element, if any.

    from Element
    getPrimaryQlClasses

    Gets a comma-separated list of the names of the primary CodeQL classes to which this element belongs.

    from Element
    hasBranchEdge

    Holds if this guard is the last node in bb1 and that its successor is bb2 exactly when evaluating to branch.

    from PreGuard
    hasValueBranchEdge

    Holds if this guard evaluating to v corresponds to taking the edge from bb1 to bb2. For ordinary conditional branching this guard is the last node in bb1, but for switch case matching it is the switch expression, which may either be in bb1 or an earlier basic block.

    from PreGuard
    isEquality

    Holds if this guard tests equality between e1 and e2 upon evaluating to eqval.

    from PreGuard
    isLive

    Holds if this element is live, that is this element can be reached from the entry point of its enclosing callable.

    from ControlFlowElement
    reachableFrom

    Holds if the current element is reachable from src.

    from ControlFlowElement
    toString

    Gets a textual representation of this element.

    from Element
    toStringWithTypes

    Gets the full textual representation of this element, including type information.

    from Element
    valueControls

    Holds if this guard evaluating to v controls the basic block bb. That is, execution of bb implies that this guard evaluated to v.

    from Guard
    valueControlsBranchEdge

    Holds if this guard evaluating to v controls the control-flow branch edge from bb1 to bb2. That is, following the edge from bb1 to bb2 implies that this guard evaluated to v.

    from Guard