OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [libstdc++-v3/] [testsuite/] [18_support/] [exception_ptr/] [rethrow_exception.cc] - Blame information for rev 424

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.