SHErrLoc is a new, general approach to locate programmer mistakes that are detected by static program analyses, such as ML type inference, information flow analysis and dataflow analysis.
The SHErrLoc tool analyzes a system of constraints in a constraint language that is expressive enough for a large class of static program analyses, including the highly expressive type system implemented by the Glasgow Haskell Compiler (GHC) (with type classes, GADTs, and type families). Both satisfiable and unsatisfiable constraints are analyzed to identify the most likely cause of errors. Based on Bayesian grounds, the likelihood of different error explanations is evaluated via two general heuristics:
For example, the EasyOCaml++ tool generates constraints in the constraint language format from OCaml programs. The SHErrLoc tool then analyzes these application-agnostic constraints to locate the most likely programmer mistakes, as illustrate in the overview graph. Please try our demo for OCaml.
Less compiler modifications are required for diagnosing Haskell type errors, since existing compilers, such as GHC, already generate type-checking constraints. A light-weight constraint translator then feeds these constraints to the general SHErrLoc tool, in order to better localize programmer mistakes. Please try our demo for Haskell.
Evaluation on very different program analyses, type inference in OCaml and Haskell, as well as information flow analysis in Jif, suggests that this general approach identifies error locations significantly more accurately than existing tools.
The SHErrLoc tool takes a constraint file describing program analysis, and diagnoses the most likely cause of errors detected by the static program analysis. The latest version of SHErrLoc, as described in our PLDI'15 paper, is available at the SHErrLoc GitHub repository.
The version used in our POPL'14 paper is packaged here: