[Bug libstdc++/64535] Emergency buffer for exception allocation too small

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jan 12 14:11:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64535

--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #4)
> Is the following required to work?
> 
> #include <exception>
> #include <new>
> #include <sys/resource.h>
> 
> struct large
> {
>   char s[1024*1024*1024];
> };
> 
> int main()
> {
>   rlimit lim;
>   lim.rlim_cur = 1024*1024*1024;
>   lim.rlim_max = 1024*1024*1024;
>   setrlimit (RLIMIT_AS, &lim);
>   try {
>       throw large ();
>   } catch (large&) {
>   } catch (std::bad_alloc) {
>   }
> }
> 
> I get
> 
> > ./a.out 
> terminate called without an active exception
> Aborted

If reading 15.1.4 (Exception Handling / Throwing an exception) correctly
then allocation happens in an unspecified way but according to 3.7.3.1
which specifies that if "the allocation function" that fails to allocate
storage shall throw std::bad_alloc (if not marked with throw ()).  But
it isn't specified if the "unspecified" EH allocation "function" is
marked with throw ().

In particular 15.5.1 (The std::terminate function) doesn't list OOM
in allocating an exception as cause of abandoning exception handling.

It would be nice to get clarification from the standards body on what
shall happen if EH allocation runs into OOM situations.



More information about the Gcc-bugs mailing list