For projects depending on LLVM, I find it very useful to combine a release-no-asserts build of LLVM with a debug+asserts build of the dependent project. The motivation is that when developing an dependent project, you are debugging that project itself, not LLVM. In my usecase, a significant part of the runtime is spent in LLVM optimization passes, so I would like to build LLVM without assertions to get the best performance from this combination.
Currently, lib/Support/Debug.cpp changes the set of symbols it provides depending on NDEBUG, while include/llvm/Support/Debug.h requires a different extra symbols when NDEBUG is not defined. Thus, it is not possible to enable assertions in an external project that uses facilities of Debug.h.
This patch changes Debug.cpp and Valgrind.cpp to always define the symbols that other code may depend on when #including LLVM headers without NDEBUG.