1// { dg-do compile { target powerpc*-*-darwin* } } 2// { dg-final { scan-assembler-not "__cxa_get_exception" } } 3// { dg-options "-mmacosx-version-min=10.4" } 4 5#include <exception> 6#include <cstdlib> 7 8 9struct Check { 10 int obj1, obj2; 11 bool state; 12}; 13 14static Check const data[] = { 15 { 0, 0, false }, // construct [0] 16 { 1, 0, true }, // [1] = [0] 17 { 0, 0, true }, // destruct [0] 18 { 2, 1, true }, // [2] = [1] 19 { 2, 2, true }, // destruct [2] 20 { 3, 1, true }, // [3] = [1] 21 { 3, 3, false }, // destruct [3] 22 { 1, 1, false }, // destruct [1] 23 { 9, 9, false } // end-of-data 24}; 25 26static int pos = 0; 27 28static void test(int obj1, int obj2, bool state) 29{ 30 if (obj1 != data[pos].obj1) abort (); 31 if (obj2 != data[pos].obj2) abort (); 32 if (state != data[pos].state) abort (); 33 pos++; 34} 35 36 37struct S { 38 int id; 39 S (); 40 S (const S &); 41 ~S (); 42}; 43 44static int next_id = 0; 45 46S::S() 47 : id (next_id++) 48{ 49 test (id, id, std::uncaught_exception ()); 50} 51 52S::S(const S &x) 53 : id (next_id++) 54{ 55 test (id, x.id, std::uncaught_exception ()); 56} 57 58S::~S() 59{ 60 test (id, id, std::uncaught_exception ()); 61} 62 63extern void foo (S *); 64 65int main() 66{ 67 try 68 { 69 try 70 { 71 S s0; 72 throw s0; // s1 is the exception object 73 } 74 catch (S s2) 75 { 76 throw; 77 } 78 } 79 catch (S s3) 80 { 81 } 82 83 return 0; 84} 85