// { dg-do run } | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <exception> | |
static void | |
eh_terminate () | |
{ | |
printf ("CALLING TERMINATE\n"); | |
exit (1); | |
} | |
void | |
eh_test (int level) | |
{ | |
try | |
{ | |
if (level < 2) | |
eh_test (level + 1); | |
else | |
{ | |
printf ("%d: Throwing\n", level); | |
throw (level); | |
} | |
} | |
catch (int &x) | |
{ | |
printf ("%d: Got level %d\n", | |
level, x); | |
if (level > 0) | |
throw; | |
} | |
} | |
int main () | |
{ | |
std::set_terminate (&eh_terminate); | |
eh_test (0); | |
} |