diff options
author | Jakub Jelinek <jakub@redhat.com> | 2001-08-19 20:35:06 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2001-08-19 20:35:06 +0200 |
commit | baeb47327e44c29895118b71de7643875ef18da9 (patch) | |
tree | 0b8a34439005ae5ca91033d3c6525a749a09fa48 | |
parent | fd1a3f73308e2f8014a5835fd32e5d0c4825056a (diff) | |
download | gcc-baeb47327e44c29895118b71de7643875ef18da9.zip gcc-baeb47327e44c29895118b71de7643875ef18da9.tar.gz gcc-baeb47327e44c29895118b71de7643875ef18da9.tar.bz2 |
typeck2.c (add_exception_specifier): Only require complete type if not in processing template declaration.
* typeck2.c (add_exception_specifier): Only require complete type if
not in processing template declaration.
* g++.dg/eh/template1.C: New test.
From-SVN: r45032
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/typeck2.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/eh/template1.C | 38 |
4 files changed, 50 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3fa4455..e513bdb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-08-19 Jakub Jelinek <jakub@redhat.com> + + * typeck2.c (add_exception_specifier): Only require complete type if + not in processing template declaration. + 2001-08-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * decl.c: Cast argument to size_t, not HOST_WIDE_INT, in calls to diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 09621d4..5ba4611 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -1293,9 +1293,11 @@ add_exception_specifier (list, spec, complain) ok = is_ptr; else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM) ok = 1; + else if (processing_template_decl) + ok = 1; else ok = COMPLETE_TYPE_P (complete_type (core)); - + if (ok) { tree probe; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ae2e15..babe91e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-08-19 Jakub Jelinek <jakub@redhat.com> + + * g++.dg/eh/template1.C: New test. + 2001-08-16 David Billinghurst <David.Billinghurst@riotinto.com> * g77.f-torture/compile/pr3743.x: Do not return 1 for xfail. diff --git a/gcc/testsuite/g++.dg/eh/template1.C b/gcc/testsuite/g++.dg/eh/template1.C new file mode 100644 index 0000000..2cbf9c6 --- /dev/null +++ b/gcc/testsuite/g++.dg/eh/template1.C @@ -0,0 +1,38 @@ +// Test whether exception specifier dependent on template parameter +// is accepted during template decl processing. +// { dg-do run } + +extern "C" void abort(); + +class A {}; + +template <class T> +struct B +{ + typedef A E; +}; + +template <class T> +struct C +{ + typedef B<T> D; + typedef typename D::E E; + void f() throw(E) { throw E(); } +}; + +int main() +{ + int caught = 0; + try + { + C<int> x; + x.f(); + } + catch (A) + { + ++caught; + } + if (caught != 1) + abort (); + return 0; +} |