ErrorMessages

object ErrorMessages

Errors in Arrow Analysis

There are broadly three kinds of errors that may arise from Arrow Analysis. This files gives an overview of the information tracked in each case, which shall form the basis for top-quality error messages.

Additional information

During the analysis, a different SMT variable name is assigned to each subexpression.

For example, we may have:

f(g(2), h())
// a -> 2
// b -> g(2)
// c -> h()
// d -> f(g(2), h())

We can leverage this information to write better error messages. If we have a constraint which states b 0, we can replace it with g(2) 0.

Types

Link copied to clipboard
object Exception
Link copied to clipboard
object Inconsistency

These errors embody the idea that "there's no possible way in which we may end up in this situation." Usually this means that the code is somehow unreachable. There are four cases in which this may arise.

Link copied to clipboard
object Liskov
Link copied to clipboard
object Parsing

These errors arise from pre, post, or invariant blocks which cannot be translated into SMT formulae.

Link copied to clipboard
object Unsatisfiability

These errors embody the idea that "something should have been true, but it is not." There are three cases in which this may arise.

Link copied to clipboard
object Unsupported

These are warning which are attached to those elements which are not supported by the analysis (yet).