• Media type: E-Article
  • Title: Exceptional situations and program reliability
  • Contributor: Weimer, Westley; Necula, George C.
  • imprint: Association for Computing Machinery (ACM), 2008
  • Published in: ACM Transactions on Programming Languages and Systems
  • Language: English
  • DOI: 10.1145/1330017.1330019
  • ISSN: 0164-0925; 1558-4593
  • Origination:
  • Footnote:
  • Description: <jats:p>It is difficult to write programs that behave correctly in the presence of run-time errors. Proper behavior in the face of exceptional situations is important to the reliability of long-running programs. Existing programming language features often provide poor support for executing clean-up code and for restoring invariants.</jats:p> <jats:p>We present a data-flow analysis for finding a certain class of exception-handling defects: those related to a failure to release resources or to clean up properly along all paths. Many real-world programs violate such resource usage rules because of incorrect exception handling. Our flow-sensitive analysis keeps track of outstanding obligations along program paths and does a precise modeling of control flow in the presence of exceptions. Using it, we have found over 1,300 exception handling defects in over 5 million lines of Java code.</jats:p> <jats:p>Based on those defects we propose a programming language feature, the compensation stack, that keeps track of obligations at run time and ensures that they are discharged. We present a type system for compensation stacks that tracks collections of obligations. Finally, we present case studies to demonstrate that this feature is natural, efficient, and can improve reliability.</jats:p>