diff options
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/eh/loop1.C | 30 | 
2 files changed, 34 insertions, 0 deletions
| diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 91fd37d..132dc25 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-12-29  Richard Henderson  <rth@redhat.com> + +	* g++.dg/eh/loop1.C: New. +  2001-12-29  Nathan Sidwell  <nathan@codesourcery.com>  	* g++.dg/template/crash1.C: New test. diff --git a/gcc/testsuite/g++.dg/eh/loop1.C b/gcc/testsuite/g++.dg/eh/loop1.C new file mode 100644 index 0000000..b9b230e --- /dev/null +++ b/gcc/testsuite/g++.dg/eh/loop1.C @@ -0,0 +1,30 @@ +// Verify that loop optimization takes into account the exception edge +// and does not increment I before the call. +// { dg-do run } +// { dg-options "-O2" } + +extern "C" void abort(); +static void bar(char *); + +static void foo(unsigned long element_count, char *ptr) +{ +  unsigned long i; +  try { +    for (i = 0; i != element_count; i++, ptr += 8) +      bar (ptr); +  } +  catch (...) { +    if (i) +      abort (); +  } +} + +static void bar(char *) +{ +  throw 1; +} + +int main() +{ +  foo(2, 0); +} | 
