[cfe-dev] stdext::bad_alloc not caught by try catch (...)

jaytee aloha_arts at yahoo.com
Fri May 29 01:52:32 PDT 2015


Hello everyone, 

Our application, which is the Clang compiler, can consume a large amount of
memory when building very large files. Occasionally it will run out of
memory and C++ allocators will throw std::bad_alloc. We added a try/catch
around the most top-level function, in order to recover from the
out-of-memory exception and issue a user-readable error telling the user
that the file is too large to compile: 
try { 
Success = ExecuteCompilerInvocation(Clang.get());
} catch (const std::bad_alloc &) { 
// Print out of memory error message. 
exit(1); 
} catch (...) { 
// Print internal error error message for other unknown causes. 
exit(1); 
} 

The problem is that in some cases of out-of-memory, Clang internal code will
throw an stdext::bad_alloc instead of the expected std exception. This
exception is not caught by neither of the catch statements and Clang
crashes. I did some research around MSDN at
https://msdn.microsoft.com/en-us/library/ek139e86(v=VS.100).aspx and I found
out that a subset of std has been moved to the stdext namespace. 

1. Does anyone know why my try/catch doesn't catch the stdext::bad_alloc
exception? 
2. How could I make my application recover from it and exit gracefully? 

Thank you!



--
View this message in context: http://clang-developers.42468.n3.nabble.com/stdext-bad-alloc-not-caught-by-try-catch-tp4045778.html
Sent from the Clang Developers mailing list archive at Nabble.com.



More information about the cfe-dev mailing list