Verifying C++ with STL containers via predicate abstraction

This paper describes a flexible and easily extensible predicate abstraction-based approach to the verification of STLusage, and observes the advantages of verifying programsin terms of high-level data structures rather than low-level pointer manipulations. We formalize the semantics of theSTL by means of a Hoare-style axiomatization. The verification requires an operational model conservatively approximating the semantics given by the Standard. Our results show advantages (in terms of errors detected and false positives avoided) over previous attempts to analyze STL usage, due to the power of the abstraction engine and model checker

[1]  Sibylle Schupp,et al.  STLlint: lifting static checking from languages to libraries , 2006, Softw. Pract. Exp..

[2]  Daniel Kroening,et al.  SATABS: SAT-Based Predicate Abstraction for ANSI-C , 2005, TACAS.

[3]  Sanjit A. Seshia,et al.  Modeling and Verifying Systems Using a Logic of Counter Arithmetic with Lambda Expressions and Uninterpreted Functions , 2002, CAV.

[4]  C. A. R. Hoare,et al.  An axiomatic definition of the programming language PASCAL , 1972, Acta Informatica.

[5]  Bruce W. Weide SAVCBS 2006 challenge: specification of iterators , 2006, SAVCBS '06.

[6]  Kevin Bierhoff Iterator specification with typestates , 2006, SAVCBS '06.

[7]  Jan Maluszy¿ski Verification, Model Checking, and Abstract Interpretation , 2009, Lecture Notes in Computer Science.

[8]  David R. Cok Specifying java iterators with JML and Esc/Java2 , 2006, SAVCBS '06.

[9]  John C. Reynolds,et al.  Separation logic: a logic for shared mutable data structures , 2002, Proceedings 17th Annual IEEE Symposium on Logic in Computer Science.

[10]  Alex Groce,et al.  Modular verification of software components in C , 2003, 25th International Conference on Software Engineering, 2003. Proceedings..

[11]  Niklas Sörensson,et al.  An Extensible SAT-solver , 2003, SAT.

[12]  Daniel Kroening,et al.  Behavioral consistency of C and Verilog programs using bounded model checking , 2003, Proceedings 2003. Design Automation Conference (IEEE Cat. No.03CH37451).

[13]  Dawson R. Engler,et al.  Proceedings of the 5th Symposium on Operating Systems Design and Implementation Cmc: a Pragmatic Approach to Model Checking Real Code , 2022 .

[14]  Thomas A. Henzinger,et al.  Lazy abstraction , 2002, POPL '02.

[15]  Richard Bornat,et al.  Proving Pointer Programs in Hoare Logic , 2000, MPC.

[16]  Peter W. O'Hearn,et al.  BI as an assertion language for mutable data structures , 2001, POPL '01.

[17]  Stephen N. Zilles,et al.  Programming with abstract data types , 1974, SIGPLAN Symposium on Very High Level Languages.

[18]  Klaus Havelund,et al.  Model checking programs , 2000, Proceedings ASE 2000. Fifteenth IEEE International Conference on Automated Software Engineering.

[19]  Sriram K. Rajamani,et al.  Automatically validating temporal safety properties of interfaces , 2001, SPIN '01.

[20]  Hassen Saïdi,et al.  Construction of Abstract State Graphs with PVS , 1997, CAV.

[21]  Sriram K. Rajamani,et al.  Boolean Programs: A Model and Process for Software Analysis , 2000 .

[22]  Frank Piessens,et al.  VC generation for functional behavior and non-interference of iterators , 2006, SAVCBS '06.

[23]  Edmund M. Clarke,et al.  Counterexample-guided abstraction refinement , 2003, 10th International Symposium on Temporal Representation and Reasoning, 2003 and Fourth International Conference on Temporal Logic. Proceedings..

[24]  Daniel Kroening,et al.  Predicate Abstraction of ANSI-C Programs Using SAT , 2004, Formal Methods Syst. Des..

[25]  Neelakantan R. Krishnaswami,et al.  Reasoning about iterators with separation logic , 2006, SAVCBS '06.

[26]  Henny B. Sipma,et al.  What's Decidable About Arrays? , 2006, VMCAI.

[27]  David R. Musser,et al.  Dynamic Verification of C++ Generic Algorithms , 1997, IEEE Trans. Software Eng..

[28]  Michael J. Vilot,et al.  Standard template library , 1996 .