Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.old-deja/g++.mike/eh2.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// { dg-do run { xfail sparc64-*-elf arm-*-pe } } // { dg-options "-fexceptions" } #include <cstdlib> #include <iostream> class Vector { private: int *p; int sz; public: // Exception class class Range { private: int value_i; public: Range( int i ) { value_i = i; }; int value() { return value_i; }; }; Vector( int s ); ~Vector(); int size() { return sz; }; int& operator []( int i ); }; Vector::Vector(int s) { sz = s; p = new int[sz]; } Vector::~Vector() { delete [] p; } int& Vector::operator [](int i) { if (0<=i && i<sz) { return p[i]; } else { throw Range( i ); } } void crash(Vector& v ) { v[v.size()+10]; // Triggers range error! } void do_something(Vector& v) { crash( v ); } void f(Vector& v) { try { do_something( v ); } catch (Vector::Range& r) { std::cout << "Invalid vector range " << r.value() << " caught in f()" << std::endl; std::exit(0); } } int main() { Vector v(10); f( v ); return 1; }