Using Off-the-Shelf Exception Support Components in C++ Verification
Preprint
Abstract
An important step toward adoption of formal methods in software development is support for mainstream programming languages. Unfortunately, these languages are often rather complex and come with substantial standard libraries. However, by choosing a suitable intermediate language, most of the complexity can be delegated to existing execution-oriented (as opposed to verification-oriented) compiler frontends and standard library implementations. In this paper, we describe how support for C++ exceptions can take advantage of the same principle. Our work is based on DiVM, an LLVM-derived, verification-friendly intermediate language. Our implementation consists of 2 parts: an implementation of the `libunwind` platform API which is linked to the program under test and consists of 9 C functions. The other part is a preprocessor for LLVM bitcode which prepares exception-related metadata and replaces associated special-purpose LLVM instructions.Keywords
All Related Versions
- Version 1, 2017-03-07, ArXiv
- Version 2, 2018-05-31, ArXiv
- Published version: , 54.
This publication has 9 references indexed in Scilit:
- DiVM: Model checking with and graph memoryJournal of Systems and Software, 2018
- Model checking C++ programs with exceptionsScience of Computer Programming, 2016
- Tools and Algorithms for the Construction and Analysis of SystemsLecture Notes in Computer Science, 2016
- Incremental bounded software model checking2014
- SMT-Based Bounded Model Checking of C++ Programs2013
- DiVinE 3.0 – An Explicit-State Model Checker for Multithreaded C & C++ Programs2013
- KLOVER: A Symbolic Execution and Automatic Test Generation Tool for C++ ProgramsLecture Notes in Computer Science, 2011
- Interprocedural Exception Analysis for C++2011
- A Tool for Checking ANSI-C Programs2004