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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [gdb/] [testsuite/] [gdb.cp/] [try_catch.cc] - Blame information for rev 227

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 227 jeremybenn
/* This test script is part of GDB, the GNU debugger.
2
 
3
   Copyright 2002, 2004,
4
   Free Software Foundation, Inc.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 3 of the License, or
9
   (at your option) any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
   */
19
 
20
#include <exception>
21
#include <stdexcept>
22
#include <string>
23
 
24
enum region { oriental, egyptian, greek, etruscan, roman };
25
 
26
// Test one.
27
class gnu_obj_1
28
{
29
public:
30
  typedef region antiquities;
31
  const bool            test;
32
  const int             key1;
33
  long                  key2;
34
 
35
  antiquities   value;
36
 
37
  gnu_obj_1(antiquities a, long l): test(true), key1(5), key2(l), value(a) {}
38
};
39
 
40
// Test two.
41
template<typename T>
42
class gnu_obj_2: public virtual gnu_obj_1
43
{
44
public:
45
  antiquities   value_derived;
46
 
47
  gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7), value_derived(b) { }
48
};
49
 
50
// Test three.
51
template<typename T>
52
class gnu_obj_3
53
{
54
public:
55
  typedef region antiquities;
56
  gnu_obj_2<int>        data;
57
 
58
  gnu_obj_3(antiquities b): data(etruscan) { }
59
};
60
 
61
int main()
62
{
63
  bool test = true;
64
  const int i = 5;
65
  int j = i;
66
  gnu_obj_2<long> test2(roman);
67
  gnu_obj_3<long> test3(greek);
68
 
69
  // 1
70
  try
71
    {
72
      ++j;
73
      throw gnu_obj_1(egyptian, 4589);  // marker 1-throw
74
    }
75
  catch (gnu_obj_1& obj)
76
    {
77
      ++j;
78
      if (obj.value != egyptian)        // marker 1-catch
79
        test &= false;
80
      if (obj.key2 != 4589)
81
        test &= false;
82
    }
83
  catch (...)
84
    {
85
      j = 0;
86
      test &= false;
87
    }
88
 
89
  // 2
90
  try
91
    {
92
      ++j;                              // marker 2-start
93
      try
94
        {
95
          ++j;                          // marker 2-next
96
          try
97
            {
98
              ++j;
99
              throw gnu_obj_1(egyptian, 4589); // marker 2-throw
100
            }
101
          catch (gnu_obj_1& obj)
102
            {
103
              ++j;
104
              if (obj.value != egyptian) // marker 2-catch
105
                test &= false;
106
              if (obj.key2 != 4589)
107
                test &= false;
108
            }
109
        }
110
      catch (gnu_obj_1& obj)
111
        {
112
          ++j;
113
          if (obj.value != egyptian)
114
            test &= false;
115
          if (obj.key2 != 4589)
116
            test &= false;
117
        }
118
    }
119
  catch (...)
120
    {
121
      j = 0;
122
      test &= false;
123
    }
124
 
125
  // 3 use standard library
126
  using namespace std;
127
  try
128
    {
129
      if (j < 100)
130
        throw invalid_argument("gdb.1"); // marker 3-throw
131
    }
132
  catch (exception& obj)
133
    {
134
      if (obj.what() != "gdb.1")        // marker 3-catch
135
        test &= false;
136
    }
137
  return 0;
138
}

powered by: WebSVN 2.1.0

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