Remove old autovect-branch by moving to "dead" directory.
[official-gcc.git] / old-autovect-branch / gcc / testsuite / g++.old-deja / g++.mike / eh2.C
blob0a08790fe03d7fc134a52ce5a4daa960360c9a4c
1 // { dg-do run { xfail sparc64-*-elf arm-*-pe } }
2 // { dg-options "-fexceptions" }
4 #include <cstdlib>
5 #include <iostream>
7 class Vector {
8 private:
9   int *p;
10   int sz;
12 public:
13   // Exception class
14   class Range     {
15   private:
16     int value_i;
18   public:
19     Range( int i ) { value_i = i; };
20     int value() { return value_i; };
21   };
23   Vector( int s );
24   ~Vector();
25   int  size() { return sz; };
26   int& operator []( int i );
29 Vector::Vector(int s) {
30   sz = s;
31   p = new int[sz];
34 Vector::~Vector() {
35   delete [] p;
38 int&
39 Vector::operator [](int i) {
40   if (0<=i && i<sz) {
41     return p[i];
42   } else {
43     throw Range( i );
44   }
47 void crash(Vector& v ) {
48   v[v.size()+10];  // Triggers range error!
51 void do_something(Vector& v) {
52   crash( v );
55 void
56 f(Vector& v) {
57   try {
58     do_something( v );
59   } catch (Vector::Range& r) {
60     std::cout << "Invalid vector range " << r.value()
61       << " caught in f()" << std::endl;
62     std::exit(0);
63   }
66 main() {
67   Vector v(10);
69   f( v );
70   return 1;