* g++.old-deja/g++.eh/catchptr1.C: New test.

From-SVN: r33062
This commit is contained in:
Nathan Sidwell 2000-04-10 16:22:52 +00:00 committed by Nathan Sidwell
parent 6d61f400fd
commit 96e1d96c91
2 changed files with 238 additions and 0 deletions

View File

@ -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> 2000-04-09 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.abi/cxa_vec.C: New test. * g++.old-deja/g++.abi/cxa_vec.C: New test.

View File

@ -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;
}