Every C++ program depends on a standard library implementation. For LLVM users, this means that libc++ is at the bottom of their dependency graph. It is vital that this library be correct and performant.
In this talk, I will discuss some of the principles and tools that we use to make libc++ as "solid" as possible. I'll talk about preconditions, postconditions, reading specifications, finding problems, ensuring that bugs stay fixed, as well as several tools that we use to achieve our goal of making libc++ as robust as possible.
Some of the topics I'll discuss are: * Precondition checking - when practical. * Warning eradication * The importance of a comprehensive test suite for both correctness and ensuring that bugs don't reappear. * Static analysis * Dynamic analysis * Fuzzing