Writing software in C and C++ is generally a somewhat painful task. Compilers have long tried to make it less so by analyzing input code and emitting useful warnings when they spot something that doesn’t seem quite right, such as using an uninitialized variable. This is great, but not quite enough. Clang’s static analyzer performs abstract interpretation of the input code in order to find bugs that can’t be found in the information that is readily available to the compiler during compilation. This includes, for example, bad locking patterns in multithreaded code and memory bugs such as leaks, double-free, use-after-free, etc.