* g++.old-deja/g++.eh/catchptr1.C: New test.
From-SVN: r33062
This commit is contained in:
parent
6d61f400fd
commit
96e1d96c91
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue