diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.law/except3.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.law/except3.C | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.law/except3.C b/gcc/testsuite/g++.old-deja/g++.law/except3.C new file mode 100644 index 000000000..ec8bb100e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/except3.C @@ -0,0 +1,50 @@ +// { dg-do assemble } +// { dg-options "-fexceptions" } +// GROUPS passed exceptions +// except file +// Message-Id: <9211301118.AA09810@ss670mp.geco.slb.com> +// From: willoch@ss670mp.oslo.sgp.slb.com (thorbjorn willoch) +// Subject: -fansi-exceptions bug +// Date: Mon, 30 Nov 92 11:18:05 GMT + +extern "C" int printf(const char *, ...); + +class Vector +{ + int* p; + int sz; + public: + Vector(int s) { p = new int[sz=s]; } + ~Vector() {delete [] p; } + int size() {return sz; } + class Range{}; + + + int& operator[](int i); +}; + +int& Vector::operator[](int i) +{ + if(0<=i && i<sz) return p[i]; + throw Range(); +} + +void do_something(Vector& v) +{ + int i = v[v.size()+10]; +} + +main() +{ + Vector v(10); + + try + { + do_something(v); + } + + catch (Vector::Range) + { + printf("Range error exception\n"); + } +} |