From dba21b324a641191fbca5a481ec23b1d765cb718 Mon Sep 17 00:00:00 2001 From: Brendan Kehoe Date: Wed, 25 Mar 1998 08:47:06 -0500 Subject: [PATCH] new test for EH w/ opt on From-SVN: r18829 --- gcc/testsuite/g++.old-deja/g++.brendan/eh1.C | 62 ++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/eh1.C diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/eh1.C b/gcc/testsuite/g++.old-deja/g++.brendan/eh1.C new file mode 100644 index 0000000..a668306 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/eh1.C @@ -0,0 +1,62 @@ +// Special g++ Options: -O +// PRMS Id: 10776 + +extern "C" void printf (char *, ...); + +class Foo +{ + public: + Foo(int n) : n_(n) { } + int f() { return n_; } + + int badTest(); + int goodTest(); + + private: + + int n_; +}; + +int Foo::badTest() +{ + try { + throw int(99); + } + + catch (int &i) { + n_ = 16; + } + + return n_; + // On the sparc, the return will use a ld [%l0],%i0 instruction. + // However %l0 was clobbered at the end of the catch block. It was + // used to do an indirect call. +} + + +int Foo::goodTest() +{ + int n; + + try { + throw int(99); + } + + catch (int &i) { + n = 16; + } + + return n_; + // The return will use a ld [%l2],%i0 instruction. Since %l2 + // contains the "this" pointer this works. +} + +int main() +{ + Foo foo(5); + foo.goodTest(); + foo.badTest(); + + // the badTest will have failed + printf ("PASS\n"); +} -- 2.7.4