In our software, we provide Python bindings to our software, which in turn uses LLVM 6.0.1. We recently discovered that in some conditions (i.e. when trying to initialize LLVM objects from a corrupt file) LLVM will call exit(1) instead of throwing, which in context, will take out Python entirely. (line 126 of ErrorHandling.cpp)
Looking through the code, it seems clear that calling exit() instead of throw() was a deliberate design decision on LLVM’s part. Does anyone know what the rationale behind this was? Is it a philosophy that’s been kept through the current version, too?