The recently-ratified C and C++ standards, "C11" and "C++11" respectively, add a concurrency model that supports writing high-performance, portable code for machines with multiple processors. The concurrency model, however, is large and complicated; it is not particularly easy for compiler and library developers to get all of its corner cases right. Errors in implementing the new model can introduce bugs into important pieces of software, such as operating systems, web browsers, web sites, database engines, and embedded systems, all of which are written, at least partially, in concurrent C and C++.
The PI's previous work on randomized testing for C compilers uncovered more than 450 bugs in production-quality compilers, most of which were fixed by compiler developers. The PI's current project extends this research agenda to support stress testing of implementations of the C11 and C++11 concurrency model. The intellectual merit of this work stems from the need to generate random, but standards-conforming, concurrent code; the need to synthesize "test oracles" that can automatically ascertain the success or failure of a test case; and, the need to develop "hostile" simulators for flushing out errors in compiled concurrent code.
The expected impact of the PI's work is to significantly reduce the period during which implementations of the C11 / C++11 concurrency model are flaky and immature, and to reduce the lifetime of compiler bugs that are introduced during ongoing development.