URL
https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 305 |
Rev 338 |
// { dg-do run { xfail sparc64-*-elf arm-*-pe } }
|
// { dg-do run { xfail sparc64-*-elf arm-*-pe } }
|
// { dg-options "-fexceptions" }
|
// { dg-options "-fexceptions" }
|
|
|
#include
|
#include
|
#include
|
#include
|
|
|
class Vector {
|
class Vector {
|
private:
|
private:
|
int *p;
|
int *p;
|
int sz;
|
int sz;
|
|
|
public:
|
public:
|
// Exception class
|
// Exception class
|
class Range {
|
class Range {
|
private:
|
private:
|
int value_i;
|
int value_i;
|
|
|
public:
|
public:
|
Range( int i ) { value_i = i; };
|
Range( int i ) { value_i = i; };
|
int value() { return value_i; };
|
int value() { return value_i; };
|
};
|
};
|
|
|
Vector( int s );
|
Vector( int s );
|
~Vector();
|
~Vector();
|
int size() { return sz; };
|
int size() { return sz; };
|
int& operator []( int i );
|
int& operator []( int i );
|
};
|
};
|
|
|
Vector::Vector(int s) {
|
Vector::Vector(int s) {
|
sz = s;
|
sz = s;
|
p = new int[sz];
|
p = new int[sz];
|
}
|
}
|
|
|
Vector::~Vector() {
|
Vector::~Vector() {
|
delete [] p;
|
delete [] p;
|
}
|
}
|
|
|
int&
|
int&
|
Vector::operator [](int i) {
|
Vector::operator [](int i) {
|
if (0<=i && i
|
if (0<=i && i
|
return p[i];
|
return p[i];
|
} else {
|
} else {
|
throw Range( i );
|
throw Range( i );
|
}
|
}
|
}
|
}
|
|
|
void crash(Vector& v ) {
|
void crash(Vector& v ) {
|
v[v.size()+10]; // Triggers range error!
|
v[v.size()+10]; // Triggers range error!
|
}
|
}
|
|
|
void do_something(Vector& v) {
|
void do_something(Vector& v) {
|
crash( v );
|
crash( v );
|
}
|
}
|
|
|
void
|
void
|
f(Vector& v) {
|
f(Vector& v) {
|
try {
|
try {
|
do_something( v );
|
do_something( v );
|
} catch (Vector::Range& r) {
|
} catch (Vector::Range& r) {
|
std::cout << "Invalid vector range " << r.value()
|
std::cout << "Invalid vector range " << r.value()
|
<< " caught in f()" << std::endl;
|
<< " caught in f()" << std::endl;
|
std::exit(0);
|
std::exit(0);
|
}
|
}
|
}
|
}
|
|
|
main() {
|
main() {
|
Vector v(10);
|
Vector v(10);
|
|
|
f( v );
|
f( v );
|
return 1;
|
return 1;
|
}
|
}
|
|
|
|
|
|
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.