mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-16 22:50:25 +08:00
* 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>
|
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.
|
||||||
|
234
gcc/testsuite/g++.old-deja/g++.eh/catchptr1.C
Normal file
234
gcc/testsuite/g++.old-deja/g++.eh/catchptr1.C
Normal 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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user