1// { dg-options "-std=gnu++0x" } 2// { dg-require-atomic-builtins "" } 3 4// Copyright (C) 2009 Free Software Foundation, Inc. 5// 6// This file is part of the GNU ISO C++ Library. This library is free 7// software; you can redistribute it and/or modify it under the 8// terms of the GNU General Public License as published by the 9// Free Software Foundation; either version 3, or (at your option) 10// any later version. 11 12// This library is distributed in the hope that it will be useful, 13// but WITHOUT ANY WARRANTY; without even the implied warranty of 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15// GNU General Public License for more details. 16 17// You should have received a copy of the GNU General Public License along 18// with this library; see the file COPYING3. If not see 19// <http://www.gnu.org/licenses/>. 20 21#include <exception> 22#include <testsuite_hooks.h> 23 24struct derived : std::nested_exception { }; 25 26struct base { virtual ~base(); }; 27inline base::~base() = default; 28 29struct derived2 : base, std::nested_exception { }; 30 31void test01() 32{ 33 bool test __attribute__((unused)) = false; 34 35 try 36 { 37 throw 42; 38 } 39 catch (...) 40 { 41 derived d; 42 try 43 { 44 std::rethrow_if_nested(d); 45 } 46 catch (const int& i) 47 { 48 test = true; 49 VERIFY( i == 42 ); 50 } 51 } 52 53 VERIFY( test ); 54} 55 56void test02() 57{ 58 bool test __attribute__((unused)) = false; 59 60 try 61 { 62 throw base(); 63 } 64 catch (const base& b) 65 { 66 std::rethrow_if_nested(b); 67 test = true; 68 } 69 70 VERIFY( test ); 71} 72 73void test03() 74{ 75 bool test __attribute__((unused)) = false; 76 77 try 78 { 79 throw 42; 80 } 81 catch (...) 82 { 83 try 84 { 85 throw derived2(); 86 } 87 catch (const base& b) 88 { 89 try 90 { 91 std::rethrow_if_nested(b); 92 } 93 catch (const int& i) 94 { 95 VERIFY( i == 42 ); 96 test = true; 97 } 98 } 99 } 100 101 VERIFY( test ); 102} 103 104 105int main() 106{ 107 test01(); 108 test02(); 109 test03(); 110 return 0; 111} 112