VCC is a mechanical verifier for concurrent C programs. VCC takes a C program, annotated with function specifications, data invariants, loop invariants, and ghost code, and tries to prove these annotations correct. If it succeeds, VCC promises that your program
actually meets its specifications.
- VCC is sound -- if VCC verifies your program, it really is correct (modulo bugs in VCC itself).
- VCC verification is modular -- VCC verifies your program one function/type definition at a time, using only the specifications of the functions it calls and the data structures it uses. This means that you can verify your code even if the functions
you call haven't been written yet.
- VCC supports concurrency -- you can use VCC to verify programs that use both coarse-grained and fine-grained concurrency. You can even use it to verify your concurrency control primitives. Verifying a function implicitly guarantees its thread safety
in any concurrent environment that respects the contracts on its functions and data structures.
- VCC supports low-level C features (e.g. bitfields, unions, wrap-around arithmetic).
The nicest way to run VCC is as Visual Studio plugin, in Visual Studio 2012 or 2010. You can also run it from the command line.
You get a taste of VCC by running it in your browser from
. (Note however that this version is not updated very often.)
Daily builds are published here automatically; we strongly encourage always using the latest build.
- Consult the
Install page before installing VCC for the first time.
- We strongly recommend working through the VCC tutorial (below).
- For reference purposes, you should refer to the VCC manual (below).
- You can also download some
Samples. Many more examples can be found in the VCC source distribution tree, or in the samples package that can be installed after installing VCC (see "All Programs -> Microsoft Research Vcc -> (Re-)Install Samples")
- Verifying Concurrent C Programs with VCC. Ernie Cohen, Mark Hillebrand, Michał Moskal, Wolfram Schulte, Stephan Tobies.
PDF (2-column, ~25 pages)
PDF (1-column, ~65pages)
PDF (screen-reading) (A working draft of VCC tutorial - the recommended place to start)
- The VCC Manual
PDF (2-column)PDF (1-column) (A working draft of the VCC manual.)
- VCC: A Practical System for Verifying Concurrent C. Ernie Cohen, Markus Dahlweid, Mark Hillebrand, Dirk Leinenbach, Michał Moskal, Thomas Santen, Wolfram Schulte, Stephan Tobies. 22nd International Conference on Theorem Proving in Higher Order Logics
(TPHOLs 2009). (LNCS 5674).
PDF (Provides a good overall system description of VCC; the paper to cite for VCC)
- Local Verification of Global Invariants in Concurrent Programs. Ernie Cohen, Michał Moskal, Wolfram Schulte, Stephan Tobies. Computer Aided Verification (CAV2010).
PDF (The best description of the underlying methodology)
- A Practical Verification Methodology for Concurrent Programs. Ernie Cohen, Michał Moskal, Wolfram Schulte, Stephan Tobies. MSR-TR-2009-15.
PDF (The methodological description is out-of-date, but this provides some detail on how programs are actually verified).
- A Precise Yet Efficient Memory Model For C. Ernie Cohen, Michał Moskal, Wolfram Schulte, Stephan Tobies. 4th International Workshop on Systems Software Verification (SSV2009).
PDF (Describes the VCC typestate)
Also check out papers about