This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/64535] Emergency buffer for exception allocation too small
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 12 Jan 2015 14:11:12 +0000
- Subject: [Bug libstdc++/64535] Emergency buffer for exception allocation too small
- Auto-submitted: auto-generated
- References: <bug-64535-4 at http dot gcc dot gnu dot org/bugzilla/>
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.