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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.mike/] [eh2.C] - Blame information for rev 338

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 305 jeremybenn
// { dg-do run { xfail sparc64-*-elf arm-*-pe } }
2
// { dg-options "-fexceptions" }
3
 
4
#include 
5
#include 
6
 
7
class Vector {
8
private:
9
  int *p;
10
  int sz;
11
 
12
public:
13
  // Exception class
14
  class Range     {
15
  private:
16
    int value_i;
17
 
18
  public:
19
    Range( int i ) { value_i = i; };
20
    int value() { return value_i; };
21
  };
22
 
23
  Vector( int s );
24
  ~Vector();
25
  int  size() { return sz; };
26
  int& operator []( int i );
27
};
28
 
29
Vector::Vector(int s) {
30
  sz = s;
31
  p = new int[sz];
32
}
33
 
34
Vector::~Vector() {
35
  delete [] p;
36
}
37
 
38
int&
39
Vector::operator [](int i) {
40
  if (0<=i && i
41
    return p[i];
42
  } else {
43
    throw Range( i );
44
  }
45
}
46
 
47
void crash(Vector& v ) {
48
  v[v.size()+10];  // Triggers range error!
49
}
50
 
51
void do_something(Vector& v) {
52
  crash( v );
53
}
54
 
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
  }
64
}
65
 
66
main() {
67
  Vector v(10);
68
 
69
  f( v );
70
  return 1;
71
}
72
 
73
 
74
 

powered by: WebSVN 2.1.0

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