# Class: com.pnfsoftware.jeb.core.units.code.asm.cfg.CFGVerifier

Verifier of control flow graphs. Verification is expensive: this class should be reserved for test cases or debug\-mode.

## Constructor: CFGVerifier
- parameter: `cfg`, type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<InsnType>`


## Protected Field: cfg
Type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<InsnType>`

## Protected Method: customVerification

Description: Custom validation method that may be overridden by subclasses which wish to validate the CFG further. This method is called by [#verify()](#verify()) as a first validation step. The default implementation does nothing \(return true\).
throws: thrown if the CFG is deemed invalid

## Protected Method: shouldExpectFallthrough
- parameter: `insn`, type: `InsnType`
- return type: `boolean`

Description: 
parameter: insn: 
return: 

## Method: verify

Description: A CFG is considered valid if: 

 
 
- there is only one \(or none\) branching instruction per basic block, located at its end \(taking into account the possible delay\-slot\) 
- the branching instructions are synchronized with the edges, i.e. they both represent the same information **in the same order** \(fallthrough first\) 
- there is no duplicate edges 

 

 Note: duplicate edges can happen at native level due to JCC\-to\-fallthrough.
throws: thrown if the CFG verification failed

