diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2000-04-10 16:22:52 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2000-04-10 16:22:52 +0000 |
commit | 96e1d96c911f97e775adb93ab03020d90035be42 (patch) | |
tree | b2fac90c5fe1d883f17747449d4ec3ad5c6c93da /gcc | |
parent | 6d61f400fd019ac06026d7aaa412e076096a7d37 (diff) | |
download | gcc-96e1d96c911f97e775adb93ab03020d90035be42.zip gcc-96e1d96c911f97e775adb93ab03020d90035be42.tar.gz gcc-96e1d96c911f97e775adb93ab03020d90035be42.tar.bz2 |
* g++.old-deja/g++.eh/catchptr1.C: New test.
From-SVN: r33062
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.eh/catchptr1.C | 234 |
2 files changed, 238 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6a3136e..48a4fdb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2000-04-10 Nathan Sidwell <nathan@codesourcery.com> + + * g++.old-deja/g++.eh/catchptr1.C: New test. + 2000-04-09 Nathan Sidwell <nathan@codesourcery.com> * g++.old-deja/g++.abi/cxa_vec.C: New test. diff --git a/gcc/testsuite/g++.old-deja/g++.eh/catchptr1.C b/gcc/testsuite/g++.old-deja/g++.eh/catchptr1.C new file mode 100644 index 0000000..3c74b8d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.eh/catchptr1.C @@ -0,0 +1,234 @@ +// Test pointer chain catching +// Copyright (C) 2000 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 9 Apr 2000 <nathan@nathan@codesourcery.com> + +#include <stdio.h> + +void fn () {}; +struct A {void fn () {}}; +static int var = 1; +static const int const_var = 2; + +struct B; +struct C; + +int test0 () +{ + try + { + throw &fn; + } + catch (void *) + { + // should not decay to void * + return 1; + } + catch (...) + { + return 0; + } +} + +int test1 () +{ + try + { + throw &A::fn; + } + catch (void *) + { + // should not decay to void * + return 1; + } + catch (...) + { + return 0; + } +} + +int test2 () +{ + try + { + throw &var; + } + catch (void *) + { + // should decay to void * + return 0; + } + catch (...) + { + return 1; + } +} + +int test3 () +{ + try + { + throw &var; + } + catch (void const *) + { + // should decay to const void * + return 0; + } + catch (...) + { + return 1; + } +} + +int test4 () +{ + try + { + throw &const_var; + } + catch (void *) + { + // should not decay to void * + return 1; + } + catch (void const *) + { + // should decay to const void * + return 0; + } + catch (...) + { + return 2; + } +} + +int test5 () +{ + try + { + throw (void ***)0; + } + catch (void ***) + { + return 0; + } + catch (...) + { + return 1; + } +} + +int test6 () +{ + try + { + throw (void const* const* const*)0; + } + catch (void ***) + { + return 1; + } + catch (void * const* const*) + { + return 2; + } + catch (void const* * const*) + { + return 3; + } + catch (void const* const* *) + { + return 4; + } + catch (void const* const* const *) + { + return 0; + } + catch (...) + { + return 1; + } +} + +int test7 () +{ + try + { + throw (void ***)0; + } + catch (void const* const**) + { + return 1; + } + catch (void const** const *) + { + return 2; + } + catch (void * const* const *) + { + return 0; + } + catch (...) + { + return 3; + } +} + +#if 0 +int test8 () +{ + try + { + throw (B **)0; + } + catch (C **) + { + return 1; + } + catch (B **) + { + return 0; + } + catch (...) + { + return 2; + } +} +#endif + +static int (*tests[])() = +{ + test0, + test1, + test2, + test3, + test4, + + test5, + test6, + test7, + +#if 0 + test8, +#endif + + NULL +}; + +int main () +{ + int ix; + int errors = 0; + + for (ix = 0; tests[ix]; ix++) + { + int n = tests[ix] (); + + if (n) + { + printf ("test %d failed %d\n", ix, n); + errors++; + } + } + return errors; +} |