skip to main content
research-article

Precise reasoning for programs using containers

Published:26 January 2011Publication History
Skip Abstract Section

Abstract

Containers are general-purpose data structures that provide functionality for inserting, reading, removing, and iterating over elements. Since many applications written in modern programming languages, such as C++ and Java, use containers as standard building blocks, precise analysis of many programs requires a fairly sophisticated understanding of container contents. In this paper, we present a sound, precise, and fully automatic technique for static reasoning about contents of containers. We show that the proposed technique adds useful precision for verifying real C++ applications and that it scales to applications with over 100,000 lines of code.

Skip Supplemental Material Section

Supplemental Material

17-mpeg-4.mp4

mp4

430.7 MB

References

  1. Dillig, I., Dillig, T., Aiken, A.: Fluid Updates: Beyond Strong vs. Weak Updates. In: ESOP. (2010) Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. Gulwani, S., Musuvathi, M.: Cover Algorithms. In: ESOP. (2008) 193--207 Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Cousot, P., Halbwachs, N.: Automatic Discovery of Linear Restraints among Variables of a Program. In: POPL, ACM (1978) 84--96 Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. Karr, M.: Affine relationships among variables of a program. A.I. (1976) 133--151Google ScholarGoogle Scholar
  5. Kovacs, L., Voronkov, A.: Finding loop invariants for programs over arrays using a theorem prover. In: FASE 2009. (2009) 470--485 Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Dillig, I., Dillig, T., Aiken, A.: SAIL: Static Analysis Intermediate Language. Stanford University Technical ReportGoogle ScholarGoogle Scholar
  7. Dillig, I., Dillig, T., Aiken, A.: Cuts from Proofs: A Complete and Practical Technique for Solving Linear Inequalities over Integers. In: CAV. (2009) Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Dillig, I., Dillig, T., Aiken, A.: Small Formulas for Large Programs: On-line Constraint Simplification in Scalable Static Analysis. In: SAS. (2010) Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Dillig, I., Dillig, T., Aiken, A.: Sound, Complete and Scalable Path-sensitive Analysis. In: PLDI. (2008) 270--280 Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. http://www.sgi.com/tech/stl/: C++ standard template libraryGoogle ScholarGoogle Scholar
  11. http://sourceforge.net/apps/trac/litesql/: LiteSQLGoogle ScholarGoogle Scholar
  12. http://www.inkscape.org/: InkscapeGoogle ScholarGoogle Scholar
  13. http://www.digikam.org/: DigikamGoogle ScholarGoogle Scholar
  14. http://qt.nokia.com/products/: QT FrameworkGoogle ScholarGoogle Scholar
  15. Lam, P., Kuncak, V., Rinard, M.: Hob: A tool for verifying data structure consistency. In: Compiler Construction. 237--241 Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Lam, P., Kuncak, V., Rinard, M.: Generalized Typestate Checking for Data Structure Consistency. In: VMCAI. (2005) 430--447 Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. Kuncak, V., Lam, P., Zee, K., Rinard, M.: Modular Pluggable Analyses for Data Structure Consistency. IEEE Transactions on Software Engineering \textbf32(12) (2006) 988--1005 Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. Ramalingam, G., Warshavsky, A., Field, J., Goyal, D., Sagiv, M.: Deriving Specialized Program Analyses for Certifying Component-client Conformance. In: PLDI. (2002) 94 Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Blanc, N., Groce, A., Kroening, D.: Verifying C with STL Containers via Predicate Abstraction. In: IEEE/ACM Conference on Automated software engineering, ACM (2007) 521--524 Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Gregor, D., Schupp, S.: STLlint: lifting static checking from languages to libraries. Software Practice and Experience \textbf36(3) (2006) 225 Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Deutsch, A.: Interprocedural may-alias analysis for pointers: Beyond k-limiting. In: PLDI, ACM NY, USA (1994) 230--241 Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. Naik, M., Aiken, A.: Conditional Must not Aliasing for Static Race Detection. In: POPL. (2007) 338 Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Fink, S., Yahav, E., Dor, N., Ramalingam, G., Geay, E.: Effective Typestate Verification in the Presence of Aliasing. TOSEM \textbf17(2) (2008) 1--34 Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. Reps, T.W., Sagiv, S., Wilhelm, R.: Static Program Analysis via 3-Valued Logic. In: CAV. (2004) 15--30Google ScholarGoogle Scholar
  25. Shacham, O., Vechev, M., Yahav, E.: Chameleon: Adaptive Selection of Collections. In: PLDI, ACM (2009) 408--418 Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Gulwani, S., Mehra, K.K., Chilimbi, T.: Speed: Precise and efficient static estimation of program computational complexity. In: POPL. (2009) 127--139 Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Gulwani, S., McCloskey, B., Tiwari, A.: Lifting abstract interpreters to quantified logical domains. In: POPL, ACM (2008) 235--246 Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Precise reasoning for programs using containers

      Recommendations

      Comments

      Login options

      Check if you have access through your login credentials or your institution to get full access on this article.

      Sign in

      Full Access

      • Published in

        cover image ACM SIGPLAN Notices
        ACM SIGPLAN Notices  Volume 46, Issue 1
        POPL '11
        January 2011
        624 pages
        ISSN:0362-1340
        EISSN:1558-1160
        DOI:10.1145/1925844
        Issue’s Table of Contents
        • cover image ACM Conferences
          POPL '11: Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
          January 2011
          652 pages
          ISBN:9781450304900
          DOI:10.1145/1926385

        Copyright © 2011 ACM

        Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

        Publisher

        Association for Computing Machinery

        New York, NY, United States

        Publication History

        • Published: 26 January 2011

        Check for updates

        Qualifiers

        • research-article

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader