1## Checks performed on abstract interpretation stage 2 3### Physical compatibility of arguments to instructions and actual parameters to methods 4 5This type of checks eliminate rutime problems with undefined bits in integers, truncation issues, etc. 6 7From security point of view, this checks guarantee expected ranges of values in code and absence of handling 8undefined information. 9 10### Access checks 11 12Checks for private/protected/public access rights. 13 14These checks prevent unintended/unexpected access from one method to another. 15Or access to wrong fields of object. 16 17### Checks of subtyping 18 19Checks of compatibility of objects in arguments to instructions and actual parameters to methods. 20 21These checks eliminate calls of methods with incorrect `this`, wrong access to arrays, etc. 22 23### Checks of exception handlers 24 25These checks performed to check correctness of context on exception handler entry. 26 27They can help to detect usage of inconsistent information in registers in exception handlers. 28 29### Checks of exceptions, that can be thrown in runtime 30 31Some code may exibit behavior of permanently throwing of exceptions, like always throwing NPE. 32 33This is definitely not normal mode of control-flow in code, so verifier can detect such situations (when code always throws an exception). 34 35### Check of return values from methods 36 37Can help inconsistency between method signature and type of actual return value 38 39### (todo) Simple range checks of primitive types 40 41These checks help to detect issues with unintended truncation/overflow/underflow etc. 42 43### (todo) Simple bounds checks 44 45These checks help in some cases detect out-of-bounds access type of errors in static. 46 47### (todo) Checks for usage of some functions/intrinsics 48 49For instance, check symmetry of monitorEnter/monitorExit calls to avoid deadlocking. 50