From: No Author Date: Thu, 21 Jul 2005 06:56:24 +0000 (+0000) Subject: This commit was manufactured by cvs2svn to create branch X-Git-Tag: releases/gcc-3.4.5~317 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c323ceb8498487b26b8b4381f342baf5351e5824;p=thirdparty%2Fgcc.git This commit was manufactured by cvs2svn to create branch 'gcc-3_4-branch'. From-SVN: r102223 --- diff --git a/gcc/testsuite/g++.dg/opt/pr22167.C b/gcc/testsuite/g++.dg/opt/pr22167.C new file mode 100644 index 000000000000..07af744624ab --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr22167.C @@ -0,0 +1,32 @@ +// Derived from PR22167, which failed on some RISC targets. The call to +// foo() has two successors, one normal and one exceptional, and both +// successors use &a[0] and x. Expressions involving &a[0] can be hoisted +// before the call but those involving x cannot. +// { dg-options "-Os" } +// { dg-do run } + +int a[4]; + +struct S { + S() : x (0) {} + ~S() { a[0] = x; } + int x; +}; + +void +foo (int *x) +{ + if (*x == 1) + throw 1; + *x = 1; +} + +int +main() +{ + S s; + foo (&s.x); + if (a[0] == s.x) + a[0]++; + return a[0]; +}