Home | History | Annotate | Download | only in jni
      1 // { dg-do run { xfail sparc64-*-elf arm-*-pe } }
      2 // { dg-options "-fexceptions" }
      3 
      4 #include <exception>
      5 #include <stdlib.h>
      6 
      7 struct double_fault { };
      8 int fault_now;
      9 
     10 class E {
     11 public:
     12   E() { }
     13   E(const E&) {
     14     if (fault_now)
     15       throw double_fault();
     16   }
     17 };
     18 
     19 void foo() {
     20   try {
     21     throw E();
     22   } catch (...) {
     23     fault_now = 1;
     24     throw;
     25   }
     26 }
     27 
     28 void bar() {
     29   try {
     30     foo();
     31   } catch (E e) {	// double fault here
     32   }
     33 }
     34 
     35 void my_terminate() {
     36   exit (0);		// double faults should call terminate
     37 }
     38 
     39 int main() {
     40   std::set_terminate (my_terminate);
     41   try {
     42     bar();
     43   } catch (...) {
     44     return 1;
     45   }
     46   return 1;
     47 }
     48